diff --git a/docs/_modules/ect/ect_graph.html b/docs/_modules/ect/ect_graph.html index 50a9499..ac9c3d9 100644 --- a/docs/_modules/ect/ect_graph.html +++ b/docs/_modules/ect/ect_graph.html @@ -1,3 +1,5 @@ + +
@@ -5,20 +7,16 @@
from numba import jit
import matplotlib.pyplot as plt
from ect.embed_cw import EmbeddedCW
+import time
@@ -215,69 +214,43 @@ Source code for ect.ect_graph
[docs]
def calculateECC(self, G, theta, bound_radius=None, return_counts=False):
"""
- Function to compute the Euler Characteristic of an `EmbeddedGraph`, that is, a graph with coordinates for each vertex.
+ Function to compute the Euler Characteristic Curve (ECC) of an `EmbeddedGraph`.
Parameters:
- G (nx.Graph):
- The graph to compute the Euler Characteristic for.
- theta (float):
- The angle (in radians) to use for the direction function when computing the Euler Characteristic Curve.
- bound_radius (float):
- If None, uses the following in order: (i) the bounding radius stored in the class; or if not available (ii) the bounding radius of the given graph. Otherwise, should be a postive float :math:`R` where the ECC will be computed at thresholds in :math:`[-R,R]`. Default is None.
- return_counts (bool):
- Whether to return the counts of vertices, edges, and faces below the threshold. Default is False.
+ G (nx.Graph): The graph to compute the ECC for.
+ theta (float): The angle (in radians) for the direction function.
+ bound_radius (float, optional): Radius for threshold range. Default is None.
+ return_counts (bool, optional): Whether to return vertex, edge, and face counts. Default is False.
+ Returns:
+ numpy.ndarray: ECC values at each threshold.
+ (Optional) Tuple of counts: (ecc, vertex_count, edge_count, face_count)
"""
-
r, r_threshes = self.get_radius_and_thresh(G, bound_radius)
- # --
- def num_below_threshold(func_list, thresh):
- """
- Returns the number of entries in func_list that are below the threshold thresh.
- Warning: func_list must be sorted in ascending order.
-
- Parameters
- func_list (list): sorted list of function values
- thresh (float): threshold value
-
- Returns
- int
- """
- # If the list is empty, return 0
- if len(func_list) == 0:
- return 0
- else:
- func_max = func_list[-1]
- if thresh < func_max:
- return np.argmin(func_list < thresh)
- else:
- return len(func_list)
- # --
+ r_threshes = np.array(r_threshes)
+ # Sort vertices and edges based on projection
v_list, g = G.sort_vertices(theta, return_g=True)
- g_list = [g[v] for v in v_list]
-
- vertex_count = np.array([num_below_threshold(
- g_list, thresh) for thresh in r_threshes])
- # print(vertex_count)
+ g_list = np.array([g[v] for v in v_list])
+ sorted_g_list = np.sort(g_list)
e_list, g_e = G.sort_edges(theta, return_g=True)
- g_e_list = [g_e[e] for e in e_list]
- edge_count = np.array([num_below_threshold(
- g_e_list, thresh) for thresh in r_threshes])
- # print(edge_count)
+ g_e_list = np.array([g_e[e] for e in e_list])
+ sorted_g_e_list = np.sort(g_e_list)
+
+ vertex_count = np.searchsorted(sorted_g_list, r_threshes, side='left')
+ edge_count = np.searchsorted(sorted_g_e_list, r_threshes, side='left')
- if type(G) == EmbeddedCW:
+ if isinstance(G, EmbeddedCW):
f_list, g_f = G.sort_faces(theta, return_g=True)
- g_f_list = [g_f[f] for f in f_list]
- face_count = np.array([num_below_threshold(
- g_f_list, thresh) for thresh in r_threshes])
- # print(face_count)
+ g_f_list = np.array([g_f[f] for f in f_list])
+ sorted_g_f_list = np.sort(g_f_list)
+ face_count = np.searchsorted(
+ sorted_g_f_list, r_threshes, side='left')
else:
- face_count = np.zeros_like(vertex_count)
+ face_count = np.zeros_like(r_threshes, dtype=np.int32)
- # print(vertex_count - edge_count)
ecc = vertex_count - edge_count + face_count
if return_counts:
diff --git a/docs/_modules/ect/embed_cw.html b/docs/_modules/ect/embed_cw.html
index c0ce220..6dd693c 100644
--- a/docs/_modules/ect/embed_cw.html
+++ b/docs/_modules/ect/embed_cw.html
@@ -1,3 +1,5 @@
+
+
@@ -5,20 +7,16 @@
ect.embed_cw — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/_modules/ect/embed_graph.html b/docs/_modules/ect/embed_graph.html
index 4b46ace..188ff09 100644
--- a/docs/_modules/ect/embed_graph.html
+++ b/docs/_modules/ect/embed_graph.html
@@ -1,3 +1,5 @@
+
+
@@ -5,20 +7,16 @@
ect.embed_graph — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/_modules/index.html b/docs/_modules/index.html
index df24327..bf19970 100644
--- a/docs/_modules/index.html
+++ b/docs/_modules/index.html
@@ -1,3 +1,5 @@
+
+
@@ -5,20 +7,16 @@
Overview: module code — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/_static/basic.css b/docs/_static/basic.css
index 30fee9d..7ebbd6d 100644
--- a/docs/_static/basic.css
+++ b/docs/_static/basic.css
@@ -1,12 +1,5 @@
/*
- * basic.css
- * ~~~~~~~~~
- *
* Sphinx stylesheet -- basic theme.
- *
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
*/
/* -- main layout ----------------------------------------------------------- */
@@ -115,15 +108,11 @@ img {
/* -- search page ----------------------------------------------------------- */
ul.search {
- margin: 10px 0 0 20px;
- padding: 0;
+ margin-top: 10px;
}
ul.search li {
- padding: 5px 0 5px 20px;
- background-image: url(file.png);
- background-repeat: no-repeat;
- background-position: 0 7px;
+ padding: 5px 0;
}
ul.search li a {
diff --git a/docs/_static/css/badge_only.css b/docs/_static/css/badge_only.css
index c718cee..88ba55b 100644
--- a/docs/_static/css/badge_only.css
+++ b/docs/_static/css/badge_only.css
@@ -1 +1 @@
-.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
\ No newline at end of file
+.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px}
\ No newline at end of file
diff --git a/docs/_static/css/theme.css b/docs/_static/css/theme.css
index 19a446a..0f14f10 100644
--- a/docs/_static/css/theme.css
+++ b/docs/_static/css/theme.css
@@ -1,4 +1,4 @@
html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*!
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
+ */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search .wy-dropdown>aactive,.wy-side-nav-search .wy-dropdown>afocus,.wy-side-nav-search>a:hover,.wy-side-nav-search>aactive,.wy-side-nav-search>afocus{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon,.wy-side-nav-search>a.icon{display:block}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.switch-menus{position:relative;display:block;margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-side-nav-search>div.switch-menus>div.language-switch,.wy-side-nav-search>div.switch-menus>div.version-switch{display:inline-block;padding:.2em}.wy-side-nav-search>div.switch-menus>div.language-switch select,.wy-side-nav-search>div.switch-menus>div.version-switch select{display:inline-block;margin-right:-2rem;padding-right:2rem;max-width:240px;text-align-last:center;background:none;border:none;border-radius:0;box-shadow:none;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-size:1em;font-weight:400;color:hsla(0,0%,100%,.3);cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none}.wy-side-nav-search>div.switch-menus>div.language-switch select:active,.wy-side-nav-search>div.switch-menus>div.language-switch select:focus,.wy-side-nav-search>div.switch-menus>div.language-switch select:hover,.wy-side-nav-search>div.switch-menus>div.version-switch select:active,.wy-side-nav-search>div.switch-menus>div.version-switch select:focus,.wy-side-nav-search>div.switch-menus>div.version-switch select:hover{background:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.wy-side-nav-search>div.switch-menus>div.language-switch select option,.wy-side-nav-search>div.switch-menus>div.version-switch select option{color:#000}.wy-side-nav-search>div.switch-menus>div.language-switch:has(>select):after,.wy-side-nav-search>div.switch-menus>div.version-switch:has(>select):after{display:inline-block;width:1.5em;height:100%;padding:.1em;content:"\f0d7";font-size:1em;line-height:1.2em;font-family:FontAwesome;text-align:center;pointer-events:none;box-sizing:border-box}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js
index d06a71d..0398ebb 100644
--- a/docs/_static/doctools.js
+++ b/docs/_static/doctools.js
@@ -1,12 +1,5 @@
/*
- * doctools.js
- * ~~~~~~~~~~~
- *
* Base JavaScript utilities for all Sphinx HTML documentation.
- *
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
*/
"use strict";
diff --git a/docs/_static/fonts/Lato/lato-bold.eot b/docs/_static/fonts/Lato/lato-bold.eot
new file mode 100644
index 0000000..3361183
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bold.eot differ
diff --git a/docs/_static/fonts/Lato/lato-bold.ttf b/docs/_static/fonts/Lato/lato-bold.ttf
new file mode 100644
index 0000000..29f691d
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bold.ttf differ
diff --git a/docs/_static/fonts/Lato/lato-bold.woff b/docs/_static/fonts/Lato/lato-bold.woff
new file mode 100644
index 0000000..c6dff51
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bold.woff differ
diff --git a/docs/_static/fonts/Lato/lato-bold.woff2 b/docs/_static/fonts/Lato/lato-bold.woff2
new file mode 100644
index 0000000..bb19504
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bold.woff2 differ
diff --git a/docs/_static/fonts/Lato/lato-bolditalic.eot b/docs/_static/fonts/Lato/lato-bolditalic.eot
new file mode 100644
index 0000000..3d41549
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bolditalic.eot differ
diff --git a/docs/_static/fonts/Lato/lato-bolditalic.ttf b/docs/_static/fonts/Lato/lato-bolditalic.ttf
new file mode 100644
index 0000000..f402040
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bolditalic.ttf differ
diff --git a/docs/_static/fonts/Lato/lato-bolditalic.woff b/docs/_static/fonts/Lato/lato-bolditalic.woff
new file mode 100644
index 0000000..88ad05b
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bolditalic.woff differ
diff --git a/docs/_static/fonts/Lato/lato-bolditalic.woff2 b/docs/_static/fonts/Lato/lato-bolditalic.woff2
new file mode 100644
index 0000000..c4e3d80
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-bolditalic.woff2 differ
diff --git a/docs/_static/fonts/Lato/lato-italic.eot b/docs/_static/fonts/Lato/lato-italic.eot
new file mode 100644
index 0000000..3f82642
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-italic.eot differ
diff --git a/docs/_static/fonts/Lato/lato-italic.ttf b/docs/_static/fonts/Lato/lato-italic.ttf
new file mode 100644
index 0000000..b4bfc9b
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-italic.ttf differ
diff --git a/docs/_static/fonts/Lato/lato-italic.woff b/docs/_static/fonts/Lato/lato-italic.woff
new file mode 100644
index 0000000..76114bc
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-italic.woff differ
diff --git a/docs/_static/fonts/Lato/lato-italic.woff2 b/docs/_static/fonts/Lato/lato-italic.woff2
new file mode 100644
index 0000000..3404f37
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-italic.woff2 differ
diff --git a/docs/_static/fonts/Lato/lato-regular.eot b/docs/_static/fonts/Lato/lato-regular.eot
new file mode 100644
index 0000000..11e3f2a
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-regular.eot differ
diff --git a/docs/_static/fonts/Lato/lato-regular.ttf b/docs/_static/fonts/Lato/lato-regular.ttf
new file mode 100644
index 0000000..74decd9
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-regular.ttf differ
diff --git a/docs/_static/fonts/Lato/lato-regular.woff b/docs/_static/fonts/Lato/lato-regular.woff
new file mode 100644
index 0000000..ae1307f
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-regular.woff differ
diff --git a/docs/_static/fonts/Lato/lato-regular.woff2 b/docs/_static/fonts/Lato/lato-regular.woff2
new file mode 100644
index 0000000..3bf9843
Binary files /dev/null and b/docs/_static/fonts/Lato/lato-regular.woff2 differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot
new file mode 100644
index 0000000..79dc8ef
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf
new file mode 100644
index 0000000..df5d1df
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff
new file mode 100644
index 0000000..6cb6000
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2
new file mode 100644
index 0000000..7059e23
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot
new file mode 100644
index 0000000..2f7ca78
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf
new file mode 100644
index 0000000..eb52a79
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff
new file mode 100644
index 0000000..f815f63
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ
diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2
new file mode 100644
index 0000000..f2c76e5
Binary files /dev/null and b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ
diff --git a/docs/_static/js/html5shiv-printshiv.min.js b/docs/_static/js/html5shiv-printshiv.min.js
deleted file mode 100644
index 2b43bd0..0000000
--- a/docs/_static/js/html5shiv-printshiv.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
-* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
-*/
-!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML=" ",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/docs/_static/js/html5shiv.min.js b/docs/_static/js/html5shiv.min.js
deleted file mode 100644
index cd1c674..0000000
--- a/docs/_static/js/html5shiv.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
-* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
-*/
-!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML=" ",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/docs/_static/js/versions.js b/docs/_static/js/versions.js
new file mode 100644
index 0000000..4958195
--- /dev/null
+++ b/docs/_static/js/versions.js
@@ -0,0 +1,228 @@
+const themeFlyoutDisplay = "hidden";
+const themeVersionSelector = true;
+const themeLanguageSelector = true;
+
+if (themeFlyoutDisplay === "attached") {
+ function renderLanguages(config) {
+ if (!config.projects.translations.length) {
+ return "";
+ }
+
+ // Insert the current language to the options on the selector
+ let languages = config.projects.translations.concat(config.projects.current);
+ languages = languages.sort((a, b) => a.language.name.localeCompare(b.language.name));
+
+ const languagesHTML = `
+
+ - Languages
+ ${languages
+ .map(
+ (translation) => `
+ -
+ ${translation.language.code}
+
+ `,
+ )
+ .join("\n")}
+
+ `;
+ return languagesHTML;
+ }
+
+ function renderVersions(config) {
+ if (!config.versions.active.length) {
+ return "";
+ }
+ const versionsHTML = `
+
+ - Versions
+ ${config.versions.active
+ .map(
+ (version) => `
+ -
+ ${version.slug}
+
+ `,
+ )
+ .join("\n")}
+
+ `;
+ return versionsHTML;
+ }
+
+ function renderDownloads(config) {
+ if (!Object.keys(config.versions.current.downloads).length) {
+ return "";
+ }
+ const downloadsNameDisplay = {
+ pdf: "PDF",
+ epub: "Epub",
+ htmlzip: "HTML",
+ };
+
+ const downloadsHTML = `
+
+ - Downloads
+ ${Object.entries(config.versions.current.downloads)
+ .map(
+ ([name, url]) => `
+ -
+ ${downloadsNameDisplay[name]}
+
+ `,
+ )
+ .join("\n")}
+
+ `;
+ return downloadsHTML;
+ }
+
+ document.addEventListener("readthedocs-addons-data-ready", function (event) {
+ const config = event.detail.data();
+
+ const flyout = `
+
+
+ Read the Docs
+ v: ${config.versions.current.slug}
+
+
+
+
+ ${renderLanguages(config)}
+ ${renderVersions(config)}
+ ${renderDownloads(config)}
+
+ - On Read the Docs
+ -
+ Project Home
+
+ -
+ Builds
+
+ -
+ Downloads
+
+
+
+ - Search
+ -
+
+
+
+
+
+ Hosted by Read the Docs
+
+
+
+ `;
+
+ // Inject the generated flyout into the body HTML element.
+ document.body.insertAdjacentHTML("beforeend", flyout);
+
+ // Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout.
+ document
+ .querySelector("#flyout-search-form")
+ .addEventListener("focusin", () => {
+ const event = new CustomEvent("readthedocs-search-show");
+ document.dispatchEvent(event);
+ });
+ })
+}
+
+if (themeLanguageSelector || themeVersionSelector) {
+ function onSelectorSwitch(event) {
+ const option = event.target.selectedIndex;
+ const item = event.target.options[option];
+ window.location.href = item.dataset.url;
+ }
+
+ document.addEventListener("readthedocs-addons-data-ready", function (event) {
+ const config = event.detail.data();
+
+ const versionSwitch = document.querySelector(
+ "div.switch-menus > div.version-switch",
+ );
+ if (themeVersionSelector) {
+ let versions = config.versions.active;
+ if (config.versions.current.hidden || config.versions.current.type === "external") {
+ versions.unshift(config.versions.current);
+ }
+ const versionSelect = `
+
+ `;
+
+ versionSwitch.innerHTML = versionSelect;
+ versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
+ }
+
+ const languageSwitch = document.querySelector(
+ "div.switch-menus > div.language-switch",
+ );
+
+ if (themeLanguageSelector) {
+ if (config.projects.translations.length) {
+ // Add the current language to the options on the selector
+ let languages = config.projects.translations.concat(
+ config.projects.current,
+ );
+ languages = languages.sort((a, b) =>
+ a.language.name.localeCompare(b.language.name),
+ );
+
+ const languageSelect = `
+
+ `;
+
+ languageSwitch.innerHTML = languageSelect;
+ languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
+ }
+ else {
+ languageSwitch.remove();
+ }
+ }
+ });
+}
+
+document.addEventListener("readthedocs-addons-data-ready", function (event) {
+ // Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav.
+ document
+ .querySelector("[role='search'] input")
+ .addEventListener("focusin", () => {
+ const event = new CustomEvent("readthedocs-search-show");
+ document.dispatchEvent(event);
+ });
+});
\ No newline at end of file
diff --git a/docs/_static/language_data.js b/docs/_static/language_data.js
index 250f566..c7fe6c6 100644
--- a/docs/_static/language_data.js
+++ b/docs/_static/language_data.js
@@ -1,19 +1,12 @@
/*
- * language_data.js
- * ~~~~~~~~~~~~~~~~
- *
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
- *
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
*/
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
-/* Non-minified version is copied as a separate JS file, is available */
+/* Non-minified version is copied as a separate JS file, if available */
/**
* Porter Stemmer
diff --git a/docs/_static/searchtools.js b/docs/_static/searchtools.js
index 7918c3f..2c774d1 100644
--- a/docs/_static/searchtools.js
+++ b/docs/_static/searchtools.js
@@ -1,12 +1,5 @@
/*
- * searchtools.js
- * ~~~~~~~~~~~~~~~~
- *
* Sphinx JavaScript utilities for the full-text search.
- *
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
*/
"use strict";
@@ -20,7 +13,7 @@ if (typeof Scorer === "undefined") {
// and returns the new score.
/*
score: result => {
- const [docname, title, anchor, descr, score, filename] = result
+ const [docname, title, anchor, descr, score, filename, kind] = result
return score
},
*/
@@ -47,6 +40,14 @@ if (typeof Scorer === "undefined") {
};
}
+// Global search result kind enum, used by themes to style search results.
+class SearchResultKind {
+ static get index() { return "index"; }
+ static get object() { return "object"; }
+ static get text() { return "text"; }
+ static get title() { return "title"; }
+}
+
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
@@ -64,9 +65,13 @@ const _displayItem = (item, searchTerms, highlightTerms) => {
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const contentRoot = document.documentElement.dataset.content_root;
- const [docName, title, anchor, descr, score, _filename] = item;
+ const [docName, title, anchor, descr, score, _filename, kind] = item;
let listItem = document.createElement("li");
+ // Add a class representing the item's type:
+ // can be used by a theme's CSS selector for styling
+ // See SearchResultKind for the class names.
+ listItem.classList.add(`kind-${kind}`);
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
@@ -99,7 +104,7 @@ const _displayItem = (item, searchTerms, highlightTerms) => {
.then((data) => {
if (data)
listItem.appendChild(
- Search.makeSearchSummary(data, searchTerms)
+ Search.makeSearchSummary(data, searchTerms, anchor)
);
// highlight search terms in the summary
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
@@ -115,9 +120,11 @@ const _finishSearch = (resultCount) => {
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
- Search.status.innerText = _(
- `Search finished, found ${resultCount} page(s) matching the search query.`
- );
+ Search.status.innerText = Documentation.ngettext(
+ "Search finished, found one page matching the search query.",
+ "Search finished, found ${resultCount} pages matching the search query.",
+ resultCount,
+ ).replace('${resultCount}', resultCount);
};
const _displayNextItem = (
results,
@@ -137,6 +144,22 @@ const _displayNextItem = (
// search finished, update title and status message
else _finishSearch(resultCount);
};
+// Helper function used by query() to order search results.
+// Each input is an array of [docname, title, anchor, descr, score, filename, kind].
+// Order the results by score (in opposite order of appearance, since the
+// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
+const _orderResultsByScoreThenName = (a, b) => {
+ const leftScore = a[4];
+ const rightScore = b[4];
+ if (leftScore === rightScore) {
+ // same score: sort alphabetically
+ const leftTitle = a[1].toLowerCase();
+ const rightTitle = b[1].toLowerCase();
+ if (leftTitle === rightTitle) return 0;
+ return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
+ }
+ return leftScore > rightScore ? 1 : -1;
+};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
@@ -160,13 +183,26 @@ const Search = {
_queued_query: null,
_pulse_status: -1,
- htmlToText: (htmlString) => {
+ htmlToText: (htmlString, anchor) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
- htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
+ for (const removalQuery of [".headerlink", "script", "style"]) {
+ htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
+ }
+ if (anchor) {
+ const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
+ if (anchorContent) return anchorContent.textContent;
+
+ console.warn(
+ `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
+ );
+ }
+
+ // if anchor not specified or not found, fall back to main content
const docContent = htmlElement.querySelector('[role="main"]');
- if (docContent !== undefined) return docContent.textContent;
+ if (docContent) return docContent.textContent;
+
console.warn(
- "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
+ "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
);
return "";
},
@@ -219,6 +255,7 @@ const Search = {
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
+ searchList.setAttribute("role", "list");
searchList.classList.add("search");
const out = document.getElementById("search-results");
@@ -239,16 +276,7 @@ const Search = {
else Search.deferQuery(query);
},
- /**
- * execute search (requires search index to be loaded)
- */
- query: (query) => {
- const filenames = Search._index.filenames;
- const docNames = Search._index.docnames;
- const titles = Search._index.titles;
- const allTitles = Search._index.alltitles;
- const indexEntries = Search._index.indexentries;
-
+ _parseQuery: (query) => {
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
@@ -284,22 +312,40 @@ const Search = {
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
- // array of [docname, title, anchor, descr, score, filename]
- let results = [];
+ return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
+ },
+
+ /**
+ * execute search (requires search index to be loaded)
+ */
+ _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
+ const filenames = Search._index.filenames;
+ const docNames = Search._index.docnames;
+ const titles = Search._index.titles;
+ const allTitles = Search._index.alltitles;
+ const indexEntries = Search._index.indexentries;
+
+ // Collect multiple result groups to be sorted separately and then ordered.
+ // Each is an array of [docname, title, anchor, descr, score, filename, kind].
+ const normalResults = [];
+ const nonMainIndexResults = [];
+
_removeChildren(document.getElementById("search-progress"));
- const queryLower = query.toLowerCase();
+ const queryLower = query.toLowerCase().trim();
for (const [title, foundTitles] of Object.entries(allTitles)) {
- if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
+ if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
- let score = Math.round(100 * queryLower.length / title.length)
- results.push([
+ const score = Math.round(Scorer.title * queryLower.length / title.length);
+ const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
+ normalResults.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
- score,
+ score + boost,
filenames[file],
+ SearchResultKind.title,
]);
}
}
@@ -308,46 +354,48 @@ const Search = {
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
- for (const [file, id] of foundEntries) {
- let score = Math.round(100 * queryLower.length / entry.length)
- results.push([
+ for (const [file, id, isMain] of foundEntries) {
+ const score = Math.round(100 * queryLower.length / entry.length);
+ const result = [
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
- ]);
+ SearchResultKind.index,
+ ];
+ if (isMain) {
+ normalResults.push(result);
+ } else {
+ nonMainIndexResults.push(result);
+ }
}
}
}
// lookup as object
objectTerms.forEach((term) =>
- results.push(...Search.performObjectSearch(term, objectTerms))
+ normalResults.push(...Search.performObjectSearch(term, objectTerms))
);
// lookup as search terms in fulltext
- results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
+ normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
// let the scorer override scores with a custom scoring function
- if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
-
- // now sort the results by score (in opposite order of appearance, since the
- // display function below uses pop() to retrieve items) and then
- // alphabetically
- results.sort((a, b) => {
- const leftScore = a[4];
- const rightScore = b[4];
- if (leftScore === rightScore) {
- // same score: sort alphabetically
- const leftTitle = a[1].toLowerCase();
- const rightTitle = b[1].toLowerCase();
- if (leftTitle === rightTitle) return 0;
- return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
- }
- return leftScore > rightScore ? 1 : -1;
- });
+ if (Scorer.score) {
+ normalResults.forEach((item) => (item[4] = Scorer.score(item)));
+ nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
+ }
+
+ // Sort each group of results by score and then alphabetically by name.
+ normalResults.sort(_orderResultsByScoreThenName);
+ nonMainIndexResults.sort(_orderResultsByScoreThenName);
+
+ // Combine the result groups in (reverse) order.
+ // Non-main index entries are typically arbitrary cross-references,
+ // so display them after other results.
+ let results = [...nonMainIndexResults, ...normalResults];
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
@@ -361,7 +409,12 @@ const Search = {
return acc;
}, []);
- results = results.reverse();
+ return results.reverse();
+ },
+
+ query: (query) => {
+ const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
+ const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
// for debugging
//Search.lastresults = results.slice(); // a copy
@@ -432,6 +485,7 @@ const Search = {
descr,
score,
filenames[match[0]],
+ SearchResultKind.object,
]);
};
Object.keys(objects).forEach((prefix) =>
@@ -466,14 +520,18 @@ const Search = {
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
- Object.keys(terms).forEach((term) => {
- if (term.match(escapedWord) && !terms[word])
- arr.push({ files: terms[term], score: Scorer.partialTerm });
- });
- Object.keys(titleTerms).forEach((term) => {
- if (term.match(escapedWord) && !titleTerms[word])
- arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
- });
+ if (!terms.hasOwnProperty(word)) {
+ Object.keys(terms).forEach((term) => {
+ if (term.match(escapedWord))
+ arr.push({ files: terms[term], score: Scorer.partialTerm });
+ });
+ }
+ if (!titleTerms.hasOwnProperty(word)) {
+ Object.keys(titleTerms).forEach((term) => {
+ if (term.match(escapedWord))
+ arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
+ });
+ }
}
// no match but word was a required one
@@ -496,9 +554,8 @@ const Search = {
// create the mapping
files.forEach((file) => {
- if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
- fileMap.get(file).push(word);
- else fileMap.set(file, [word]);
+ if (!fileMap.has(file)) fileMap.set(file, [word]);
+ else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
});
});
@@ -539,6 +596,7 @@ const Search = {
null,
score,
filenames[file],
+ SearchResultKind.text,
]);
}
return results;
@@ -549,8 +607,8 @@ const Search = {
* search summary for a given text. keywords is a list
* of stemmed words.
*/
- makeSearchSummary: (htmlText, keywords) => {
- const text = Search.htmlToText(htmlText);
+ makeSearchSummary: (htmlText, keywords, anchor) => {
+ const text = Search.htmlToText(htmlText, anchor);
if (text === "") return null;
const textLower = text.toLowerCase();
diff --git a/docs/citing.html b/docs/citing.html
index f9c2d43..608195f 100644
--- a/docs/citing.html
+++ b/docs/citing.html
@@ -1,25 +1,23 @@
+
+
-
+
6. Citing — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/contributing.html b/docs/contributing.html
index 65961de..deede7a 100644
--- a/docs/contributing.html
+++ b/docs/contributing.html
@@ -1,25 +1,23 @@
+
+
-
+
4. Contributing to the ect Package — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/doctrees/citing.doctree b/docs/doctrees/citing.doctree
index 07f2510..e505785 100644
Binary files a/docs/doctrees/citing.doctree and b/docs/doctrees/citing.doctree differ
diff --git a/docs/doctrees/contributing.doctree b/docs/doctrees/contributing.doctree
index 99d9b0d..b75c10b 100644
Binary files a/docs/doctrees/contributing.doctree and b/docs/doctrees/contributing.doctree differ
diff --git a/docs/doctrees/ect_on_graphs.doctree b/docs/doctrees/ect_on_graphs.doctree
index 0c10ba7..60cacac 100644
Binary files a/docs/doctrees/ect_on_graphs.doctree and b/docs/doctrees/ect_on_graphs.doctree differ
diff --git a/docs/doctrees/embed_cw.doctree b/docs/doctrees/embed_cw.doctree
index 5f44a1f..6753860 100644
Binary files a/docs/doctrees/embed_cw.doctree and b/docs/doctrees/embed_cw.doctree differ
diff --git a/docs/doctrees/embed_graph.doctree b/docs/doctrees/embed_graph.doctree
index 6af0c8f..1485f86 100644
Binary files a/docs/doctrees/embed_graph.doctree and b/docs/doctrees/embed_graph.doctree differ
diff --git a/docs/doctrees/environment.pickle b/docs/doctrees/environment.pickle
index 448535d..5148285 100644
Binary files a/docs/doctrees/environment.pickle and b/docs/doctrees/environment.pickle differ
diff --git a/docs/doctrees/index.doctree b/docs/doctrees/index.doctree
index db37400..1d9039e 100644
Binary files a/docs/doctrees/index.doctree and b/docs/doctrees/index.doctree differ
diff --git a/docs/doctrees/installation.doctree b/docs/doctrees/installation.doctree
index c38b2cf..993de32 100644
Binary files a/docs/doctrees/installation.doctree and b/docs/doctrees/installation.doctree differ
diff --git a/docs/doctrees/license.doctree b/docs/doctrees/license.doctree
index 41a49ba..aaaf6e4 100644
Binary files a/docs/doctrees/license.doctree and b/docs/doctrees/license.doctree differ
diff --git a/docs/doctrees/modules.doctree b/docs/doctrees/modules.doctree
index 5babbb9..b8170a6 100644
Binary files a/docs/doctrees/modules.doctree and b/docs/doctrees/modules.doctree differ
diff --git a/docs/doctrees/notebooks/CodingFiguresFern.doctree b/docs/doctrees/notebooks/CodingFiguresFern.doctree
index 7aae9ec..c098158 100644
Binary files a/docs/doctrees/notebooks/CodingFiguresFern.doctree and b/docs/doctrees/notebooks/CodingFiguresFern.doctree differ
diff --git a/docs/doctrees/notebooks/Matisse/Matisse_ECT.doctree b/docs/doctrees/notebooks/Matisse/Matisse_ECT.doctree
index c21d9c1..816ce58 100644
Binary files a/docs/doctrees/notebooks/Matisse/Matisse_ECT.doctree and b/docs/doctrees/notebooks/Matisse/Matisse_ECT.doctree differ
diff --git a/docs/doctrees/notebooks/Tutorial-ECT_for_CW_Complexes.doctree b/docs/doctrees/notebooks/Tutorial-ECT_for_CW_Complexes.doctree
index a0f324a..b11ddd1 100644
Binary files a/docs/doctrees/notebooks/Tutorial-ECT_for_CW_Complexes.doctree and b/docs/doctrees/notebooks/Tutorial-ECT_for_CW_Complexes.doctree differ
diff --git a/docs/doctrees/notebooks/Tutorial-ECT_for_embedded_graphs.doctree b/docs/doctrees/notebooks/Tutorial-ECT_for_embedded_graphs.doctree
index 973efe2..8b86370 100644
Binary files a/docs/doctrees/notebooks/Tutorial-ECT_for_embedded_graphs.doctree and b/docs/doctrees/notebooks/Tutorial-ECT_for_embedded_graphs.doctree differ
diff --git a/docs/doctrees/tutorials.doctree b/docs/doctrees/tutorials.doctree
index e931ca9..9b81a8b 100644
Binary files a/docs/doctrees/tutorials.doctree and b/docs/doctrees/tutorials.doctree differ
diff --git a/docs/ect_on_graphs.html b/docs/ect_on_graphs.html
index 297cb54..ee02192 100644
--- a/docs/ect_on_graphs.html
+++ b/docs/ect_on_graphs.html
@@ -1,27 +1,25 @@
+
+
-
+
2.3. ECT on Graphs — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -189,16 +187,23 @@
-
calculateECC(G, theta, bound_radius=None, return_counts=False)[source]
-Function to compute the Euler Characteristic of an EmbeddedGraph, that is, a graph with coordinates for each vertex.
+Function to compute the Euler Characteristic Curve (ECC) of an EmbeddedGraph.
- Parameters:
-G (nx.Graph) – The graph to compute the Euler Characteristic for.
-theta (float) – The angle (in radians) to use for the direction function when computing the Euler Characteristic Curve.
-bound_radius (float) – If None, uses the following in order: (i) the bounding radius stored in the class; or if not available (ii) the bounding radius of the given graph. Otherwise, should be a postive float \(R\) where the ECC will be computed at thresholds in \([-R,R]\). Default is None.
-return_counts (bool) – Whether to return the counts of vertices, edges, and faces below the threshold. Default is False.
+G (nx.Graph) – The graph to compute the ECC for.
+theta (float) – The angle (in radians) for the direction function.
+bound_radius (float, optional) – Radius for threshold range. Default is None.
+return_counts (bool, optional) – Whether to return vertex, edge, and face counts. Default is False.
+- Returns:
+ECC values at each threshold.
+(Optional) Tuple of counts: (ecc, vertex_count, edge_count, face_count)
+
+- Return type:
+numpy.ndarray
+
diff --git a/docs/embed_cw.html b/docs/embed_cw.html
index 0cba429..061177d 100644
--- a/docs/embed_cw.html
+++ b/docs/embed_cw.html
@@ -1,27 +1,25 @@
+
+
-
+
2.2. Embedded CW complex — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/docs/embed_graph.html b/docs/embed_graph.html
index 8e43b5a..92ddca5 100644
--- a/docs/embed_graph.html
+++ b/docs/embed_graph.html
@@ -1,27 +1,25 @@
+
+
-
+
2.1. Embedded graphs — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/docs/genindex.html b/docs/genindex.html
index b5a0708..9b83b1e 100644
--- a/docs/genindex.html
+++ b/docs/genindex.html
@@ -1,3 +1,5 @@
+
+
@@ -5,20 +7,16 @@
Index — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/index.html b/docs/index.html
index d987a6d..74ce84d 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -1,25 +1,25 @@
+
+
-
+
ect: Euler Characteristic Transform in Python — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/docs/installation.html b/docs/installation.html
index b42e29a..44d2370 100644
--- a/docs/installation.html
+++ b/docs/installation.html
@@ -1,25 +1,23 @@
+
+
-
+
1. Installation — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/license.html b/docs/license.html
index caeda13..af04f7b 100644
--- a/docs/license.html
+++ b/docs/license.html
@@ -1,25 +1,23 @@
+
+
-
+
5. GPL-3.0 License — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/modules.html b/docs/modules.html
index 2250220..0644b33 100644
--- a/docs/modules.html
+++ b/docs/modules.html
@@ -1,25 +1,25 @@
+
+
-
+
2. Table of Contents — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/docs/notebooks/CodingFiguresFern.html b/docs/notebooks/CodingFiguresFern.html
index 6327d78..d0b1e06 100644
--- a/docs/notebooks/CodingFiguresFern.html
+++ b/docs/notebooks/CodingFiguresFern.html
@@ -1,28 +1,26 @@
+
+
-
+
Figure generation for Invitation to the ECT — ect 0.1.5 documentation
-
+
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -91,16 +89,16 @@ Figure generation for Invitation to the ECT[ ]:
-
import numpy as np
-import matplotlib.pyplot as plt
-# import teaspoon
+
import numpy as np
+import matplotlib.pyplot as plt
+# import teaspoon
-plt.rcParams.update({
- "text.usetex": True,
- # "font.family": "Helvetica",
- "font.family": "serif",
- "font.size": 8
-})
+plt.rcParams.update({
+ "text.usetex": True,
+ # "font.family": "Helvetica",
+ "font.family": "serif",
+ "font.size": 8
+})
@@ -108,8 +106,8 @@ Figure generation for Invitation to the ECT[ ]:
-import matplotlib
-matplotlib.__version__
+import matplotlib
+matplotlib.__version__
@@ -125,14 +123,14 @@ Figure generation for Invitation to the ECT[ ]:
-# Code to set colormaps to deal with the transparency issue
+# Code to set colormaps to deal with the transparency issue
-cmap_viridis = matplotlib.cm.viridis
-cmap_viridis.set_bad('white',1.)
+cmap_viridis = matplotlib.cm.viridis
+cmap_viridis.set_bad('white',1.)
-cmap_binary = matplotlib.cm.tab20b
-cmap_binary.set_bad('white',1.)
+cmap_binary = matplotlib.cm.tab20b
+cmap_binary.set_bad('white',1.)
@@ -140,32 +138,32 @@ Figure generation for Invitation to the ECT[ ]:
-F = plt.imread('figures/leafbw.tif')
-F = F.T
-F = F/255.
+F = plt.imread('figures/leafbw.tif')
+F = F.T
+F = F/255.
-F_finite = np.copy(F)
-F_finite[F==0] = 2000
+F_finite = np.copy(F)
+F_finite[F==0] = 2000
-# G = np.ones_like(F)
-# G[F==0] = 1
-# print(G.shape)
+# G = np.ones_like(F)
+# G[F==0] = 1
+# print(G.shape)
-F[F==0] = np.nan
+F[F==0] = np.nan
-plt.matshow(F, origin = 'lower',cmap = cmap_binary)
-# plt.matshow(G, origin = 'lower')
+plt.matshow(F, origin = 'lower',cmap = cmap_binary)
+# plt.matshow(G, origin = 'lower')
-fig = plt.gcf()
-# fig.set_rasterized(True)
-fig.set_figwidth(5)
+fig = plt.gcf()
+# fig.set_rasterized(True)
+fig.set_figwidth(5)
-plt.title('Testing')
+plt.title('Testing')
-plt.savefig('figures/test.png', dpi = 300)
-plt.savefig('figures/test.eps', facecolor='white', transparent=False,bbox_inches='tight')
-plt.savefig('figures/test.pdf')
+plt.savefig('figures/test.png', dpi = 300)
+plt.savefig('figures/test.eps', facecolor='white', transparent=False,bbox_inches='tight')
+plt.savefig('figures/test.pdf')
@@ -188,7 +186,7 @@ Figure generation for Invitation to the ECT[ ]:
-F
+F
@@ -210,19 +208,19 @@ Figure generation for Invitation to the ECT[ ]:
-def makeFernPic(F, theta, plot = True):
- maxRow, maxCol = np.shape(F)
- omega = (np.cos(theta), np.sin(theta))
+def makeFernPic(F, theta, plot = True):
+ maxRow, maxCol = np.shape(F)
+ omega = (np.cos(theta), np.sin(theta))
- # center origin
- Col,Row = np.meshgrid(range(maxCol),range(maxRow))
- Col = Col - np.floor(maxCol/2)
- Row = Row-np.floor(maxRow/2)
+ # center origin
+ Col,Row = np.meshgrid(range(maxCol),range(maxRow))
+ Col = Col - np.floor(maxCol/2)
+ Row = Row-np.floor(maxRow/2)
- fMask = omega[0]*Col + omega[1]*Row
- DT = np.multiply(F,fMask)
+ fMask = omega[0]*Col + omega[1]*Row
+ DT = np.multiply(F,fMask)
- return DT
+ return DT
@@ -230,19 +228,19 @@ Figure generation for Invitation to the ECT[ ]:
-cmap = matplotlib.cm.viridis
-cmap.set_bad('white',1.)
+cmap = matplotlib.cm.viridis
+cmap.set_bad('white',1.)
-plt.matshow(makeFernPic(F,np.pi/2), origin = 'lower', cmap = cmap_viridis)
-plt.colorbar(fraction=0.035, pad=0.04)
+plt.matshow(makeFernPic(F,np.pi/2), origin = 'lower', cmap = cmap_viridis)
+plt.colorbar(fraction=0.035, pad=0.04)
-fig = plt.gcf()
-# fig.set_rasterized(True)
-fig.set_figwidth(5)
+fig = plt.gcf()
+# fig.set_rasterized(True)
+fig.set_figwidth(5)
-plt.savefig('figures/test.png', dpi = 300)
-plt.savefig('figures/test.eps', facecolor='white', transparent=False,bbox_inches='tight')
-plt.savefig('figures/test.pdf')
+plt.savefig('figures/test.png', dpi = 300)
+plt.savefig('figures/test.eps', facecolor='white', transparent=False,bbox_inches='tight')
+plt.savefig('figures/test.pdf')
@@ -260,11 +258,11 @@ Trying Erik’s stuff[ ]:
-import demeter.euler as euler
-import demeter.directions as dirs
-import demeter.misc as misc
-import time
-import tifffile as tf
+import demeter.euler as euler
+import demeter.directions as dirs
+import demeter.misc as misc
+import time
+import tifffile as tf
@@ -272,14 +270,14 @@ Trying Erik’s stuff[ ]:
-leaf_file = 'figures/leafbw.tif'
-leaf_img = tf.imread(leaf_file)
-leaf_img[leaf_img > 0] = 1
+leaf_file = 'figures/leafbw.tif'
+leaf_img = tf.imread(leaf_file)
+leaf_img[leaf_img > 0] = 1
-fig, ax = plt.subplots(1,2,figsize=(20,6))
-ax[0].imshow(leaf_img, cmap='gray');
-ax[0].plot([200,200,250,250,200], [280,310,310,280,280], c='red', lw=4);
-ax[1].imshow(leaf_img[280:310, 200:250], cmap='gray');
+fig, ax = plt.subplots(1,2,figsize=(20,6))
+ax[0].imshow(leaf_img, cmap='gray');
+ax[0].plot([200,200,250,250,200], [280,310,310,280,280], c='red', lw=4);
+ax[1].imshow(leaf_img[280:310, 200:250], cmap='gray');
@@ -294,13 +292,13 @@ Trying Erik’s stuff[ ]:
-tic = time.perf_counter()
-leaf = euler.CubicalComplex(leaf_img).complexify()
-toc = time.perf_counter()
+tic = time.perf_counter()
+leaf = euler.CubicalComplex(leaf_img).complexify()
+toc = time.perf_counter()
-print("Complexify in {:.4f} seconds.\n\nCubical complex made of:".format(toc-tic))
+print("Complexify in {:.4f} seconds.\n\nCubical complex made of:".format(toc-tic))
-leaf.summary();
+leaf.summary();
@@ -323,7 +321,7 @@ Trying Erik’s stuff[ ]:
-leaf.summary()
+leaf.summary()
@@ -351,7 +349,7 @@ Trying Erik’s stuff[ ]:
-leaf.cells
+leaf.cells
@@ -387,9 +385,9 @@ Trying Erik’s stuff[ ]:
-theta = np.pi/4
-omega = (np.cos(theta),np.sin(theta))
-heights = np.sum(leaf.cells[0]*omega, axis=1)
+theta = np.pi/4
+omega = (np.cos(theta),np.sin(theta))
+heights = np.sum(leaf.cells[0]*omega, axis=1)
@@ -397,7 +395,7 @@ Trying Erik’s stuff[ ]:
-heights
+heights
@@ -416,9 +414,9 @@ Making pictures[ ]:
-theta = 6*np.pi/4
-omega = (np.cos(theta), np.sin(theta))
-heights = np.sum(leaf.cells[0]*omega, axis=1)
+theta = 6*np.pi/4
+omega = (np.cos(theta), np.sin(theta))
+heights = np.sum(leaf.cells[0]*omega, axis=1)
@@ -426,9 +424,9 @@ Making pictures[ ]:
-plt.scatter(leaf.cells[0][:,0],leaf.cells[0][:,1],
- s=0.1, c=heights, cmap='magma', label='T = {}'.format(32))
-plt.colorbar()
+plt.scatter(leaf.cells[0][:,0],leaf.cells[0][:,1],
+ s=0.1, c=heights, cmap='magma', label='T = {}'.format(32))
+plt.colorbar()
@@ -451,10 +449,10 @@ Making pictures[ ]:
-# Figuring out centering
-size = np.shape(F)
-print(np.floor(size[0]/2))
-print(np.floor(size[1]/2))
+# Figuring out centering
+size = np.shape(F)
+print(np.floor(size[0]/2))
+print(np.floor(size[1]/2))
@@ -471,19 +469,19 @@ Making pictures[ ]:
-plt.matshow(makeFernPic(F,theta), origin = 'lower', cmap = cmap_viridis, vmin = -150, vmax = 150)
-ax = plt.gca()
-midx = 279
-ax.set_xticks(midx+100*np.arange(-2,3))
-ax.set_xticklabels(np.arange(-2,3)*100)
+plt.matshow(makeFernPic(F,theta), origin = 'lower', cmap = cmap_viridis, vmin = -150, vmax = 150)
+ax = plt.gca()
+midx = 279
+ax.set_xticks(midx+100*np.arange(-2,3))
+ax.set_xticklabels(np.arange(-2,3)*100)
-midy = 177
-ax.set_yticks(midy+100*np.arange(-2,3))
-ax.set_yticklabels(np.arange(-2,3)*100)
+midy = 177
+ax.set_yticks(midy+100*np.arange(-2,3))
+ax.set_yticklabels(np.arange(-2,3)*100)
-plt.colorbar()
+plt.colorbar()
-# plt.savefig('figures/Fern' + str(int(theta*1000)) + '.png', bbox_inches = 'tight')
+# plt.savefig('figures/Fern' + str(int(theta*1000)) + '.png', bbox_inches = 'tight')
@@ -506,37 +504,37 @@ Making pictures[ ]:
-# Version without colorbars
+# Version without colorbars
-thetaStrs = [r'\pi/4', r'3\pi/4', r'3\pi/2', '7\pi/4']
-thetaStrsFile = [r'pi_over_4', r'3pi_over_4', r'3pi_over_2', '7pi_over_4']
-thetas = [np.pi/4, 3*np.pi/4, 3*np.pi/2, 7*np.pi/4]
+thetaStrs = [r'\pi/4', r'3\pi/4', r'3\pi/2', '7\pi/4']
+thetaStrsFile = [r'pi_over_4', r'3pi_over_4', r'3pi_over_2', '7pi_over_4']
+thetas = [np.pi/4, 3*np.pi/4, 3*np.pi/2, 7*np.pi/4]
-for i, theta in enumerate(thetas):
- print(theta)
- im = plt.matshow(makeFernPic(F,theta), origin = 'lower', cmap = cmap_viridis, vmin = -200, vmax = 200)
- ax = plt.gca()
- midx = 279
- ax.set_xticks(midx+100*np.arange(-2,3))
- ax.set_xticklabels(np.arange(-2,3)*100)
- ax.xaxis.set_ticks_position('bottom')
+for i, theta in enumerate(thetas):
+ print(theta)
+ im = plt.matshow(makeFernPic(F,theta), origin = 'lower', cmap = cmap_viridis, vmin = -200, vmax = 200)
+ ax = plt.gca()
+ midx = 279
+ ax.set_xticks(midx+100*np.arange(-2,3))
+ ax.set_xticklabels(np.arange(-2,3)*100)
+ ax.xaxis.set_ticks_position('bottom')
- midy = 177
- ax.set_yticks(midy+100*np.arange(-2,3))
- ax.set_yticklabels(np.arange(-2,3)*100)
+ midy = 177
+ ax.set_yticks(midy+100*np.arange(-2,3))
+ ax.set_yticklabels(np.arange(-2,3)*100)
- # plt.colorbar(fraction=0.035, pad=0.04)
- plt.title(r'$f_{\omega}$ for $\omega = ' + thetaStrs[i] + r'$')
- fig = plt.gcf()
- fig.set_figwidth(1.8)
+ # plt.colorbar(fraction=0.035, pad=0.04)
+ plt.title(r'$f_{\omega}$ for $\omega = ' + thetaStrs[i] + r'$')
+ fig = plt.gcf()
+ fig.set_figwidth(1.8)
- print(fig.get_size_inches())
- height_fig = fig.get_size_inches()[0]
- print(height_fig)
+ print(fig.get_size_inches())
+ height_fig = fig.get_size_inches()[0]
+ print(height_fig)
- plt.savefig('figures/Fern_' + thetaStrsFile[i] + '_nocolorbar.png', bbox_inches = 'tight', dpi = 300)
- plt.savefig('figures/Fern_' + thetaStrsFile[i] + '_nocolorbar.eps', bbox_inches = 'tight')
+ plt.savefig('figures/Fern_' + thetaStrsFile[i] + '_nocolorbar.png', bbox_inches = 'tight', dpi = 300)
+ plt.savefig('figures/Fern_' + thetaStrsFile[i] + '_nocolorbar.eps', bbox_inches = 'tight')
@@ -591,35 +589,35 @@ Making pictures[ ]:
-
thetaStrs = [r'\pi/4', r'3\pi/4', r'3\pi/2', '7\pi/4']
-thetaStrsFile = [r'pi_over_4', r'3pi_over_4', r'3pi_over_2', '7pi_over_4']
-thetas = [np.pi/4, 3*np.pi/4, 3*np.pi/2, 7*np.pi/4]
+
thetaStrs = [r'\pi/4', r'3\pi/4', r'3\pi/2', '7\pi/4']
+thetaStrsFile = [r'pi_over_4', r'3pi_over_4', r'3pi_over_2', '7pi_over_4']
+thetas = [np.pi/4, 3*np.pi/4, 3*np.pi/2, 7*np.pi/4]
-for i, theta in enumerate(thetas):
- print(theta)
- plt.matshow(makeFernPic(F,theta), origin = 'lower', cmap = cmap_viridis, vmin = -200, vmax = 200)
- ax = plt.gca()
- midx = 279
- ax.set_xticks(midx+100*np.arange(-2,3))
- ax.set_xticklabels(np.arange(-2,3)*100)
- ax.xaxis.set_ticks_position('bottom')
+for i, theta in enumerate(thetas):
+ print(theta)
+ plt.matshow(makeFernPic(F,theta), origin = 'lower', cmap = cmap_viridis, vmin = -200, vmax = 200)
+ ax = plt.gca()
+ midx = 279
+ ax.set_xticks(midx+100*np.arange(-2,3))
+ ax.set_xticklabels(np.arange(-2,3)*100)
+ ax.xaxis.set_ticks_position('bottom')
- midy = 177
- ax.set_yticks(midy+100*np.arange(-2,3))
- ax.set_yticklabels(np.arange(-2,3)*100)
+ midy = 177
+ ax.set_yticks(midy+100*np.arange(-2,3))
+ ax.set_yticklabels(np.arange(-2,3)*100)
- plt.colorbar(fraction=0.03, pad=0.04)
- plt.title(r'$f_{\omega}$ for $\omega = ' + thetaStrs[i] + r'$')
- fig = plt.gcf()
- # fig.set_figwidth(2.4)
- print(height_fig)
- fig.set_figheight(height_fig)
+ plt.colorbar(fraction=0.03, pad=0.04)
+ plt.title(r'$f_{\omega}$ for $\omega = ' + thetaStrs[i] + r'$')
+ fig = plt.gcf()
+ # fig.set_figwidth(2.4)
+ print(height_fig)
+ fig.set_figheight(height_fig)
- print(fig.get_size_inches())
+ print(fig.get_size_inches())
- plt.savefig('figures/Fern_' + thetaStrsFile[i] + '.png', bbox_inches = 'tight', dpi = 300)
- plt.savefig('figures/Fern_' + thetaStrsFile[i] + '.eps', bbox_inches = 'tight')
+ plt.savefig('figures/Fern_' + thetaStrsFile[i] + '.png', bbox_inches = 'tight', dpi = 300)
+ plt.savefig('figures/Fern_' + thetaStrsFile[i] + '.eps', bbox_inches = 'tight')
@@ -674,13 +672,13 @@ Making pictures[ ]:
-fig,ax = plt.subplots()
-plt.colorbar(im,ax=ax)
+fig,ax = plt.subplots()
+plt.colorbar(im,ax=ax)
-ax.remove()
-fig.set_figwidth(0.8)
-plt.savefig('figures/OnlyColorbar.png', bbox_inches = 'tight', dpi = 300)
-plt.savefig('figures/OnlyColorbar.eps', bbox_inches = 'tight')
+ax.remove()
+fig.set_figwidth(0.8)
+plt.savefig('figures/OnlyColorbar.png', bbox_inches = 'tight', dpi = 300)
+plt.savefig('figures/OnlyColorbar.eps', bbox_inches = 'tight')
@@ -703,7 +701,7 @@ Making pictures[ ]:
-str(int(theta*1000))
+str(int(theta*1000))
@@ -722,34 +720,34 @@ Thresholded Figure[ ]:
-def makeFernPicThreshold(F, theta, thresh, both = False):
- maxRow, maxCol = np.shape(F)
- omega = (np.cos(theta), np.sin(theta))
+def makeFernPicThreshold(F, theta, thresh, both = False):
+ maxRow, maxCol = np.shape(F)
+ omega = (np.cos(theta), np.sin(theta))
- # center origin
- Col,Row = np.meshgrid(range(maxCol),range(maxRow))
- Col = Col - np.floor(maxCol/2)
- Row = Row-np.floor(maxRow/2)
+ # center origin
+ Col,Row = np.meshgrid(range(maxCol),range(maxRow))
+ Col = Col - np.floor(maxCol/2)
+ Row = Row-np.floor(maxRow/2)
- fMask = omega[0]*Col + omega[1]*Row
+ fMask = omega[0]*Col + omega[1]*Row
- fMaskBelow = fMask.copy()
- fMaskBelow[fMaskBelow <= thresh] = np.nan
+ fMaskBelow = fMask.copy()
+ fMaskBelow[fMaskBelow <= thresh] = np.nan
- fMaskAbove = fMask.copy()
- fMaskAbove[fMaskAbove > thresh] = np.nan
+ fMaskAbove = fMask.copy()
+ fMaskAbove[fMaskAbove > thresh] = np.nan
- DTdown = np.multiply(F,fMaskAbove)
- DTup = np.multiply(F,fMaskBelow)
+ DTdown = np.multiply(F,fMaskAbove)
+ DTup = np.multiply(F,fMaskBelow)
- # Why the fork is this backwards!?!?!?!?!
- # Must have something to do with meshgrid but i just can't fight it right now
- if both:
+ # Why the fork is this backwards!?!?!?!?!
+ # Must have something to do with meshgrid but i just can't fight it right now
+ if both:
- return DTdown,DTup
- else:
- return DTdown
+ return DTdown,DTup
+ else:
+ return DTdown
@@ -757,45 +755,45 @@ Thresholded Figure[ ]:
-theta = 3*np.pi/4
+theta = 3*np.pi/4
-for thresh in [-150,-100,-50,0,50,100,150]:
+for thresh in [-150,-100,-50,0,50,100,150]:
- heights = np.sum(leaf.cells[0]*omega, axis=1)
+ heights = np.sum(leaf.cells[0]*omega, axis=1)
- # Plot colors above theshold
- plt.matshow(makeFernPicThreshold(F,theta,thresh),
- origin = 'lower',
- cmap = cmap_viridis,
- vmin = -200, vmax = 200)
+ # Plot colors above theshold
+ plt.matshow(makeFernPicThreshold(F,theta,thresh),
+ origin = 'lower',
+ cmap = cmap_viridis,
+ vmin = -200, vmax = 200)
- ax = plt.gca()
- midx = 279
- ax.set_xticks(midx+100*np.arange(-2,3))
- ax.set_xticklabels(np.arange(-2,3)*100)
- ax.xaxis.set_ticks_position('bottom')
- ax.tick_params(axis='x', labelrotation=45)
+ ax = plt.gca()
+ midx = 279
+ ax.set_xticks(midx+100*np.arange(-2,3))
+ ax.set_xticklabels(np.arange(-2,3)*100)
+ ax.xaxis.set_ticks_position('bottom')
+ ax.tick_params(axis='x', labelrotation=45)
- midy = 177
- ax.set_yticks(midy+100*np.arange(-2,3))
- ax.set_yticklabels(np.arange(-2,3)*100)
+ midy = 177
+ ax.set_yticks(midy+100*np.arange(-2,3))
+ ax.set_yticklabels(np.arange(-2,3)*100)
- plt.title(r'$K_{' + str(thresh) + r'}$')
+ plt.title(r'$K_{' + str(thresh) + r'}$')
- fig = plt.gcf()
- fig.set_figwidth(1.25)
+ fig = plt.gcf()
+ fig.set_figwidth(1.25)
- thresh_size_fig = fig.get_size_inches()
- print(thresh_size_fig)
+ thresh_size_fig = fig.get_size_inches()
+ print(thresh_size_fig)
- # plt.colorbar()
+ # plt.colorbar()
- plt.savefig('figures/Fern_3pi_over_4_Thresh'+str(thresh)+'.png', bbox_inches = 'tight',dpi = 300)
- plt.savefig('figures/Fern_3pi_over_4_Thresh'+str(thresh)+'.eps', bbox_inches = 'tight')
+ plt.savefig('figures/Fern_3pi_over_4_Thresh'+str(thresh)+'.png', bbox_inches = 'tight',dpi = 300)
+ plt.savefig('figures/Fern_3pi_over_4_Thresh'+str(thresh)+'.eps', bbox_inches = 'tight')
- # plt.clf()
+ # plt.clf()
@@ -866,51 +864,51 @@ Thresholded Figure[ ]:
-theta = 3*np.pi/4
+theta = 3*np.pi/4
-fig,axes = plt.subplots(1,5,sharey = True, figsize = (6,2))
+fig,axes = plt.subplots(1,5,sharey = True, figsize = (6,2))
-for i, thresh in enumerate([-150,-50,0,50,150]):
+for i, thresh in enumerate([-150,-50,0,50,150]):
- ax = axes[i]
+ ax = axes[i]
- heights = np.sum(leaf.cells[0]*omega, axis=1)
+ heights = np.sum(leaf.cells[0]*omega, axis=1)
- # Plot colors above theshold
- ax.matshow(makeFernPicThreshold(F,theta,thresh),
- origin = 'lower',
- cmap = cmap_viridis,
- vmin = -200, vmax = 200)
+ # Plot colors above theshold
+ ax.matshow(makeFernPicThreshold(F,theta,thresh),
+ origin = 'lower',
+ cmap = cmap_viridis,
+ vmin = -200, vmax = 200)
- # midx = 279
- # ax.set_xticks(midx+100*np.arange(-2,3))
- # ax.set_xticklabels(np.arange(-2,3)*100)
- # ax.xaxis.set_ticks_position('bottom')
- # ax.tick_params(axis='x', labelrotation=45)
+ # midx = 279
+ # ax.set_xticks(midx+100*np.arange(-2,3))
+ # ax.set_xticklabels(np.arange(-2,3)*100)
+ # ax.xaxis.set_ticks_position('bottom')
+ # ax.tick_params(axis='x', labelrotation=45)
- # midy = 177
- # ax.set_yticks(midy+100*np.arange(-2,3))
- # ax.set_yticklabels(np.arange(-2,3)*100)
+ # midy = 177
+ # ax.set_yticks(midy+100*np.arange(-2,3))
+ # ax.set_yticklabels(np.arange(-2,3)*100)
- ax.set_xticks([])
- ax.set_yticks([])
- ax.set_title(r'$K_{' + str(thresh) + r'}$')
+ ax.set_xticks([])
+ ax.set_yticks([])
+ ax.set_title(r'$K_{' + str(thresh) + r'}$')
- # fig = plt.gcf()
- # fig.set_figwidth(1.25)
+ # fig = plt.gcf()
+ # fig.set_figwidth(1.25)
- # thresh_size_fig = fig.get_size_inches()
- # print(thresh_size_fig)
+ # thresh_size_fig = fig.get_size_inches()
+ # print(thresh_size_fig)
- # plt.colorbar()
+ # plt.colorbar()
- # plt.savefig('figures/Fern_3pi_over_4_Thresh'+str(thresh)+'.png', bbox_inches = 'tight',dpi = 300)
- # plt.savefig('figures/Fern_3pi_over_4_Thresh'+str(thresh)+'.eps', bbox_inches = 'tight')
+ # plt.savefig('figures/Fern_3pi_over_4_Thresh'+str(thresh)+'.png', bbox_inches = 'tight',dpi = 300)
+ # plt.savefig('figures/Fern_3pi_over_4_Thresh'+str(thresh)+'.eps', bbox_inches = 'tight')
- # plt.clf()
-plt.savefig('figures/Fern_3pi_over_4_AllThresh.png', bbox_inches = 'tight',dpi = 300)
-plt.savefig('figures/Fern_3pi_over_4_AllThresh.eps', bbox_inches = 'tight',dpi = 300)
+ # plt.clf()
+plt.savefig('figures/Fern_3pi_over_4_AllThresh.png', bbox_inches = 'tight',dpi = 300)
+plt.savefig('figures/Fern_3pi_over_4_AllThresh.eps', bbox_inches = 'tight',dpi = 300)
@@ -928,37 +926,37 @@ ECC in one direction[ ]:
-theta = 3*np.pi/4
-omega = (np.cos(theta), np.sin(theta))
-heights = np.sum(leaf.cells[0]*omega, axis=1)
-numThresh = 64
+theta = 3*np.pi/4
+omega = (np.cos(theta), np.sin(theta))
+heights = np.sum(leaf.cells[0]*omega, axis=1)
+numThresh = 64
-threshes= np.linspace(heights.min(), heights.max(), numThresh)
+threshes= np.linspace(heights.min(), heights.max(), numThresh)
-outECC = leaf.ECC(heights, numThresh)
+outECC = leaf.ECC(heights, numThresh)
-fig = plt.figure()
-ax = plt.gca()
+fig = plt.figure()
+ax = plt.gca()
-positions = [-150, -50, 0, 50, 150]
-for pos in positions:
- ax.axvline(x=pos, color='grey', linestyle='--')
+positions = [-150, -50, 0, 50, 150]
+for pos in positions:
+ ax.axvline(x=pos, color='grey', linestyle='--')
-plt.step(threshes,outECC)
-plt.title(r'ECC for $\omega = \frac{3 \pi}{4}$')
-plt.xlabel('$a$')
-plt.ylabel(r'$\chi(K_a)$')
+plt.step(threshes,outECC)
+plt.title(r'ECC for $\omega = \frac{3 \pi}{4}$')
+plt.xlabel('$a$')
+plt.ylabel(r'$\chi(K_a)$')
-# ax.set_xticks([-200,-150,-100,-50,0,50,100,150,200])
- # midx = 279
- # ax.set_xticks(midx+100*np.arange(-2,3))
- # ax.set_xticklabels(np.arange(-2,3)*100)
- # ax.xaxis.set_ticks_position('bottom')
- # ax.tick_params(axis='x', labelrotation=45)
-ax.tick_params(axis='x', labelrotation=45)
-ax.tick_params(axis='y', labelrotation=45)
+# ax.set_xticks([-200,-150,-100,-50,0,50,100,150,200])
+ # midx = 279
+ # ax.set_xticks(midx+100*np.arange(-2,3))
+ # ax.set_xticklabels(np.arange(-2,3)*100)
+ # ax.xaxis.set_ticks_position('bottom')
+ # ax.tick_params(axis='x', labelrotation=45)
+ax.tick_params(axis='x', labelrotation=45)
+ax.tick_params(axis='y', labelrotation=45)
@@ -966,14 +964,14 @@ ECC in one directionfig = plt.gcf()
-fig.set_size_inches(5,2)
-# fig.set_size_inches(thresh_size_fig)
-# print(thresh_size_fig)
-# print(fig.get_size_inches())
+fig = plt.gcf()
+fig.set_size_inches(5,2)
+# fig.set_size_inches(thresh_size_fig)
+# print(thresh_size_fig)
+# print(fig.get_size_inches())
-plt.savefig('figures/Fern_3pi_over_4_ECC.png', bbox_inches = 'tight',dpi=300)
-plt.savefig('figures/Fern_3pi_over_4_ECC.eps', bbox_inches = 'tight')
+plt.savefig('figures/Fern_3pi_over_4_ECC.png', bbox_inches = 'tight',dpi=300)
+plt.savefig('figures/Fern_3pi_over_4_ECC.eps', bbox_inches = 'tight')
@@ -988,7 +986,7 @@ ECC in one direction[ ]:
-print(outECC[-1])
+print(outECC[-1])
@@ -1007,12 +1005,12 @@ ECT[ ]:
-# Get all the directions around the circle
-numCircleDirs = 32
-circledirs = np.linspace(0, 2*np.pi, num=numCircleDirs, endpoint=False)
-circledirs
+# Get all the directions around the circle
+numCircleDirs = 32
+circledirs = np.linspace(0, 2*np.pi, num=numCircleDirs, endpoint=False)
+circledirs
-print(circledirs/np.pi)
+print(circledirs/np.pi)
@@ -1031,8 +1029,8 @@ ECT[ ]:
-# Choose number of thresholds for the ECC to stop at
-numThresh = 100
+# Choose number of thresholds for the ECC to stop at
+numThresh = 100
@@ -1040,32 +1038,32 @@ ECT[ ]:
-ECT_preprocess = {}
+ECT_preprocess = {}
-overallmin = 0
-overallmax = 0
+overallmin = 0
+overallmax = 0
-for i, omega in enumerate(circledirs):
+for i, omega in enumerate(circledirs):
- omegavec = np.array((np.cos(omega),np.sin(omega)))
+ omegavec = np.array((np.cos(omega),np.sin(omega)))
- # Function values of all the pixels
- heights = np.sum(leaf.cells[0]*omegavec, axis=1)
+ # Function values of all the pixels
+ heights = np.sum(leaf.cells[0]*omegavec, axis=1)
- # Thresholds implicitly calculated by Erik's code
- threshes= np.linspace(heights.min(), heights.max(), numThresh)
+ # Thresholds implicitly calculated by Erik's code
+ threshes= np.linspace(heights.min(), heights.max(), numThresh)
- if heights.min()<overallmin:
- overallmin = heights.min()
- if heights.max()>overallmax:
- overallmax= heights.max()
+ if heights.min()<overallmin:
+ overallmin = heights.min()
+ if heights.max()>overallmax:
+ overallmax= heights.max()
- outECC = leaf.ECC(heights, numThresh)
+ outECC = leaf.ECC(heights, numThresh)
- ECT_preprocess[i] = (threshes,outECC)
+ ECT_preprocess[i] = (threshes,outECC)
-print(overallmin,overallmax)
+print(overallmin,overallmax)
@@ -1081,9 +1079,9 @@ ECT[ ]:
-i = 2
+i = 2
-plt.step( ECT_preprocess[i][0], ECT_preprocess[i][1])
+plt.step( ECT_preprocess[i][0], ECT_preprocess[i][1])
@@ -1106,32 +1104,32 @@ ECT[ ]:
-# Making a matrix of size numThreshes x numCircleDirs
-# M[i,j] =
+# Making a matrix of size numThreshes x numCircleDirs
+# M[i,j] =
-# Make meshgrid. The +1 is to draw 2pi on both ends
-X,Y = np.meshgrid(range(numCircleDirs+1),np.linspace(-250,250,numThresh))
-M = np.ones_like(X)
+# Make meshgrid. The +1 is to draw 2pi on both ends
+X,Y = np.meshgrid(range(numCircleDirs+1),np.linspace(-250,250,numThresh))
+M = np.ones_like(X)
-for i in range(X.shape[0]):
- for j in range(X.shape[1]):
- omegai = X[i,j]
+for i in range(X.shape[0]):
+ for j in range(X.shape[1]):
+ omegai = X[i,j]
- # Deal with redrawing the 2pi
- omegai = np.mod(omegai,numCircleDirs)
+ # Deal with redrawing the 2pi
+ omegai = np.mod(omegai,numCircleDirs)
- omega = i*np.pi/numCircleDirs
- a = Y[i,j]
- threshes = ECT_preprocess[omegai][0]
-# print(threshes)
- try:
- index = np.where(threshes>=a)[0][0]
- except:
- index = [-1]
+ omega = i*np.pi/numCircleDirs
+ a = Y[i,j]
+ threshes = ECT_preprocess[omegai][0]
+# print(threshes)
+ try:
+ index = np.where(threshes>=a)[0][0]
+ except:
+ index = [-1]
- M[i,j] = ECT_preprocess[omegai][1][index]
+ M[i,j] = ECT_preprocess[omegai][1][index]
@@ -1148,35 +1146,35 @@ ECT[ ]:
-plt.pcolormesh(X,Y,M, cmap = 'viridis')
-plt.colorbar()
+plt.pcolormesh(X,Y,M, cmap = 'viridis')
+plt.colorbar()
-ax = plt.gca()
-ax.set_xticks(np.arange(0,numCircleDirs+1,4))
+ax = plt.gca()
+ax.set_xticks(np.arange(0,numCircleDirs+1,4))
-labels = [r'$0$',
- r'$\frac{\pi}{4}$',
- r'$\frac{\pi}{2}$',
- r'$\frac{3\pi}{4}$',
- r'$\pi$',
- r'$\frac{5\pi}{4}$',
- r'$\frac{3\pi}{2}$',
- r'$\frac{7\pi}{4}$',
- r'$2\pi$',
- ]
+labels = [r'$0$',
+ r'$\frac{\pi}{4}$',
+ r'$\frac{\pi}{2}$',
+ r'$\frac{3\pi}{4}$',
+ r'$\pi$',
+ r'$\frac{5\pi}{4}$',
+ r'$\frac{3\pi}{2}$',
+ r'$\frac{7\pi}{4}$',
+ r'$2\pi$',
+ ]
-ax.set_xticklabels(labels)
+ax.set_xticklabels(labels)
-plt.xlabel(r'$\omega$')
-plt.ylabel(r'$a$')
+plt.xlabel(r'$\omega$')
+plt.ylabel(r'$a$')
-plt.title(r'ECT of Fern Leaf')
-fig = plt.gcf()
-fig.set_size_inches(3,2)
+plt.title(r'ECT of Fern Leaf')
+fig = plt.gcf()
+fig.set_size_inches(3,2)
-plt.savefig('figures/Fern_ECT.png', bbox_inches = 'tight',dpi=900)
-plt.savefig('figures/Fern_ECT.eps', bbox_inches = 'tight')
+plt.savefig('figures/Fern_ECT.png', bbox_inches = 'tight',dpi=900)
+plt.savefig('figures/Fern_ECT.eps', bbox_inches = 'tight')
@@ -1191,7 +1189,7 @@ ECT[ ]:
-M[0,:]
+M[0,:]
@@ -1208,10 +1206,10 @@ ECT[ ]:
-bigvals = np.where(M[0,:] >3)[0]
+bigvals = np.where(M[0,:] >3)[0]
-circledirs[bigvals]/np.pi*16
+circledirs[bigvals]/np.pi*16
@@ -1230,14 +1228,14 @@ Let’s draw a cylinder![ ]:
-import matplotlib
-from mpl_toolkits.mplot3d import Axes3D
-import numpy as np
-import matplotlib.pyplot as plt
+import matplotlib
+from mpl_toolkits.mplot3d import Axes3D
+import numpy as np
+import matplotlib.pyplot as plt
-# pip install ipympl
+# pip install ipympl
-# %matplotlib widget
+# %matplotlib widget
@@ -1245,8 +1243,8 @@ Let’s draw a cylinder![ ]:
-grid = M[:,:-1]
-print(grid.shape)
+grid = M[:,:-1]
+print(grid.shape)
@@ -1262,14 +1260,14 @@ Let’s draw a cylinder![ ]:
-color_dimension = grid # change to desired fourth dimension
-minn, maxx = color_dimension.min(), color_dimension.max()
-norm = matplotlib.colors.Normalize(minn, maxx)
-m = plt.cm.ScalarMappable(norm=norm, cmap='viridis')
-m.set_array([])
-fcolors = m.to_rgba(color_dimension)
+color_dimension = grid # change to desired fourth dimension
+minn, maxx = color_dimension.min(), color_dimension.max()
+norm = matplotlib.colors.Normalize(minn, maxx)
+m = plt.cm.ScalarMappable(norm=norm, cmap='viridis')
+m.set_array([])
+fcolors = m.to_rgba(color_dimension)
-print(fcolors.shape)
+print(fcolors.shape)
@@ -1285,10 +1283,10 @@ Let’s draw a cylinder![ ]:
-theta = np.linspace(0, 2 * np.pi, 24)
-print(theta)
-# theta = circledirs[:-1]
-# print(theta, theta.shape)
+theta = np.linspace(0, 2 * np.pi, 24)
+print(theta)
+# theta = circledirs[:-1]
+# print(theta, theta.shape)
@@ -1307,43 +1305,43 @@ Let’s draw a cylinder![ ]:
-"""
-equation for a circle
+"""
+equation for a circle
-x = h + r cosθ
-y = k + r sinθ
+x = h + r cosθ
+y = k + r sinθ
-where h and k are the co-ordinates of the center
+where h and k are the co-ordinates of the center
-0 <= θ <= 360
-"""
+0 <= θ <= 360
+"""
-fig = plt.figure(figsize=(4,3))
-ax = fig.add_subplot(111, projection='3d')
+fig = plt.figure(figsize=(4,3))
+ax = fig.add_subplot(111, projection='3d')
-# theta = np.linspace(0, 2 * np.pi, 24)
-radius = 1
+# theta = np.linspace(0, 2 * np.pi, 24)
+radius = 1
-x = np.linspace(0, numThresh, numThresh)
+x = np.linspace(0, numThresh, numThresh)
-# theta = circledirs
-theta = np.linspace(0, 2 * np.pi, 32)
+# theta = circledirs
+theta = np.linspace(0, 2 * np.pi, 32)
-thetas, xs = np.meshgrid(theta, x)
+thetas, xs = np.meshgrid(theta, x)
-y = radius * np.cos(thetas)
-z = radius * np.sin(thetas)
+y = radius * np.cos(thetas)
+z = radius * np.sin(thetas)
-#ax.plot_surface(xs, y, z, color='orange')
-#ax.plot_surface(xs, y, z, facecolors=fcolors)
-surf = ax.plot_surface(xs, y, z, facecolors = fcolors,linewidth = 0.1)
-surf.set_edgecolor('grey')
+#ax.plot_surface(xs, y, z, color='orange')
+#ax.plot_surface(xs, y, z, facecolors=fcolors)
+surf = ax.plot_surface(xs, y, z, facecolors = fcolors,linewidth = 0.1)
+surf.set_edgecolor('grey')
-ax.set_axis_off()
+ax.set_axis_off()
-plt.savefig('figures/fern_ECT_cylinder.png', bbox_inches = 'tight',dpi = 900)
-plt.savefig('figures/fern_ECT_cylinder.eps', bbox_inches = 'tight')
+plt.savefig('figures/fern_ECT_cylinder.png', bbox_inches = 'tight',dpi = 900)
+plt.savefig('figures/fern_ECT_cylinder.eps', bbox_inches = 'tight')
@@ -1358,16 +1356,16 @@ Let’s draw a cylinder![ ]:
-omegai = 5
-omega = i*np.pi/numCircleDirs
-a = 17
-threshes = ECT_preprocess[omegai][0]
-print(threshes)
+omegai = 5
+omega = i*np.pi/numCircleDirs
+a = 17
+threshes = ECT_preprocess[omegai][0]
+print(threshes)
-index = np.where(threshes>=a)[0][0]
-print(index)
-print(threshes[index])
-ECT_preprocess[omegai][1][index]
+index = np.where(threshes>=a)[0][0]
+print(index)
+print(threshes[index])
+ECT_preprocess[omegai][1][index]
@@ -1415,16 +1413,16 @@ Erik’s version[ ]:
-# t = 32
-# tic = time.perf_counter()
-# ect = leaf.ECT(circle_dirs, T=t)
-# toc = time.perf_counter()
-# print("Complex with {} vertices\n".format(len(leaf.cells[0])))
-# print("ECT with {} directions in {:.4f} seconds.\n{:.4f}s per direction".format(len(circle_dirs), toc-tic, (toc-tic)/len(circle_dirs)))
+# t = 32
+# tic = time.perf_counter()
+# ect = leaf.ECT(circle_dirs, T=t)
+# toc = time.perf_counter()
+# print("Complex with {} vertices\n".format(len(leaf.cells[0])))
+# print("ECT with {} directions in {:.4f} seconds.\n{:.4f}s per direction".format(len(circle_dirs), toc-tic, (toc-tic)/len(circle_dirs)))
-# plt.figure(figsize=(15,2))
-# plt.plot(ect);
-# plt.title('ECT for {} directions and {} thresholds each'.format(len(circle_dirs),t), fontsize=24);
+# plt.figure(figsize=(15,2))
+# plt.plot(ect);
+# plt.title('ECT for {} directions and {} thresholds each'.format(len(circle_dirs),t), fontsize=24);
@@ -1436,33 +1434,33 @@ SECT<
[ ]:
-# THe original ECT
+# THe original ECT
-plt.pcolormesh(X,Y,M, cmap = 'viridis')
-plt.colorbar()
+plt.pcolormesh(X,Y,M, cmap = 'viridis')
+plt.colorbar()
-ax = plt.gca()
-ax.set_xticks(np.arange(0,numCircleDirs+1,4))
+ax = plt.gca()
+ax.set_xticks(np.arange(0,numCircleDirs+1,4))
-labels = [r'$0$',
- r'$\frac{\pi}{4}$',
- r'$\frac{\pi}{2}$',
- r'$\frac{3\pi}{4}$',
- r'$\pi$',
- r'$\frac{5\pi}{4}$',
- r'$\frac{3\pi}{2}$',
- r'$\frac{7\pi}{4}$',
- r'$2\pi$',
- ]
+labels = [r'$0$',
+ r'$\frac{\pi}{4}$',
+ r'$\frac{\pi}{2}$',
+ r'$\frac{3\pi}{4}$',
+ r'$\pi$',
+ r'$\frac{5\pi}{4}$',
+ r'$\frac{3\pi}{2}$',
+ r'$\frac{7\pi}{4}$',
+ r'$2\pi$',
+ ]
-ax.set_xticklabels(labels)
+ax.set_xticklabels(labels)
-fig = plt.gcf()
-fig.set_size_inches(3,2)
-plt.xlabel(r'$\omega$')
-plt.ylabel(r'$a$')
+fig = plt.gcf()
+fig.set_size_inches(3,2)
+plt.xlabel(r'$\omega$')
+plt.ylabel(r'$a$')
-plt.title(r'ECT of Fern Leaf')
+plt.title(r'ECT of Fern Leaf')
@@ -1485,16 +1483,16 @@ SECT<
[ ]:
-# Following Crawford2019 for the moment. Is this different in the Meng22 version?
-print(M.shape)
+# Following Crawford2019 for the moment. Is this different in the Meng22 version?
+print(M.shape)
-# Averages for a fixed direction
-AvgOverOmega = np.average(M,axis = 0)
-print(AvgOverOmega)
+# Averages for a fixed direction
+AvgOverOmega = np.average(M,axis = 0)
+print(AvgOverOmega)
-# Mean centered
+# Mean centered
-Mcentered = M-AvgOverOmega
+Mcentered = M-AvgOverOmega
@@ -1514,35 +1512,35 @@ SECT<
[ ]:
-plt.pcolormesh(X,Y,Mcentered, cmap = 'viridis')
-plt.colorbar()
+plt.pcolormesh(X,Y,Mcentered, cmap = 'viridis')
+plt.colorbar()
-ax = plt.gca()
-ax.set_xticks(np.arange(0,numCircleDirs+1,4))
+ax = plt.gca()
+ax.set_xticks(np.arange(0,numCircleDirs+1,4))
-labels = [r'$0$',
- r'$\frac{\pi}{4}$',
- r'$\frac{\pi}{2}$',
- r'$\frac{3\pi}{4}$',
- r'$\pi$',
- r'$\frac{5\pi}{4}$',
- r'$\frac{3\pi}{2}$',
- r'$\frac{7\pi}{4}$',
- r'$2\pi$',
- ]
+labels = [r'$0$',
+ r'$\frac{\pi}{4}$',
+ r'$\frac{\pi}{2}$',
+ r'$\frac{3\pi}{4}$',
+ r'$\pi$',
+ r'$\frac{5\pi}{4}$',
+ r'$\frac{3\pi}{2}$',
+ r'$\frac{7\pi}{4}$',
+ r'$2\pi$',
+ ]
-ax.set_xticklabels(labels)
+ax.set_xticklabels(labels)
-plt.xlabel(r'$\omega$')
-plt.ylabel(r'$a$')
+plt.xlabel(r'$\omega$')
+plt.ylabel(r'$a$')
-plt.title(r'ECT of Fern Leaf with value centered')
+plt.title(r'ECT of Fern Leaf with value centered')
-fig = plt.gcf()
-fig.set_size_inches(3,2)
+fig = plt.gcf()
+fig.set_size_inches(3,2)
-plt.savefig('figures/Fern-ECT-centered.png', bbox_inches = 'tight')
+plt.savefig('figures/Fern-ECT-centered.png', bbox_inches = 'tight')
@@ -1557,7 +1555,7 @@ SECT<
[ ]:
-Mcentered.sum(axis = 0)
+Mcentered.sum(axis = 0)
@@ -1581,9 +1579,9 @@ SECT<
[ ]:
-a = np.array([[1,2,3], [4,5,6]])
-print(a)
-np.cumsum(a,axis = 0)
+a = np.array([[1,2,3], [4,5,6]])
+print(a)
+np.cumsum(a,axis = 0)
@@ -1609,7 +1607,7 @@ SECT<
[ ]:
-Mint = np.cumsum(Mcentered,axis = 0)
+Mint = np.cumsum(Mcentered,axis = 0)
@@ -1617,36 +1615,36 @@ SECT<
[ ]:
-plt.pcolormesh(X,Y,Mint, cmap = 'viridis')
-plt.colorbar()
+plt.pcolormesh(X,Y,Mint, cmap = 'viridis')
+plt.colorbar()
-ax = plt.gca()
-ax.set_xticks(np.arange(0,numCircleDirs+1,4))
+ax = plt.gca()
+ax.set_xticks(np.arange(0,numCircleDirs+1,4))
-labels = [r'$0$',
- r'$\frac{\pi}{4}$',
- r'$\frac{\pi}{2}$',
- r'$\frac{3\pi}{4}$',
- r'$\pi$',
- r'$\frac{5\pi}{4}$',
- r'$\frac{3\pi}{2}$',
- r'$\frac{7\pi}{4}$',
- r'$2\pi$',
- ]
+labels = [r'$0$',
+ r'$\frac{\pi}{4}$',
+ r'$\frac{\pi}{2}$',
+ r'$\frac{3\pi}{4}$',
+ r'$\pi$',
+ r'$\frac{5\pi}{4}$',
+ r'$\frac{3\pi}{2}$',
+ r'$\frac{7\pi}{4}$',
+ r'$2\pi$',
+ ]
-ax.set_xticklabels(labels)
+ax.set_xticklabels(labels)
-fig = plt.gcf()
-fig.set_size_inches(3,2)
+fig = plt.gcf()
+fig.set_size_inches(3,2)
-plt.xlabel(r'$\omega$')
-plt.ylabel(r'$t$')
+plt.xlabel(r'$\omega$')
+plt.ylabel(r'$t$')
-plt.title(r'SECT of Fern Leaf')
+plt.title(r'SECT of Fern Leaf')
-plt.savefig('figures/Fern-SECT.png',bbox_inches = 'tight',dpi=900)
-plt.savefig('figures/Fern-SECT.eps',bbox_inches = 'tight')
+plt.savefig('figures/Fern-SECT.png',bbox_inches = 'tight',dpi=900)
+plt.savefig('figures/Fern-SECT.eps',bbox_inches = 'tight')
diff --git a/docs/notebooks/Matisse/Matisse_ECT.html b/docs/notebooks/Matisse/Matisse_ECT.html
index 36084c2..4eb1e1f 100644
--- a/docs/notebooks/Matisse/Matisse_ECT.html
+++ b/docs/notebooks/Matisse/Matisse_ECT.html
@@ -1,28 +1,26 @@
+
+
-
+
3.3. ECT on Matisse’s “The Parakeet and the Mermaid” — ect 0.1.5 documentation
-
+
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -100,23 +98,23 @@ 3.3. ECT on Matisse’s “The Parakeet
[1]:
-#-----------------
-# Standard imports
-#-----------------
-import numpy as np # for arrays
-import matplotlib.pyplot as plt # for plotting
-from sklearn.decomposition import PCA # for PCA for normalization
-from scipy.spatial import distance_matrix
+#-----------------
+# Standard imports
+#-----------------
+import numpy as np # for arrays
+import matplotlib.pyplot as plt # for plotting
+from sklearn.decomposition import PCA # for PCA for normalization
+from scipy.spatial import distance_matrix
-from os import listdir # for retrieving files from directory
-from os.path import isfile, join # for retrieving files from directory
-from sklearn.manifold import MDS # for MDS
-import pandas as pd # for loading in colors csv
+from os import listdir # for retrieving files from directory
+from os.path import isfile, join # for retrieving files from directory
+from sklearn.manifold import MDS # for MDS
+import pandas as pd # for loading in colors csv
-#---------------------------
-# The ECT packages we'll use
-#---------------------------
-from ect import ECT, EmbeddedGraph # for calculating ECTs
+#---------------------------
+# The ECT packages we'll use
+#---------------------------
+from ect import ECT, EmbeddedGraph # for calculating ECTs
@@ -126,10 +124,10 @@ 3.3. ECT on Matisse’s “The Parakeet
[2]:
-data_dir = "doc_source/notebooks/Matisse/outlines/" # set data directory
-file_names = [f for f in listdir(data_dir) if isfile(join(data_dir, f)) and f[-4:] == '.txt'] # create a list of file names
-file_names.sort() # sort the list of file names
-print(f"There are {len(file_names)} files in the directory") # print number of files
+data_dir = "doc_source/notebooks/Matisse/outlines/" # set data directory
+file_names = [f for f in listdir(data_dir) if isfile(join(data_dir, f)) and f[-4:] == '.txt'] # create a list of file names
+file_names.sort() # sort the list of file names
+print(f"There are {len(file_names)} files in the directory") # print number of files
@@ -146,12 +144,12 @@ 3.3. ECT on Matisse’s “The Parakeet
[3]:
-i = 3
-shape = np.loadtxt(data_dir + file_names[i])
-# shape = normalize(shape)
-G = EmbeddedGraph()
-G.add_cycle(shape)
-G.plot(with_labels = False, node_size = 10)
+i = 3
+shape = np.loadtxt(data_dir + file_names[i])
+# shape = normalize(shape)
+G = EmbeddedGraph()
+G.add_cycle(shape)
+G.plot(with_labels = False, node_size = 10)
@@ -176,8 +174,8 @@ 3.3. ECT on Matisse’s “The Parakeet
[4]:
-G.set_PCA_coordinates( center_type='min_max', scale_radius=1)
-G.plot(with_labels = False, node_size = 10, bounding_circle=True)
+G.set_PCA_coordinates( center_type='min_max', scale_radius=1)
+G.plot(with_labels = False, node_size = 10, bounding_circle=True)
@@ -202,14 +200,14 @@ 3.3. ECT on Matisse’s “The Parakeet
[5]:
-num_dirs=50 # set number of directional axes
-num_thresh=50 # set number of thresholds each axis
+num_dirs=50 # set number of directional axes
+num_thresh=50 # set number of thresholds each axis
-myect = ECT(num_dirs = num_dirs, num_thresh=num_thresh) # intiate ECT
-myect.set_bounding_radius(1) # set bounding radius
-myect.calculateECT(G) # calculate ECT on embedded graph
+myect = ECT(num_dirs = num_dirs, num_thresh=num_thresh) # intiate ECT
+myect.set_bounding_radius(1) # set bounding radius
+myect.calculateECT(G) # calculate ECT on embedded graph
-myect.plotECT() # plot ECT
+myect.plotECT() # plot ECT
@@ -225,15 +223,15 @@ 3.3. ECT on Matisse’s “The Parakeet
[6]:
-def matisse_ect(filename, num_dirs, num_thresh):
- shape = np.loadtxt(data_dir + filename)
- G = EmbeddedGraph()
- G.add_cycle(shape)
- G.set_PCA_coordinates( center_type='min_max', scale_radius=1)
- myect = ECT(num_dirs = num_dirs, num_thresh=num_thresh)
- myect.set_bounding_radius(1)
- M = myect.calculateECT(G)
- return M
+def matisse_ect(filename, num_dirs, num_thresh):
+ shape = np.loadtxt(data_dir + filename)
+ G = EmbeddedGraph()
+ G.add_cycle(shape)
+ G.set_PCA_coordinates( center_type='min_max', scale_radius=1)
+ myect = ECT(num_dirs = num_dirs, num_thresh=num_thresh)
+ myect.set_bounding_radius(1)
+ M = myect.calculateECT(G)
+ return M
@@ -242,12 +240,12 @@ 3.3. ECT on Matisse’s “The Parakeet
[7]:
-num_dirs=50 # set number of directional axes
-num_thresh=50 # set number of thresholds each axis
+num_dirs=50 # set number of directional axes
+num_thresh=50 # set number of thresholds each axis
-ect_arr = np.zeros((len(file_names),num_dirs,num_thresh))
-for i in range(len(file_names)): # for each leaf
- ect_arr[i,:,:] = matisse_ect(file_names[i], num_dirs, num_thresh)
+ect_arr = np.zeros((len(file_names),num_dirs,num_thresh))
+for i in range(len(file_names)): # for each leaf
+ ect_arr[i,:,:] = matisse_ect(file_names[i], num_dirs, num_thresh)
@@ -256,9 +254,9 @@ 3.3. ECT on Matisse’s “The Parakeet
[8]:
-flattened_ect = ect_arr.reshape(len(file_names), num_dirs*num_thresh)
-D = distance_matrix(flattened_ect, flattened_ect)
-plt.matshow(D)
+flattened_ect = ect_arr.reshape(len(file_names), num_dirs*num_thresh)
+D = distance_matrix(flattened_ect, flattened_ect)
+plt.matshow(D)
@@ -283,13 +281,13 @@ 3.3. ECT on Matisse’s “The Parakeet
[9]:
-n_components = 2 # select number of components
-mds = MDS(n_components=n_components, # initialize MDS
- dissimilarity="precomputed", # we have precomputed the distance matrix
- normalized_stress='auto',
- random_state=5 # select random state for reproducibility
- )
-MDS_scores = mds.fit_transform(D) # get MDS scores
+n_components = 2 # select number of components
+mds = MDS(n_components=n_components, # initialize MDS
+ dissimilarity="precomputed", # we have precomputed the distance matrix
+ normalized_stress='auto',
+ random_state=5 # select random state for reproducibility
+ )
+MDS_scores = mds.fit_transform(D) # get MDS scores
@@ -297,23 +295,23 @@ 3.3. ECT on Matisse’s “The Parakeet
[10]:
-# read in color hexcodes
-col_df = pd.read_csv("doc_source/notebooks/Matisse/colors.csv", header=None)
+# read in color hexcodes
+col_df = pd.read_csv("doc_source/notebooks/Matisse/colors.csv", header=None)
-scale_val = 6 # set scale value
-plt.figure(figsize=(8,8)) # set figure dimensions
+scale_val = 6 # set scale value
+plt.figure(figsize=(8,8)) # set figure dimensions
-for i in range(len(file_names)): # for each leaf
- shape = np.loadtxt(data_dir+file_names[i]) # get the current shape
- shape = shape - np.mean(shape, axis=0) # zero center shape
- shape = scale_val * shape / max(np.linalg.norm(shape, axis = 1)) # scale to radius 1 then mult by scale_val
+for i in range(len(file_names)): # for each leaf
+ shape = np.loadtxt(data_dir+file_names[i]) # get the current shape
+ shape = shape - np.mean(shape, axis=0) # zero center shape
+ shape = scale_val * shape / max(np.linalg.norm(shape, axis = 1)) # scale to radius 1 then mult by scale_val
- trans_sh = (shape + MDS_scores[i]) # translate shape to MDS position
+ trans_sh = (shape + MDS_scores[i]) # translate shape to MDS position
- plt.fill(trans_sh[:,0], trans_sh[:,1], c=col_df[0][i], lw=0) # plot shape
- plt.gca().set_aspect("equal")
+ plt.fill(trans_sh[:,0], trans_sh[:,1], c=col_df[0][i], lw=0) # plot shape
+ plt.gca().set_aspect("equal")
-plt.title("MDS of Matisse's Leaves via ECT distances")
+plt.title("MDS of Matisse's Leaves via ECT distances")
diff --git a/docs/notebooks/Tutorial-ECT_for_CW_Complexes.html b/docs/notebooks/Tutorial-ECT_for_CW_Complexes.html
index e1da986..1717a1f 100644
--- a/docs/notebooks/Tutorial-ECT_for_CW_Complexes.html
+++ b/docs/notebooks/Tutorial-ECT_for_CW_Complexes.html
@@ -1,28 +1,26 @@
+
+
-
+
3.2. Tutorial: ECT for CW complexes — ect 0.1.5 documentation
-
+
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -96,8 +94,8 @@ 3.2. Tutorial: ECT for CW complexes[31]:
-from ect import ECT, EmbeddedCW, create_example_cw
-import numpy as np
+from ect import ECT, EmbeddedCW, create_example_cw
+import numpy as np
@@ -106,19 +104,19 @@ 3.2. Tutorial: ECT for CW complexes[26]:
-K = EmbeddedCW()
+K = EmbeddedCW()
-K.add_node('A', 0,0)
-K.add_node('B', 1,0)
-K.add_node('C', 1,1)
-K.add_node('D', 0,1)
+K.add_node('A', 0,0)
+K.add_node('B', 1,0)
+K.add_node('C', 1,1)
+K.add_node('D', 0,1)
-K.add_edges_from((('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'A')))
+K.add_edges_from((('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'A')))
-K.add_face(['A', 'B', 'C', 'D'])
+K.add_face(['A', 'B', 'C', 'D'])
-K.set_mean_centered_coordinates()
-K.plot()
+K.set_mean_centered_coordinates()
+K.plot()
@@ -143,8 +141,8 @@ 3.2. Tutorial: ECT for CW complexes[32]:
-K = create_example_cw(mean_centered = True)
-K.plot(bounding_circle=True)
+K = create_example_cw(mean_centered = True)
+K.plot(bounding_circle=True)
@@ -169,8 +167,8 @@ 3.2. Tutorial: ECT for CW complexes[36]:
-theta = np.pi/7
-K.plot(bounding_circle=True,color_nodes_theta=theta)
+theta = np.pi/7
+K.plot(bounding_circle=True,color_nodes_theta=theta)
@@ -195,18 +193,18 @@ 3.2. Tutorial: ECT for CW complexes[46]:
-vert_g = K.g_omega(theta)
-edge_g = K.g_omega_edges(theta)
-face_g = K.g_omega_faces(theta)
+vert_g = K.g_omega(theta)
+edge_g = K.g_omega_edges(theta)
+face_g = K.g_omega_faces(theta)
-for v in ['K','D','C']:
- print(f'{v}: {round(vert_g[v],2)}')
+for v in ['K','D','C']:
+ print(f'{v}: {round(vert_g[v],2)}')
-for edge in [('D','K'),('C','D'),('C','K')]:
- print(f'{edge}: {round(edge_g[edge],2)}')
+for edge in [('D','K'),('C','D'),('C','K')]:
+ print(f'{edge}: {round(edge_g[edge],2)}')
-for face in [('K','D','C')]:
- print(f'{face}: {round(face_g[face],2)}')
+for face in [('K','D','C')]:
+ print(f'{face}: {round(face_g[face],2)}')
@@ -230,7 +228,7 @@ 3.2. Tutorial: ECT for CW complexes[5]:
-myect = ECT(num_dirs = 100,num_thresh = 80)
+myect = ECT(num_dirs = 100,num_thresh = 80)
@@ -252,8 +250,8 @@ 3.2. Tutorial: ECT for CW complexes[47]:
-r = K.get_bounding_radius()
-myect.calculateECC(K,0,1.2*r)
+r = K.get_bounding_radius()
+myect.calculateECC(K,0,1.2*r)
@@ -275,7 +273,7 @@ 3.2. Tutorial: ECT for CW complexes[48]:
-myect.plotECC(K,theta,1.2*r)
+myect.plotECC(K,theta,1.2*r)
@@ -291,8 +289,8 @@ 3.2. Tutorial: ECT for CW complexes[58]:
-myect.set_bounding_radius(1.2*r)
-myect.calculateECT(K)
+myect.set_bounding_radius(1.2*r)
+myect.calculateECT(K)
@@ -316,8 +314,8 @@ 3.2. Tutorial: ECT for CW complexes[59]:
-myect.plotECT()
-print(myect.bound_radius)
+myect.plotECT()
+print(myect.bound_radius)
@@ -341,7 +339,7 @@ 3.2. Tutorial: ECT for CW complexes[60]:
-myect.plotSECT()
+myect.plotSECT()
diff --git a/docs/notebooks/Tutorial-ECT_for_embedded_graphs.html b/docs/notebooks/Tutorial-ECT_for_embedded_graphs.html
index f325133..2e7e807 100644
--- a/docs/notebooks/Tutorial-ECT_for_embedded_graphs.html
+++ b/docs/notebooks/Tutorial-ECT_for_embedded_graphs.html
@@ -1,28 +1,26 @@
+
+
-
+
3.1. Tutorial : ECT for embedded graphs — ect 0.1.5 documentation
-
+
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -101,11 +99,11 @@ 3.1. Tutorial : ECT for embedded graphs<
[51]:
-from ect import ECT, EmbeddedGraph, create_example_graph
+from ect import ECT, EmbeddedGraph, create_example_graph
-import matplotlib.pyplot as plt
-import numpy as np
-import networkx as nx
+import matplotlib.pyplot as plt
+import numpy as np
+import networkx as nx
@@ -116,27 +114,27 @@ 3.1.1. Constructing the embedded graph[57]:
-# Construct an example graph
-# Note that this is the same graph that is returned by:
-# G = create_example_graph()
+# Construct an example graph
+# Note that this is the same graph that is returned by:
+# G = create_example_graph()
-G = EmbeddedGraph()
+G = EmbeddedGraph()
-G.add_node('A', 1, 2)
-G.add_node('B', 3, 4)
-G.add_node('C', 5, 7)
-G.add_node('D', 3, 6)
-G.add_node('E', 4, 3)
-G.add_node('F', 4, 5)
+G.add_node('A', 1, 2)
+G.add_node('B', 3, 4)
+G.add_node('C', 5, 7)
+G.add_node('D', 3, 6)
+G.add_node('E', 4, 3)
+G.add_node('F', 4, 5)
-G.add_edge('A', 'B')
-G.add_edge('B', 'C')
-G.add_edge('B', 'D')
-G.add_edge('B', 'E')
-G.add_edge('C', 'D')
-G.add_edge('E', 'F')
+G.add_edge('A', 'B')
+G.add_edge('B', 'C')
+G.add_edge('B', 'D')
+G.add_edge('B', 'E')
+G.add_edge('C', 'D')
+G.add_edge('E', 'F')
-G.plot()
+G.plot()
@@ -161,7 +159,7 @@ 3.1.1. Constructing the embedded graph[53]:
-G.coordinates
+G.coordinates
@@ -179,9 +177,9 @@ 3.1.1. Constructing the embedded graph[54]:
-G.set_mean_centered_coordinates()
-print(G.coordinates)
-G.plot()
+G.set_mean_centered_coordinates()
+print(G.coordinates)
+G.plot()
@@ -214,12 +212,12 @@ 3.1.1. Constructing the embedded graph[58]:
-# This is actually getting the radius
-r = G.get_bounding_radius()
-print(f'The radius of bounding circle centered at the origin is {r}')
+# This is actually getting the radius
+r = G.get_bounding_radius()
+print(f'The radius of bounding circle centered at the origin is {r}')
-# plotting the graph with it's bounding circle of radius r.
-G.plot(bounding_circle=True)
+# plotting the graph with it's bounding circle of radius r.
+G.plot(bounding_circle=True)
@@ -252,11 +250,11 @@ 3.1.1. Constructing the embedded graph[60]:
-G.rescale_to_unit_disk(preserve_center=False)
-G.plot(bounding_circle=True)
+G.rescale_to_unit_disk(preserve_center=False)
+G.plot(bounding_circle=True)
-r = G.get_bounding_radius()
-print(f'The radius of bounding circle centered at the origin is {r}')
+r = G.get_bounding_radius()
+print(f'The radius of bounding circle centered at the origin is {r}')
@@ -283,8 +281,8 @@ 3.1.1. Constructing the embedded graph[9]:
-# This gives the function value of the nodes as a dictionary
-G.g_omega(theta = 7*np.pi/4)
+# This gives the function value of the nodes as a dictionary
+G.g_omega(theta = 7*np.pi/4)
@@ -306,8 +304,8 @@ 3.1.1. Constructing the embedded graph[10]:
-# This input to the plotting function will color the nodes by function value.
-G.plot(color_nodes_theta=7*np.pi/4)
+# This input to the plotting function will color the nodes by function value.
+G.plot(color_nodes_theta=7*np.pi/4)
@@ -331,8 +329,8 @@ 3.1.1. Constructing the embedded graph[8]:
-# Here's an example in another direction.
-G.plot(color_nodes_theta=np.pi/2)
+# Here's an example in another direction.
+G.plot(color_nodes_theta=np.pi/2)
@@ -366,13 +364,13 @@ 3.1.2. Computing the ECT of [9]:
-myect = ECT(num_dirs = 16, num_thresh=20)
+myect = ECT(num_dirs = 16, num_thresh=20)
-# The ECT object will automatically choose the directions.
-print(f'Directions chosen are: {myect.thetas}')
+# The ECT object will automatically choose the directions.
+print(f'Directions chosen are: {myect.thetas}')
-# However, because a bounding radius hasn't been chosen yet, the thresholds are not yet set.
-print(f'Thresholds chosen are: {myect.threshes}')
+# However, because a bounding radius hasn't been chosen yet, the thresholds are not yet set.
+print(f'Thresholds chosen are: {myect.threshes}')
@@ -392,12 +390,12 @@ 3.1.2. Computing the ECT of [10]:
-myect.set_bounding_radius(1.2 * G.get_bounding_radius())
+myect.set_bounding_radius(1.2 * G.get_bounding_radius())
-print(f'Internally set radius is: {myect.bound_radius}')
+print(f'Internally set radius is: {myect.bound_radius}')
-# Now the thresholds are set.
-print(f'Thresholds chosen are: {myect.threshes}')
+# Now the thresholds are set.
+print(f'Thresholds chosen are: {myect.threshes}')
@@ -418,7 +416,7 @@ 3.1.2. Computing the ECT of [12]:
-myect.calculateECC(G, np.pi/2,bound_radius=True)
+myect.calculateECC(G, np.pi/2,bound_radius=True)
@@ -436,7 +434,7 @@ 3.1.2. Computing the ECT of [13]:
-myect.plotECC(G, -np.pi/2)
+myect.plotECC(G, -np.pi/2)
@@ -452,16 +450,16 @@ 3.1.2. Computing the ECT of [14]:
-myect.calculateECT(G)
+myect.calculateECT(G)
-# The matrix is passed as an output above but is also saved internally. Get the saved matrix
-M = myect.get_ECT()
+# The matrix is passed as an output above but is also saved internally. Get the saved matrix
+M = myect.get_ECT()
-print(M.shape)
-print(myect.num_dirs, myect.num_thresh)
+print(M.shape)
+print(myect.num_dirs, myect.num_thresh)
-# We can use the built in command to plot the matrix. Unlike the plotECC function, this command does not calculate the ECT when called so it must have been run earlier. An equivalent command is myect.plotECT()
-myect.plot('ECT')
+# We can use the built in command to plot the matrix. Unlike the plotECC function, this command does not calculate the ECT when called so it must have been run earlier. An equivalent command is myect.plotECT()
+myect.plot('ECT')
@@ -499,8 +497,8 @@ 3.1.3. SECT[15]:
-M_SECT = myect.calculateSECT()
-print(M_SECT.shape)
+M_SECT = myect.calculateSECT()
+print(M_SECT.shape)
@@ -521,7 +519,7 @@ 3.1.3. SECT[16]:
-myect.plot('SECT')
+myect.plot('SECT')
diff --git a/docs/py-modindex.html b/docs/py-modindex.html
index 252ca0c..f4231ca 100644
--- a/docs/py-modindex.html
+++ b/docs/py-modindex.html
@@ -1,3 +1,5 @@
+
+
@@ -5,20 +7,16 @@
Python Module Index — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/search.html b/docs/search.html
index 0711457..8be8e39 100644
--- a/docs/search.html
+++ b/docs/search.html
@@ -1,3 +1,5 @@
+
+
@@ -5,21 +7,17 @@
Search — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/searchindex.js b/docs/searchindex.js
index dfb8fbe..df94c7b 100644
--- a/docs/searchindex.js
+++ b/docs/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"docnames": ["citing", "contributing", "ect_on_graphs", "embed_cw", "embed_graph", "index", "installation", "license", "modules", "notebooks/CodingFiguresFern", "notebooks/Matisse/Matisse_ECT", "notebooks/Tutorial-ECT_for_CW_Complexes", "notebooks/Tutorial-ECT_for_embedded_graphs", "tutorials"], "filenames": ["citing.rst", "contributing.rst", "ect_on_graphs.md", "embed_cw.md", "embed_graph.md", "index.rst", "installation.rst", "license.md", "modules.rst", "notebooks/CodingFiguresFern.ipynb", "notebooks/Matisse/Matisse_ECT.ipynb", "notebooks/Tutorial-ECT_for_CW_Complexes.ipynb", "notebooks/Tutorial-ECT_for_embedded_graphs.ipynb", "tutorials.rst"], "titles": ["6. Citing", "4. Contributing to the ect Package", "2.3. ECT on Graphs", "2.2. Embedded CW complex", "2.1. Embedded graphs", "ect: Euler Characteristic Transform in Python", "1. Installation", "5. GPL-3.0 License", "2. Table of Contents", "Figure generation for Invitation to the ECT", "3.3. ECT on Matisse\u2019s \u201cThe Parakeet and the Mermaid\u201d", "3.2. Tutorial: ECT for CW complexes", "3.1. Tutorial : ECT for embedded graphs", "3. Tutorials"], "terms": {"To": [0, 1, 6, 9, 12], "ect": [0, 3, 4, 8, 13], "pleas": [0, 1, 7], "us": [0, 1, 2, 4, 5, 7, 9, 10, 11, 12], "follow": [0, 1, 2, 6, 9, 11, 12], "public": [0, 7], "elizabeth": [0, 5, 9], "munch": [0, 1, 5, 9, 10], "an": [0, 1, 2, 3, 4, 5, 9, 10, 11, 12], "invit": [0, 5], "euler": [0, 2, 9, 11, 12], "characterist": [0, 2, 9, 11, 12], "transform": [0, 2, 9, 11, 12], "arxiv": [0, 5, 9], "2310": [0, 5, 9], "10395": [0, 5, 9], "2023": [0, 5, 9], "note": [1, 2, 3, 11, 12], "thi": [1, 2, 4, 5, 9, 10, 11, 12], "i": [1, 2, 3, 4, 5, 9, 10, 11, 12], "draft": 1, "subject": 1, "chang": [1, 9], "prerequisit": 1, "set": [1, 2, 4, 9, 10, 11, 12], "up": [1, 3, 4, 12], "develop": 1, "environ": 1, "fork": [1, 9], "repositori": [1, 6], "clone": [1, 5, 6], "It": 1, "essenti": 1, "project": [1, 5, 9, 10], "have": [1, 2, 5, 6, 9, 10, 11, 12], "well": [1, 4], "clean": 1, "readabl": 1, "The": [1, 2, 3, 4, 5, 7, 9, 11, 12, 13], "should": [1, 2, 3, 4], "when": [1, 2, 11, 12], "pep": 1, "8": [1, 9, 10, 12], "guid": 1, "python": [1, 6], "docstr": 1, "given": [1, 2, 3, 4, 11, 12], "below": [1, 2], "function": [1, 2, 3, 4, 9, 11, 12], "class": [1, 2, 3, 4, 10, 11, 12], "sphinx": 1, "system": 1, "gener": [1, 3, 4, 7, 11], "alwai": 1, "includ": [1, 4, 5, 11], "new": [1, 3, 4], "featur": 1, "bug": 1, "fix": [1, 9, 12], "There": [1, 10], "ar": [1, 3, 4, 9, 10, 11, 12], "two": [1, 10], "thing": 1, "do": [1, 3, 4, 5, 9], "first": [1, 4], "which": [1, 3, 4, 12], "autogener": 1, "doubt": 1, "write": [1, 12], "too": 1, "much": 1, "second": [1, 4, 9], "doc_sourc": [1, 10], "directori": [1, 10], "restructuredtext": 1, "also": [1, 3, 4, 11, 12], "support": 1, "file": [1, 5, 10], "markdown": 1, "although": 1, "some": [1, 12], "deal": [1, 9], "content": 1, "so": [1, 3, 11, 12], "": [1, 4, 11, 12, 13], "bit": [1, 10, 11, 12], "mix": 1, "moment": [1, 9], "everyth": 1, "doc": 1, "folder": 1, "delet": 1, "overwritten": 1, "your": [1, 9], "work": [1, 3, 4], "lost": 1, "assum": [1, 3, 11, 12], "todo": [1, 3, 4, 12], "add": [1, 3, 4, 11], "instal": [1, 9], "list": [1, 3, 4, 10, 11, 12], "correctli": 1, "you": [1, 4, 5, 6, 9, 10, 11, 12], "can": [1, 2, 4, 5, 6, 7, 9, 10, 11, 12], "run": [1, 6, 12], "command": [1, 6, 11, 12], "from": [1, 2, 3, 4, 6, 9, 10, 11, 12], "top": 1, "level": 1, "make": [1, 2, 3, 4, 6, 10, 11, 12], "html": 1, "view": 1, "open": 1, "index": [1, 9], "browser": 1, "exampl": [1, 3, 4, 10, 11, 12], "indent": 1, "sinc": [1, 4, 12], "rst": 1, "picki": 1, "about": 1, "def": [1, 9, 10], "sort_edg": [1, 4], "self": [1, 2, 4], "theta": [1, 2, 3, 4, 9, 11, 12], "return_g": [1, 3, 4], "fals": [1, 2, 3, 4, 9, 10, 12], "sort": [1, 3, 4, 10], "edg": [1, 2, 3, 4, 9, 11], "graph": [1, 3, 5, 8, 10, 11, 13], "accord": [1, 3, 4], "math": 1, "g_": [1, 3, 4, 11, 12], "omega": [1, 3, 4, 9, 11, 12], "e": [1, 3, 4, 12], "max": [1, 3, 4, 9, 10], "v": [1, 3, 4, 11, 12], "mid": [1, 3, 4], "direct": [1, 2, 3, 4, 10, 11, 12], "0": [1, 2, 3, 4, 9, 10, 11, 12], "2": [1, 2, 3, 4, 9, 10, 11, 12], "pi": [1, 2, 3, 4, 9, 11, 12], "paramet": [1, 2, 3, 4], "float": [1, 2, 3, 4], "angl": [1, 2, 3, 4], "bool": [1, 2, 3, 4], "whether": [1, 2, 3, 4], "return": [1, 2, 3, 4, 9, 10, 11, 12], "g": [1, 2, 3, 4, 9, 10, 11, 13], "valu": [1, 3, 4, 9, 10, 11, 12], "along": [1, 3, 4, 5], "A": [1, 2, 3, 4, 5, 11, 12], "increas": [1, 3, 4], "order": [1, 2, 3, 4], "If": [1, 2, 3, 4, 12], "true": [1, 2, 3, 4, 9, 10, 11, 12], "dictionari": [1, 3, 4, 12], "vertex_nam": [1, 3, 4], "func_valu": [1, 3, 4], "pytest": 1, "framework": 1, "locat": 1, "standard": [1, 10], "unittest": 1, "habit": 1, "lot": 1, "simpl": [1, 3, 4], "better": [1, 12], "mani": [1, 11], "than": [1, 12], "few": 1, "written": [1, 5, 10], "wai": 1, "thei": [1, 4], "quickli": 1, "easili": [1, 12], "easier": [1, 11], "other": [1, 11], "review": 1, "take": [1, 11, 12], "look": [1, 3, 11], "exist": [1, 4], "must": [1, 2, 9, 12], "prefix": 1, "test_": 1, "For": [1, 5, 10], "call": [1, 2, 12], "my_funct": 1, "would": 1, "test_my_funct": 1, "find": [1, 4], "post": 1, "github": [1, 5, 6], "tracker": 1, "provid": 1, "inform": 1, "possibl": 1, "version": [1, 5, 6, 7], "oper": [1, 9], "ani": [1, 11], "relev": 1, "like": [1, 3, 4], "contributor": 1, "creat": [1, 3, 4, 10], "branch": 1, "main": 1, "protect": 1, "abl": 1, "push": 1, "directli": [1, 5, 6, 12], "onc": [1, 11, 12], "readi": 1, "discuss": 1, "descript": 1, "templat": 1, "fill": [1, 3, 10], "out": [1, 9, 10], "help": [1, 4], "pip": [1, 5, 6, 9], "number": [1, 2, 4, 9, 10, 12], "pyproject": 1, "toml": 1, "updat": [1, 9], "sure": [1, 3, 6, 11], "match": 1, "conf": 1, "py": [1, 9], "ensur": [1, 9], "correct": 1, "Be": 1, "all": [1, 2, 4, 9, 10, 11, 12], "befor": [1, 2, 6, 7, 9], "commit": 1, "date": 1, "pass": [1, 3, 11, 12], "need": [1, 11], "approv": 1, "liz": [1, 5, 10], "merg": 1, "acknowledg": [1, 13], "futur": [1, 9], "plan": 1, "contact": 1, "ect_graph": 2, "num_dir": [2, 10, 11, 12], "num_thresh": [2, 10, 11, 12], "bound_radiu": [2, 11, 12], "none": [2, 3, 4, 10, 12], "sourc": [2, 3, 4, 5, 6], "calcul": [2, 3, 4, 9, 10, 11, 12], "input": [2, 11, 12], "embeddedgraph": [2, 3, 4, 8, 10, 11, 12], "embeddedcw": [2, 3, 8, 11], "result": 2, "matrix": [2, 4, 9, 10, 11, 12], "where": [2, 3, 9, 11, 12], "entri": 2, "m": [2, 9, 10, 12], "j": [2, 9], "chi": [2, 9, 12], "k_": [2, 9], "a_i": 2, "omega_j": 2, "ith": 2, "thresh": [2, 9, 12], "attribut": [2, 4, 12], "int": [2, 4, 9], "consid": [2, 4], "threshold": [2, 10, 11, 12], "either": [2, 4], "posit": [2, 4, 9, 10], "radiu": [2, 4, 9, 10, 11, 12], "bound": [2, 3, 4, 10, 11, 12], "circl": [2, 4, 9, 12], "ect_matrix": 2, "np": [2, 4, 9, 10, 11, 12], "arrai": [2, 4, 9, 10, 11, 12], "store": [2, 10, 12], "sect_matrix": [2, 12], "sect": [2, 11, 13], "__init__": [2, 3, 4], "construct": [2, 13], "necessari": [2, 12], "object": [2, 3, 4, 12], "set_bounding_radiu": [2, 10, 11, 12], "manual": 2, "center": [2, 3, 4, 9, 10, 12], "origin": [2, 3, 4, 9, 10, 12], "get_radius_and_thresh": 2, "intern": [2, 11, 12], "get": [2, 9, 10, 12], "avail": [2, 5], "ii": 2, "otherwis": 2, "postiv": 2, "r": [2, 9, 11, 12], "ecc": [2, 11], "comput": [2, 4, 5, 10, 11, 13], "default": [2, 12], "get_ect": [2, 12], "get_sect": 2, "calculateecc": [2, 11, 12], "return_count": 2, "coordin": [2, 3, 4, 10, 12], "each": [2, 4, 9, 10, 12], "vertex": [2, 3, 4, 11, 12], "nx": [2, 4, 12], "radian": 2, "curv": [2, 12], "count": [2, 4], "vertic": [2, 3, 4, 9, 11, 12], "face": [2, 3, 11], "calculateect": [2, 10, 11, 12], "compute_sect": [2, 12], "a_j": 2, "omega_i": 2, "jth": 2, "after": 2, "doesn": 2, "t": [2, 9, 12], "method": [2, 4, 12], "repres": [2, 3, 4], "size": [2, 9, 12], "calculatesect": [2, 12], "smooth": [2, 12], "plotecc": [2, 11, 12], "draw_count": 2, "plot": [2, 3, 4, 9, 10, 11, 12], "specif": [2, 4, 12], "cw": [2, 8, 13], "complex": [2, 5, 8, 9, 13], "draw": [2, 3], "vari": 2, "across": 2, "plotect": [2, 10, 11, 12], "x": [2, 4, 9, 11, 12], "axi": [2, 9, 10, 11], "y": [2, 4, 9, 11], "plotsect": [2, 11], "plot_typ": 2, "type": [2, 3, 4], "str": [2, 4, 9], "embed_cw": 3, "straight": 3, "line": [3, 9], "we": [3, 4, 10, 11, 12], "1": [3, 4, 9, 10, 11, 12], "skeleton": 3, "fact": 3, "full": [3, 7, 12], "cell": [3, 9], "interior": [3, 11], "shape": [3, 9, 10, 12], "outlin": [3, 10], "its": [3, 11], "boundari": 3, "around": [3, 4, 9, 11], "howev": [3, 11, 12], "still": 3, "differ": [3, 9], "might": [3, 4], "strang": 3, "doe": [3, 4, 11, 12], "yet": [3, 11, 12], "check": [3, 11], "valid": 3, "cycl": [3, 4], "region": [3, 11], "plane": 3, "initi": [3, 4, 10, 11, 12], "empti": [3, 4, 11], "add_from_embedded_graph": 3, "embedded_graph": 3, "add_fac": [3, 11], "want": [3, 4, 12], "legit": 3, "addit": [3, 11], "g_omega_fac": [3, 11], "equal": [3, 4, 10], "dict": [3, 4], "sort_fac": 3, "sigma": [3, 11], "plot_fac": 3, "ax": [3, 4, 9, 10, 11, 12], "kwarg": [3, 4], "matplotlib": [3, 5, 9, 10, 12], "figur": [3, 10], "keyword": 3, "argument": 3, "bounding_circl": [3, 4, 10, 11, 12], "color_nodes_theta": [3, 4, 11, 12], "create_example_cw": [3, 8, 11], "center_typ": [3, 4, 10], "min_max": [3, 4, 10], "could": 3, "mean": [3, 4, 9, 10], "embed_graph": 4, "2d": [4, 5, 10, 12], "networkx": [4, 5, 12], "map": [4, 12], "add_nod": [4, 11, 12], "name": [4, 10], "assign": 4, "via": [4, 10], "next_vert_nam": 4, "hashabl": 4, "being": 4, "ad": [4, 11], "reset_po": 4, "option": 4, "reset": 4, "node": [4, 11, 12], "base": [4, 10, 11], "add_nodes_from": 4, "multipl": 4, "them": 4, "num_vert": 4, "re": [4, 10], "integ": [4, 12], "just": [4, 9, 10, 11], "one": [4, 10, 11], "letter": 4, "increment": 4, "alphabet": 4, "reach": 4, "z": [4, 9, 12], "aa": 4, "zz": 4, "aaa": 4, "etc": [4, 5], "next": 4, "sequenc": 4, "add_edg": [4, 12], "u": 4, "between": [4, 10], "add_cycl": [4, 10], "coord_matrix": 4, "row": [4, 9], "connect": 4, "appear": [4, 9], "close": 4, "numpi": [4, 5, 9, 10, 11, 12], "n": [4, 9], "get_coordin": 4, "whose": 4, "tupl": 4, "set_coordin": 4, "rais": 4, "valueerror": 4, "get_bounding_box": 4, "box": 4, "minimum": [4, 11], "maximum": 4, "get_cent": 4, "done": [4, 12], "averag": [4, 9, 12], "coordiant": 4, "ndarrai": 4, "get_bounding_radiu": [4, 11, 12], "rel": 4, "get_centered_coordin": 4, "min": [4, 9, 10], "set_centered_coordin": 4, "warn": 4, "overwrit": [4, 12], "get_scaled_coordin": 4, "scale": [4, 10], "fit": [4, 10], "disk": 4, "set_scaled_coordin": 4, "get_pca_coordin": 4, "pca": [4, 10], "normal": [4, 9, 10], "set_pca_coordin": [4, 10], "scale_radiu": [4, 10], "coars": 4, "align": [4, 10], "zero": [4, 10], "g_omega": [4, 11, 12], "defin": [4, 12], "langl": [4, 12], "texttt": 4, "po": [4, 9], "rangl": [4, 12], "g_omega_edg": [4, 11], "sort_vertic": 4, "eventu": [4, 5], "alreadi": [4, 11, 12], "lower_edg": 4, "lower": [4, 9], "v_list": 4, "vector": [4, 12], "2pi": [4, 9], "bounding_center_typ": 4, "with_label": [4, 10], "drawn": 4, "Then": [4, 11, 12], "color": [4, 9, 10, 11, 12], "label": [4, 9], "rescale_to_unit_disk": [4, 12], "preserve_cent": [4, 12], "rescal": [4, 12], "within": 4, "maintain": 4, "current": [4, 10], "point": [4, 11, 12], "instanc": 4, "chain": 4, "ha": 4, "ident": 4, "create_example_graph": [4, 8, 12], "test": [4, 9], "tool": 5, "embed": [5, 8, 10, 13], "modul": 5, "contribut": 5, "cite": 5, "right": [5, 9, 12], "now": [5, 9, 10, 12], "stuff": 5, "goal": 5, "voxel": 5, "higher": [5, 6], "dimension": [5, 10], "simplici": 5, "here": [5, 10, 11, 12], "more": [5, 11, 12], "see": [5, 11, 12], "munchlab": [5, 6], "io": 5, "jupyt": [5, 12], "notebook": [5, 9, 10, 12], "found": [5, 7], "code": [5, 9, 10, 12], "com": [5, 6], "numba": 5, "packag": [5, 6, 10, 12], "altern": [5, 6], "repo": 5, "git": [5, 6], "cd": [5, 6], "wa": [5, 9, 10, 11, 12], "her": 5, "research": 5, "group": 5, "collabor": 5, "peopl": 5, "who": 5, "sarah": 5, "mcguir": 5, "under": 5, "gplv3": 5, "detail": [5, 12], "websit": 5, "email": 5, "3": [6, 9, 10, 11, 12], "7": [6, 9, 10, 11, 12], "termin": 6, "http": 6, "simpli": 6, "text": [7, 9, 10, 12], "agreement": 7, "gnu": 7, "read": [7, 10], "carefulli": 7, "softwar": 7, "paper": [9, 12], "maa": 9, "monthli": 9, "2024": 9, "import": [9, 10, 11, 12], "pyplot": [9, 10, 12], "plt": [9, 10, 12], "teaspoon": 9, "rcparam": 9, "usetex": 9, "font": 9, "famili": 9, "helvetica": 9, "serif": 9, "__version__": 9, "39": [9, 10, 11, 12], "4": [9, 10, 12], "colormap": 9, "transpar": 9, "issu": 9, "cmap_viridi": 9, "cm": 9, "viridi": 9, "set_bad": 9, "white": 9, "cmap_binari": 9, "tab20b": 9, "f": [9, 10, 11, 12], "imread": 9, "leafbw": 9, "tif": 9, "255": 9, "f_finit": 9, "copi": 9, "2000": 9, "ones_lik": 9, "print": [9, 10, 11, 12], "nan": 9, "matshow": [9, 10], "cmap": 9, "fig": 9, "gcf": 9, "set_raster": 9, "set_figwidth": 9, "5": [9, 10, 11, 12], "titl": [9, 10], "savefig": 9, "png": 9, "dpi": 9, "300": 9, "ep": 9, "facecolor": 9, "bbox_inch": 9, "tight": 9, "pdf": 9, "makefernp": 9, "maxrow": 9, "maxcol": 9, "co": [9, 12], "sin": [9, 12], "col": 9, "meshgrid": 9, "rang": [9, 10], "floor": 9, "fmask": 9, "dt": [9, 12], "multipli": 9, "colorbar": 9, "fraction": 9, "035": 9, "pad": 9, "04": 9, "demet": 9, "dir": 9, "misc": 9, "time": [9, 12], "tifffil": 9, "tf": 9, "leaf_fil": 9, "leaf_img": 9, "subplot": 9, "figsiz": [9, 10], "20": [9, 12], "6": [9, 10, 12], "imshow": 9, "grai": 9, "200": 9, "250": 9, "280": 9, "310": 9, "c": [9, 10, 11, 12], "red": 9, "lw": [9, 10], "tic": 9, "perf_count": 9, "leaf": [9, 10], "cubicalcomplex": 9, "complexifi": 9, "toc": 9, "4f": 9, "ncubic": 9, "made": 9, "format": 9, "summari": 9, "0271": 9, "cubic": 9, "53832": 9, "99196": 9, "45167": 9, "squar": 9, "197": 9, "271": 9, "57746322": 9, "89": 9, "89517387": 9, "90": 9, "270": 9, "88": 9, "259": 9, "42253678": 9, "44": 9, "10482613": 9, "43": 9, "260": 9, "45": 9, "53828": 9, "53829": 9, "53831": 9, "53830": 9, "9": [9, 10, 12], "53821": 9, "53822": 9, "53826": 9, "53827": 9, "53825": 9, "height": 9, "sum": 9, "128": 9, "46877882": 9, "127": 9, "76167204": 9, "152": 9, "25261331": 9, "9597201": 9, "scatter": 9, "magma": 9, "32": [9, 11], "lt": [9, 10, 11, 12], "0x73f180e96250": 9, "gt": [9, 10, 11, 12], "177": 9, "279": 9, "vmin": 9, "150": [9, 10], "vmax": 9, "gca": [9, 10], "midx": 9, "set_xtick": 9, "100": [9, 11], "arang": 9, "set_xticklabel": 9, "midi": 9, "set_ytick": 9, "set_yticklabel": 9, "fern": 9, "1000": 9, "0x73f16b1855d0": 9, "without": 9, "thetastr": 9, "thetastrsfil": 9, "pi_over_4": 9, "3pi_over_4": 9, "3pi_over_2": 9, "7pi_over_4": 9, "enumer": 9, "im": 9, "xaxi": 9, "set_ticks_posit": 9, "bottom": 9, "f_": [9, 12], "get_size_inch": 9, "height_fig": 9, "fern_": 9, "_nocolorbar": 9, "7853981633974483": 9, "356194490192345": 9, "71238898038469": 9, "497787143782138": 9, "03": 9, "set_figheight": 9, "54478873": 9, "remov": 9, "onlycolorbar": 9, "5497": 9, "makefernpicthreshold": 9, "both": [9, 12], "fmaskbelow": 9, "fmaskabov": 9, "dtdown": 9, "dtup": 9, "why": 9, "backward": 9, "someth": [9, 11], "fight": 9, "els": 9, "50": [9, 10], "abov": [9, 12], "theshold": 9, "tick_param": 9, "labelrot": 9, "25": 9, "thresh_size_fig": 9, "fern_3pi_over_4_thresh": 9, "clf": 9, "sharei": 9, "set_titl": 9, "fern_3pi_over_4_allthresh": 9, "numthresh": 9, "64": 9, "linspac": 9, "outecc": 9, "axvlin": 9, "grei": 9, "linestyl": 9, "step": 9, "frac": [9, 12], "xlabel": 9, "ylabel": 9, "k_a": 9, "set_size_inch": 9, "fern_3pi_over_4_ecc": 9, "numcircledir": 9, "circledir": 9, "num": 9, "endpoint": 9, "0625": 9, "125": 9, "1875": 9, "3125": 9, "375": 9, "4375": 9, "5625": 9, "625": 9, "6875": 9, "75": [9, 11], "8125": 9, "875": 9, "9375": 9, "choos": [9, 12], "stop": [9, 11], "ect_preprocess": 9, "overallmin": 9, "overallmax": 9, "omegavec": 9, "pixel": 9, "implicitli": 9, "285": 9, "68893688291087": 9, "line2d": 9, "0x73f16b12de10": 9, "end": [9, 12], "omegai": 9, "redraw": 9, "mod": 9, "except": 9, "tmp": 9, "ipykernel_57600": 9, "1470381530": 9, "26": [9, 11], "deprecationwarn": 9, "convers": 9, "ndim": 9, "scalar": 9, "deprec": 9, "error": 9, "extract": [9, 10], "singl": [9, 11], "element": 9, "perform": 9, "pcolormesh": 9, "fern_ect": 9, "900": 9, "10": [9, 10, 12], "bigval": 9, "16": [9, 12], "11": 9, "19": 9, "mpl_toolkit": 9, "mplot3d": 9, "axes3d": 9, "ipympl": 9, "widget": 9, "grid": 9, "color_dimens": 9, "desir": 9, "fourth": 9, "dimens": [9, 10], "minn": 9, "maxx": 9, "norm": [9, 10], "scalarmapp": 9, "set_arrai": 9, "fcolor": 9, "to_rgba": 9, "24": 9, "27318197": 9, "54636394": 9, "81954591": 9, "09272788": 9, "36590985": 9, "63909182": 9, "91227379": 9, "18545576": 9, "45863773": 9, "7318197": 9, "00500167": 9, "27818364": 9, "55136561": 9, "82454758": 9, "09772955": 9, "37091152": 9, "64409349": 9, "91727546": 9, "19045743": 9, "4636394": 9, "73682137": 9, "01000334": 9, "28318531": 9, "equat": 9, "h": [9, 11], "cos\u03b8": 9, "k": [9, 11], "sin\u03b8": 9, "ordin": 9, "\u03b8": 9, "360": 9, "add_subplot": 9, "111": 9, "3d": [9, 10], "plot_surfac": 9, "orang": 9, "surf": 9, "linewidth": 9, "set_edgecolor": 9, "set_axis_off": 9, "fern_ect_cylind": 9, "17": 9, "193": 9, "98518858": 9, "190": 9, "40235323": 9, "186": 9, "81951788": 9, "183": 9, "23668253": 9, "179": 9, "65384718": 9, "176": 9, "07101183": 9, "172": 9, "48817648": 9, "168": 9, "90534113": 9, "165": 9, "32250578": 9, "161": 9, "73967042": 9, "158": 9, "15683507": 9, "154": 9, "57399972": 9, "99116437": 9, "147": 9, "40832902": 9, "143": 9, "82549367": 9, "140": 9, "24265832": 9, "136": 9, "65982297": 9, "133": 9, "07698762": 9, "129": 9, "49415227": 9, "91131692": 9, "122": 9, "32848157": 9, "118": 9, "74564621": 9, "115": 9, "16281086": 9, "57997551": 9, "107": 9, "99714016": 9, "104": 9, "41430481": 9, "83146946": 9, "97": 9, "24863411": 9, "93": 9, "66579876": 9, "08296341": 9, "86": 9, "50012806": 9, "82": 9, "91729271": 9, "79": 9, "33445735": 9, "751622": 9, "72": 9, "16878665": 9, "68": 9, "5859513": 9, "65": 9, "00311595": 9, "61": 9, "4202806": 9, "57": [9, 12], "83744525": 9, "54": [9, 12], "2546099": 9, "67177455": 9, "47": [9, 11], "0889392": 9, "50610385": 9, "92326849": 9, "36": [9, 11], "34043314": 9, "75759779": 9, "29": [9, 11], "17476244": 9, "59192709": 9, "22": 9, "00909174": 9, "18": 9, "42625639": 9, "14": [9, 12], "84342104": 9, "26058569": 9, "67775034": 9, "09491499": 9, "51207963": 9, "07075572": 9, "65359107": 9, "23642642": 9, "13": [9, 12], "81926177": 9, "40209712": 9, "98493247": 9, "56776782": 9, "28": 9, "15060317": 9, "31": [9, 11], "73343852": 9, "35": 9, "31627387": 9, "38": 9, "89910923": 9, "42": 9, "48194458": 9, "46": [9, 11], "06477993": 9, "49": 9, "64761528": 9, "53": [9, 12], "23045063": 9, "56": 9, "81328598": 9, "60": [9, 11, 12], "39612133": 9, "63": 9, "97895668": 9, "67": 9, "56179203": 9, "71": 9, "14462738": 9, "74": 9, "72746273": 9, "78": 9, "31029808": 9, "81": 9, "89313344": 9, "85": 9, "47596879": 9, "05880414": 9, "92": 9, "64163949": 9, "96": 9, "22447484": 9, "99": [9, 11], "80731019": 9, "103": 9, "39014554": 9, "106": 9, "97298089": 9, "110": 9, "55581624": 9, "114": 9, "13865159": 9, "117": 9, "72148694": 9, "121": 9, "3043223": 9, "124": 9, "88715765": 9, "469993": 9, "132": 9, "05282835": 9, "135": 9, "6356637": 9, "139": 9, "21849905": 9, "142": 9, "8013344": 9, "146": 9, "38416975": 9, "149": 9, "9670051": 9, "153": 9, "54984045": 9, "157": 9, "1326758": 9, "160": 9, "71551116": 9, "59": [9, 11], "402097119801482": 9, "83": 9, "circle_dir": 9, "len": [9, 10], "per": 9, "15": [9, 12], "fontsiz": 9, "THe": 9, "crawford2019": 9, "meng22": 9, "avgoveromega": 9, "mcenter": 9, "33": 9, "01": 9, "95": 9, "91": 9, "34": [9, 10], "69": 9, "07": 9, "87": 9, "98": 9, "94": 9, "51": [9, 12], "05": 9, "101": 9, "12": [9, 12], "09992015e": 9, "23066002e": 9, "07718279e": 9, "00000000e": 9, "00": 9, "27613475e": 9, "48538992e": 9, "96331881e": 9, "03064257e": 9, "71800377e": 9, "78754838e": 9, "33582034e": 9, "12336873e": 9, "42854650e": 9, "56017471e": 9, "35074240e": 9, "25339739e": 9, "56541488e": 9, "54223334e": 9, "40758582e": 9, "66116035e": 9, "87059265e": 9, "29913915e": 9, "53175300e": 9, "cumsum": 9, "mint": 9, "go": 10, "give": [10, 12], "classifi": 10, "cutout": 10, "henri": 10, "1952": 10, "sklearn": 10, "decomposit": 10, "scipi": 10, "spatial": 10, "distance_matrix": 10, "o": 10, "listdir": 10, "retriev": 10, "path": 10, "isfil": 10, "join": 10, "manifold": 10, "md": 10, "panda": 10, "pd": 10, "load": 10, "csv": 10, "ll": 10, "ve": 10, "taken": 10, "care": [10, 11], "preprocess": 10, "advanc": 10, "imag": 10, "download": 10, "zip": 10, "data_dir": 10, "data": 10, "file_nam": 10, "txt": 10, "leav": 10, "loadtxt": 10, "node_s": 10, "ball": 10, "eas": 10, "comparison": 10, "And": 10, "myect": [10, 11, 12], "intiat": 10, "let": [10, 11], "loader": 10, "matisse_ect": 10, "filenam": 10, "ect_arr": 10, "distanc": 10, "l_2": 10, "flattened_ect": 10, "reshap": 10, "d": [10, 11, 12], "axesimag": 10, "0x303d56d40": 10, "visual": [10, 12], "purpos": 10, "multi": 10, "n_compon": 10, "select": 10, "compon": 10, "dissimilar": 10, "precomput": 10, "normalized_stress": 10, "auto": 10, "random_st": 10, "random": 10, "state": 10, "reproduc": 10, "mds_score": 10, "fit_transform": 10, "score": 10, "hexcod": 10, "col_df": 10, "read_csv": 10, "header": 10, "scale_v": 10, "linalg": 10, "mult": 10, "trans_sh": 10, "translat": 10, "set_aspect": 10, "dan": 10, "chitwood": 10, "walk": [11, 12], "through": [11, 12], "how": 11, "build": 11, "same": [11, 12], "abil": 11, "further": 11, "b": [11, 12], "add_edges_from": 11, "set_mean_centered_coordin": [11, 12], "interest": 11, "complic": 11, "built": [11, 12], "mean_cent": 11, "max_": 11, "show": 11, "triangl": 11, "kdc": 11, "vert_g": 11, "edge_g": 11, "face_g": 11, "round": 11, "As": 11, "decid": 11, "80": 11, "In": 11, "case": 11, "interv": 11, "2r": [11, 12], "But": 11, "cours": 11, "immedi": 11, "48": 11, "similarli": 11, "control": 11, "58": [11, 12], "been": [11, 12], "9529463851622046": 11, "ask": 11, "know": 12, "what": 12, "thorough": 12, "treatment": 12, "our": 12, "undirect": 12, "mathbb": 12, "access": 12, "becaus": 12, "rotat": 12, "aspect": 12, "often": 12, "shift": 12, "3333333333333335": 12, "6666666666666665": 12, "actual": 12, "4197140881138655": 12, "unit": 12, "specifi": 12, "convert": 12, "dot": 12, "product": 12, "shown": 12, "11785113019775861": 12, "11785113019775795": 12, "5892556509887904": 12, "2963624321753375": 12, "532064692570853": 12, "11785113019775761": 12, "anoth": 12, "begin": 12, "func": 12, "mapsto": 12, "infti": 12, "automat": 12, "chosen": 12, "hasn": 12, "39269908": 12, "78539816": 12, "17809725": 12, "57079633": 12, "96349541": 12, "35619449": 12, "74889357": 12, "14159265": 12, "53429174": 12, "92699082": 12, "3196899": 12, "71238898": 12, "10508806": 12, "49778714": 12, "89048623": 12, "bigger": 12, "pictur": 12, "1036569057366385": 12, "10365691": 12, "67169302": 12, "23972914": 12, "80776525": 12, "37580137": 12, "94383748": 12, "5118736": 12, "07990971": 12, "64794583": 12, "21598194": 12, "output": 12, "correspond": 12, "fly": 12, "save": 12, "unlik": 12, "earlier": 12, "equival": 12, "overlin": 12, "_": 12, "int_": 12, "left": 12, "da": 12, "intro": 12, "m_sect": 12, "technic": 12, "don": 12, "instead": 12, "matiss": 13, "parakeet": 13, "mermaid": 13}, "objects": {"ect": [[2, 0, 0, "-", "ect_graph"], [3, 0, 0, "-", "embed_cw"], [4, 0, 0, "-", "embed_graph"]], "ect.ect_graph": [[2, 1, 1, "", "ECT"]], "ect.ect_graph.ECT": [[2, 2, 1, "", "__init__"], [2, 2, 1, "", "calculateECC"], [2, 2, 1, "", "calculateECT"], [2, 2, 1, "", "calculateSECT"], [2, 2, 1, "", "get_ECT"], [2, 2, 1, "", "get_SECT"], [2, 2, 1, "", "get_radius_and_thresh"], [2, 2, 1, "", "plot"], [2, 2, 1, "", "plotECC"], [2, 2, 1, "", "plotECT"], [2, 2, 1, "", "plotSECT"], [2, 2, 1, "", "set_bounding_radius"]], "ect.embed_cw": [[3, 1, 1, "", "EmbeddedCW"], [3, 3, 1, "", "create_example_cw"]], "ect.embed_cw.EmbeddedCW": [[3, 2, 1, "", "__init__"], [3, 2, 1, "", "add_face"], [3, 2, 1, "", "add_from_embedded_graph"], [3, 2, 1, "", "g_omega_faces"], [3, 2, 1, "", "plot"], [3, 2, 1, "", "plot_faces"], [3, 2, 1, "", "sort_faces"]], "ect.embed_graph": [[4, 1, 1, "", "EmbeddedGraph"], [4, 3, 1, "", "create_example_graph"]], "ect.embed_graph.EmbeddedGraph": [[4, 2, 1, "", "__init__"], [4, 2, 1, "", "add_cycle"], [4, 2, 1, "", "add_edge"], [4, 2, 1, "", "add_node"], [4, 2, 1, "", "add_nodes_from"], [4, 2, 1, "", "g_omega"], [4, 2, 1, "", "g_omega_edges"], [4, 2, 1, "", "get_PCA_coordinates"], [4, 2, 1, "", "get_bounding_box"], [4, 2, 1, "", "get_bounding_radius"], [4, 2, 1, "", "get_center"], [4, 2, 1, "", "get_centered_coordinates"], [4, 2, 1, "", "get_coordinates"], [4, 2, 1, "", "get_scaled_coordinates"], [4, 2, 1, "", "lower_edges"], [4, 2, 1, "", "next_vert_name"], [4, 2, 1, "", "plot"], [4, 2, 1, "", "rescale_to_unit_disk"], [4, 2, 1, "", "set_PCA_coordinates"], [4, 2, 1, "", "set_centered_coordinates"], [4, 2, 1, "", "set_coordinates"], [4, 2, 1, "", "set_scaled_coordinates"], [4, 2, 1, "", "sort_edges"], [4, 2, 1, "", "sort_vertices"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "function", "Python function"]}, "titleterms": {"cite": 0, "contribut": 1, "ect": [1, 2, 5, 6, 9, 10, 11, 12], "packag": 1, "get": [1, 5], "start": [1, 5], "guidelin": 1, "code": 1, "style": 1, "format": 1, "document": [1, 5], "test": 1, "issu": 1, "track": 1, "pull": 1, "request": 1, "conclus": 1, "graph": [2, 4, 12], "embed": [3, 4, 12], "cw": [3, 11], "complex": [3, 11], "euler": 5, "characterist": 5, "transform": 5, "python": 5, "tabl": [5, 8], "content": [5, 8, 13], "descript": 5, "tutori": [5, 11, 12, 13], "depend": 5, "instal": [5, 6], "author": 5, "licens": [5, 7], "contact": 5, "inform": 5, "prerequisit": 6, "uninstal": 6, "gpl": 7, "3": 7, "0": 7, "figur": 9, "gener": 9, "invit": 9, "try": 9, "erik": 9, "": [9, 10], "stuff": 9, "make": 9, "pictur": 9, "threshold": 9, "ecc": 9, "one": 9, "direct": 9, "let": 9, "draw": 9, "cylind": 9, "version": 9, "sect": [9, 12], "matiss": 10, "The": 10, "parakeet": 10, "mermaid": 10, "acknowledg": 10, "construct": 12, "comput": 12, "g": 12}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "nbsphinx": 4, "sphinx": 60}, "alltitles": {"Citing": [[0, "citing"]], "Contributing to the ect Package": [[1, "contributing-to-the-ect-package"]], "Getting Started": [[1, "getting-started"], [5, "getting-started"]], "Contributing Guidelines": [[1, "contributing-guidelines"]], "Code style and formatting": [[1, "code-style-and-formatting"]], "Documentation guidelines": [[1, "documentation-guidelines"]], "Testing guidelines": [[1, "testing-guidelines"]], "Issue tracking and pull requests": [[1, "issue-tracking-and-pull-requests"]], "Conclusion": [[1, "conclusion"]], "ECT on Graphs": [[2, "module-ect.ect_graph"]], "Embedded CW complex": [[3, "module-ect.embed_cw"]], "Embedded graphs": [[4, "module-ect.embed_graph"]], "ect: Euler Characteristic Transform in Python": [[5, "ect-euler-characteristic-transform-in-python"]], "Table of Contents": [[5, "table-of-contents"], [8, "table-of-contents"]], "Contents:": [[5, null], [13, null]], "Description": [[5, "description"]], "Documentation and tutorials": [[5, "documentation-and-tutorials"]], "Dependencies": [[5, "dependencies"]], "Installing": [[5, "installing"]], "Authors": [[5, "authors"]], "License": [[5, "license"]], "Contact Information": [[5, "contact-information"]], "Installation": [[6, "installation"]], "Prerequisites": [[6, "prerequisites"]], "Installing ect": [[6, "installing-ect"]], "Uninstalling ect": [[6, "uninstalling-ect"]], "GPL-3.0 License": [[7, "gpl-3-0-license"]], "Figure generation for Invitation to the ECT": [[9, "Figure-generation-for-Invitation-to-the-ECT"]], "Trying Erik\u2019s stuff": [[9, "Trying-Erik's-stuff"]], "Making pictures": [[9, "Making-pictures"]], "Thresholded Figure": [[9, "Thresholded-Figure"]], "ECC in one direction": [[9, "ECC-in-one-direction"]], "ECT": [[9, "ECT"]], "Let\u2019s draw a cylinder!": [[9, "Let's-draw-a-cylinder!"]], "Erik\u2019s version": [[9, "Erik's-version"]], "SECT": [[9, "SECT"], [12, "SECT"]], "ECT on Matisse\u2019s \u201cThe Parakeet and the Mermaid\u201d": [[10, "ECT-on-Matisse's-%22The-Parakeet-and-the-Mermaid%22"]], "Acknowledgements": [[10, "Acknowledgements"]], "Tutorial: ECT for CW complexes": [[11, "Tutorial:-ECT-for-CW-complexes"]], "Tutorial : ECT for embedded graphs": [[12, "Tutorial-:-ECT-for-embedded-graphs"]], "Constructing the embedded graph": [[12, "Constructing-the-embedded-graph"]], "Computing the ECT of G": [[12, "Computing-the-ECT-of-G"]], "Tutorials": [[13, "tutorials"]]}, "indexentries": {"ect (class in ect.ect_graph)": [[2, "ect.ect_graph.ECT"]], "__init__() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.__init__"]], "calculateecc() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.calculateECC"]], "calculateect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.calculateECT"]], "calculatesect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.calculateSECT"]], "ect.ect_graph": [[2, "module-ect.ect_graph"]], "get_ect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.get_ECT"]], "get_sect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.get_SECT"]], "get_radius_and_thresh() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.get_radius_and_thresh"]], "module": [[2, "module-ect.ect_graph"], [3, "module-ect.embed_cw"], [4, "module-ect.embed_graph"]], "plot() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.plot"]], "plotecc() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.plotECC"]], "plotect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.plotECT"]], "plotsect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.plotSECT"]], "set_bounding_radius() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.set_bounding_radius"]], "embeddedcw (class in ect.embed_cw)": [[3, "ect.embed_cw.EmbeddedCW"]], "__init__() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.__init__"]], "add_face() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.add_face"]], "add_from_embedded_graph() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.add_from_embedded_graph"]], "create_example_cw() (in module ect.embed_cw)": [[3, "ect.embed_cw.create_example_cw"]], "ect.embed_cw": [[3, "module-ect.embed_cw"]], "g_omega_faces() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.g_omega_faces"]], "plot() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.plot"]], "plot_faces() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.plot_faces"]], "sort_faces() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.sort_faces"]], "embeddedgraph (class in ect.embed_graph)": [[4, "ect.embed_graph.EmbeddedGraph"]], "__init__() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.__init__"]], "add_cycle() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.add_cycle"]], "add_edge() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.add_edge"]], "add_node() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.add_node"]], "add_nodes_from() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.add_nodes_from"]], "create_example_graph() (in module ect.embed_graph)": [[4, "ect.embed_graph.create_example_graph"]], "ect.embed_graph": [[4, "module-ect.embed_graph"]], "g_omega() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.g_omega"]], "g_omega_edges() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.g_omega_edges"]], "get_pca_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_PCA_coordinates"]], "get_bounding_box() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_bounding_box"]], "get_bounding_radius() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_bounding_radius"]], "get_center() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_center"]], "get_centered_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_centered_coordinates"]], "get_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_coordinates"]], "get_scaled_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_scaled_coordinates"]], "lower_edges() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.lower_edges"]], "next_vert_name() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.next_vert_name"]], "plot() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.plot"]], "rescale_to_unit_disk() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.rescale_to_unit_disk"]], "set_pca_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.set_PCA_coordinates"]], "set_centered_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.set_centered_coordinates"]], "set_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.set_coordinates"]], "set_scaled_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.set_scaled_coordinates"]], "sort_edges() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.sort_edges"]], "sort_vertices() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.sort_vertices"]]}})
\ No newline at end of file
+Search.setIndex({"alltitles": {"Acknowledgements": [[10, "Acknowledgements"]], "Authors": [[5, "authors"]], "Citing": [[0, null]], "Code style and formatting": [[1, "code-style-and-formatting"]], "Computing the ECT of G": [[12, "Computing-the-ECT-of-G"]], "Conclusion": [[1, "conclusion"]], "Constructing the embedded graph": [[12, "Constructing-the-embedded-graph"]], "Contact Information": [[5, "contact-information"]], "Contents:": [[5, null], [13, null]], "Contributing Guidelines": [[1, "contributing-guidelines"]], "Contributing to the ect Package": [[1, null]], "Dependencies": [[5, "dependencies"]], "Description": [[5, "description"]], "Documentation and tutorials": [[5, "documentation-and-tutorials"]], "Documentation guidelines": [[1, "documentation-guidelines"]], "ECC in one direction": [[9, "ECC-in-one-direction"]], "ECT": [[9, "ECT"]], "ECT on Graphs": [[2, null]], "ECT on Matisse\u2019s \u201cThe Parakeet and the Mermaid\u201d": [[10, null]], "Embedded CW complex": [[3, null]], "Embedded graphs": [[4, null]], "Erik\u2019s version": [[9, "Erik's-version"]], "Figure generation for Invitation to the ECT": [[9, null]], "GPL-3.0 License": [[7, null]], "Getting Started": [[1, "getting-started"], [5, "getting-started"]], "Installation": [[6, null]], "Installing": [[5, "installing"]], "Installing ect": [[6, "installing-ect"]], "Issue tracking and pull requests": [[1, "issue-tracking-and-pull-requests"]], "Let\u2019s draw a cylinder!": [[9, "Let's-draw-a-cylinder!"]], "License": [[5, "license"]], "Making pictures": [[9, "Making-pictures"]], "Prerequisites": [[6, "prerequisites"]], "SECT": [[9, "SECT"], [12, "SECT"]], "Table of Contents": [[5, "table-of-contents"], [8, null]], "Testing guidelines": [[1, "testing-guidelines"]], "Thresholded Figure": [[9, "Thresholded-Figure"]], "Trying Erik\u2019s stuff": [[9, "Trying-Erik's-stuff"]], "Tutorial : ECT for embedded graphs": [[12, null]], "Tutorial: ECT for CW complexes": [[11, null]], "Tutorials": [[13, null]], "Uninstalling ect": [[6, "uninstalling-ect"]], "ect: Euler Characteristic Transform in Python": [[5, null]]}, "docnames": ["citing", "contributing", "ect_on_graphs", "embed_cw", "embed_graph", "index", "installation", "license", "modules", "notebooks/CodingFiguresFern", "notebooks/Matisse/Matisse_ECT", "notebooks/Tutorial-ECT_for_CW_Complexes", "notebooks/Tutorial-ECT_for_embedded_graphs", "tutorials"], "envversion": {"nbsphinx": 4, "sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1}, "filenames": ["citing.rst", "contributing.rst", "ect_on_graphs.md", "embed_cw.md", "embed_graph.md", "index.rst", "installation.rst", "license.md", "modules.rst", "notebooks/CodingFiguresFern.ipynb", "notebooks/Matisse/Matisse_ECT.ipynb", "notebooks/Tutorial-ECT_for_CW_Complexes.ipynb", "notebooks/Tutorial-ECT_for_embedded_graphs.ipynb", "tutorials.rst"], "indexentries": {"__init__() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.__init__", false]], "__init__() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.__init__", false]], "__init__() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.__init__", false]], "add_cycle() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.add_cycle", false]], "add_edge() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.add_edge", false]], "add_face() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.add_face", false]], "add_from_embedded_graph() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.add_from_embedded_graph", false]], "add_node() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.add_node", false]], "add_nodes_from() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.add_nodes_from", false]], "calculateecc() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.calculateECC", false]], "calculateect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.calculateECT", false]], "calculatesect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.calculateSECT", false]], "create_example_cw() (in module ect.embed_cw)": [[3, "ect.embed_cw.create_example_cw", false]], "create_example_graph() (in module ect.embed_graph)": [[4, "ect.embed_graph.create_example_graph", false]], "ect (class in ect.ect_graph)": [[2, "ect.ect_graph.ECT", false]], "ect.ect_graph": [[2, "module-ect.ect_graph", false]], "ect.embed_cw": [[3, "module-ect.embed_cw", false]], "ect.embed_graph": [[4, "module-ect.embed_graph", false]], "embeddedcw (class in ect.embed_cw)": [[3, "ect.embed_cw.EmbeddedCW", false]], "embeddedgraph (class in ect.embed_graph)": [[4, "ect.embed_graph.EmbeddedGraph", false]], "g_omega() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.g_omega", false]], "g_omega_edges() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.g_omega_edges", false]], "g_omega_faces() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.g_omega_faces", false]], "get_bounding_box() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_bounding_box", false]], "get_bounding_radius() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_bounding_radius", false]], "get_center() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_center", false]], "get_centered_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_centered_coordinates", false]], "get_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_coordinates", false]], "get_ect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.get_ECT", false]], "get_pca_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_PCA_coordinates", false]], "get_radius_and_thresh() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.get_radius_and_thresh", false]], "get_scaled_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.get_scaled_coordinates", false]], "get_sect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.get_SECT", false]], "lower_edges() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.lower_edges", false]], "module": [[2, "module-ect.ect_graph", false], [3, "module-ect.embed_cw", false], [4, "module-ect.embed_graph", false]], "next_vert_name() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.next_vert_name", false]], "plot() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.plot", false]], "plot() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.plot", false]], "plot() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.plot", false]], "plot_faces() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.plot_faces", false]], "plotecc() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.plotECC", false]], "plotect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.plotECT", false]], "plotsect() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.plotSECT", false]], "rescale_to_unit_disk() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.rescale_to_unit_disk", false]], "set_bounding_radius() (ect.ect_graph.ect method)": [[2, "ect.ect_graph.ECT.set_bounding_radius", false]], "set_centered_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.set_centered_coordinates", false]], "set_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.set_coordinates", false]], "set_pca_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.set_PCA_coordinates", false]], "set_scaled_coordinates() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.set_scaled_coordinates", false]], "sort_edges() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.sort_edges", false]], "sort_faces() (ect.embed_cw.embeddedcw method)": [[3, "ect.embed_cw.EmbeddedCW.sort_faces", false]], "sort_vertices() (ect.embed_graph.embeddedgraph method)": [[4, "ect.embed_graph.EmbeddedGraph.sort_vertices", false]]}, "objects": {"ect": [[2, 0, 0, "-", "ect_graph"], [3, 0, 0, "-", "embed_cw"], [4, 0, 0, "-", "embed_graph"]], "ect.ect_graph": [[2, 1, 1, "", "ECT"]], "ect.ect_graph.ECT": [[2, 2, 1, "", "__init__"], [2, 2, 1, "", "calculateECC"], [2, 2, 1, "", "calculateECT"], [2, 2, 1, "", "calculateSECT"], [2, 2, 1, "", "get_ECT"], [2, 2, 1, "", "get_SECT"], [2, 2, 1, "", "get_radius_and_thresh"], [2, 2, 1, "", "plot"], [2, 2, 1, "", "plotECC"], [2, 2, 1, "", "plotECT"], [2, 2, 1, "", "plotSECT"], [2, 2, 1, "", "set_bounding_radius"]], "ect.embed_cw": [[3, 1, 1, "", "EmbeddedCW"], [3, 3, 1, "", "create_example_cw"]], "ect.embed_cw.EmbeddedCW": [[3, 2, 1, "", "__init__"], [3, 2, 1, "", "add_face"], [3, 2, 1, "", "add_from_embedded_graph"], [3, 2, 1, "", "g_omega_faces"], [3, 2, 1, "", "plot"], [3, 2, 1, "", "plot_faces"], [3, 2, 1, "", "sort_faces"]], "ect.embed_graph": [[4, 1, 1, "", "EmbeddedGraph"], [4, 3, 1, "", "create_example_graph"]], "ect.embed_graph.EmbeddedGraph": [[4, 2, 1, "", "__init__"], [4, 2, 1, "", "add_cycle"], [4, 2, 1, "", "add_edge"], [4, 2, 1, "", "add_node"], [4, 2, 1, "", "add_nodes_from"], [4, 2, 1, "", "g_omega"], [4, 2, 1, "", "g_omega_edges"], [4, 2, 1, "", "get_PCA_coordinates"], [4, 2, 1, "", "get_bounding_box"], [4, 2, 1, "", "get_bounding_radius"], [4, 2, 1, "", "get_center"], [4, 2, 1, "", "get_centered_coordinates"], [4, 2, 1, "", "get_coordinates"], [4, 2, 1, "", "get_scaled_coordinates"], [4, 2, 1, "", "lower_edges"], [4, 2, 1, "", "next_vert_name"], [4, 2, 1, "", "plot"], [4, 2, 1, "", "rescale_to_unit_disk"], [4, 2, 1, "", "set_PCA_coordinates"], [4, 2, 1, "", "set_centered_coordinates"], [4, 2, 1, "", "set_coordinates"], [4, 2, 1, "", "set_scaled_coordinates"], [4, 2, 1, "", "sort_edges"], [4, 2, 1, "", "sort_vertices"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:function"}, "terms": {"": [1, 4, 11, 12, 13], "0": [1, 2, 3, 4, 9, 10, 11, 12], "00": 9, "00000000e": 9, "00311595": 9, "00500167": 9, "00909174": 9, "01": 9, "01000334": 9, "0271": 9, "03": 9, "03064257e": 9, "035": 9, "04": 9, "05": 9, "05282835": 9, "05880414": 9, "0625": 9, "06477993": 9, "07": 9, "07075572": 9, "07101183": 9, "07698762": 9, "07718279e": 9, "07990971": 12, "08296341": 9, "0889392": 9, "09272788": 9, "09491499": 9, "09772955": 9, "09992015e": 9, "0x303d56d40": 10, "0x73f16b12de10": 9, "0x73f16b1855d0": 9, "0x73f180e96250": 9, "1": [3, 4, 9, 10, 11, 12], "10": [9, 10, 12], "100": [9, 11], "1000": 9, "101": 9, "103": 9, "1036569057366385": 12, "10365691": 12, "10395": [0, 5, 9], "104": 9, "10482613": 9, "10508806": 12, "106": 9, "107": 9, "11": 9, "110": 9, "111": 9, "114": 9, "115": 9, "117": 9, "11785113019775761": 12, "11785113019775795": 12, "11785113019775861": 12, "118": 9, "12": [9, 12], "121": 9, "122": 9, "12336873e": 9, "124": 9, "125": 9, "127": 9, "128": 9, "129": 9, "13": [9, 12], "132": 9, "1326758": 9, "133": 9, "135": 9, "136": 9, "13865159": 9, "139": 9, "14": [9, 12], "140": 9, "14159265": 12, "142": 9, "143": 9, "14462738": 9, "146": 9, "147": 9, "1470381530": 9, "149": 9, "15": [9, 12], "150": [9, 10], "15060317": 9, "152": 9, "153": 9, "154": 9, "15683507": 9, "157": 9, "158": 9, "16": [9, 12], "160": 9, "161": 9, "16281086": 9, "165": 9, "168": 9, "16878665": 9, "17": 9, "172": 9, "17476244": 9, "176": 9, "177": 9, "17809725": 12, "179": 9, "18": 9, "183": 9, "18545576": 9, "186": 9, "1875": 9, "19": 9, "190": 9, "19045743": 9, "193": 9, "1952": 10, "197": 9, "2": [1, 2, 3, 4, 9, 10, 11, 12], "20": [9, 12], "200": 9, "2000": 9, "2023": [0, 5, 9], "2024": 9, "21598194": 12, "21849905": 9, "22": 9, "22447484": 9, "23045063": 9, "23066002e": 9, "2310": [0, 5, 9], "23642642": 9, "23668253": 9, "23972914": 12, "24": 9, "24265832": 9, "24863411": 9, "25": 9, "250": 9, "25261331": 9, "25339739e": 9, "2546099": 9, "255": 9, "259": 9, "26": [9, 11], "260": 9, "26058569": 9, "270": 9, "271": 9, "27318197": 9, "27613475e": 9, "27818364": 9, "279": 9, "28": 9, "280": 9, "28318531": 9, "285": 9, "29": [9, 11], "2963624321753375": 12, "29913915e": 9, "2d": [4, 5, 10, 12], "2pi": [4, 9], "2r": [11, 12], "3": [6, 9, 10, 11, 12], "300": 9, "3043223": 9, "31": [9, 11], "310": 9, "31029808": 9, "3125": 9, "31627387": 9, "3196899": 12, "32": [9, 11], "32250578": 9, "32848157": 9, "33": 9, "3333333333333335": 12, "33445735": 9, "33582034e": 9, "34": [9, 10], "34043314": 9, "35": 9, "35074240e": 9, "35619449": 12, "356194490192345": 9, "36": [9, 11], "360": 9, "36590985": 9, "37091152": 9, "375": 9, "37580137": 12, "38": 9, "38416975": 9, "39": [9, 10, 11, 12], "39014554": 9, "39269908": 12, "39612133": 9, "3d": [9, 10], "3pi_over_2": 9, "3pi_over_4": 9, "4": [9, 10, 12], "402097119801482": 9, "40209712": 9, "40235323": 9, "40758582e": 9, "40832902": 9, "41430481": 9, "4197140881138655": 12, "42": 9, "4202806": 9, "42253678": 9, "42625639": 9, "42854650e": 9, "43": 9, "4375": 9, "44": 9, "45": 9, "45167": 9, "45863773": 9, "46": [9, 11], "4636394": 9, "46877882": 9, "469993": 9, "47": [9, 11], "47596879": 9, "48": 11, "48194458": 9, "48538992e": 9, "48817648": 9, "49": 9, "49415227": 9, "49778714": 12, "497787143782138": 9, "4f": 9, "5": [9, 10, 11, 12], "50": [9, 10], "50012806": 9, "50610385": 9, "51": [9, 12], "5118736": 12, "51207963": 9, "53": [9, 12], "53175300e": 9, "532064692570853": 12, "53429174": 12, "53821": 9, "53822": 9, "53825": 9, "53826": 9, "53827": 9, "53828": 9, "53829": 9, "53830": 9, "53831": 9, "53832": 9, "54": [9, 12], "54223334e": 9, "54478873": 9, "54636394": 9, "5497": 9, "54984045": 9, "55136561": 9, "55581624": 9, "56": 9, "56017471e": 9, "56179203": 9, "5625": 9, "56541488e": 9, "56776782": 9, "57": [9, 12], "57079633": 12, "57399972": 9, "57746322": 9, "57997551": 9, "58": [11, 12], "5859513": 9, "5892556509887904": 12, "59": [9, 11], "59192709": 9, "6": [9, 10, 12], "60": [9, 11, 12], "61": 9, "625": 9, "63": 9, "6356637": 9, "63909182": 9, "64": 9, "64163949": 9, "64409349": 9, "64761528": 9, "64794583": 12, "65": 9, "65359107": 9, "65384718": 9, "65982297": 9, "66116035e": 9, "66579876": 9, "6666666666666665": 12, "67": 9, "67169302": 12, "67177455": 9, "67775034": 9, "68": 9, "6875": 9, "68893688291087": 9, "69": 9, "7": [6, 9, 10, 11, 12], "71": 9, "71238898": 12, "71238898038469": 9, "71551116": 9, "71800377e": 9, "72": 9, "72148694": 9, "72746273": 9, "7318197": 9, "73343852": 9, "73682137": 9, "73967042": 9, "74": 9, "74564621": 9, "74889357": 12, "75": [9, 11], "751622": 9, "75759779": 9, "76167204": 9, "78": 9, "78539816": 12, "7853981633974483": 9, "78754838e": 9, "79": 9, "7pi_over_4": 9, "8": [1, 9, 10, 12], "80": 11, "8013344": 9, "80731019": 9, "80776525": 12, "81": 9, "8125": 9, "81328598": 9, "81926177": 9, "81951788": 9, "81954591": 9, "82": 9, "82454758": 9, "82549367": 9, "83": 9, "83146946": 9, "83744525": 9, "84342104": 9, "85": 9, "86": 9, "87": 9, "87059265e": 9, "875": 9, "88": 9, "88715765": 9, "89": 9, "89048623": 12, "89313344": 9, "89517387": 9, "89910923": 9, "9": [9, 10, 12], "90": 9, "900": 9, "90534113": 9, "91": 9, "91131692": 9, "91227379": 9, "91727546": 9, "91729271": 9, "92": 9, "92326849": 9, "92699082": 12, "93": 9, "9375": 9, "94": 9, "94383748": 12, "95": 9, "9529463851622046": 11, "9597201": 9, "96": 9, "96331881e": 9, "96349541": 12, "9670051": 9, "97": 9, "97298089": 9, "97895668": 9, "98": 9, "98493247": 9, "98518858": 9, "99": [9, 11], "99116437": 9, "99196": 9, "99714016": 9, "A": [1, 2, 3, 4, 5, 11, 12], "And": 10, "As": 11, "Be": 1, "But": 11, "For": [1, 5, 10], "If": [1, 2, 3, 4, 12], "In": 11, "It": 1, "THe": 9, "The": [1, 2, 3, 4, 5, 7, 9, 11, 12, 13], "Then": [4, 11, 12], "There": [1, 10], "To": [0, 1, 6, 9, 12], "_": 12, "__init__": [2, 3, 4], "__version__": 9, "_nocolorbar": 9, "a_i": 2, "a_j": 2, "aa": 4, "aaa": 4, "abil": 11, "abl": 1, "about": 1, "abov": [9, 12], "access": 12, "accord": [1, 3, 4], "acknowledg": [1, 13], "across": 2, "actual": 12, "ad": [4, 11], "add": [1, 3, 4, 11], "add_cycl": [4, 10], "add_edg": [4, 12], "add_edges_from": 11, "add_fac": [3, 11], "add_from_embedded_graph": 3, "add_nod": [4, 11, 12], "add_nodes_from": 4, "add_subplot": 9, "addit": [3, 11], "advanc": 10, "after": 2, "agreement": 7, "align": [4, 10], "all": [1, 2, 4, 9, 10, 11, 12], "along": [1, 3, 4, 5], "alphabet": 4, "alreadi": [4, 11, 12], "also": [1, 3, 4, 11, 12], "altern": [5, 6], "although": 1, "alwai": 1, "an": [0, 1, 2, 3, 4, 5, 9, 10, 11, 12], "angl": [1, 2, 3, 4], "ani": [1, 11], "anoth": 12, "appear": [4, 9], "approv": 1, "ar": [1, 3, 4, 9, 10, 11, 12], "arang": 9, "argument": 3, "around": [3, 4, 9, 11], "arrai": [2, 4, 9, 10, 11, 12], "arxiv": [0, 5, 9], "ask": 11, "aspect": 12, "assign": 4, "assum": [1, 3, 11, 12], "attribut": [2, 4, 12], "auto": 10, "autogener": 1, "automat": 12, "avail": [2, 5], "averag": [4, 9, 12], "avgoveromega": 9, "ax": [3, 4, 9, 10, 11, 12], "axes3d": 9, "axesimag": 10, "axi": [2, 9, 10, 11], "axvlin": 9, "b": [11, 12], "backward": 9, "ball": 10, "base": [4, 10, 11], "bbox_inch": 9, "becaus": 12, "been": [11, 12], "befor": [1, 2, 6, 7, 9], "begin": 12, "being": 4, "below": 1, "better": [1, 12], "between": [4, 10], "bigger": 12, "bigval": 9, "bit": [1, 10, 11, 12], "bool": [1, 2, 3, 4], "both": [9, 12], "bottom": 9, "bound": [2, 3, 4, 10, 11, 12], "bound_radiu": [2, 11, 12], "boundari": 3, "bounding_center_typ": 4, "bounding_circl": [3, 4, 10, 11, 12], "box": 4, "branch": 1, "browser": 1, "bug": 1, "build": 11, "built": [11, 12], "c": [9, 10, 11, 12], "calcul": [2, 3, 4, 9, 10, 11, 12], "calculateecc": [2, 11, 12], "calculateect": [2, 10, 11, 12], "calculatesect": [2, 12], "call": [1, 2, 12], "can": [1, 2, 4, 5, 6, 7, 9, 10, 11, 12], "care": [10, 11], "carefulli": 7, "case": 11, "cd": [5, 6], "cell": [3, 9], "center": [2, 3, 4, 9, 10, 12], "center_typ": [3, 4, 10], "chain": 4, "chang": [1, 9], "characterist": [0, 2, 9, 11, 12], "check": [3, 11], "chi": [2, 9, 12], "chitwood": 10, "choos": [9, 12], "chosen": 12, "circl": [2, 4, 9, 12], "circle_dir": 9, "circledir": 9, "cite": 5, "class": [1, 2, 3, 4, 10, 11, 12], "classifi": 10, "clean": 1, "clf": 9, "clone": [1, 5, 6], "close": 4, "cm": 9, "cmap": 9, "cmap_binari": 9, "cmap_viridi": 9, "co": [9, 12], "coars": 4, "code": [5, 9, 10, 12], "col": 9, "col_df": 10, "collabor": 5, "color": [4, 9, 10, 11, 12], "color_dimens": 9, "color_nodes_theta": [3, 4, 11, 12], "colorbar": 9, "colormap": 9, "com": [5, 6], "command": [1, 6, 11, 12], "commit": 1, "comparison": 10, "complex": [2, 5, 8, 9, 13], "complexifi": 9, "complic": 11, "compon": 10, "comput": [2, 4, 5, 10, 11, 13], "compute_sect": [2, 12], "conf": 1, "connect": 4, "consid": [2, 4], "construct": [2, 13], "contact": 1, "content": 1, "contribut": 5, "contributor": 1, "control": 11, "convers": 9, "convert": 12, "coord_matrix": 4, "coordiant": 4, "coordin": [3, 4, 10, 12], "copi": 9, "correct": 1, "correctli": 1, "correspond": 12, "cos\u03b8": 9, "could": 3, "count": [2, 4], "cours": 11, "crawford2019": 9, "creat": [1, 3, 4, 10], "create_example_cw": [3, 8, 11], "create_example_graph": [4, 8, 12], "csv": 10, "cubic": 9, "cubicalcomplex": 9, "cumsum": 9, "current": [4, 10], "curv": [2, 12], "cutout": 10, "cw": [2, 8, 13], "cycl": [3, 4], "d": [10, 11, 12], "da": 12, "dan": 10, "data": 10, "data_dir": 10, "date": 1, "deal": [1, 9], "decid": 11, "decomposit": 10, "def": [1, 9, 10], "default": [2, 12], "defin": [4, 12], "delet": 1, "demet": 9, "deprec": 9, "deprecationwarn": 9, "descript": 1, "desir": 9, "detail": [5, 12], "develop": 1, "dict": [3, 4], "dictionari": [1, 3, 4, 12], "differ": [3, 9], "dimens": [9, 10], "dimension": [5, 10], "dir": 9, "direct": [1, 2, 3, 4, 10, 11, 12], "directli": [1, 5, 6, 12], "directori": [1, 10], "discuss": 1, "disk": 4, "dissimilar": 10, "distanc": 10, "distance_matrix": 10, "do": [1, 3, 4, 5, 9], "doc": 1, "doc_sourc": [1, 10], "docstr": 1, "doe": [3, 4, 11, 12], "doesn": 2, "don": 12, "done": [4, 12], "dot": 12, "doubt": 1, "download": 10, "dpi": 9, "draft": 1, "draw": [2, 3], "draw_count": 2, "drawn": 4, "dt": [9, 12], "dtdown": 9, "dtup": 9, "e": [1, 3, 4, 12], "each": [2, 4, 9, 10, 12], "earlier": 12, "eas": 10, "easier": [1, 11], "easili": [1, 12], "ecc": [2, 11], "ect": [0, 3, 4, 8, 13], "ect_arr": 10, "ect_graph": 2, "ect_matrix": 2, "ect_preprocess": 9, "edg": [1, 2, 3, 4, 9, 11], "edge_count": 2, "edge_g": 11, "either": [2, 4], "element": 9, "elizabeth": [0, 5, 9], "els": 9, "email": 5, "embed": [5, 8, 10, 13], "embed_cw": 3, "embed_graph": 4, "embedded_graph": 3, "embeddedcw": [2, 3, 8, 11], "embeddedgraph": [2, 3, 4, 8, 10, 11, 12], "empti": [3, 4, 11], "end": [9, 12], "endpoint": 9, "ensur": [1, 9], "entri": 2, "enumer": 9, "environ": 1, "ep": 9, "equal": [3, 4, 10], "equat": 9, "equival": 12, "error": 9, "essenti": 1, "etc": [4, 5], "euler": [0, 2, 9, 11, 12], "eventu": [4, 5], "everyth": 1, "exampl": [1, 3, 4, 10, 11, 12], "except": 9, "exist": [1, 4], "extract": [9, 10], "f": [9, 10, 11, 12], "f_": [9, 12], "f_finit": 9, "face": [2, 3, 11], "face_count": 2, "face_g": 11, "facecolor": 9, "fact": 3, "fals": [1, 2, 3, 4, 9, 10, 12], "famili": 9, "fcolor": 9, "featur": 1, "fern": 9, "fern_": 9, "fern_3pi_over_4_allthresh": 9, "fern_3pi_over_4_ecc": 9, "fern_3pi_over_4_thresh": 9, "fern_ect": 9, "fern_ect_cylind": 9, "few": 1, "fig": 9, "fight": 9, "figsiz": [9, 10], "figur": [3, 10], "file": [1, 5, 10], "file_nam": 10, "filenam": 10, "fill": [1, 3, 10], "find": [1, 4], "first": [1, 4], "fit": [4, 10], "fit_transform": 10, "fix": [1, 9, 12], "flattened_ect": 10, "float": [1, 2, 3, 4], "floor": 9, "fly": 12, "fmask": 9, "fmaskabov": 9, "fmaskbelow": 9, "folder": 1, "follow": [0, 1, 2, 6, 9, 11, 12], "font": 9, "fontsiz": 9, "fork": [1, 9], "format": 9, "found": [5, 7], "fourth": 9, "frac": [9, 12], "fraction": 9, "framework": 1, "from": [1, 2, 3, 4, 6, 9, 10, 11, 12], "full": [3, 7, 12], "func": 12, "func_valu": [1, 3, 4], "function": [1, 2, 3, 4, 9, 11, 12], "further": 11, "futur": [1, 9], "g": [1, 2, 3, 4, 9, 10, 11, 13], "g_": [1, 3, 4, 11, 12], "g_omega": [4, 11, 12], "g_omega_edg": [4, 11], "g_omega_fac": [3, 11], "gca": [9, 10], "gcf": 9, "gener": [1, 3, 4, 7, 11], "get": [2, 9, 10, 12], "get_bounding_box": 4, "get_bounding_radiu": [4, 11, 12], "get_cent": 4, "get_centered_coordin": 4, "get_coordin": 4, "get_ect": [2, 12], "get_pca_coordin": 4, "get_radius_and_thresh": 2, "get_scaled_coordin": 4, "get_sect": 2, "get_size_inch": 9, "git": [5, 6], "github": [1, 5, 6], "give": [10, 12], "given": [1, 2, 3, 4, 11, 12], "gnu": 7, "go": 10, "goal": 5, "gplv3": 5, "grai": 9, "graph": [1, 3, 5, 8, 10, 11, 13], "grei": 9, "grid": 9, "group": 5, "gt": [9, 10, 11, 12], "guid": 1, "h": [9, 11], "ha": 4, "habit": 1, "hashabl": 4, "hasn": 12, "have": [1, 2, 5, 6, 9, 10, 11, 12], "header": 10, "height": 9, "height_fig": 9, "help": [1, 4], "helvetica": 9, "henri": 10, "her": 5, "here": [5, 10, 11, 12], "hexcod": 10, "higher": [5, 6], "how": 11, "howev": [3, 11, 12], "html": 1, "http": 6, "i": [1, 2, 3, 4, 5, 9, 10, 11, 12], "ident": 4, "ii": 2, "im": 9, "imag": 10, "immedi": 11, "implicitli": 9, "import": [9, 10, 11, 12], "imread": 9, "imshow": 9, "includ": [1, 4, 5, 11], "increas": [1, 3, 4], "increment": 4, "indent": 1, "index": [1, 9], "inform": 1, "infti": 12, "initi": [3, 4, 10, 11, 12], "input": [2, 11, 12], "instal": [1, 9], "instanc": 4, "instead": 12, "int": [2, 4, 9], "int_": 12, "integ": [4, 12], "interest": 11, "interior": [3, 11], "intern": [2, 11, 12], "interv": 11, "intiat": 10, "intro": 12, "invit": [0, 5], "io": 5, "ipykernel_57600": 9, "ipympl": 9, "isfil": 10, "issu": 9, "ith": 2, "its": [3, 11], "j": [2, 9], "join": 10, "jth": 2, "jupyt": [5, 12], "just": [4, 9, 10, 11], "k": [9, 11], "k_": [2, 9], "k_a": 9, "kdc": 11, "keyword": 3, "know": 12, "kwarg": [3, 4], "l_2": 10, "label": [4, 9], "labelrot": 9, "langl": [4, 12], "leaf": [9, 10], "leaf_fil": 9, "leaf_img": 9, "leafbw": 9, "leav": 10, "left": 12, "legit": 3, "len": [9, 10], "let": [10, 11], "letter": 4, "level": 1, "like": [1, 3, 4], "linalg": 10, "line": [3, 9], "line2d": 9, "linestyl": 9, "linewidth": 9, "linspac": 9, "list": [1, 3, 4, 10, 11, 12], "listdir": 10, "liz": [1, 5, 10], "ll": 10, "load": 10, "loader": 10, "loadtxt": 10, "locat": 1, "look": [1, 3, 11], "lost": 1, "lot": 1, "lower": [4, 9], "lower_edg": 4, "lt": [9, 10, 11, 12], "lw": [9, 10], "m": [2, 9, 10, 12], "m_sect": 12, "maa": 9, "made": 9, "magma": 9, "main": 1, "maintain": 4, "make": [1, 2, 3, 4, 6, 10, 11, 12], "makefernp": 9, "makefernpicthreshold": 9, "mani": [1, 11], "manifold": 10, "manual": 2, "map": [4, 12], "mapsto": 12, "markdown": 1, "match": 1, "math": 1, "mathbb": 12, "matiss": 13, "matisse_ect": 10, "matplotlib": [3, 5, 9, 10, 12], "matrix": [2, 4, 9, 10, 11, 12], "matshow": [9, 10], "max": [1, 3, 4, 9, 10], "max_": 11, "maxcol": 9, "maximum": 4, "maxrow": 9, "maxx": 9, "mcenter": 9, "mcguir": 5, "md": 10, "mds_score": 10, "mean": [3, 4, 9, 10], "mean_cent": 11, "meng22": 9, "merg": 1, "mermaid": 13, "meshgrid": 9, "method": [2, 4, 12], "mid": [1, 3, 4], "midi": 9, "midx": 9, "might": [3, 4], "min": [4, 9, 10], "min_max": [3, 4, 10], "minimum": [4, 11], "minn": 9, "mint": 9, "misc": 9, "mix": 1, "mod": 9, "modul": 5, "moment": [1, 9], "monthli": 9, "more": [5, 11, 12], "mpl_toolkit": 9, "mplot3d": 9, "much": 1, "mult": 10, "multi": 10, "multipl": 4, "multipli": 9, "munch": [0, 1, 5, 9, 10], "munchlab": [5, 6], "must": [1, 2, 9, 12], "my_funct": 1, "myect": [10, 11, 12], "n": [4, 9], "n_compon": 10, "name": [4, 10], "nan": 9, "ncubic": 9, "ndarrai": [2, 4], "ndim": 9, "necessari": [2, 12], "need": [1, 11], "networkx": [4, 5, 12], "new": [1, 3, 4], "next": 4, "next_vert_nam": 4, "node": [4, 11, 12], "node_s": 10, "none": [2, 3, 4, 10, 12], "norm": [9, 10], "normal": [4, 9, 10], "normalized_stress": 10, "note": [1, 2, 3, 11, 12], "notebook": [5, 9, 10, 12], "now": [5, 9, 10, 12], "np": [2, 4, 9, 10, 11, 12], "num": 9, "num_dir": [2, 10, 11, 12], "num_thresh": [2, 10, 11, 12], "num_vert": 4, "numba": 5, "number": [1, 2, 4, 9, 10, 12], "numcircledir": 9, "numpi": [2, 4, 5, 9, 10, 11, 12], "numthresh": 9, "nx": [2, 4, 12], "o": 10, "object": [2, 3, 4, 12], "often": 12, "omega": [1, 3, 4, 9, 11, 12], "omega_i": 2, "omega_j": 2, "omegai": 9, "omegavec": 9, "onc": [1, 11, 12], "one": [4, 10, 11], "ones_lik": 9, "onlycolorbar": 9, "open": 1, "oper": [1, 9], "option": [2, 4], "orang": 9, "order": [1, 2, 3, 4], "ordin": 9, "origin": [2, 3, 4, 9, 10, 12], "other": [1, 11], "otherwis": 2, "our": 12, "out": [1, 9, 10], "outecc": 9, "outlin": [3, 10], "output": 12, "overallmax": 9, "overallmin": 9, "overlin": 12, "overwrit": [4, 12], "overwritten": 1, "packag": [5, 6, 10, 12], "pad": 9, "panda": 10, "paper": [9, 12], "parakeet": 13, "paramet": [1, 2, 3, 4], "pass": [1, 3, 11, 12], "path": 10, "pca": [4, 10], "pcolormesh": 9, "pd": 10, "pdf": 9, "peopl": 5, "pep": 1, "per": 9, "perf_count": 9, "perform": 9, "pi": [1, 2, 3, 4, 9, 11, 12], "pi_over_4": 9, "picki": 1, "pictur": 12, "pip": [1, 5, 6, 9], "pixel": 9, "plan": 1, "plane": 3, "pleas": [0, 1, 7], "plot": [2, 3, 4, 9, 10, 11, 12], "plot_fac": 3, "plot_surfac": 9, "plot_typ": 2, "plotecc": [2, 11, 12], "plotect": [2, 10, 11, 12], "plotsect": [2, 11], "plt": [9, 10, 12], "png": 9, "po": [4, 9], "point": [4, 11, 12], "posit": [2, 4, 9, 10], "possibl": 1, "post": 1, "postiv": 2, "precomput": 10, "prefix": 1, "preprocess": 10, "prerequisit": 1, "preserve_cent": [4, 12], "print": [9, 10, 11, 12], "product": 12, "project": [1, 5, 9, 10], "protect": 1, "provid": 1, "public": [0, 7], "purpos": 10, "push": 1, "py": [1, 9], "pyplot": [9, 10, 12], "pyproject": 1, "pytest": 1, "python": [1, 6], "quickli": 1, "r": [2, 9, 11, 12], "radian": 2, "radiu": [2, 4, 9, 10, 11, 12], "rais": 4, "random": 10, "random_st": 10, "rang": [2, 9, 10], "rangl": [4, 12], "rcparam": 9, "re": [4, 10], "reach": 4, "read": [7, 10], "read_csv": 10, "readabl": 1, "readi": 1, "red": 9, "redraw": 9, "region": [3, 11], "rel": 4, "relev": 1, "remov": 9, "repo": 5, "repositori": [1, 6], "repres": [2, 3, 4], "reproduc": 10, "rescal": [4, 12], "rescale_to_unit_disk": [4, 12], "research": 5, "reset": 4, "reset_po": 4, "reshap": 10, "restructuredtext": 1, "result": 2, "retriev": 10, "return": [1, 2, 3, 4, 9, 10, 11, 12], "return_count": 2, "return_g": [1, 3, 4], "review": 1, "right": [5, 9, 12], "rotat": 12, "round": 11, "row": [4, 9], "rst": 1, "run": [1, 6, 12], "same": [11, 12], "sarah": 5, "save": 12, "savefig": 9, "scalar": 9, "scalarmapp": 9, "scale": [4, 10], "scale_radiu": [4, 10], "scale_v": 10, "scatter": 9, "scipi": 10, "score": 10, "second": [1, 4, 9], "sect": [2, 11, 13], "sect_matrix": [2, 12], "see": [5, 11, 12], "select": 10, "self": [1, 2, 4], "sequenc": 4, "serif": 9, "set": [1, 2, 4, 9, 10, 11, 12], "set_arrai": 9, "set_aspect": 10, "set_axis_off": 9, "set_bad": 9, "set_bounding_radiu": [2, 10, 11, 12], "set_centered_coordin": 4, "set_coordin": 4, "set_edgecolor": 9, "set_figheight": 9, "set_figwidth": 9, "set_mean_centered_coordin": [11, 12], "set_pca_coordin": [4, 10], "set_raster": 9, "set_scaled_coordin": 4, "set_size_inch": 9, "set_ticks_posit": 9, "set_titl": 9, "set_xtick": 9, "set_xticklabel": 9, "set_ytick": 9, "set_yticklabel": 9, "shape": [3, 9, 10, 12], "sharei": 9, "shift": 12, "should": [1, 2, 3, 4], "show": 11, "shown": 12, "sigma": [3, 11], "similarli": 11, "simpl": [1, 3, 4], "simpli": 6, "simplici": 5, "sin": [9, 12], "sinc": [1, 4, 12], "singl": [9, 11], "sin\u03b8": 9, "size": [2, 9, 12], "skeleton": 3, "sklearn": 10, "smooth": [2, 12], "so": [1, 3, 11, 12], "softwar": 7, "some": [1, 12], "someth": [9, 11], "sort": [1, 3, 4, 10], "sort_edg": [1, 4], "sort_fac": 3, "sort_vertic": 4, "sourc": [2, 3, 4, 5, 6], "spatial": 10, "specif": [2, 4, 12], "specifi": 12, "sphinx": 1, "squar": 9, "standard": [1, 10], "state": 10, "step": 9, "still": 3, "stop": [9, 11], "store": [2, 10, 12], "str": [2, 4, 9], "straight": 3, "strang": 3, "stuff": 5, "subject": 1, "subplot": 9, "sum": 9, "summari": 9, "support": 1, "sure": [1, 3, 6, 11], "surf": 9, "system": 1, "t": [2, 9, 12], "tab20b": 9, "take": [1, 11, 12], "taken": 10, "teaspoon": 9, "technic": 12, "templat": 1, "termin": 6, "test": [4, 9], "test_": 1, "test_my_funct": 1, "text": [7, 9, 10, 12], "texttt": 4, "tf": 9, "than": [1, 12], "thei": [1, 4], "them": 4, "theshold": 9, "theta": [1, 2, 3, 4, 9, 11, 12], "thetastr": 9, "thetastrsfil": 9, "thi": [1, 2, 4, 5, 9, 10, 11, 12], "thing": 1, "thorough": 12, "thresh": [2, 9, 12], "thresh_size_fig": 9, "threshold": [2, 10, 11, 12], "through": [11, 12], "tic": 9, "tick_param": 9, "tif": 9, "tifffil": 9, "tight": 9, "time": [9, 12], "titl": [9, 10], "tmp": 9, "to_rgba": 9, "toc": 9, "todo": [1, 3, 4, 12], "toml": 1, "too": 1, "tool": 5, "top": 1, "tracker": 1, "trans_sh": 10, "transform": [0, 2, 9, 11, 12], "translat": 10, "transpar": 9, "treatment": 12, "triangl": 11, "true": [1, 2, 3, 4, 9, 10, 11, 12], "tupl": [2, 4], "two": [1, 10], "txt": 10, "type": [2, 3, 4], "u": 4, "under": 5, "undirect": 12, "unit": 12, "unittest": 1, "unlik": 12, "up": [1, 3, 4, 12], "updat": [1, 9], "us": [0, 1, 2, 4, 5, 7, 9, 10, 11, 12], "usetex": 9, "v": [1, 3, 4, 11, 12], "v_list": 4, "valid": 3, "valu": [1, 2, 3, 4, 9, 10, 11, 12], "valueerror": 4, "vari": 2, "ve": 10, "vector": [4, 12], "version": [1, 5, 6, 7], "vert_g": 11, "vertex": [2, 3, 4, 11, 12], "vertex_count": 2, "vertex_nam": [1, 3, 4], "vertic": [2, 3, 4, 9, 11, 12], "via": [4, 10], "view": 1, "viridi": 9, "visual": [10, 12], "vmax": 9, "vmin": 9, "voxel": 5, "wa": [5, 9, 10, 11, 12], "wai": 1, "walk": [11, 12], "want": [3, 4, 12], "warn": 4, "we": [3, 4, 10, 11, 12], "websit": 5, "well": [1, 4], "what": 12, "when": [1, 11, 12], "where": [2, 3, 9, 11, 12], "whether": [1, 2, 3, 4], "which": [1, 3, 4, 12], "white": 9, "who": 5, "whose": 4, "why": 9, "widget": 9, "with_label": [4, 10], "within": 4, "without": 9, "work": [1, 3, 4], "would": 1, "write": [1, 12], "written": [1, 5, 10], "x": [2, 4, 9, 11, 12], "xaxi": 9, "xlabel": 9, "y": [2, 4, 9, 11], "yet": [3, 11, 12], "ylabel": 9, "you": [1, 4, 5, 6, 9, 10, 11, 12], "your": [1, 9], "z": [4, 9, 12], "zero": [4, 10], "zip": 10, "zz": 4, "\u03b8": 9}, "titles": ["6. Citing", "4. Contributing to the ect Package", "2.3. ECT on Graphs", "2.2. Embedded CW complex", "2.1. Embedded graphs", "ect: Euler Characteristic Transform in Python", "1. Installation", "5. GPL-3.0 License", "2. Table of Contents", "Figure generation for Invitation to the ECT", "3.3. ECT on Matisse\u2019s \u201cThe Parakeet and the Mermaid\u201d", "3.2. Tutorial: ECT for CW complexes", "3.1. Tutorial : ECT for embedded graphs", "3. Tutorials"], "titleterms": {"": [9, 10], "0": 7, "3": 7, "The": 10, "acknowledg": 10, "author": 5, "characterist": 5, "cite": 0, "code": 1, "complex": [3, 11], "comput": 12, "conclus": 1, "construct": 12, "contact": 5, "content": [5, 8, 13], "contribut": 1, "cw": [3, 11], "cylind": 9, "depend": 5, "descript": 5, "direct": 9, "document": [1, 5], "draw": 9, "ecc": 9, "ect": [1, 2, 5, 6, 9, 10, 11, 12], "embed": [3, 4, 12], "erik": 9, "euler": 5, "figur": 9, "format": 1, "g": 12, "gener": 9, "get": [1, 5], "gpl": 7, "graph": [2, 4, 12], "guidelin": 1, "inform": 5, "instal": [5, 6], "invit": 9, "issu": 1, "let": 9, "licens": [5, 7], "make": 9, "matiss": 10, "mermaid": 10, "one": 9, "packag": 1, "parakeet": 10, "pictur": 9, "prerequisit": 6, "pull": 1, "python": 5, "request": 1, "sect": [9, 12], "start": [1, 5], "stuff": 9, "style": 1, "tabl": [5, 8], "test": 1, "threshold": 9, "track": 1, "transform": 5, "try": 9, "tutori": [5, 11, 12, 13], "uninstal": 6, "version": 9}})
\ No newline at end of file
diff --git a/docs/tutorials.html b/docs/tutorials.html
index bf618da..ad86aeb 100644
--- a/docs/tutorials.html
+++ b/docs/tutorials.html
@@ -1,25 +1,25 @@
+
+
-
+
3. Tutorials — ect 0.1.5 documentation
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/ect/ect/ect_graph.py b/ect/ect/ect_graph.py
index 52e2ae5..bde6318 100644
--- a/ect/ect/ect_graph.py
+++ b/ect/ect/ect_graph.py
@@ -3,6 +3,7 @@
from numba import jit
import matplotlib.pyplot as plt
from ect.embed_cw import EmbeddedCW
+import time
class ECT:
@@ -116,69 +117,42 @@ def get_SECT(self):
def calculateECC(self, G, theta, bound_radius=None, return_counts=False):
"""
- Function to compute the Euler Characteristic of an `EmbeddedGraph`, that is, a graph with coordinates for each vertex.
-
+ Function to compute the Euler Characteristic Curve (ECC) of an `EmbeddedGraph`.
+
Parameters:
- G (nx.Graph):
- The graph to compute the Euler Characteristic for.
- theta (float):
- The angle (in radians) to use for the direction function when computing the Euler Characteristic Curve.
- bound_radius (float):
- If None, uses the following in order: (i) the bounding radius stored in the class; or if not available (ii) the bounding radius of the given graph. Otherwise, should be a postive float :math:`R` where the ECC will be computed at thresholds in :math:`[-R,R]`. Default is None.
- return_counts (bool):
- Whether to return the counts of vertices, edges, and faces below the threshold. Default is False.
-
+ G (nx.Graph): The graph to compute the ECC for.
+ theta (float): The angle (in radians) for the direction function.
+ bound_radius (float, optional): Radius for threshold range. Default is None.
+ return_counts (bool, optional): Whether to return vertex, edge, and face counts. Default is False.
+
+ Returns:
+ numpy.ndarray: ECC values at each threshold.
+ (Optional) Tuple of counts: (ecc, vertex_count, edge_count, face_count)
"""
-
r, r_threshes = self.get_radius_and_thresh(G, bound_radius)
- # --
- def num_below_threshold(func_list, thresh):
- """
- Returns the number of entries in func_list that are below the threshold thresh.
- Warning: func_list must be sorted in ascending order.
-
- Parameters
- func_list (list): sorted list of function values
- thresh (float): threshold value
-
- Returns
- int
- """
- # If the list is empty, return 0
- if len(func_list) == 0:
- return 0
- else:
- func_max = func_list[-1]
- if thresh < func_max:
- return np.argmin(func_list < thresh)
- else:
- return len(func_list)
- # --
+ r_threshes = np.array(r_threshes)
+ # Sort vertices and edges based on projection
v_list, g = G.sort_vertices(theta, return_g=True)
- g_list = [g[v] for v in v_list]
-
- vertex_count = np.array([num_below_threshold(
- g_list, thresh) for thresh in r_threshes])
- # print(vertex_count)
+ g_list = np.array([g[v] for v in v_list])
+ sorted_g_list = np.sort(g_list)
e_list, g_e = G.sort_edges(theta, return_g=True)
- g_e_list = [g_e[e] for e in e_list]
- edge_count = np.array([num_below_threshold(
- g_e_list, thresh) for thresh in r_threshes])
- # print(edge_count)
+ g_e_list = np.array([g_e[e] for e in e_list])
+ sorted_g_e_list = np.sort(g_e_list)
+
+ vertex_count = np.searchsorted(sorted_g_list, r_threshes, side='left')
+ edge_count = np.searchsorted(sorted_g_e_list, r_threshes, side='left')
- if type(G) == EmbeddedCW:
+ if isinstance(G, EmbeddedCW):
f_list, g_f = G.sort_faces(theta, return_g=True)
- g_f_list = [g_f[f] for f in f_list]
- face_count = np.array([num_below_threshold(
- g_f_list, thresh) for thresh in r_threshes])
- # print(face_count)
+ g_f_list = np.array([g_f[f] for f in f_list])
+ sorted_g_f_list = np.sort(g_f_list)
+ face_count = np.searchsorted(sorted_g_f_list, r_threshes, side='left')
else:
- face_count = np.zeros_like(vertex_count)
+ face_count = np.zeros_like(r_threshes, dtype=np.int32)
- # print(vertex_count - edge_count)
ecc = vertex_count - edge_count + face_count
if return_counts:
diff --git a/pyproject.toml b/pyproject.toml
index 106cc77..79ed743 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "ect"
-version = "0.1.7"
+version = "0.1.8"
authors = [
{ name="Liz Munch", email="muncheli@msu.edu" },
]