From 4120133b5132c3106009d775fd63acdafcc7afb8 Mon Sep 17 00:00:00 2001
From: lkugler <lukas.kugler@gmail.com>
Date: Fri, 17 Feb 2023 17:26:01 +0100
Subject: [PATCH] docs

---
 docs/build/doctrees/api.doctree               | Bin 0 -> 3116 bytes
 docs/build/doctrees/environment.pickle        | Bin 0 -> 66858 bytes
 docs/build/doctrees/example.doctree           | Bin 0 -> 31437 bytes
 docs/build/doctrees/index.doctree             | Bin 0 -> 7796 bytes
 docs/build/doctrees/index2.doctree            | Bin 0 -> 4937 bytes
 docs/build/html/.buildinfo                    |   4 +
 docs/build/html/_sources/api.rst.txt          |   5 +
 docs/build/html/_sources/example.rst.txt      |  99 ++
 docs/build/html/_sources/index.rst.txt        |  29 +
 docs/build/html/_sources/index2.rst.txt       |  20 +
 docs/build/html/_static/alabaster.css         | 703 ++++++++++++++
 docs/build/html/_static/basic.css             | 903 ++++++++++++++++++
 docs/build/html/_static/custom.css            |   1 +
 docs/build/html/_static/doctools.js           | 156 +++
 .../html/_static/documentation_options.js     |  14 +
 docs/build/html/_static/file.png              | Bin 0 -> 286 bytes
 docs/build/html/_static/language_data.js      | 199 ++++
 docs/build/html/_static/minus.png             | Bin 0 -> 90 bytes
 docs/build/html/_static/plus.png              | Bin 0 -> 90 bytes
 docs/build/html/_static/pygments.css          |  83 ++
 docs/build/html/_static/searchtools.js        | 566 +++++++++++
 docs/build/html/_static/sphinx_highlight.js   | 144 +++
 docs/build/html/api.html                      |  97 ++
 docs/build/html/example.html                  | 192 ++++
 docs/build/html/genindex.html                 |  99 ++
 docs/build/html/index.html                    | 120 +++
 docs/build/html/index2.html                   | 110 +++
 docs/build/html/objects.inv                   | Bin 0 -> 304 bytes
 docs/build/html/search.html                   | 118 +++
 docs/build/html/searchindex.js                |   1 +
 30 files changed, 3663 insertions(+)
 create mode 100644 docs/build/doctrees/api.doctree
 create mode 100644 docs/build/doctrees/environment.pickle
 create mode 100644 docs/build/doctrees/example.doctree
 create mode 100644 docs/build/doctrees/index.doctree
 create mode 100644 docs/build/doctrees/index2.doctree
 create mode 100644 docs/build/html/.buildinfo
 create mode 100644 docs/build/html/_sources/api.rst.txt
 create mode 100644 docs/build/html/_sources/example.rst.txt
 create mode 100644 docs/build/html/_sources/index.rst.txt
 create mode 100644 docs/build/html/_sources/index2.rst.txt
 create mode 100644 docs/build/html/_static/alabaster.css
 create mode 100644 docs/build/html/_static/basic.css
 create mode 100644 docs/build/html/_static/custom.css
 create mode 100644 docs/build/html/_static/doctools.js
 create mode 100644 docs/build/html/_static/documentation_options.js
 create mode 100644 docs/build/html/_static/file.png
 create mode 100644 docs/build/html/_static/language_data.js
 create mode 100644 docs/build/html/_static/minus.png
 create mode 100644 docs/build/html/_static/plus.png
 create mode 100644 docs/build/html/_static/pygments.css
 create mode 100644 docs/build/html/_static/searchtools.js
 create mode 100644 docs/build/html/_static/sphinx_highlight.js
 create mode 100644 docs/build/html/api.html
 create mode 100644 docs/build/html/example.html
 create mode 100644 docs/build/html/genindex.html
 create mode 100644 docs/build/html/index.html
 create mode 100644 docs/build/html/index2.html
 create mode 100644 docs/build/html/objects.inv
 create mode 100644 docs/build/html/search.html
 create mode 100644 docs/build/html/searchindex.js

diff --git a/docs/build/doctrees/api.doctree b/docs/build/doctrees/api.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..92bfea9e295af836b3a193825a335649d80f28c0
GIT binary patch
literal 3116
zcmZo*ovO&g00uq$#RVCec@=tzDJgmRDXGO%dN@+@lS^|`^Gc>no}$?}rFM!&4`)$g
zd2xPeQF7{(9)>AB9LX7(IVnY{c~fGi^l&AXloVwqm6oIygVi!;rWAw3*^_e;i;Gji
zY}UNQTnLLJrL+LSNlHx4E=o-Ut6_s#V4$CsT9Q_*pOK%Ns-Kfxnx2zdr0?Pw6rvj*
z<ffmJpIodDQL3L<kf~QxTr#D!hrJ{*9c1j348|V5<kF&|)Vz{-h^i@mJv=axoXot`
zDSka1#i=DFnR)5OQ+fnJo-N7DDb`CX%FioF%}bfm!xom9Q<_?g@IGrvW=Rf6BWHSQ
zUTRTdNq*53zaGw%#FEtFlEmDCDSkcN5X<6oGV`*h`1No>xur!pQ~Y{(OY)QBL4F0v
z7EkG6P0cGQs+`gzl$M`gl9ykSiX`dH*uz_#np~1snj2q{mS2=R#hbB*uehWrvmib>
zKNl1)#Z&xxq#+`yIjLZg`0~t>jCfdx`}Ocbq!9u<MX3e(MJ4e$sb#4-Q@ojaxH1xR
z;9S-o!PJV(lKA41#FEltm?G95)|Aww()1~QJ$&VfMR}Qd>G8!SMX8CoAm5i1B_^kW
zJT;}Ghc7d)ptK}DH7_|oB{MI5N)KmgNt&*OZgFP%lpYyW$@tWwqWq%xjKsW@oYbNz
zJ!~MSCYMa<;m<EEK{bUHY|4}#Su`0mBQi{T_#lQN901cQgDQchvqu2rf#RIR;*6ry
zf}BK9`sU3^%u6p#OiztZ&QD35(!-RRH>F3oC^b31C?!56wIDSwB{eTOGZhpIY{~g~
zX_=q^;>=8mFDOb)%dD7^!Pdi<SXz=Fj}Yo%%1oKk!<$l?TM!RVdwxB9V1dlMlGLKS
z#2k=;{9uuiqQtynP~0Pg3W`%pQ}W|0azW`yAhn_(zc@7>StmG&B$vdOWfo^b(kFj>
zN@j6lQVz%?P*<|U@<fJM4^MnbYH>+sUSdgRejX^1#zQ<4pO%>e$*W=@R(xh&acU7r
zO?+w|$h4Fx9X;GdiREyvH)D?=C}YLvq~@iUWW?uW=4O^m@fA?-;VVcjh%ZV_OD#&x
zO9lrR4@e{_u{bpzlrwrHGD=DcimmkZ3sMV;^$IFWGV=5E@{7{-r}T(|RDvB)T9gxC
zlA2qPlUR~ErH7*+wLn+Zz$9f#4_{GQGMe!q5rpw-Fym7aOA<lpH9NIPFEh0y4QxkB
zezJZ>Np6n*lpfBK#H9H0%#@OhDc&4CvL!{Cx$*G43HLyJaRDfWboK}oSLT%@R>Wsy
zrf1}2re~B)>0!yq2c>(S;@rfdlK8^Xd{A-N(IX7zL%8ud`N@gUpp{L|NGwWBE=etd
zWVZOsJa7=^CKhFv7EI~v;Y-O+2A4X}LZGvUHzhwgGcPS4D&Wo7BLpfZic6Ew)Me&^
z5^qj^A|xxafC`-{Jp!q@NvSFE#U+(Fsl^$osU=f7dqk6S@)NV;Q*#qDbK(<IQi@W+
z1$IY|Ajss*{Ji+$)SNU(nbz6EoSIiQ#jiA}hXYcUq=E`Tfy}&=%%arflK7IuqV&{~
zVo=d9SX`P^T#{K*3QjgDpaQ;jN{<kVD5$gsRTv=C(%>96P!>u7i?f3SL3K&(lpanH
zyQH!JT*YK?*G}o-MUEb@dfw#B5^!1uB?*WKC>O%iK^%rG0#O$`1r(jRN%=YO7zZmA
zDXv5jgsbL6F_9ByD_D~diuuJQiA5!#;#(BmET{}a4_9VNd~$v%s05hO!=0R;larbZ
z3bf)WJ?zd<@ySzar?gH9n$p8pkXTfl8lRh5T%4E=&Y~LNbW#egzo4}@UvXt|Nop=k
z6}%G5V9j95V2_=WF|CKQAh9Shy(qCD14*{0)h}NG5|x={sS4m4N+B)3NI?nYr{dDw
z+{B_vC56m9h1~p<(wtNUC3wvVc2-d_s4CWj6`sX<sd-9zTp>l3nR)4GW+WCXBq!$O
z=Vc}*<{()KietSgP&cxKq*j0$AUzXtIO|cv93+Q5YM6`Uv_}nd2s-Xj!(6!YFwMg2
z#MUX0RuNl4BB-4)C1YL>XFSM4P*pr7gSiLRl=15UWxiBUrb*1;tev8f!5up#gEw|c
z27m0748hnb8N#tsN;AYW=47nMm|2>HTTu@ywBly$VFBfXDLpKnes2DtatG9;@n(eE
znIQ%;aC*jy4CaiL8O#~0GQ=`gdoz|MWz2vy=3ogyBV#U1phq<{FFP;4JP#>0K(?U9
z8#Hbf_h{l!jS-A`Q=mbWu_EID#5H~ytNrkK6y$hNXzVRb%9z%}o0D0RT9lX*pOllI
zoQ<4XP4x5>kmBFUic3L3!Kx%bxuhsH)k*={PD@SU0*R+27L}A2rEx(L*Ww=XG(-H7
zu_EI_F}|4MtjNu=g47f}90f(G#i>PQso+>Xm$4#aFDODvlTvXe2Y5^~!(y7%H7LkG
zi0G(hElo=85rQ`%U<CoVeBy=+g9~r&%)I2B(v;Nrocwf9xy_XVYUO|n(J6kQ_$p1(
F0{}K^++zR$

literal 0
HcmV?d00001

diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..60b708c14077808f6c44cf17c15728c60fef268e
GIT binary patch
literal 66858
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

literal 0
HcmV?d00001

diff --git a/docs/build/doctrees/example.doctree b/docs/build/doctrees/example.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..a84b0000e86941501b70ee8db6eb9ea7293c11e2
GIT binary patch
literal 31437
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
DcQs~t

literal 0
HcmV?d00001

diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..ed3697af4211f710d1a4399075fa4cf3d35e5272
GIT binary patch
literal 7796
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
IE2T+#09XAmC;$Ke

literal 0
HcmV?d00001

diff --git a/docs/build/doctrees/index2.doctree b/docs/build/doctrees/index2.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..797f03dfd3d268169e139908104ec455be0e1e70
GIT binary patch
literal 4937
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
M6hBbQsWeFs0NvkXj{pDw

literal 0
HcmV?d00001

diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo
new file mode 100644
index 0000000..839d3a9
--- /dev/null
+++ b/docs/build/html/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 512dbb367b2d1501c30ac13c1b597739
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/build/html/_sources/api.rst.txt b/docs/build/html/_sources/api.rst.txt
new file mode 100644
index 0000000..b37b1e9
--- /dev/null
+++ b/docs/build/html/_sources/api.rst.txt
@@ -0,0 +1,5 @@
+.. autosummary::
+   :toctree: generated
+
+   dartwrf
+
diff --git a/docs/build/html/_sources/example.rst.txt b/docs/build/html/_sources/example.rst.txt
new file mode 100644
index 0000000..79d4afc
--- /dev/null
+++ b/docs/build/html/_sources/example.rst.txt
@@ -0,0 +1,99 @@
+
+
+## Workflow
+#### Configure your experiment
+Define simulation specific variables in [`config/cfg.py`](https://github.com/lkugler/DART-WRF/blob/master/config/cfg.py).
+Define paths for python, ncks, etc. in [`config/clusters.py`](https://github.com/lkugler/DART-WRF/blob/master/config/clusters.py).
+Dependencies are `numpy, pandas, scipy, xarray, netCDF4`. Install non-standard packages with `pip install docopt slurmpy --user`.
+Workflow is defined using meta-routines (functions) like `run_ENS` which are defined in `scheduler.py`.
+
+#### Prepare initial conditions (from input_sounding)
+1) Define starting time:
+`begin = dt.datetime(2008, 7, 30, 6)`
+2) WRF needs directories with certain files:
+`id = prepare_WRFrundir(begin)`
+3) Create 3D initial conditions from input_sounding etc.:
+`id = run_ideal(depends_on=id)`
+
+### Run free forecast
+Let's say you want to run a free forecast starting at 6z, which you want to use as prior for an assimilation at 9z. Then you need can use the above defined 3 steps to create initial conditions.
+Then you can run an ensemble forecast using:
+```
+id = run_ENS(begin=begin,  # start integration from here
+             end=end,      # integrate until here
+             input_is_restart=False,
+             output_restart_interval=(end-begin).total_seconds()/60,
+             depends_on=id)
+```
+where `begin` & `end` are `dt.datetime` objects.
+
+### Assimilation experiment
+#### Assimilate
+To assimilate observations at dt.datetime `time` use this command:
+
+`id = assimilate(time, prior_init_time, prior_valid_time, prior_path_exp, depends_on=id)`
+
+#### Update initial conditions from Data Assimilation
+In order to continue after assimilation you need the posterior = prior (1) + increments (2)
+
+1. Set prior with this function:
+
+`id = prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, depends_on=id)`
+
+where path is `str`, times are `dt.datetime`.
+
+2. To update the model state with assimilation increments, you need to update the WRF restart files by running
+
+`id = update_IC_from_DA(time, depends_on=id)`
+
+After this, the wrfrst files are updated with assimilation increments (filter_restart) and copied to the WRF's run directories so you can continue to run the ENS after assimilation using
+
+```
+id = run_ENS(begin=time,  # start integration from here
+             end=time + timedelta_integrate,  # integrate until here
+             restart_path=cluster.archivedir+prior_init_time.strftime('/%Y-%m-%d_%H:%M/'),
+             output_restart_interval=timedelta_btw_assim.total_seconds()/60,
+             depends_on=id)
+```
+where times are `dt.datetime`; `timedelta` variables are `dt.timedelta`.
+
+### Examples
+[`scheduler.py`](https://github.com/lkugler/DART-WRF/blob/master/scheduler.py)
+[`generate_free.py`](https://github.com/lkugler/DART-WRF/blob/master/generate_free.py)
+
+## Finally
+
+### SLURM submissions
+`scheduler.py` submits jobs into the SLURM queue with dependencies, so that SLURM starts the jobs itself as soon as resources are available. Most jobs need only one node, but model integration is done in a SLURM job array across e.g. 10 nodes:
+```
+$ squeue -u `whoami` --sort=i
+             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
+           1710274  mem_0384 prepwrfr  lkugler PD       0:00      1 (Priority)
+           1710275  mem_0384 IC-prior  lkugler PD       0:00      1 (Dependency)
+           1710276  mem_0384 Assim-42  lkugler PD       0:00      1 (Dependency)
+           1710277  mem_0384 IC-prior  lkugler PD       0:00      1 (Dependency)
+           1710278  mem_0384 IC-updat  lkugler PD       0:00      1 (Dependency)
+           1710279  mem_0384 preWRF2-  lkugler PD       0:00      1 (Dependency)
+    1710280_[1-10]  mem_0384 runWRF2-  lkugler PD       0:00      1 (Dependency)
+           1710281  mem_0384 pRTTOV-6  lkugler PD       0:00      1 (Dependency)
+           1710282  mem_0384 Assim-3a  lkugler PD       0:00      1 (Dependency)
+           1710283  mem_0384 IC-prior  lkugler PD       0:00      1 (Dependency)
+           1710284  mem_0384 IC-updat  lkugler PD       0:00      1 (Dependency)
+           1710285  mem_0384 preWRF2-  lkugler PD       0:00      1 (Dependency)
+    1710286_[1-10]  mem_0384 runWRF2-  lkugler PD       0:00      1 (Dependency)
+           1710287  mem_0384 pRTTOV-7  lkugler PD       0:00      1 (Dependency)
+```
+
+### Easily switch between clusters
+Define cluster specific variables in `config/clusters.py `:
+```python
+
+clusterA = ClusterConfig()
+clusterA.name = 'vsc'
+clusterA.userdir = '/home/pathA/myuser/'
+...
+clusterB = ClusterConfig()
+clusterB.name = 'jet'
+clusterB.userdir = '/home/pathB/myuser/'
+```
+
diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt
new file mode 100644
index 0000000..e043d50
--- /dev/null
+++ b/docs/build/html/_sources/index.rst.txt
@@ -0,0 +1,29 @@
+Welcome to the DART-WRF documentation!
+===================================
+
+DART-WRF is a Python package to run an Ensemble Data Assimilation system with the software packages DART and WRF.
+
+- Why should I use it?
+  - It's pythonic: see what it does at first glance, modular, flexible
+  - It handles dependencies using SLURM without '`sleep` loops in the bash script'. 
+Functions return a SLURM ID which can be used to trigger the start of another function (interface by [brentp/slurmpy](https://github.com/brentp/slurmpy)).
+
+- How does it work?
+  - There are two kinds of code/scripts: One that is run immediately and one that is run later on.
+  - The first one instructs the cluster (SLURM) to do the things you tell it - in the right order - using the right input. 
+  - The latter kind of code actually does the things. Its code is not executed right away, but when there are resources assigned to you by SLURM. 
+
+- Can I use it for real weather?
+  -  Yes, but you need to [convert your observations into DART format.](https://docs.dart.ucar.edu)
+
+
+
+Contents
+--------
+
+.. toctree::
+
+   usage
+   api
+   docs/source/example
+
diff --git a/docs/build/html/_sources/index2.rst.txt b/docs/build/html/_sources/index2.rst.txt
new file mode 100644
index 0000000..993e6a3
--- /dev/null
+++ b/docs/build/html/_sources/index2.rst.txt
@@ -0,0 +1,20 @@
+.. DART-WRF documentation master file, created by
+   sphinx-quickstart on Fri Feb 17 17:22:54 2023.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to DART-WRF's documentation!
+====================================
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Contents:
+
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/docs/build/html/_static/alabaster.css b/docs/build/html/_static/alabaster.css
new file mode 100644
index 0000000..517d0b2
--- /dev/null
+++ b/docs/build/html/_static/alabaster.css
@@ -0,0 +1,703 @@
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+    font-family: Georgia, serif;
+    font-size: 17px;
+    background-color: #fff;
+    color: #000;
+    margin: 0;
+    padding: 0;
+}
+
+
+div.document {
+    width: 940px;
+    margin: 30px auto 0 auto;
+}
+
+div.documentwrapper {
+    float: left;
+    width: 100%;
+}
+
+div.bodywrapper {
+    margin: 0 0 0 220px;
+}
+
+div.sphinxsidebar {
+    width: 220px;
+    font-size: 14px;
+    line-height: 1.5;
+}
+
+hr {
+    border: 1px solid #B1B4B6;
+}
+
+div.body {
+    background-color: #fff;
+    color: #3E4349;
+    padding: 0 30px 0 30px;
+}
+
+div.body > .section {
+    text-align: left;
+}
+
+div.footer {
+    width: 940px;
+    margin: 20px auto 30px auto;
+    font-size: 14px;
+    color: #888;
+    text-align: right;
+}
+
+div.footer a {
+    color: #888;
+}
+
+p.caption {
+    font-family: inherit;
+    font-size: inherit;
+}
+
+
+div.relations {
+    display: none;
+}
+
+
+div.sphinxsidebar a {
+    color: #444;
+    text-decoration: none;
+    border-bottom: 1px dotted #999;
+}
+
+div.sphinxsidebar a:hover {
+    border-bottom: 1px solid #999;
+}
+
+div.sphinxsidebarwrapper {
+    padding: 18px 10px;
+}
+
+div.sphinxsidebarwrapper p.logo {
+    padding: 0;
+    margin: -10px 0 0 0px;
+    text-align: center;
+}
+
+div.sphinxsidebarwrapper h1.logo {
+    margin-top: -10px;
+    text-align: center;
+    margin-bottom: 5px;
+    text-align: left;
+}
+
+div.sphinxsidebarwrapper h1.logo-name {
+    margin-top: 0px;
+}
+
+div.sphinxsidebarwrapper p.blurb {
+    margin-top: 0;
+    font-style: normal;
+}
+
+div.sphinxsidebar h3,
+div.sphinxsidebar h4 {
+    font-family: Georgia, serif;
+    color: #444;
+    font-size: 24px;
+    font-weight: normal;
+    margin: 0 0 5px 0;
+    padding: 0;
+}
+
+div.sphinxsidebar h4 {
+    font-size: 20px;
+}
+
+div.sphinxsidebar h3 a {
+    color: #444;
+}
+
+div.sphinxsidebar p.logo a,
+div.sphinxsidebar h3 a,
+div.sphinxsidebar p.logo a:hover,
+div.sphinxsidebar h3 a:hover {
+    border: none;
+}
+
+div.sphinxsidebar p {
+    color: #555;
+    margin: 10px 0;
+}
+
+div.sphinxsidebar ul {
+    margin: 10px 0;
+    padding: 0;
+    color: #000;
+}
+
+div.sphinxsidebar ul li.toctree-l1 > a {
+    font-size: 120%;
+}
+
+div.sphinxsidebar ul li.toctree-l2 > a {
+    font-size: 110%;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #CCC;
+    font-family: Georgia, serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar hr {
+    border: none;
+    height: 1px;
+    color: #AAA;
+    background: #AAA;
+
+    text-align: left;
+    margin-left: 0;
+    width: 50%;
+}
+
+div.sphinxsidebar .badge {
+    border-bottom: none;
+}
+
+div.sphinxsidebar .badge:hover {
+    border-bottom: none;
+}
+
+/* To address an issue with donation coming after search */
+div.sphinxsidebar h3.donation {
+    margin-top: 10px;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+a {
+    color: #004B6B;
+    text-decoration: underline;
+}
+
+a:hover {
+    color: #6D4100;
+    text-decoration: underline;
+}
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+    font-family: Georgia, serif;
+    font-weight: normal;
+    margin: 30px 0px 10px 0px;
+    padding: 0;
+}
+
+div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
+div.body h2 { font-size: 180%; }
+div.body h3 { font-size: 150%; }
+div.body h4 { font-size: 130%; }
+div.body h5 { font-size: 100%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+    color: #DDD;
+    padding: 0 4px;
+    text-decoration: none;
+}
+
+a.headerlink:hover {
+    color: #444;
+    background: #EAEAEA;
+}
+
+div.body p, div.body dd, div.body li {
+    line-height: 1.4em;
+}
+
+div.admonition {
+    margin: 20px 0px;
+    padding: 10px 30px;
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
+    background-color: #FBFBFB;
+    border-bottom: 1px solid #fafafa;
+}
+
+div.admonition p.admonition-title {
+    font-family: Georgia, serif;
+    font-weight: normal;
+    font-size: 24px;
+    margin: 0 0 10px 0;
+    padding: 0;
+    line-height: 1;
+}
+
+div.admonition p.last {
+    margin-bottom: 0;
+}
+
+div.highlight {
+    background-color: #fff;
+}
+
+dt:target, .highlight {
+    background: #FAF3E8;
+}
+
+div.warning {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+}
+
+div.danger {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+    -moz-box-shadow: 2px 2px 4px #D52C2C;
+    -webkit-box-shadow: 2px 2px 4px #D52C2C;
+    box-shadow: 2px 2px 4px #D52C2C;
+}
+
+div.error {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+    -moz-box-shadow: 2px 2px 4px #D52C2C;
+    -webkit-box-shadow: 2px 2px 4px #D52C2C;
+    box-shadow: 2px 2px 4px #D52C2C;
+}
+
+div.caution {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+}
+
+div.attention {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+}
+
+div.important {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.note {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.tip {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.hint {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.seealso {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.topic {
+    background-color: #EEE;
+}
+
+p.admonition-title {
+    display: inline;
+}
+
+p.admonition-title:after {
+    content: ":";
+}
+
+pre, tt, code {
+    font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+    font-size: 0.9em;
+}
+
+.hll {
+    background-color: #FFC;
+    margin: 0 -12px;
+    padding: 0 12px;
+    display: block;
+}
+
+img.screenshot {
+}
+
+tt.descname, tt.descclassname, code.descname, code.descclassname {
+    font-size: 0.95em;
+}
+
+tt.descname, code.descname {
+    padding-right: 0.08em;
+}
+
+img.screenshot {
+    -moz-box-shadow: 2px 2px 4px #EEE;
+    -webkit-box-shadow: 2px 2px 4px #EEE;
+    box-shadow: 2px 2px 4px #EEE;
+}
+
+table.docutils {
+    border: 1px solid #888;
+    -moz-box-shadow: 2px 2px 4px #EEE;
+    -webkit-box-shadow: 2px 2px 4px #EEE;
+    box-shadow: 2px 2px 4px #EEE;
+}
+
+table.docutils td, table.docutils th {
+    border: 1px solid #888;
+    padding: 0.25em 0.7em;
+}
+
+table.field-list, table.footnote {
+    border: none;
+    -moz-box-shadow: none;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+}
+
+table.footnote {
+    margin: 15px 0;
+    width: 100%;
+    border: 1px solid #EEE;
+    background: #FDFDFD;
+    font-size: 0.9em;
+}
+
+table.footnote + table.footnote {
+    margin-top: -15px;
+    border-top: none;
+}
+
+table.field-list th {
+    padding: 0 0.8em 0 0;
+}
+
+table.field-list td {
+    padding: 0;
+}
+
+table.field-list p {
+    margin-bottom: 0.8em;
+}
+
+/* Cloned from
+ * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
+ */
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+table.footnote td.label {
+    width: .1px;
+    padding: 0.3em 0 0.3em 0.5em;
+}
+
+table.footnote td {
+    padding: 0.3em 0.5em;
+}
+
+dl {
+    margin-left: 0;
+    margin-right: 0;
+    margin-top: 0;
+    padding: 0;
+}
+
+dl dd {
+    margin-left: 30px;
+}
+
+blockquote {
+    margin: 0 0 0 30px;
+    padding: 0;
+}
+
+ul, ol {
+    /* Matches the 30px from the narrow-screen "li > ul" selector below */
+    margin: 10px 0 10px 30px;
+    padding: 0;
+}
+
+pre {
+    background: #EEE;
+    padding: 7px 30px;
+    margin: 15px 0px;
+    line-height: 1.3em;
+}
+
+div.viewcode-block:target {
+    background: #ffd;
+}
+
+dl pre, blockquote pre, li pre {
+    margin-left: 0;
+    padding-left: 30px;
+}
+
+tt, code {
+    background-color: #ecf0f3;
+    color: #222;
+    /* padding: 1px 2px; */
+}
+
+tt.xref, code.xref, a tt {
+    background-color: #FBFBFB;
+    border-bottom: 1px solid #fff;
+}
+
+a.reference {
+    text-decoration: none;
+    border-bottom: 1px dotted #004B6B;
+}
+
+/* Don't put an underline on images */
+a.image-reference, a.image-reference:hover {
+    border-bottom: none;
+}
+
+a.reference:hover {
+    border-bottom: 1px solid #6D4100;
+}
+
+a.footnote-reference {
+    text-decoration: none;
+    font-size: 0.7em;
+    vertical-align: top;
+    border-bottom: 1px dotted #004B6B;
+}
+
+a.footnote-reference:hover {
+    border-bottom: 1px solid #6D4100;
+}
+
+a:hover tt, a:hover code {
+    background: #EEE;
+}
+
+
+@media screen and (max-width: 870px) {
+
+    div.sphinxsidebar {
+    	display: none;
+    }
+
+    div.document {
+       width: 100%;
+
+    }
+
+    div.documentwrapper {
+    	margin-left: 0;
+    	margin-top: 0;
+    	margin-right: 0;
+    	margin-bottom: 0;
+    }
+
+    div.bodywrapper {
+    	margin-top: 0;
+    	margin-right: 0;
+    	margin-bottom: 0;
+    	margin-left: 0;
+    }
+
+    ul {
+    	margin-left: 0;
+    }
+
+	li > ul {
+        /* Matches the 30px from the "ul, ol" selector above */
+		margin-left: 30px;
+	}
+
+    .document {
+    	width: auto;
+    }
+
+    .footer {
+    	width: auto;
+    }
+
+    .bodywrapper {
+    	margin: 0;
+    }
+
+    .footer {
+    	width: auto;
+    }
+
+    .github {
+        display: none;
+    }
+
+
+
+}
+
+
+
+@media screen and (max-width: 875px) {
+
+    body {
+        margin: 0;
+        padding: 20px 30px;
+    }
+
+    div.documentwrapper {
+        float: none;
+        background: #fff;
+    }
+
+    div.sphinxsidebar {
+        display: block;
+        float: none;
+        width: 102.5%;
+        margin: 50px -30px -20px -30px;
+        padding: 10px 20px;
+        background: #333;
+        color: #FFF;
+    }
+
+    div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
+    div.sphinxsidebar h3 a {
+        color: #fff;
+    }
+
+    div.sphinxsidebar a {
+        color: #AAA;
+    }
+
+    div.sphinxsidebar p.logo {
+        display: none;
+    }
+
+    div.document {
+        width: 100%;
+        margin: 0;
+    }
+
+    div.footer {
+        display: none;
+    }
+
+    div.bodywrapper {
+        margin: 0;
+    }
+
+    div.body {
+        min-height: 0;
+        padding: 0;
+    }
+
+    .rtd_doc_footer {
+        display: none;
+    }
+
+    .document {
+        width: auto;
+    }
+
+    .footer {
+        width: auto;
+    }
+
+    .footer {
+        width: auto;
+    }
+
+    .github {
+        display: none;
+    }
+}
+
+
+/* misc. */
+
+.revsys-inline {
+    display: none!important;
+}
+
+/* Make nested-list/multi-paragraph items look better in Releases changelog
+ * pages. Without this, docutils' magical list fuckery causes inconsistent
+ * formatting between different release sub-lists.
+ */
+div#changelog > div.section > ul > li > p:only-child {
+    margin-bottom: 0;
+}
+
+/* Hide fugly table cell borders in ..bibliography:: directive output */
+table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
+  border: none;
+  /* Below needed in some edge cases; if not applied, bottom shadows appear */
+  -moz-box-shadow: none;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+
+/* relbar */
+
+.related {
+    line-height: 30px;
+    width: 100%;
+    font-size: 0.9rem;
+}
+
+.related.top {
+    border-bottom: 1px solid #EEE;
+    margin-bottom: 20px;
+}
+
+.related.bottom {
+    border-top: 1px solid #EEE;
+}
+
+.related ul {
+    padding: 0;
+    margin: 0;
+    list-style: none;
+}
+
+.related li {
+    display: inline;
+}
+
+nav#rellinks {
+    float: right;
+}
+
+nav#rellinks li+li:before {
+    content: "|";
+}
+
+nav#breadcrumbs li+li:before {
+    content: "\00BB";
+}
+
+/* Hide certain items when printing */
+@media print {
+    div.related {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css
new file mode 100644
index 0000000..7577acb
--- /dev/null
+++ b/docs/build/html/_static/basic.css
@@ -0,0 +1,903 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+div.section::after {
+    display: block;
+    content: '';
+    clear: left;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+    overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    float: left;
+    width: 80%;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    float: left;
+    width: 20%;
+    border-left: none;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li p.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable ul {
+    margin-top: 0;
+    margin-bottom: 0;
+    list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+    padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+    padding: 2px;
+    border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+    min-width: 360px;
+    max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
+a.headerlink {
+    visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-default {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar,
+aside.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+    clear: right;
+    overflow-x: auto;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+nav.contents,
+aside.topic,
+div.admonition, div.topic, blockquote {
+    clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+nav.contents,
+aside.topic,
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+aside.sidebar > :last-child,
+nav.contents > :last-child,
+aside.topic > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+    margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+nav.contents::after,
+aside.topic::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+    display: block;
+    content: '';
+    clear: both;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.align-center {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.align-default {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+th > :first-child,
+td > :first-child {
+    margin-top: 0px;
+}
+
+th > :last-child,
+td > :last-child {
+    margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure, figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption, figcaption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist {
+    margin: 1em 0;
+}
+
+table.hlist td {
+    vertical-align: top;
+}
+
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+	font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+.sig-name {
+	font-size: 1.1em;
+}
+
+code.descname {
+    font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+    background-color: transparent;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.sig-param.n {
+	font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+	font-family: unset;
+}
+
+.sig.c   .k, .sig.c   .kt,
+.sig.cpp .k, .sig.cpp .kt {
+	color: #0033B3;
+}
+
+.sig.c   .m,
+.sig.cpp .m {
+	color: #1750EB;
+}
+
+.sig.c   .s, .sig.c   .sc,
+.sig.cpp .s, .sig.cpp .sc {
+	color: #067D17;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
+    margin-top: 0px;
+}
+
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
+    margin-bottom: 0px;
+}
+
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+    margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+    margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+    margin-bottom: 0;
+}
+
+aside.footnote > span,
+div.citation > span {
+    float: left;
+}
+aside.footnote > span:last-of-type,
+div.citation > span:last-of-type {
+  padding-right: 0.5em;
+}
+aside.footnote > p {
+  margin-left: 2em;
+}
+div.citation > p {
+  margin-left: 4em;
+}
+aside.footnote > p:last-of-type,
+div.citation > p:last-of-type {
+    margin-bottom: 0em;
+}
+aside.footnote > p:last-of-type:after,
+div.citation > p:last-of-type:after {
+    content: "";
+    clear: both;
+}
+
+dl.field-list {
+    display: grid;
+    grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+    font-weight: bold;
+    word-break: break-word;
+    padding-left: 0.5em;
+    padding-right: 5px;
+}
+
+dl.field-list > dd {
+    padding-left: 0.5em;
+    margin-top: 0em;
+    margin-left: 0em;
+    margin-bottom: 0em;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd > :first-child {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+    margin-bottom: 0;
+}
+
+dt:target, span.highlighted {
+    background-color: #fbe54e;
+}
+
+rect.highlighted {
+    fill: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+.classifier:before {
+    font-style: normal;
+    margin: 0 0.5em;
+    content: ":";
+    display: inline-block;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+pre, div[class*="highlight-"] {
+    clear: both;
+}
+
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+    white-space: nowrap;
+}
+
+div[class*="highlight-"] {
+    margin: 1em 0;
+}
+
+td.linenos pre {
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    display: block;
+}
+
+table.highlighttable tbody {
+    display: block;
+}
+
+table.highlighttable tr {
+    display: flex;
+}
+
+table.highlighttable td {
+    margin: 0;
+    padding: 0;
+}
+
+table.highlighttable td.linenos {
+    padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+    flex: 1;
+    overflow: hidden;
+}
+
+.highlight .hll {
+    display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+    margin: 0;
+}
+
+div.code-block-caption + div {
+    margin-top: 0;
+}
+
+div.code-block-caption {
+    margin-top: 1em;
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+table.highlighttable td.linenos,
+span.linenos,
+div.highlight span.gp {  /* gp: Generic.Prompt */
+  user-select: none;
+  -webkit-user-select: text; /* Safari fallback only */
+  -webkit-user-select: none; /* Chrome/Safari */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* IE10+ */
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    margin: 1em 0;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+span.eqno a.headerlink {
+    position: absolute;
+    z-index: 1;
+}
+
+div.math:hover a.headerlink {
+    visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/docs/build/html/_static/custom.css b/docs/build/html/_static/custom.css
new file mode 100644
index 0000000..2a924f1
--- /dev/null
+++ b/docs/build/html/_static/custom.css
@@ -0,0 +1 @@
+/* This file intentionally left blank. */
diff --git a/docs/build/html/_static/doctools.js b/docs/build/html/_static/doctools.js
new file mode 100644
index 0000000..d06a71d
--- /dev/null
+++ b/docs/build/html/_static/doctools.js
@@ -0,0 +1,156 @@
+/*
+ * 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";
+
+const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
+  "TEXTAREA",
+  "INPUT",
+  "SELECT",
+  "BUTTON",
+]);
+
+const _ready = (callback) => {
+  if (document.readyState !== "loading") {
+    callback();
+  } else {
+    document.addEventListener("DOMContentLoaded", callback);
+  }
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const Documentation = {
+  init: () => {
+    Documentation.initDomainIndexTable();
+    Documentation.initOnKeyListeners();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS: {},
+  PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
+  LOCALE: "unknown",
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext: (string) => {
+    const translated = Documentation.TRANSLATIONS[string];
+    switch (typeof translated) {
+      case "undefined":
+        return string; // no translation
+      case "string":
+        return translated; // translation exists
+      default:
+        return translated[0]; // (singular, plural) translation tuple exists
+    }
+  },
+
+  ngettext: (singular, plural, n) => {
+    const translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated !== "undefined")
+      return translated[Documentation.PLURAL_EXPR(n)];
+    return n === 1 ? singular : plural;
+  },
+
+  addTranslations: (catalog) => {
+    Object.assign(Documentation.TRANSLATIONS, catalog.messages);
+    Documentation.PLURAL_EXPR = new Function(
+      "n",
+      `return (${catalog.plural_expr})`
+    );
+    Documentation.LOCALE = catalog.locale;
+  },
+
+  /**
+   * helper function to focus on search bar
+   */
+  focusSearchBar: () => {
+    document.querySelectorAll("input[name=q]")[0]?.focus();
+  },
+
+  /**
+   * Initialise the domain index toggle buttons
+   */
+  initDomainIndexTable: () => {
+    const toggler = (el) => {
+      const idNumber = el.id.substr(7);
+      const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
+      if (el.src.substr(-9) === "minus.png") {
+        el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
+        toggledRows.forEach((el) => (el.style.display = "none"));
+      } else {
+        el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
+        toggledRows.forEach((el) => (el.style.display = ""));
+      }
+    };
+
+    const togglerElements = document.querySelectorAll("img.toggler");
+    togglerElements.forEach((el) =>
+      el.addEventListener("click", (event) => toggler(event.currentTarget))
+    );
+    togglerElements.forEach((el) => (el.style.display = ""));
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
+  },
+
+  initOnKeyListeners: () => {
+    // only install a listener if it is really needed
+    if (
+      !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
+      !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
+    )
+      return;
+
+    document.addEventListener("keydown", (event) => {
+      // bail for input elements
+      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+      // bail with special keys
+      if (event.altKey || event.ctrlKey || event.metaKey) return;
+
+      if (!event.shiftKey) {
+        switch (event.key) {
+          case "ArrowLeft":
+            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+            const prevLink = document.querySelector('link[rel="prev"]');
+            if (prevLink && prevLink.href) {
+              window.location.href = prevLink.href;
+              event.preventDefault();
+            }
+            break;
+          case "ArrowRight":
+            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+            const nextLink = document.querySelector('link[rel="next"]');
+            if (nextLink && nextLink.href) {
+              window.location.href = nextLink.href;
+              event.preventDefault();
+            }
+            break;
+        }
+      }
+
+      // some keyboard layouts may need Shift to get /
+      switch (event.key) {
+        case "/":
+          if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
+          Documentation.focusSearchBar();
+          event.preventDefault();
+      }
+    });
+  },
+};
+
+// quick alias for translations
+const _ = Documentation.gettext;
+
+_ready(Documentation.init);
diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js
new file mode 100644
index 0000000..3e3a2bb
--- /dev/null
+++ b/docs/build/html/_static/documentation_options.js
@@ -0,0 +1,14 @@
+var DOCUMENTATION_OPTIONS = {
+    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
+    VERSION: '2023.2.17',
+    LANGUAGE: 'en',
+    COLLAPSE_INDEX: false,
+    BUILDER: 'html',
+    FILE_SUFFIX: '.html',
+    LINK_SUFFIX: '.html',
+    HAS_SOURCE: true,
+    SOURCELINK_SUFFIX: '.txt',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/docs/build/html/_static/file.png b/docs/build/html/_static/file.png
new file mode 100644
index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3
GIT binary patch
literal 286
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7o_e}ChEy=Fo!lJ6#wgPI
zU9-A1=eok}ZEQDX(r(*2tb58m$7=u1ea82H)jeO=^6%fjou57xMW{G_5a*B3{pP}1
zS6~0}?_b_epFayX9PiZV3J_7<*U-z(&Te62!(wS=#r62dj~f93Q(yV3O;UNueM4ey
zPF+*P_cxDwe?L<@A-VUOYxn_?IFqgAjDfX>&K+iC+ZOj{hWM55XBY3QXXIt>UXl5V
zY32J_2KpZQFCE-8U%FHkYESx{HDO9L>%8Dl(|ry6XI@BV%vz@ZVSj$)G){LlpS0qd
r#>Mpuckiw~`|AFW`^Ks}LhH4IH@r-6bi2gBz`)??>gTe~DWM4fp;vuF

literal 0
HcmV?d00001

diff --git a/docs/build/html/_static/language_data.js b/docs/build/html/_static/language_data.js
new file mode 100644
index 0000000..250f566
--- /dev/null
+++ b/docs/build/html/_static/language_data.js
@@ -0,0 +1,199 @@
+/*
+ * 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 */
+
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
diff --git a/docs/build/html/_static/minus.png b/docs/build/html/_static/minus.png
new file mode 100644
index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d
GIT binary patch
literal 90
zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4h9AWhMwaZzZe)86g^!WLn;`PEt(m4((N1$
qT5J54Rote=BCz_OtVqKR4hDwUH)%$B(trFwnmk?oT-G@yGywom%@%0@

literal 0
HcmV?d00001

diff --git a/docs/build/html/_static/plus.png b/docs/build/html/_static/plus.png
new file mode 100644
index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d
GIT binary patch
literal 90
zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4h9AWhMwaZzZe)86g^!WLn;`PEt(m4((N1$
pT5Cj47Kj#R>InVM$K{a2!oZ-bm^kJ02L~3ACQnyCmvv4FO#meY6wUwu

literal 0
HcmV?d00001

diff --git a/docs/build/html/_static/pygments.css b/docs/build/html/_static/pygments.css
new file mode 100644
index 0000000..9abe04b
--- /dev/null
+++ b/docs/build/html/_static/pygments.css
@@ -0,0 +1,83 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #8f5902; font-style: italic } /* Comment */
+.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
+.highlight .g { color: #000000 } /* Generic */
+.highlight .k { color: #004461; font-weight: bold } /* Keyword */
+.highlight .l { color: #000000 } /* Literal */
+.highlight .n { color: #000000 } /* Name */
+.highlight .o { color: #582800 } /* Operator */
+.highlight .x { color: #000000 } /* Other */
+.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
+.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #8f5902 } /* Comment.Preproc */
+.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #a40000 } /* Generic.Deleted */
+.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #ef2929 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #745334 } /* Generic.Prompt */
+.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
+.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
+.highlight .ld { color: #000000 } /* Literal.Date */
+.highlight .m { color: #990000 } /* Literal.Number */
+.highlight .s { color: #4e9a06 } /* Literal.String */
+.highlight .na { color: #c4a000 } /* Name.Attribute */
+.highlight .nb { color: #004461 } /* Name.Builtin */
+.highlight .nc { color: #000000 } /* Name.Class */
+.highlight .no { color: #000000 } /* Name.Constant */
+.highlight .nd { color: #888888 } /* Name.Decorator */
+.highlight .ni { color: #ce5c00 } /* Name.Entity */
+.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #000000 } /* Name.Function */
+.highlight .nl { color: #f57900 } /* Name.Label */
+.highlight .nn { color: #000000 } /* Name.Namespace */
+.highlight .nx { color: #000000 } /* Name.Other */
+.highlight .py { color: #000000 } /* Name.Property */
+.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #000000 } /* Name.Variable */
+.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
+.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */
+.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
+.highlight .mb { color: #990000 } /* Literal.Number.Bin */
+.highlight .mf { color: #990000 } /* Literal.Number.Float */
+.highlight .mh { color: #990000 } /* Literal.Number.Hex */
+.highlight .mi { color: #990000 } /* Literal.Number.Integer */
+.highlight .mo { color: #990000 } /* Literal.Number.Oct */
+.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
+.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
+.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
+.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
+.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
+.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
+.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
+.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
+.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
+.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
+.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
+.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
+.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #000000 } /* Name.Function.Magic */
+.highlight .vc { color: #000000 } /* Name.Variable.Class */
+.highlight .vg { color: #000000 } /* Name.Variable.Global */
+.highlight .vi { color: #000000 } /* Name.Variable.Instance */
+.highlight .vm { color: #000000 } /* Name.Variable.Magic */
+.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/docs/build/html/_static/searchtools.js b/docs/build/html/_static/searchtools.js
new file mode 100644
index 0000000..97d56a7
--- /dev/null
+++ b/docs/build/html/_static/searchtools.js
@@ -0,0 +1,566 @@
+/*
+ * 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";
+
+/**
+ * Simple result scoring code.
+ */
+if (typeof Scorer === "undefined") {
+  var Scorer = {
+    // Implement the following function to further tweak the score for each result
+    // The function takes a result array [docname, title, anchor, descr, score, filename]
+    // and returns the new score.
+    /*
+    score: result => {
+      const [docname, title, anchor, descr, score, filename] = result
+      return score
+    },
+    */
+
+    // query matches the full name of an object
+    objNameMatch: 11,
+    // or matches in the last dotted part of the object name
+    objPartialMatch: 6,
+    // Additive scores depending on the priority of the object
+    objPrio: {
+      0: 15, // used to be importantResults
+      1: 5, // used to be objectResults
+      2: -5, // used to be unimportantResults
+    },
+    //  Used when the priority is not in the mapping.
+    objPrioDefault: 0,
+
+    // query found in title
+    title: 15,
+    partialTitle: 7,
+    // query found in terms
+    term: 5,
+    partialTerm: 2,
+  };
+}
+
+const _removeChildren = (element) => {
+  while (element && element.lastChild) element.removeChild(element.lastChild);
+};
+
+/**
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
+ */
+const _escapeRegExp = (string) =>
+  string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
+
+const _displayItem = (item, searchTerms) => {
+  const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
+  const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
+  const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+  const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
+  const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
+
+  const [docName, title, anchor, descr, score, _filename] = item;
+
+  let listItem = document.createElement("li");
+  let requestUrl;
+  let linkUrl;
+  if (docBuilder === "dirhtml") {
+    // dirhtml builder
+    let dirname = docName + "/";
+    if (dirname.match(/\/index\/$/))
+      dirname = dirname.substring(0, dirname.length - 6);
+    else if (dirname === "index/") dirname = "";
+    requestUrl = docUrlRoot + dirname;
+    linkUrl = requestUrl;
+  } else {
+    // normal html builders
+    requestUrl = docUrlRoot + docName + docFileSuffix;
+    linkUrl = docName + docLinkSuffix;
+  }
+  let linkEl = listItem.appendChild(document.createElement("a"));
+  linkEl.href = linkUrl + anchor;
+  linkEl.dataset.score = score;
+  linkEl.innerHTML = title;
+  if (descr)
+    listItem.appendChild(document.createElement("span")).innerHTML =
+      " (" + descr + ")";
+  else if (showSearchSummary)
+    fetch(requestUrl)
+      .then((responseData) => responseData.text())
+      .then((data) => {
+        if (data)
+          listItem.appendChild(
+            Search.makeSearchSummary(data, searchTerms)
+          );
+      });
+  Search.output.appendChild(listItem);
+};
+const _finishSearch = (resultCount) => {
+  Search.stopPulse();
+  Search.title.innerText = _("Search Results");
+  if (!resultCount)
+    Search.status.innerText = Documentation.gettext(
+      "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.`
+    );
+};
+const _displayNextItem = (
+  results,
+  resultCount,
+  searchTerms
+) => {
+  // results left, load the summary and display it
+  // this is intended to be dynamic (don't sub resultsCount)
+  if (results.length) {
+    _displayItem(results.pop(), searchTerms);
+    setTimeout(
+      () => _displayNextItem(results, resultCount, searchTerms),
+      5
+    );
+  }
+  // search finished, update title and status message
+  else _finishSearch(resultCount);
+};
+
+/**
+ * Default splitQuery function. Can be overridden in ``sphinx.search`` with a
+ * custom function per language.
+ *
+ * The regular expression works by splitting the string on consecutive characters
+ * that are not Unicode letters, numbers, underscores, or emoji characters.
+ * This is the same as ``\W+`` in Python, preserving the surrogate pair area.
+ */
+if (typeof splitQuery === "undefined") {
+  var splitQuery = (query) => query
+      .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
+      .filter(term => term)  // remove remaining empty strings
+}
+
+/**
+ * Search Module
+ */
+const Search = {
+  _index: null,
+  _queued_query: null,
+  _pulse_status: -1,
+
+  htmlToText: (htmlString) => {
+    const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
+    htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
+    const docContent = htmlElement.querySelector('[role="main"]');
+    if (docContent !== undefined) 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."
+    );
+    return "";
+  },
+
+  init: () => {
+    const query = new URLSearchParams(window.location.search).get("q");
+    document
+      .querySelectorAll('input[name="q"]')
+      .forEach((el) => (el.value = query));
+    if (query) Search.performSearch(query);
+  },
+
+  loadIndex: (url) =>
+    (document.body.appendChild(document.createElement("script")).src = url),
+
+  setIndex: (index) => {
+    Search._index = index;
+    if (Search._queued_query !== null) {
+      const query = Search._queued_query;
+      Search._queued_query = null;
+      Search.query(query);
+    }
+  },
+
+  hasIndex: () => Search._index !== null,
+
+  deferQuery: (query) => (Search._queued_query = query),
+
+  stopPulse: () => (Search._pulse_status = -1),
+
+  startPulse: () => {
+    if (Search._pulse_status >= 0) return;
+
+    const pulse = () => {
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      Search.dots.innerText = ".".repeat(Search._pulse_status);
+      if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
+    };
+    pulse();
+  },
+
+  /**
+   * perform a search for something (or wait until index is loaded)
+   */
+  performSearch: (query) => {
+    // create the required interface elements
+    const searchText = document.createElement("h2");
+    searchText.textContent = _("Searching");
+    const searchSummary = document.createElement("p");
+    searchSummary.classList.add("search-summary");
+    searchSummary.innerText = "";
+    const searchList = document.createElement("ul");
+    searchList.classList.add("search");
+
+    const out = document.getElementById("search-results");
+    Search.title = out.appendChild(searchText);
+    Search.dots = Search.title.appendChild(document.createElement("span"));
+    Search.status = out.appendChild(searchSummary);
+    Search.output = out.appendChild(searchList);
+
+    const searchProgress = document.getElementById("search-progress");
+    // Some themes don't use the search progress node
+    if (searchProgress) {
+      searchProgress.innerText = _("Preparing search...");
+    }
+    Search.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (Search.hasIndex()) Search.query(query);
+    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;
+
+    // stem the search terms and add them to the correct list
+    const stemmer = new Stemmer();
+    const searchTerms = new Set();
+    const excludedTerms = new Set();
+    const highlightTerms = new Set();
+    const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
+    splitQuery(query.trim()).forEach((queryTerm) => {
+      const queryTermLower = queryTerm.toLowerCase();
+
+      // maybe skip this "word"
+      // stopwords array is from language_data.js
+      if (
+        stopwords.indexOf(queryTermLower) !== -1 ||
+        queryTerm.match(/^\d+$/)
+      )
+        return;
+
+      // stem the word
+      let word = stemmer.stemWord(queryTermLower);
+      // select the correct list
+      if (word[0] === "-") excludedTerms.add(word.substr(1));
+      else {
+        searchTerms.add(word);
+        highlightTerms.add(queryTermLower);
+      }
+    });
+
+    if (SPHINX_HIGHLIGHT_ENABLED) {  // set in sphinx_highlight.js
+      localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
+    }
+
+    // console.debug("SEARCH: searching for:");
+    // console.info("required: ", [...searchTerms]);
+    // console.info("excluded: ", [...excludedTerms]);
+
+    // array of [docname, title, anchor, descr, score, filename]
+    let results = [];
+    _removeChildren(document.getElementById("search-progress"));
+
+    const queryLower = query.toLowerCase();
+    for (const [title, foundTitles] of Object.entries(allTitles)) {
+      if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
+        for (const [file, id] of foundTitles) {
+          let score = Math.round(100 * queryLower.length / title.length)
+          results.push([
+            docNames[file],
+            titles[file] !== title ? `${titles[file]} > ${title}` : title,
+            id !== null ? "#" + id : "",
+            null,
+            score,
+            filenames[file],
+          ]);
+        }
+      }
+    }
+
+    // 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([
+            docNames[file],
+            titles[file],
+            id ? "#" + id : "",
+            null,
+            score,
+            filenames[file],
+          ]);
+        }
+      }
+    }
+
+    // lookup as object
+    objectTerms.forEach((term) =>
+      results.push(...Search.performObjectSearch(term, objectTerms))
+    );
+
+    // lookup as search terms in fulltext
+    results.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;
+    });
+
+    // remove duplicate search results
+    // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
+    let seen = new Set();
+    results = results.reverse().reduce((acc, result) => {
+      let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
+      if (!seen.has(resultStr)) {
+        acc.push(result);
+        seen.add(resultStr);
+      }
+      return acc;
+    }, []);
+
+    results = results.reverse();
+
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    // console.info("search results:", Search.lastresults);
+
+    // print the results
+    _displayNextItem(results, results.length, searchTerms);
+  },
+
+  /**
+   * search for object names
+   */
+  performObjectSearch: (object, objectTerms) => {
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const objects = Search._index.objects;
+    const objNames = Search._index.objnames;
+    const titles = Search._index.titles;
+
+    const results = [];
+
+    const objectSearchCallback = (prefix, match) => {
+      const name = match[4]
+      const fullname = (prefix ? prefix + "." : "") + name;
+      const fullnameLower = fullname.toLowerCase();
+      if (fullnameLower.indexOf(object) < 0) return;
+
+      let score = 0;
+      const parts = fullnameLower.split(".");
+
+      // check for different match types: exact matches of full name or
+      // "last name" (i.e. last dotted part)
+      if (fullnameLower === object || parts.slice(-1)[0] === object)
+        score += Scorer.objNameMatch;
+      else if (parts.slice(-1)[0].indexOf(object) > -1)
+        score += Scorer.objPartialMatch; // matches in last name
+
+      const objName = objNames[match[1]][2];
+      const title = titles[match[0]];
+
+      // If more than one term searched for, we require other words to be
+      // found in the name/title/description
+      const otherTerms = new Set(objectTerms);
+      otherTerms.delete(object);
+      if (otherTerms.size > 0) {
+        const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
+        if (
+          [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
+        )
+          return;
+      }
+
+      let anchor = match[3];
+      if (anchor === "") anchor = fullname;
+      else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
+
+      const descr = objName + _(", in ") + title;
+
+      // add custom score for some objects according to scorer
+      if (Scorer.objPrio.hasOwnProperty(match[2]))
+        score += Scorer.objPrio[match[2]];
+      else score += Scorer.objPrioDefault;
+
+      results.push([
+        docNames[match[0]],
+        fullname,
+        "#" + anchor,
+        descr,
+        score,
+        filenames[match[0]],
+      ]);
+    };
+    Object.keys(objects).forEach((prefix) =>
+      objects[prefix].forEach((array) =>
+        objectSearchCallback(prefix, array)
+      )
+    );
+    return results;
+  },
+
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch: (searchTerms, excludedTerms) => {
+    // prepare search
+    const terms = Search._index.terms;
+    const titleTerms = Search._index.titleterms;
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const titles = Search._index.titles;
+
+    const scoreMap = new Map();
+    const fileMap = new Map();
+
+    // perform the search on the required terms
+    searchTerms.forEach((word) => {
+      const files = [];
+      const arr = [
+        { files: terms[word], score: Scorer.term },
+        { files: titleTerms[word], score: Scorer.title },
+      ];
+      // 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 });
+        });
+      }
+
+      // no match but word was a required one
+      if (arr.every((record) => record.files === undefined)) return;
+
+      // found search word in contents
+      arr.forEach((record) => {
+        if (record.files === undefined) return;
+
+        let recordFiles = record.files;
+        if (recordFiles.length === undefined) recordFiles = [recordFiles];
+        files.push(...recordFiles);
+
+        // set score for the word in each file
+        recordFiles.forEach((file) => {
+          if (!scoreMap.has(file)) scoreMap.set(file, {});
+          scoreMap.get(file)[word] = record.score;
+        });
+      });
+
+      // 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]);
+      });
+    });
+
+    // now check if the files don't contain excluded terms
+    const results = [];
+    for (const [file, wordList] of fileMap) {
+      // check if all requirements are matched
+
+      // as search terms with length < 3 are discarded
+      const filteredTermCount = [...searchTerms].filter(
+        (term) => term.length > 2
+      ).length;
+      if (
+        wordList.length !== searchTerms.size &&
+        wordList.length !== filteredTermCount
+      )
+        continue;
+
+      // ensure that none of the excluded terms is in the search result
+      if (
+        [...excludedTerms].some(
+          (term) =>
+            terms[term] === file ||
+            titleTerms[term] === file ||
+            (terms[term] || []).includes(file) ||
+            (titleTerms[term] || []).includes(file)
+        )
+      )
+        break;
+
+      // select one (max) score for the file.
+      const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
+      // add result to the result list
+      results.push([
+        docNames[file],
+        titles[file],
+        "",
+        null,
+        score,
+        filenames[file],
+      ]);
+    }
+    return results;
+  },
+
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words.
+   */
+  makeSearchSummary: (htmlText, keywords) => {
+    const text = Search.htmlToText(htmlText);
+    if (text === "") return null;
+
+    const textLower = text.toLowerCase();
+    const actualStartPosition = [...keywords]
+      .map((k) => textLower.indexOf(k.toLowerCase()))
+      .filter((i) => i > -1)
+      .slice(-1)[0];
+    const startWithContext = Math.max(actualStartPosition - 120, 0);
+
+    const top = startWithContext === 0 ? "" : "...";
+    const tail = startWithContext + 240 < text.length ? "..." : "";
+
+    let summary = document.createElement("p");
+    summary.classList.add("context");
+    summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
+
+    return summary;
+  },
+};
+
+_ready(Search.init);
diff --git a/docs/build/html/_static/sphinx_highlight.js b/docs/build/html/_static/sphinx_highlight.js
new file mode 100644
index 0000000..aae669d
--- /dev/null
+++ b/docs/build/html/_static/sphinx_highlight.js
@@ -0,0 +1,144 @@
+/* Highlighting utilities for Sphinx HTML documentation. */
+"use strict";
+
+const SPHINX_HIGHLIGHT_ENABLED = true
+
+/**
+ * highlight a given string on a node by wrapping it in
+ * span elements with the given class name.
+ */
+const _highlight = (node, addItems, text, className) => {
+  if (node.nodeType === Node.TEXT_NODE) {
+    const val = node.nodeValue;
+    const parent = node.parentNode;
+    const pos = val.toLowerCase().indexOf(text);
+    if (
+      pos >= 0 &&
+      !parent.classList.contains(className) &&
+      !parent.classList.contains("nohighlight")
+    ) {
+      let span;
+
+      const closestNode = parent.closest("body, svg, foreignObject");
+      const isInSVG = closestNode && closestNode.matches("svg");
+      if (isInSVG) {
+        span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+      } else {
+        span = document.createElement("span");
+        span.classList.add(className);
+      }
+
+      span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+      parent.insertBefore(
+        span,
+        parent.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling
+        )
+      );
+      node.nodeValue = val.substr(0, pos);
+
+      if (isInSVG) {
+        const rect = document.createElementNS(
+          "http://www.w3.org/2000/svg",
+          "rect"
+        );
+        const bbox = parent.getBBox();
+        rect.x.baseVal.value = bbox.x;
+        rect.y.baseVal.value = bbox.y;
+        rect.width.baseVal.value = bbox.width;
+        rect.height.baseVal.value = bbox.height;
+        rect.setAttribute("class", className);
+        addItems.push({ parent: parent, target: rect });
+      }
+    }
+  } else if (node.matches && !node.matches("button, select, textarea")) {
+    node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
+  }
+};
+const _highlightText = (thisNode, text, className) => {
+  let addItems = [];
+  _highlight(thisNode, addItems, text, className);
+  addItems.forEach((obj) =>
+    obj.parent.insertAdjacentElement("beforebegin", obj.target)
+  );
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const SphinxHighlight = {
+
+  /**
+   * highlight the search words provided in localstorage in the text
+   */
+  highlightSearchWords: () => {
+    if (!SPHINX_HIGHLIGHT_ENABLED) return;  // bail if no highlight
+
+    // get and clear terms from localstorage
+    const url = new URL(window.location);
+    const highlight =
+        localStorage.getItem("sphinx_highlight_terms")
+        || url.searchParams.get("highlight")
+        || "";
+    localStorage.removeItem("sphinx_highlight_terms")
+    url.searchParams.delete("highlight");
+    window.history.replaceState({}, "", url);
+
+    // get individual terms from highlight string
+    const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
+    if (terms.length === 0) return; // nothing to do
+
+    // There should never be more than one element matching "div.body"
+    const divBody = document.querySelectorAll("div.body");
+    const body = divBody.length ? divBody[0] : document.querySelector("body");
+    window.setTimeout(() => {
+      terms.forEach((term) => _highlightText(body, term, "highlighted"));
+    }, 10);
+
+    const searchBox = document.getElementById("searchbox");
+    if (searchBox === null) return;
+    searchBox.appendChild(
+      document
+        .createRange()
+        .createContextualFragment(
+          '<p class="highlight-link">' +
+            '<a href="javascript:SphinxHighlight.hideSearchWords()">' +
+            _("Hide Search Matches") +
+            "</a></p>"
+        )
+    );
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords: () => {
+    document
+      .querySelectorAll("#searchbox .highlight-link")
+      .forEach((el) => el.remove());
+    document
+      .querySelectorAll("span.highlighted")
+      .forEach((el) => el.classList.remove("highlighted"));
+    localStorage.removeItem("sphinx_highlight_terms")
+  },
+
+  initEscapeListener: () => {
+    // only install a listener if it is really needed
+    if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
+
+    document.addEventListener("keydown", (event) => {
+      // bail for input elements
+      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+      // bail with special keys
+      if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
+      if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
+        SphinxHighlight.hideSearchWords();
+        event.preventDefault();
+      }
+    });
+  },
+};
+
+_ready(SphinxHighlight.highlightSearchWords);
+_ready(SphinxHighlight.initEscapeListener);
diff --git a/docs/build/html/api.html b/docs/build/html/api.html
new file mode 100644
index 0000000..70fc682
--- /dev/null
+++ b/docs/build/html/api.html
@@ -0,0 +1,97 @@
+
+<!DOCTYPE html>
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
+
+    <title>&lt;no title&gt; &#8212; DART-WRF 2023.2.17 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
+    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+    <script src="_static/doctools.js"></script>
+    <script src="_static/sphinx_highlight.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index2.html">DART-WRF</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index2.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2023, Lukas Kugler.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 6.1.3</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
+      
+      |
+      <a href="_sources/api.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/build/html/example.html b/docs/build/html/example.html
new file mode 100644
index 0000000..1497caa
--- /dev/null
+++ b/docs/build/html/example.html
@@ -0,0 +1,192 @@
+
+<!DOCTYPE html>
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
+
+    <title>&lt;no title&gt; &#8212; DART-WRF 2023.2.17 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
+    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+    <script src="_static/doctools.js"></script>
+    <script src="_static/sphinx_highlight.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <p>## Workflow
+#### Configure your experiment
+Define simulation specific variables in [<cite>config/cfg.py</cite>](<a class="reference external" href="https://github.com/lkugler/DART-WRF/blob/master/config/cfg.py">https://github.com/lkugler/DART-WRF/blob/master/config/cfg.py</a>).
+Define paths for python, ncks, etc. in [<cite>config/clusters.py</cite>](<a class="reference external" href="https://github.com/lkugler/DART-WRF/blob/master/config/clusters.py">https://github.com/lkugler/DART-WRF/blob/master/config/clusters.py</a>).
+Dependencies are <cite>numpy, pandas, scipy, xarray, netCDF4</cite>. Install non-standard packages with <cite>pip install docopt slurmpy –user</cite>.
+Workflow is defined using meta-routines (functions) like <cite>run_ENS</cite> which are defined in <cite>scheduler.py</cite>.</p>
+<p>#### Prepare initial conditions (from input_sounding)
+1) Define starting time:
+<cite>begin = dt.datetime(2008, 7, 30, 6)</cite>
+2) WRF needs directories with certain files:
+<cite>id = prepare_WRFrundir(begin)</cite>
+3) Create 3D initial conditions from input_sounding etc.:
+<cite>id = run_ideal(depends_on=id)</cite></p>
+<p>### Run free forecast
+Let’s say you want to run a free forecast starting at 6z, which you want to use as prior for an assimilation at 9z. Then you need can use the above defined 3 steps to create initial conditions.
+Then you can run an ensemble forecast using:
+<a href="#id1"><span class="problematic" id="id2">``</span></a>`
+id = run_ENS(begin=begin,  # start integration from here</p>
+<blockquote>
+<div><p>end=end,      # integrate until here
+input_is_restart=False,
+output_restart_interval=(end-begin).total_seconds()/60,
+depends_on=id)</p>
+</div></blockquote>
+<p><a href="#id3"><span class="problematic" id="id4">``</span></a>`
+where <cite>begin</cite> &amp; <cite>end</cite> are <cite>dt.datetime</cite> objects.</p>
+<p>### Assimilation experiment
+#### Assimilate
+To assimilate observations at dt.datetime <cite>time</cite> use this command:</p>
+<p><cite>id = assimilate(time, prior_init_time, prior_valid_time, prior_path_exp, depends_on=id)</cite></p>
+<p>#### Update initial conditions from Data Assimilation
+In order to continue after assimilation you need the posterior = prior (1) + increments (2)</p>
+<ol class="arabic simple">
+<li><p>Set prior with this function:</p></li>
+</ol>
+<p><cite>id = prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, depends_on=id)</cite></p>
+<p>where path is <cite>str</cite>, times are <cite>dt.datetime</cite>.</p>
+<ol class="arabic simple" start="2">
+<li><p>To update the model state with assimilation increments, you need to update the WRF restart files by running</p></li>
+</ol>
+<p><cite>id = update_IC_from_DA(time, depends_on=id)</cite></p>
+<p>After this, the wrfrst files are updated with assimilation increments (filter_restart) and copied to the WRF’s run directories so you can continue to run the ENS after assimilation using</p>
+<p><a href="#id5"><span class="problematic" id="id6">``</span></a>`
+id = run_ENS(begin=time,  # start integration from here</p>
+<blockquote>
+<div><p>end=time + timedelta_integrate,  # integrate until here
+restart_path=cluster.archivedir+prior_init_time.strftime(‘/%Y-%m-%d_%H:%M/’),
+output_restart_interval=timedelta_btw_assim.total_seconds()/60,
+depends_on=id)</p>
+</div></blockquote>
+<p><a href="#id7"><span class="problematic" id="id8">``</span></a>`
+where times are <cite>dt.datetime</cite>; <cite>timedelta</cite> variables are <cite>dt.timedelta</cite>.</p>
+<p>### Examples
+[<cite>scheduler.py</cite>](<a class="reference external" href="https://github.com/lkugler/DART-WRF/blob/master/scheduler.py">https://github.com/lkugler/DART-WRF/blob/master/scheduler.py</a>)
+[<cite>generate_free.py</cite>](<a class="reference external" href="https://github.com/lkugler/DART-WRF/blob/master/generate_free.py">https://github.com/lkugler/DART-WRF/blob/master/generate_free.py</a>)</p>
+<p>## Finally</p>
+<p>### SLURM submissions
+<cite>scheduler.py</cite> submits jobs into the SLURM queue with dependencies, so that SLURM starts the jobs itself as soon as resources are available. Most jobs need only one node, but model integration is done in a SLURM job array across e.g. 10 nodes:
+<a href="#id9"><span class="problematic" id="id10">``</span></a>`
+$ squeue -u <cite>whoami</cite> –sort=i</p>
+<blockquote>
+<div><blockquote>
+<div><blockquote>
+<div><p>JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)</p>
+</div></blockquote>
+<p>1710274  mem_0384 prepwrfr  lkugler PD       0:00      1 (Priority)
+1710275  mem_0384 IC-prior  lkugler PD       0:00      1 (Dependency)
+1710276  mem_0384 Assim-42  lkugler PD       0:00      1 (Dependency)
+1710277  mem_0384 IC-prior  lkugler PD       0:00      1 (Dependency)
+1710278  mem_0384 IC-updat  lkugler PD       0:00      1 (Dependency)
+1710279  mem_0384 preWRF2-  lkugler PD       0:00      1 (Dependency)</p>
+</div></blockquote>
+<dl class="simple">
+<dt>1710280_[1-10]  mem_0384 runWRF2-  lkugler PD       0:00      1 (Dependency)</dt><dd><p>1710281  mem_0384 pRTTOV-6  lkugler PD       0:00      1 (Dependency)
+1710282  mem_0384 Assim-3a  lkugler PD       0:00      1 (Dependency)
+1710283  mem_0384 IC-prior  lkugler PD       0:00      1 (Dependency)
+1710284  mem_0384 IC-updat  lkugler PD       0:00      1 (Dependency)
+1710285  mem_0384 preWRF2-  lkugler PD       0:00      1 (Dependency)</p>
+</dd>
+<dt>1710286_[1-10]  mem_0384 runWRF2-  lkugler PD       0:00      1 (Dependency)</dt><dd><p>1710287  mem_0384 pRTTOV-7  lkugler PD       0:00      1 (Dependency)</p>
+</dd>
+</dl>
+</div></blockquote>
+<p><a href="#id11"><span class="problematic" id="id12">``</span></a><a href="#id13"><span class="problematic" id="id14">`</span></a></p>
+<p>### Easily switch between clusters
+Define cluster specific variables in <a href="#id15"><span class="problematic" id="id16">`</span></a>config/clusters.py <a href="#id17"><span class="problematic" id="id18">`</span></a>:
+<a href="#id19"><span class="problematic" id="id20">``</span></a><a href="#id21"><span class="problematic" id="id22">`</span></a>python</p>
+<p>clusterA = ClusterConfig()
+clusterA.name = ‘vsc’
+clusterA.userdir = ‘/home/pathA/myuser/’
+…
+clusterB = ClusterConfig()
+clusterB.name = ‘jet’
+clusterB.userdir = ‘/home/pathB/myuser/’
+<a href="#id23"><span class="problematic" id="id24">``</span></a><a href="#id25"><span class="problematic" id="id26">`</span></a></p>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index2.html">DART-WRF</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index2.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2023, Lukas Kugler.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 6.1.3</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
+      
+      |
+      <a href="_sources/example.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html
new file mode 100644
index 0000000..814f2b0
--- /dev/null
+++ b/docs/build/html/genindex.html
@@ -0,0 +1,99 @@
+
+<!DOCTYPE html>
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Index &#8212; DART-WRF 2023.2.17 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
+    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+    <script src="_static/doctools.js"></script>
+    <script src="_static/sphinx_highlight.js"></script>
+    <link rel="index" title="Index" href="#" />
+    <link rel="search" title="Search" href="search.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ 
+</div>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index2.html">DART-WRF</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index2.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2023, Lukas Kugler.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 6.1.3</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/build/html/index.html b/docs/build/html/index.html
new file mode 100644
index 0000000..16f27f1
--- /dev/null
+++ b/docs/build/html/index.html
@@ -0,0 +1,120 @@
+
+<!DOCTYPE html>
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
+
+    <title>Welcome to the DART-WRF documentation! &#8212; DART-WRF 2023.2.17 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
+    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+    <script src="_static/doctools.js"></script>
+    <script src="_static/sphinx_highlight.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="welcome-to-the-dart-wrf-documentation">
+<h1>Welcome to the DART-WRF documentation!<a class="headerlink" href="#welcome-to-the-dart-wrf-documentation" title="Permalink to this heading">¶</a></h1>
+<p>DART-WRF is a Python package to run an Ensemble Data Assimilation system with the software packages DART and WRF.</p>
+<ul class="simple">
+<li><p>Why should I use it?
+- It’s pythonic: see what it does at first glance, modular, flexible
+- It handles dependencies using SLURM without ‘<cite>sleep</cite> loops in the bash script’.</p></li>
+</ul>
+<p>Functions return a SLURM ID which can be used to trigger the start of another function (interface by [brentp/slurmpy](<a class="reference external" href="https://github.com/brentp/slurmpy">https://github.com/brentp/slurmpy</a>)).</p>
+<ul class="simple">
+<li><p>How does it work?
+- There are two kinds of code/scripts: One that is run immediately and one that is run later on.
+- The first one instructs the cluster (SLURM) to do the things you tell it - in the right order - using the right input.
+- The latter kind of code actually does the things. Its code is not executed right away, but when there are resources assigned to you by SLURM.</p></li>
+<li><p>Can I use it for real weather?
+-  Yes, but you need to [convert your observations into DART format.](<a class="reference external" href="https://docs.dart.ucar.edu">https://docs.dart.ucar.edu</a>)</p></li>
+</ul>
+<section id="contents">
+<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this heading">¶</a></h2>
+<div class="toctree-wrapper compound">
+</div>
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index2.html">DART-WRF</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index2.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2023, Lukas Kugler.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 6.1.3</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
+      
+      |
+      <a href="_sources/index.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/build/html/index2.html b/docs/build/html/index2.html
new file mode 100644
index 0000000..1b938bb
--- /dev/null
+++ b/docs/build/html/index2.html
@@ -0,0 +1,110 @@
+
+<!DOCTYPE html>
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
+
+    <title>Welcome to DART-WRF’s documentation! &#8212; DART-WRF 2023.2.17 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
+    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+    <script src="_static/doctools.js"></script>
+    <script src="_static/sphinx_highlight.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="welcome-to-dart-wrf-s-documentation">
+<h1>Welcome to DART-WRF’s documentation!<a class="headerlink" href="#welcome-to-dart-wrf-s-documentation" title="Permalink to this heading">¶</a></h1>
+<div class="toctree-wrapper compound">
+</div>
+</section>
+<section id="indices-and-tables">
+<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this heading">¶</a></h1>
+<ul class="simple">
+<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
+<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
+<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
+</ul>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="#">DART-WRF</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="#">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2023, Lukas Kugler.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 6.1.3</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
+      
+      |
+      <a href="_sources/index2.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv
new file mode 100644
index 0000000000000000000000000000000000000000..67e9294dd995a78edee1af5aab09545a18ab7c9e
GIT binary patch
literal 304
zcmY#Z2rkIT%&Sny%qvUHE6FdaR47X=D$dN$Q!wIERtPA{&q_@$u~Kkx3<}W=4|3yD
zRtSU0TPbiUD}-dEDio#WCT8ZPq!uaUrzw<VWELx=W#*(RWELwV=jRp_r4|>brYMva
zXXd3VROMtQ>2X!uYMtQAb;v-V^}FrSiUzJSO(hPc9RgmWyZX*vVENQO*J<}>skrl#
zZ_Hwg*51MWzV>}GN3oFBqwGBHj_?C>Vz@4GnH^*D4BFAVA@P=`OtQ0yv$x5mf}DG6
zlEOo5WrO<Vf2V&r$o913M4)Jxa=>#@j^D9mouA(@$VO(H9Px<S{Glu5nMc|rg^GLf
zSGT)F|9hNt{n)|}+a^CP{m%ODTj1~XY1>rR%v`6Pvfat2-R|@3&F_Q5lD;s#iJHg`
E01R${Q~&?~

literal 0
HcmV?d00001

diff --git a/docs/build/html/search.html b/docs/build/html/search.html
new file mode 100644
index 0000000..075b532
--- /dev/null
+++ b/docs/build/html/search.html
@@ -0,0 +1,118 @@
+
+<!DOCTYPE html>
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Search &#8212; DART-WRF 2023.2.17 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
+    
+    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+    <script src="_static/doctools.js"></script>
+    <script src="_static/sphinx_highlight.js"></script>
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="#" />
+  <script src="searchindex.js" defer></script>
+  
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1 id="search-documentation">Search</h1>
+  
+  <noscript>
+  <div class="admonition warning">
+  <p>
+    Please activate JavaScript to enable the search
+    functionality.
+  </p>
+  </div>
+  </noscript>
+  
+  
+  <p>
+    Searching for multiple words only shows matches that contain
+    all words.
+  </p>
+  
+  
+  <form action="" method="get">
+    <input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+    <input type="submit" value="search" />
+    <span id="search-progress" style="padding-left: 10px"></span>
+  </form>
+  
+  
+  
+  <div id="search-results">
+  
+  </div>
+  
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index2.html">DART-WRF</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index2.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2023, Lukas Kugler.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 6.1.3</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js
new file mode 100644
index 0000000..6880cbd
--- /dev/null
+++ b/docs/build/html/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({"docnames": ["api", "example", "index", "index2"], "filenames": ["api.rst", "example.rst", "index.rst", "index2.rst"], "titles": ["&lt;no title&gt;", "&lt;no title&gt;", "Welcome to the DART-WRF documentation!", "Welcome to DART-WRF\u2019s documentation!"], "terms": {"workflow": 1, "configur": 1, "your": [1, 2], "experi": 1, "defin": 1, "simul": 1, "specif": 1, "variabl": 1, "config": 1, "cfg": 1, "py": 1, "http": [1, 2], "github": [1, 2], "com": [1, 2], "lkugler": 1, "dart": 1, "wrf": 1, "blob": 1, "master": 1, "path": 1, "python": [1, 2], "nck": 1, "etc": 1, "cluster": [1, 2], "depend": [1, 2], "ar": [1, 2], "numpi": 1, "panda": 1, "scipi": 1, "xarrai": 1, "netcdf4": 1, "instal": 1, "non": 1, "standard": 1, "packag": [1, 2], "pip": 1, "docopt": 1, "slurmpi": [1, 2], "user": 1, "i": [1, 2], "us": [1, 2], "meta": 1, "routin": 1, "function": [1, 2], "like": 1, "run_en": 1, "which": [1, 2], "schedul": 1, "prepar": 1, "initi": 1, "condit": 1, "from": 1, "input_sound": 1, "1": 1, "start": [1, 2], "time": 1, "begin": 1, "dt": 1, "datetim": 1, "2008": 1, "7": 1, "30": 1, "6": 1, "2": 1, "need": [1, 2], "directori": 1, "certain": 1, "file": 1, "id": [1, 2], "prepare_wrfrundir": 1, "3": 1, "creat": 1, "3d": 1, "run_id": 1, "depends_on": 1, "run": [1, 2], "free": 1, "forecast": 1, "let": 1, "": [1, 2], "sai": 1, "you": [1, 2], "want": 1, "6z": 1, "prior": 1, "an": [1, 2], "assimil": [1, 2], "9z": 1, "Then": 1, "can": [1, 2], "abov": 1, "step": 1, "ensembl": [1, 2], "integr": 1, "here": 1, "end": 1, "until": 1, "input_is_restart": 1, "fals": 1, "output_restart_interv": 1, "total_second": 1, "60": 1, "where": 1, "object": 1, "To": 1, "observ": [1, 2], "thi": 1, "command": 1, "prior_init_tim": 1, "prior_valid_tim": 1, "prior_path_exp": 1, "updat": 1, "data": [1, 2], "In": 1, "order": [1, 2], "continu": 1, "after": 1, "posterior": 1, "increment": 1, "set": 1, "prepare_ic_from_prior": 1, "str": 1, "model": 1, "state": 1, "restart": 1, "update_ic_from_da": 1, "wrfrst": 1, "filter_restart": 1, "copi": 1, "so": 1, "en": 1, "timedelta_integr": 1, "restart_path": 1, "archivedir": 1, "strftime": 1, "y": 1, "m": 1, "d_": 1, "h": 1, "timedelta_btw_assim": 1, "timedelta": 1, "exampl": 1, "generate_fre": 1, "final": 1, "slurm": [1, 2], "submiss": 1, "submit": 1, "job": 1, "queue": 1, "itself": 1, "soon": 1, "resourc": [1, 2], "avail": 1, "most": 1, "onli": 1, "one": [1, 2], "node": 1, "done": 1, "arrai": 1, "across": 1, "e": 1, "g": 1, "10": 1, "squeue": 1, "u": 1, "whoami": 1, "sort": 1, "jobid": 1, "partit": 1, "name": 1, "st": 1, "nodelist": 1, "reason": 1, "1710274": 1, "mem_0384": 1, "prepwrfr": 1, "pd": 1, "0": 1, "00": 1, "prioriti": 1, "1710275": 1, "ic": 1, "1710276": 1, "assim": 1, "42": 1, "1710277": 1, "1710278": 1, "1710279": 1, "prewrf2": 1, "1710280_": 1, "runwrf2": 1, "1710281": 1, "prttov": 1, "1710282": 1, "3a": 1, "1710283": 1, "1710284": 1, "1710285": 1, "1710286_": 1, "1710287": 1, "easili": 1, "switch": 1, "between": 1, "clustera": 1, "clusterconfig": 1, "vsc": 1, "userdir": 1, "home": 1, "patha": 1, "myuser": 1, "clusterb": 1, "jet": 1, "pathb": 1, "system": 2, "softwar": 2, "why": 2, "should": 2, "It": 2, "see": 2, "what": 2, "doe": 2, "first": 2, "glanc": 2, "modular": 2, "flexibl": 2, "handl": 2, "without": 2, "sleep": 2, "loop": 2, "bash": 2, "script": 2, "return": 2, "trigger": 2, "anoth": 2, "interfac": 2, "brentp": 2, "how": 2, "work": 2, "There": 2, "two": 2, "kind": 2, "code": 2, "One": 2, "immedi": 2, "later": 2, "The": 2, "instruct": 2, "do": 2, "thing": 2, "tell": 2, "right": 2, "input": 2, "latter": 2, "actual": 2, "Its": 2, "execut": 2, "awai": 2, "when": 2, "assign": 2, "real": 2, "weather": 2, "ye": 2, "convert": 2, "format": 2, "doc": 2, "ucar": 2, "edu": 2, "index": 3, "modul": 3, "search": 3, "page": 3}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"welcom": [2, 3], "dart": [2, 3], "wrf": [2, 3], "document": [2, 3], "content": 2, "": 3, "indic": 3, "tabl": 3}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Welcome to the DART-WRF documentation!": [[2, "welcome-to-the-dart-wrf-documentation"]], "Contents": [[2, "contents"]], "Welcome to DART-WRF\u2019s documentation!": [[3, "welcome-to-dart-wrf-s-documentation"]], "Indices and tables": [[3, "indices-and-tables"]]}, "indexentries": {}})
\ No newline at end of file
-- 
GitLab