diff --git a/docs/Makefile b/doc/Makefile
similarity index 100%
rename from docs/Makefile
rename to doc/Makefile
diff --git a/doc/build/.DS_Store b/doc/build/.DS_Store
new file mode 100644
index 0000000..94c7107
Binary files /dev/null and b/doc/build/.DS_Store differ
diff --git a/doc/build/doctrees/commentary/gm.doctree b/doc/build/doctrees/commentary/gm.doctree
new file mode 100644
index 0000000..fffc47f
Binary files /dev/null and b/doc/build/doctrees/commentary/gm.doctree differ
diff --git a/doc/build/doctrees/commentary/layout-lexing.doctree b/doc/build/doctrees/commentary/layout-lexing.doctree
new file mode 100644
index 0000000..c1222aa
Binary files /dev/null and b/doc/build/doctrees/commentary/layout-lexing.doctree differ
diff --git a/doc/build/doctrees/commentary/stg.doctree b/doc/build/doctrees/commentary/stg.doctree
new file mode 100644
index 0000000..df8d7e8
Binary files /dev/null and b/doc/build/doctrees/commentary/stg.doctree differ
diff --git a/doc/build/doctrees/commentary/ti.doctree b/doc/build/doctrees/commentary/ti.doctree
new file mode 100644
index 0000000..9af8898
Binary files /dev/null and b/doc/build/doctrees/commentary/ti.doctree differ
diff --git a/doc/build/doctrees/commentary/tim.doctree b/doc/build/doctrees/commentary/tim.doctree
new file mode 100644
index 0000000..a75f499
Binary files /dev/null and b/doc/build/doctrees/commentary/tim.doctree differ
diff --git a/doc/build/doctrees/environment.pickle b/doc/build/doctrees/environment.pickle
new file mode 100644
index 0000000..965557f
Binary files /dev/null and b/doc/build/doctrees/environment.pickle differ
diff --git a/doc/build/doctrees/glossary.doctree b/doc/build/doctrees/glossary.doctree
new file mode 100644
index 0000000..3940bca
Binary files /dev/null and b/doc/build/doctrees/glossary.doctree differ
diff --git a/doc/build/doctrees/index.doctree b/doc/build/doctrees/index.doctree
new file mode 100644
index 0000000..4d621f1
Binary files /dev/null and b/doc/build/doctrees/index.doctree differ
diff --git a/doc/build/doctrees/references/gm-state-transition-rules.doctree b/doc/build/doctrees/references/gm-state-transition-rules.doctree
new file mode 100644
index 0000000..59662fa
Binary files /dev/null and b/doc/build/doctrees/references/gm-state-transition-rules.doctree differ
diff --git a/doc/build/doctrees/references/gm-state-transitions.doctree b/doc/build/doctrees/references/gm-state-transitions.doctree
new file mode 100644
index 0000000..5737928
Binary files /dev/null and b/doc/build/doctrees/references/gm-state-transitions.doctree differ
diff --git a/doc/build/doctrees/references/ti-state-transitions.doctree b/doc/build/doctrees/references/ti-state-transitions.doctree
new file mode 100644
index 0000000..f5f279b
Binary files /dev/null and b/doc/build/doctrees/references/ti-state-transitions.doctree differ
diff --git a/doc/build/html/.buildinfo b/doc/build/html/.buildinfo
new file mode 100644
index 0000000..1816677
--- /dev/null
+++ b/doc/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: c908097bffb8af037d3087e1a2a33716
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/doc/build/html/_images/math/00420770ada7197f2dc04dc2cb7be7957619046e.svg b/doc/build/html/_images/math/00420770ada7197f2dc04dc2cb7be7957619046e.svg
new file mode 100644
index 0000000..f8bf21a
--- /dev/null
+++ b/doc/build/html/_images/math/00420770ada7197f2dc04dc2cb7be7957619046e.svg
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/021357ee48ac0e35395fa99353083fee184026dd.svg b/doc/build/html/_images/math/021357ee48ac0e35395fa99353083fee184026dd.svg
new file mode 100644
index 0000000..7c38391
--- /dev/null
+++ b/doc/build/html/_images/math/021357ee48ac0e35395fa99353083fee184026dd.svg
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/02341a0151149b70730cfe4fb67c90c60c7b657e.svg b/doc/build/html/_images/math/02341a0151149b70730cfe4fb67c90c60c7b657e.svg
new file mode 100644
index 0000000..00f5175
--- /dev/null
+++ b/doc/build/html/_images/math/02341a0151149b70730cfe4fb67c90c60c7b657e.svg
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/037e533b299f8acf5a007a8951726e0fb03c8297.svg b/doc/build/html/_images/math/037e533b299f8acf5a007a8951726e0fb03c8297.svg
new file mode 100644
index 0000000..2a2d5dd
--- /dev/null
+++ b/doc/build/html/_images/math/037e533b299f8acf5a007a8951726e0fb03c8297.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/068dad807177c214a4019500e8cb3e87d1f16fd3.svg b/doc/build/html/_images/math/068dad807177c214a4019500e8cb3e87d1f16fd3.svg
new file mode 100644
index 0000000..4cd6eba
--- /dev/null
+++ b/doc/build/html/_images/math/068dad807177c214a4019500e8cb3e87d1f16fd3.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/06c8c584f274e78c626596a6cdbb67086a30bf76.svg b/doc/build/html/_images/math/06c8c584f274e78c626596a6cdbb67086a30bf76.svg
new file mode 100644
index 0000000..a51ea18
--- /dev/null
+++ b/doc/build/html/_images/math/06c8c584f274e78c626596a6cdbb67086a30bf76.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/0787f8d42f5944ee828b01d06440da9b5dbd2ab8.svg b/doc/build/html/_images/math/0787f8d42f5944ee828b01d06440da9b5dbd2ab8.svg
new file mode 100644
index 0000000..6b0b1c3
--- /dev/null
+++ b/doc/build/html/_images/math/0787f8d42f5944ee828b01d06440da9b5dbd2ab8.svg
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/09635090aa47407c859d644721c5384fbb715130.svg b/doc/build/html/_images/math/09635090aa47407c859d644721c5384fbb715130.svg
new file mode 100644
index 0000000..f97438a
--- /dev/null
+++ b/doc/build/html/_images/math/09635090aa47407c859d644721c5384fbb715130.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/096ddb24a14399b5fff7b5f2f691468d437dae7d.svg b/doc/build/html/_images/math/096ddb24a14399b5fff7b5f2f691468d437dae7d.svg
new file mode 100644
index 0000000..5d89f24
--- /dev/null
+++ b/doc/build/html/_images/math/096ddb24a14399b5fff7b5f2f691468d437dae7d.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/09f13f0deb087a0975f104db0a2fe82979aec7d5.svg b/doc/build/html/_images/math/09f13f0deb087a0975f104db0a2fe82979aec7d5.svg
new file mode 100644
index 0000000..f3f435d
--- /dev/null
+++ b/doc/build/html/_images/math/09f13f0deb087a0975f104db0a2fe82979aec7d5.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/0a0458d62ece3f6e5019d53d0245ff5facdc5fdf.svg b/doc/build/html/_images/math/0a0458d62ece3f6e5019d53d0245ff5facdc5fdf.svg
new file mode 100644
index 0000000..fee58fb
--- /dev/null
+++ b/doc/build/html/_images/math/0a0458d62ece3f6e5019d53d0245ff5facdc5fdf.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/0dad12d4109ecbf3e9de69670796aed4e39bad83.svg b/doc/build/html/_images/math/0dad12d4109ecbf3e9de69670796aed4e39bad83.svg
new file mode 100644
index 0000000..e7c0a4c
--- /dev/null
+++ b/doc/build/html/_images/math/0dad12d4109ecbf3e9de69670796aed4e39bad83.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/0f620d28afa4216e77023746bb49f10715fc8824.svg b/doc/build/html/_images/math/0f620d28afa4216e77023746bb49f10715fc8824.svg
new file mode 100644
index 0000000..26857d5
--- /dev/null
+++ b/doc/build/html/_images/math/0f620d28afa4216e77023746bb49f10715fc8824.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/0fc7c9df5cc4f923f6953e615c1f28a6531c0b68.svg b/doc/build/html/_images/math/0fc7c9df5cc4f923f6953e615c1f28a6531c0b68.svg
new file mode 100644
index 0000000..d8c8a0f
--- /dev/null
+++ b/doc/build/html/_images/math/0fc7c9df5cc4f923f6953e615c1f28a6531c0b68.svg
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/10e6bec91d32d8e61faf2f5843c718ef27148abd.svg b/doc/build/html/_images/math/10e6bec91d32d8e61faf2f5843c718ef27148abd.svg
new file mode 100644
index 0000000..80bd2b8
--- /dev/null
+++ b/doc/build/html/_images/math/10e6bec91d32d8e61faf2f5843c718ef27148abd.svg
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/11649b728693b5cbf77eeb3b247c50f599f41294.svg b/doc/build/html/_images/math/11649b728693b5cbf77eeb3b247c50f599f41294.svg
new file mode 100644
index 0000000..7e2fb2d
--- /dev/null
+++ b/doc/build/html/_images/math/11649b728693b5cbf77eeb3b247c50f599f41294.svg
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1181faecef1f280d02390f5e6e4dc19abe5f4eb1.svg b/doc/build/html/_images/math/1181faecef1f280d02390f5e6e4dc19abe5f4eb1.svg
new file mode 100644
index 0000000..b7cfb8c
--- /dev/null
+++ b/doc/build/html/_images/math/1181faecef1f280d02390f5e6e4dc19abe5f4eb1.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/11cdffb9aaad97f1748e14369a93f303987914df.svg b/doc/build/html/_images/math/11cdffb9aaad97f1748e14369a93f303987914df.svg
new file mode 100644
index 0000000..b607d95
--- /dev/null
+++ b/doc/build/html/_images/math/11cdffb9aaad97f1748e14369a93f303987914df.svg
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/11f8d008cc7c2fca0d206330cc817662df3b0c43.svg b/doc/build/html/_images/math/11f8d008cc7c2fca0d206330cc817662df3b0c43.svg
new file mode 100644
index 0000000..b84e6ad
--- /dev/null
+++ b/doc/build/html/_images/math/11f8d008cc7c2fca0d206330cc817662df3b0c43.svg
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/126119a4c2150b58b13370bfdfa9bb789571ef13.svg b/doc/build/html/_images/math/126119a4c2150b58b13370bfdfa9bb789571ef13.svg
new file mode 100644
index 0000000..5e4ca09
--- /dev/null
+++ b/doc/build/html/_images/math/126119a4c2150b58b13370bfdfa9bb789571ef13.svg
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/13da9cdf17e4f8cf26f0caad8bda0e132f604db0.svg b/doc/build/html/_images/math/13da9cdf17e4f8cf26f0caad8bda0e132f604db0.svg
new file mode 100644
index 0000000..51ef60d
--- /dev/null
+++ b/doc/build/html/_images/math/13da9cdf17e4f8cf26f0caad8bda0e132f604db0.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/13fdcdda44eede2cc7be00ace4f3d009e82ebf8d.svg b/doc/build/html/_images/math/13fdcdda44eede2cc7be00ace4f3d009e82ebf8d.svg
new file mode 100644
index 0000000..7934125
--- /dev/null
+++ b/doc/build/html/_images/math/13fdcdda44eede2cc7be00ace4f3d009e82ebf8d.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1543958253280895e6abea369c0f9abf4898649c.svg b/doc/build/html/_images/math/1543958253280895e6abea369c0f9abf4898649c.svg
new file mode 100644
index 0000000..6776387
--- /dev/null
+++ b/doc/build/html/_images/math/1543958253280895e6abea369c0f9abf4898649c.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/15d23b1b737948104e84da7d3e79c697816c10df.svg b/doc/build/html/_images/math/15d23b1b737948104e84da7d3e79c697816c10df.svg
new file mode 100644
index 0000000..5018285
--- /dev/null
+++ b/doc/build/html/_images/math/15d23b1b737948104e84da7d3e79c697816c10df.svg
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1631c78842178c05d1a9c61aca6fbe3d74247ced.svg b/doc/build/html/_images/math/1631c78842178c05d1a9c61aca6fbe3d74247ced.svg
new file mode 100644
index 0000000..7934125
--- /dev/null
+++ b/doc/build/html/_images/math/1631c78842178c05d1a9c61aca6fbe3d74247ced.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/169b0ba6ac3730b32a1d4054ae9a3ec0912ff9c0.svg b/doc/build/html/_images/math/169b0ba6ac3730b32a1d4054ae9a3ec0912ff9c0.svg
new file mode 100644
index 0000000..b6fc685
--- /dev/null
+++ b/doc/build/html/_images/math/169b0ba6ac3730b32a1d4054ae9a3ec0912ff9c0.svg
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/176a0e2360b1e342041d8129c3a264321ae806ce.svg b/doc/build/html/_images/math/176a0e2360b1e342041d8129c3a264321ae806ce.svg
new file mode 100644
index 0000000..0f137d1
--- /dev/null
+++ b/doc/build/html/_images/math/176a0e2360b1e342041d8129c3a264321ae806ce.svg
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/187ead99c2f67003ebe37c473bac713194eaa50e.svg b/doc/build/html/_images/math/187ead99c2f67003ebe37c473bac713194eaa50e.svg
new file mode 100644
index 0000000..ad2dc83
--- /dev/null
+++ b/doc/build/html/_images/math/187ead99c2f67003ebe37c473bac713194eaa50e.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/18d617a93c757f0b0e644d4000b9decf2c1730df.svg b/doc/build/html/_images/math/18d617a93c757f0b0e644d4000b9decf2c1730df.svg
new file mode 100644
index 0000000..439ed26
--- /dev/null
+++ b/doc/build/html/_images/math/18d617a93c757f0b0e644d4000b9decf2c1730df.svg
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/18d81e1fc22e6feb876a993fe30fd9e8336f5bf6.svg b/doc/build/html/_images/math/18d81e1fc22e6feb876a993fe30fd9e8336f5bf6.svg
new file mode 100644
index 0000000..843a842
--- /dev/null
+++ b/doc/build/html/_images/math/18d81e1fc22e6feb876a993fe30fd9e8336f5bf6.svg
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1994936ebb09fed720f969439d19593b228aec95.svg b/doc/build/html/_images/math/1994936ebb09fed720f969439d19593b228aec95.svg
new file mode 100644
index 0000000..c60e75c
--- /dev/null
+++ b/doc/build/html/_images/math/1994936ebb09fed720f969439d19593b228aec95.svg
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1bbf876b63a42c5c5fd537974667f28e4fdfe71f.svg b/doc/build/html/_images/math/1bbf876b63a42c5c5fd537974667f28e4fdfe71f.svg
new file mode 100644
index 0000000..f3f435d
--- /dev/null
+++ b/doc/build/html/_images/math/1bbf876b63a42c5c5fd537974667f28e4fdfe71f.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1d1d05c2792b02598e523fd646d6268749231320.svg b/doc/build/html/_images/math/1d1d05c2792b02598e523fd646d6268749231320.svg
new file mode 100644
index 0000000..7538762
--- /dev/null
+++ b/doc/build/html/_images/math/1d1d05c2792b02598e523fd646d6268749231320.svg
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1db3a2eb7103da4d39315e15158991ac5eb31a8f.svg b/doc/build/html/_images/math/1db3a2eb7103da4d39315e15158991ac5eb31a8f.svg
new file mode 100644
index 0000000..716e802
--- /dev/null
+++ b/doc/build/html/_images/math/1db3a2eb7103da4d39315e15158991ac5eb31a8f.svg
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1e7e72c2a7ae8acbb9c293a2681b3cdf41e403b7.svg b/doc/build/html/_images/math/1e7e72c2a7ae8acbb9c293a2681b3cdf41e403b7.svg
new file mode 100644
index 0000000..f3f435d
--- /dev/null
+++ b/doc/build/html/_images/math/1e7e72c2a7ae8acbb9c293a2681b3cdf41e403b7.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1ec3c5f46f67104788324ef961a5eb2126495009.svg b/doc/build/html/_images/math/1ec3c5f46f67104788324ef961a5eb2126495009.svg
new file mode 100644
index 0000000..a90d9e4
--- /dev/null
+++ b/doc/build/html/_images/math/1ec3c5f46f67104788324ef961a5eb2126495009.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1f35e0be8716b58b223dddd9dc21d3cbf9b932c9.svg b/doc/build/html/_images/math/1f35e0be8716b58b223dddd9dc21d3cbf9b932c9.svg
new file mode 100644
index 0000000..91b88ad
--- /dev/null
+++ b/doc/build/html/_images/math/1f35e0be8716b58b223dddd9dc21d3cbf9b932c9.svg
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/1fc5e2a4ce5b523a6e99c0937d45b0f285461097.svg b/doc/build/html/_images/math/1fc5e2a4ce5b523a6e99c0937d45b0f285461097.svg
new file mode 100644
index 0000000..a8df688
--- /dev/null
+++ b/doc/build/html/_images/math/1fc5e2a4ce5b523a6e99c0937d45b0f285461097.svg
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/20219b0570be52c3f596972c4cd5461a162cccf9.svg b/doc/build/html/_images/math/20219b0570be52c3f596972c4cd5461a162cccf9.svg
new file mode 100644
index 0000000..3fab4ba
--- /dev/null
+++ b/doc/build/html/_images/math/20219b0570be52c3f596972c4cd5461a162cccf9.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/22bd53275636be43362c037f2ad50f5f63231e10.svg b/doc/build/html/_images/math/22bd53275636be43362c037f2ad50f5f63231e10.svg
new file mode 100644
index 0000000..f9ff864
--- /dev/null
+++ b/doc/build/html/_images/math/22bd53275636be43362c037f2ad50f5f63231e10.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/2417422cdf63ed202b16462208f8a62630f99679.svg b/doc/build/html/_images/math/2417422cdf63ed202b16462208f8a62630f99679.svg
new file mode 100644
index 0000000..d06c2d2
--- /dev/null
+++ b/doc/build/html/_images/math/2417422cdf63ed202b16462208f8a62630f99679.svg
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/24642c97b2dc64d03a103607414f676b6e9daf5c.svg b/doc/build/html/_images/math/24642c97b2dc64d03a103607414f676b6e9daf5c.svg
new file mode 100644
index 0000000..c1c058d
--- /dev/null
+++ b/doc/build/html/_images/math/24642c97b2dc64d03a103607414f676b6e9daf5c.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/24c437dab01cb429328b3fe9d20e8f5b64cefdc0.svg b/doc/build/html/_images/math/24c437dab01cb429328b3fe9d20e8f5b64cefdc0.svg
new file mode 100644
index 0000000..6c61428
--- /dev/null
+++ b/doc/build/html/_images/math/24c437dab01cb429328b3fe9d20e8f5b64cefdc0.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/262187dda48952ac064d34af5a8dc5ccc5df1126.svg b/doc/build/html/_images/math/262187dda48952ac064d34af5a8dc5ccc5df1126.svg
new file mode 100644
index 0000000..749a1ee
--- /dev/null
+++ b/doc/build/html/_images/math/262187dda48952ac064d34af5a8dc5ccc5df1126.svg
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/26f3be2a43bd1ac2dfa07345e26336292899f61f.svg b/doc/build/html/_images/math/26f3be2a43bd1ac2dfa07345e26336292899f61f.svg
new file mode 100644
index 0000000..b7f419b
--- /dev/null
+++ b/doc/build/html/_images/math/26f3be2a43bd1ac2dfa07345e26336292899f61f.svg
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/276f330b47308dae1686a2c0030783ed20a8866d.svg b/doc/build/html/_images/math/276f330b47308dae1686a2c0030783ed20a8866d.svg
new file mode 100644
index 0000000..17c0cbe
--- /dev/null
+++ b/doc/build/html/_images/math/276f330b47308dae1686a2c0030783ed20a8866d.svg
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/278a79d24fb8713d66c77d17909485589a944e60.svg b/doc/build/html/_images/math/278a79d24fb8713d66c77d17909485589a944e60.svg
new file mode 100644
index 0000000..bf087ed
--- /dev/null
+++ b/doc/build/html/_images/math/278a79d24fb8713d66c77d17909485589a944e60.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/29a11053c0f5950b2126ebf4829f569eeaa85ad6.svg b/doc/build/html/_images/math/29a11053c0f5950b2126ebf4829f569eeaa85ad6.svg
new file mode 100644
index 0000000..54b0ef3
--- /dev/null
+++ b/doc/build/html/_images/math/29a11053c0f5950b2126ebf4829f569eeaa85ad6.svg
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/2a63b1f89224cb96d4e2b5a0f9494eac68234a42.svg b/doc/build/html/_images/math/2a63b1f89224cb96d4e2b5a0f9494eac68234a42.svg
new file mode 100644
index 0000000..3cf35e5
--- /dev/null
+++ b/doc/build/html/_images/math/2a63b1f89224cb96d4e2b5a0f9494eac68234a42.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/2b4c25ea56a82ed5f9d8182f3c38c632ab47e8bd.svg b/doc/build/html/_images/math/2b4c25ea56a82ed5f9d8182f3c38c632ab47e8bd.svg
new file mode 100644
index 0000000..c60aba4
--- /dev/null
+++ b/doc/build/html/_images/math/2b4c25ea56a82ed5f9d8182f3c38c632ab47e8bd.svg
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/2bfab760cd5a82cd980862645b628ea4c2a97f34.svg b/doc/build/html/_images/math/2bfab760cd5a82cd980862645b628ea4c2a97f34.svg
new file mode 100644
index 0000000..83eb70d
--- /dev/null
+++ b/doc/build/html/_images/math/2bfab760cd5a82cd980862645b628ea4c2a97f34.svg
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/2dc5e48f0f26f08073e6e1cdd70ff876c6ec2434.svg b/doc/build/html/_images/math/2dc5e48f0f26f08073e6e1cdd70ff876c6ec2434.svg
new file mode 100644
index 0000000..5b253d8
--- /dev/null
+++ b/doc/build/html/_images/math/2dc5e48f0f26f08073e6e1cdd70ff876c6ec2434.svg
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/2e21d478eedaa358bccb9aa3c57a5b290e671863.svg b/doc/build/html/_images/math/2e21d478eedaa358bccb9aa3c57a5b290e671863.svg
new file mode 100644
index 0000000..47f743f
--- /dev/null
+++ b/doc/build/html/_images/math/2e21d478eedaa358bccb9aa3c57a5b290e671863.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/2f7215ad8dc4415a832b9101c30f98ad94307f61.svg b/doc/build/html/_images/math/2f7215ad8dc4415a832b9101c30f98ad94307f61.svg
new file mode 100644
index 0000000..be14422
--- /dev/null
+++ b/doc/build/html/_images/math/2f7215ad8dc4415a832b9101c30f98ad94307f61.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3075f944e67c6a986438fad3c0d23ee7cc191a88.svg b/doc/build/html/_images/math/3075f944e67c6a986438fad3c0d23ee7cc191a88.svg
new file mode 100644
index 0000000..4cd6eba
--- /dev/null
+++ b/doc/build/html/_images/math/3075f944e67c6a986438fad3c0d23ee7cc191a88.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/30ca5614d0c1f1e407a064238095024a155e2466.svg b/doc/build/html/_images/math/30ca5614d0c1f1e407a064238095024a155e2466.svg
new file mode 100644
index 0000000..f3f435d
--- /dev/null
+++ b/doc/build/html/_images/math/30ca5614d0c1f1e407a064238095024a155e2466.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/314087b4a49447d217e1247a7a58aeb2ebf04f6b.svg b/doc/build/html/_images/math/314087b4a49447d217e1247a7a58aeb2ebf04f6b.svg
new file mode 100644
index 0000000..5c6f94d
--- /dev/null
+++ b/doc/build/html/_images/math/314087b4a49447d217e1247a7a58aeb2ebf04f6b.svg
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/32843bfb29b74cf3428d62c0a0bb4a85018bf793.svg b/doc/build/html/_images/math/32843bfb29b74cf3428d62c0a0bb4a85018bf793.svg
new file mode 100644
index 0000000..445a72b
--- /dev/null
+++ b/doc/build/html/_images/math/32843bfb29b74cf3428d62c0a0bb4a85018bf793.svg
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/334a9ad9e9541a3f8be7530fed1ec7373510a227.svg b/doc/build/html/_images/math/334a9ad9e9541a3f8be7530fed1ec7373510a227.svg
new file mode 100644
index 0000000..8be4928
--- /dev/null
+++ b/doc/build/html/_images/math/334a9ad9e9541a3f8be7530fed1ec7373510a227.svg
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/33b86e3c01637e2ffa96b8a23365bd27e98594fb.svg b/doc/build/html/_images/math/33b86e3c01637e2ffa96b8a23365bd27e98594fb.svg
new file mode 100644
index 0000000..f531ab6
--- /dev/null
+++ b/doc/build/html/_images/math/33b86e3c01637e2ffa96b8a23365bd27e98594fb.svg
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/33f37b6cae353c26c80f089c5b354e7575e7c201.svg b/doc/build/html/_images/math/33f37b6cae353c26c80f089c5b354e7575e7c201.svg
new file mode 100644
index 0000000..23c0fa0
--- /dev/null
+++ b/doc/build/html/_images/math/33f37b6cae353c26c80f089c5b354e7575e7c201.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3436a201726f4f03e64783f41d44d9ae3edd5118.svg b/doc/build/html/_images/math/3436a201726f4f03e64783f41d44d9ae3edd5118.svg
new file mode 100644
index 0000000..6c61428
--- /dev/null
+++ b/doc/build/html/_images/math/3436a201726f4f03e64783f41d44d9ae3edd5118.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/34e91bc0685dd54adb3e06c06e6fc0cc4d8ad419.svg b/doc/build/html/_images/math/34e91bc0685dd54adb3e06c06e6fc0cc4d8ad419.svg
new file mode 100644
index 0000000..f5a0a58
--- /dev/null
+++ b/doc/build/html/_images/math/34e91bc0685dd54adb3e06c06e6fc0cc4d8ad419.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/354d9ac40cde930452a7f40dd91dc043c92aba12.svg b/doc/build/html/_images/math/354d9ac40cde930452a7f40dd91dc043c92aba12.svg
new file mode 100644
index 0000000..81205c5
--- /dev/null
+++ b/doc/build/html/_images/math/354d9ac40cde930452a7f40dd91dc043c92aba12.svg
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/37c1815c2dba065ef8c2f84100676cf9d1b6511a.svg b/doc/build/html/_images/math/37c1815c2dba065ef8c2f84100676cf9d1b6511a.svg
new file mode 100644
index 0000000..2782267
--- /dev/null
+++ b/doc/build/html/_images/math/37c1815c2dba065ef8c2f84100676cf9d1b6511a.svg
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3939cf0a8e341efac8ba1aeb5ae6271cd00c37c7.svg b/doc/build/html/_images/math/3939cf0a8e341efac8ba1aeb5ae6271cd00c37c7.svg
new file mode 100644
index 0000000..1656617
--- /dev/null
+++ b/doc/build/html/_images/math/3939cf0a8e341efac8ba1aeb5ae6271cd00c37c7.svg
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3a0879f2e436b8778f86d0b3315af89e4b23061e.svg b/doc/build/html/_images/math/3a0879f2e436b8778f86d0b3315af89e4b23061e.svg
new file mode 100644
index 0000000..068e833
--- /dev/null
+++ b/doc/build/html/_images/math/3a0879f2e436b8778f86d0b3315af89e4b23061e.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3c5133875b5087d8f8b521a6b737f82d715cf7e7.svg b/doc/build/html/_images/math/3c5133875b5087d8f8b521a6b737f82d715cf7e7.svg
new file mode 100644
index 0000000..5c80b04
--- /dev/null
+++ b/doc/build/html/_images/math/3c5133875b5087d8f8b521a6b737f82d715cf7e7.svg
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3cdf4d8583b839b15fed122e5293d261cc34639d.svg b/doc/build/html/_images/math/3cdf4d8583b839b15fed122e5293d261cc34639d.svg
new file mode 100644
index 0000000..f3f435d
--- /dev/null
+++ b/doc/build/html/_images/math/3cdf4d8583b839b15fed122e5293d261cc34639d.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3eb2a0684a9c3d7c7a02334d788b2bd85cc83b55.svg b/doc/build/html/_images/math/3eb2a0684a9c3d7c7a02334d788b2bd85cc83b55.svg
new file mode 100644
index 0000000..30c0ae5
--- /dev/null
+++ b/doc/build/html/_images/math/3eb2a0684a9c3d7c7a02334d788b2bd85cc83b55.svg
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3f0efc21d61f6d73d821b258392b7be1fc9036eb.svg b/doc/build/html/_images/math/3f0efc21d61f6d73d821b258392b7be1fc9036eb.svg
new file mode 100644
index 0000000..f991058
--- /dev/null
+++ b/doc/build/html/_images/math/3f0efc21d61f6d73d821b258392b7be1fc9036eb.svg
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3fa33eeafbc80a0bcf2766e8f56e9cb2b6148e79.svg b/doc/build/html/_images/math/3fa33eeafbc80a0bcf2766e8f56e9cb2b6148e79.svg
new file mode 100644
index 0000000..dec7a64
--- /dev/null
+++ b/doc/build/html/_images/math/3fa33eeafbc80a0bcf2766e8f56e9cb2b6148e79.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3fc332dc07916d83f75fcddf6da06a7734032ee9.svg b/doc/build/html/_images/math/3fc332dc07916d83f75fcddf6da06a7734032ee9.svg
new file mode 100644
index 0000000..09a7149
--- /dev/null
+++ b/doc/build/html/_images/math/3fc332dc07916d83f75fcddf6da06a7734032ee9.svg
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/3ffc6e15d2c381b0ab11691e13dba314d2c6541d.svg b/doc/build/html/_images/math/3ffc6e15d2c381b0ab11691e13dba314d2c6541d.svg
new file mode 100644
index 0000000..4f3b8b7
--- /dev/null
+++ b/doc/build/html/_images/math/3ffc6e15d2c381b0ab11691e13dba314d2c6541d.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/4004b3a0b74a3d25993573e61733383293f43681.svg b/doc/build/html/_images/math/4004b3a0b74a3d25993573e61733383293f43681.svg
new file mode 100644
index 0000000..1b4963d
--- /dev/null
+++ b/doc/build/html/_images/math/4004b3a0b74a3d25993573e61733383293f43681.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/42273dafbdeac1dd5bdf8568a1e9ab8625c0629d.svg b/doc/build/html/_images/math/42273dafbdeac1dd5bdf8568a1e9ab8625c0629d.svg
new file mode 100644
index 0000000..84b934a
--- /dev/null
+++ b/doc/build/html/_images/math/42273dafbdeac1dd5bdf8568a1e9ab8625c0629d.svg
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/422ce4de46a354723a0f5b33995d885c86bb0e70.svg b/doc/build/html/_images/math/422ce4de46a354723a0f5b33995d885c86bb0e70.svg
new file mode 100644
index 0000000..6c61428
--- /dev/null
+++ b/doc/build/html/_images/math/422ce4de46a354723a0f5b33995d885c86bb0e70.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/4298057f95b17024436a0d57ca56eae8125e10ec.svg b/doc/build/html/_images/math/4298057f95b17024436a0d57ca56eae8125e10ec.svg
new file mode 100644
index 0000000..19256da
--- /dev/null
+++ b/doc/build/html/_images/math/4298057f95b17024436a0d57ca56eae8125e10ec.svg
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/42da9c8a8264ec5b3d99bd3549773d2113758a5f.svg b/doc/build/html/_images/math/42da9c8a8264ec5b3d99bd3549773d2113758a5f.svg
new file mode 100644
index 0000000..9f4a820
--- /dev/null
+++ b/doc/build/html/_images/math/42da9c8a8264ec5b3d99bd3549773d2113758a5f.svg
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/43434266ad5b9f36d523d70ff88db5c4e9366b03.svg b/doc/build/html/_images/math/43434266ad5b9f36d523d70ff88db5c4e9366b03.svg
new file mode 100644
index 0000000..b8865a4
--- /dev/null
+++ b/doc/build/html/_images/math/43434266ad5b9f36d523d70ff88db5c4e9366b03.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/4713e4c065d6aabec3acece28c5ecc882faa119a.svg b/doc/build/html/_images/math/4713e4c065d6aabec3acece28c5ecc882faa119a.svg
new file mode 100644
index 0000000..f9e1a4c
--- /dev/null
+++ b/doc/build/html/_images/math/4713e4c065d6aabec3acece28c5ecc882faa119a.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/478aeca314882e29dc3a52d64624061fb36948f0.svg b/doc/build/html/_images/math/478aeca314882e29dc3a52d64624061fb36948f0.svg
new file mode 100644
index 0000000..1f5867d
--- /dev/null
+++ b/doc/build/html/_images/math/478aeca314882e29dc3a52d64624061fb36948f0.svg
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/48d3c54aba5df0dae426f9470d65778e8ccc24ab.svg b/doc/build/html/_images/math/48d3c54aba5df0dae426f9470d65778e8ccc24ab.svg
new file mode 100644
index 0000000..093ca17
--- /dev/null
+++ b/doc/build/html/_images/math/48d3c54aba5df0dae426f9470d65778e8ccc24ab.svg
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/4966d2d6002bc14e00e77569c63b325e5b02f101.svg b/doc/build/html/_images/math/4966d2d6002bc14e00e77569c63b325e5b02f101.svg
new file mode 100644
index 0000000..c758361
--- /dev/null
+++ b/doc/build/html/_images/math/4966d2d6002bc14e00e77569c63b325e5b02f101.svg
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/49a5030ceb5f0c5f44d4581db994508f66b20dfa.svg b/doc/build/html/_images/math/49a5030ceb5f0c5f44d4581db994508f66b20dfa.svg
new file mode 100644
index 0000000..76ab1e6
--- /dev/null
+++ b/doc/build/html/_images/math/49a5030ceb5f0c5f44d4581db994508f66b20dfa.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/4d427448f9b8b54db19e316c805033a7abfe11d2.svg b/doc/build/html/_images/math/4d427448f9b8b54db19e316c805033a7abfe11d2.svg
new file mode 100644
index 0000000..c689ec2
--- /dev/null
+++ b/doc/build/html/_images/math/4d427448f9b8b54db19e316c805033a7abfe11d2.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/4d588662930e30ecc01abfa745b194bfb5ffbb27.svg b/doc/build/html/_images/math/4d588662930e30ecc01abfa745b194bfb5ffbb27.svg
new file mode 100644
index 0000000..ab4a3b2
--- /dev/null
+++ b/doc/build/html/_images/math/4d588662930e30ecc01abfa745b194bfb5ffbb27.svg
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/4dc55ad8626b971383946574d473861074202c72.svg b/doc/build/html/_images/math/4dc55ad8626b971383946574d473861074202c72.svg
new file mode 100644
index 0000000..6c61428
--- /dev/null
+++ b/doc/build/html/_images/math/4dc55ad8626b971383946574d473861074202c72.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/4de73a2c1d1501096302e1e173eaf947ceb9c7d4.svg b/doc/build/html/_images/math/4de73a2c1d1501096302e1e173eaf947ceb9c7d4.svg
new file mode 100644
index 0000000..c313d19
--- /dev/null
+++ b/doc/build/html/_images/math/4de73a2c1d1501096302e1e173eaf947ceb9c7d4.svg
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/4f85c9abccccc8bc1f4b830fa22701457c595b96.png b/doc/build/html/_images/math/4f85c9abccccc8bc1f4b830fa22701457c595b96.png
new file mode 100644
index 0000000..2548abe
Binary files /dev/null and b/doc/build/html/_images/math/4f85c9abccccc8bc1f4b830fa22701457c595b96.png differ
diff --git a/doc/build/html/_images/math/4f85c9abccccc8bc1f4b830fa22701457c595b96.svg b/doc/build/html/_images/math/4f85c9abccccc8bc1f4b830fa22701457c595b96.svg
new file mode 100644
index 0000000..fb57299
--- /dev/null
+++ b/doc/build/html/_images/math/4f85c9abccccc8bc1f4b830fa22701457c595b96.svg
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/51b8ee3def56618c3d5c55841743d53ffbedbcfb.svg b/doc/build/html/_images/math/51b8ee3def56618c3d5c55841743d53ffbedbcfb.svg
new file mode 100644
index 0000000..b028c15
--- /dev/null
+++ b/doc/build/html/_images/math/51b8ee3def56618c3d5c55841743d53ffbedbcfb.svg
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/52bc533fab728efc3a24ef236fcb017ad2888830.svg b/doc/build/html/_images/math/52bc533fab728efc3a24ef236fcb017ad2888830.svg
new file mode 100644
index 0000000..1a3d3d5
--- /dev/null
+++ b/doc/build/html/_images/math/52bc533fab728efc3a24ef236fcb017ad2888830.svg
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/537fa099ced1d1933aba81912860d6c60e6c6f75.svg b/doc/build/html/_images/math/537fa099ced1d1933aba81912860d6c60e6c6f75.svg
new file mode 100644
index 0000000..8772fb8
--- /dev/null
+++ b/doc/build/html/_images/math/537fa099ced1d1933aba81912860d6c60e6c6f75.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/5380d8227d0a06608b108a26b4a618972b4b7e28.svg b/doc/build/html/_images/math/5380d8227d0a06608b108a26b4a618972b4b7e28.svg
new file mode 100644
index 0000000..2b59167
--- /dev/null
+++ b/doc/build/html/_images/math/5380d8227d0a06608b108a26b4a618972b4b7e28.svg
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/538b0fab8c90c1abe8c6abaa3c807886040452db.svg b/doc/build/html/_images/math/538b0fab8c90c1abe8c6abaa3c807886040452db.svg
new file mode 100644
index 0000000..e92295f
--- /dev/null
+++ b/doc/build/html/_images/math/538b0fab8c90c1abe8c6abaa3c807886040452db.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/565b4d912dcfd08351ed35fd0deb3cadc0781241.svg b/doc/build/html/_images/math/565b4d912dcfd08351ed35fd0deb3cadc0781241.svg
new file mode 100644
index 0000000..16f68bd
--- /dev/null
+++ b/doc/build/html/_images/math/565b4d912dcfd08351ed35fd0deb3cadc0781241.svg
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/57b0d3fbe6f17a0e706fda6039130d8aaaf32903.svg b/doc/build/html/_images/math/57b0d3fbe6f17a0e706fda6039130d8aaaf32903.svg
new file mode 100644
index 0000000..feebd72
--- /dev/null
+++ b/doc/build/html/_images/math/57b0d3fbe6f17a0e706fda6039130d8aaaf32903.svg
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/5a00c38ab6f040dfa75be56918953af44dc11637.svg b/doc/build/html/_images/math/5a00c38ab6f040dfa75be56918953af44dc11637.svg
new file mode 100644
index 0000000..ffc8c4f
--- /dev/null
+++ b/doc/build/html/_images/math/5a00c38ab6f040dfa75be56918953af44dc11637.svg
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/5acebcc879cae1694dcc537b99796e0dc0e0ff05.svg b/doc/build/html/_images/math/5acebcc879cae1694dcc537b99796e0dc0e0ff05.svg
new file mode 100644
index 0000000..eaf0f91
--- /dev/null
+++ b/doc/build/html/_images/math/5acebcc879cae1694dcc537b99796e0dc0e0ff05.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/5bd3cd582dce130ac602d5d805972076e5bc0f56.svg b/doc/build/html/_images/math/5bd3cd582dce130ac602d5d805972076e5bc0f56.svg
new file mode 100644
index 0000000..2b036ca
--- /dev/null
+++ b/doc/build/html/_images/math/5bd3cd582dce130ac602d5d805972076e5bc0f56.svg
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/5cf94fab747054130daaf436fc83ab590969c35f.svg b/doc/build/html/_images/math/5cf94fab747054130daaf436fc83ab590969c35f.svg
new file mode 100644
index 0000000..f15e5c7
--- /dev/null
+++ b/doc/build/html/_images/math/5cf94fab747054130daaf436fc83ab590969c35f.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/5e158f7fd5d27c3feef4c9b1500d451656fe2aa9.svg b/doc/build/html/_images/math/5e158f7fd5d27c3feef4c9b1500d451656fe2aa9.svg
new file mode 100644
index 0000000..91b1c26
--- /dev/null
+++ b/doc/build/html/_images/math/5e158f7fd5d27c3feef4c9b1500d451656fe2aa9.svg
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/5f6f5e2b2f037821ad3386d2355364f2667e3c34.svg b/doc/build/html/_images/math/5f6f5e2b2f037821ad3386d2355364f2667e3c34.svg
new file mode 100644
index 0000000..f9d63f9
--- /dev/null
+++ b/doc/build/html/_images/math/5f6f5e2b2f037821ad3386d2355364f2667e3c34.svg
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/604a42b94739b04fa9559a97c3703816bf57aa5c.svg b/doc/build/html/_images/math/604a42b94739b04fa9559a97c3703816bf57aa5c.svg
new file mode 100644
index 0000000..5e6adc0
--- /dev/null
+++ b/doc/build/html/_images/math/604a42b94739b04fa9559a97c3703816bf57aa5c.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/607985174357bbbea2e2b47ab0694b2d21a71b35.svg b/doc/build/html/_images/math/607985174357bbbea2e2b47ab0694b2d21a71b35.svg
new file mode 100644
index 0000000..784201c
--- /dev/null
+++ b/doc/build/html/_images/math/607985174357bbbea2e2b47ab0694b2d21a71b35.svg
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/60f4e38bb9ff4a7bcb201e82cb956a3ccf064632.svg b/doc/build/html/_images/math/60f4e38bb9ff4a7bcb201e82cb956a3ccf064632.svg
new file mode 100644
index 0000000..d66df7f
--- /dev/null
+++ b/doc/build/html/_images/math/60f4e38bb9ff4a7bcb201e82cb956a3ccf064632.svg
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/620e45afe56ccc0dae7d9566d244b13bb6cb0631.svg b/doc/build/html/_images/math/620e45afe56ccc0dae7d9566d244b13bb6cb0631.svg
new file mode 100644
index 0000000..c60aba4
--- /dev/null
+++ b/doc/build/html/_images/math/620e45afe56ccc0dae7d9566d244b13bb6cb0631.svg
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/625a1ccce064b171eb9d5ec015e07d234ef26c74.svg b/doc/build/html/_images/math/625a1ccce064b171eb9d5ec015e07d234ef26c74.svg
new file mode 100644
index 0000000..9d56d84
--- /dev/null
+++ b/doc/build/html/_images/math/625a1ccce064b171eb9d5ec015e07d234ef26c74.svg
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/643dd082a2b49d9ebdb87533aac62fdd342f4fd5.svg b/doc/build/html/_images/math/643dd082a2b49d9ebdb87533aac62fdd342f4fd5.svg
new file mode 100644
index 0000000..477060d
--- /dev/null
+++ b/doc/build/html/_images/math/643dd082a2b49d9ebdb87533aac62fdd342f4fd5.svg
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/64728a32abbc0b68b58acd0467082b83653421df.svg b/doc/build/html/_images/math/64728a32abbc0b68b58acd0467082b83653421df.svg
new file mode 100644
index 0000000..ec79f8b
--- /dev/null
+++ b/doc/build/html/_images/math/64728a32abbc0b68b58acd0467082b83653421df.svg
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/66eb37710389b629d7ffa626fb55276426bef938.svg b/doc/build/html/_images/math/66eb37710389b629d7ffa626fb55276426bef938.svg
new file mode 100644
index 0000000..15dfb50
--- /dev/null
+++ b/doc/build/html/_images/math/66eb37710389b629d7ffa626fb55276426bef938.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6a99995af47f16f85dab4ffa3208177455960e73.svg b/doc/build/html/_images/math/6a99995af47f16f85dab4ffa3208177455960e73.svg
new file mode 100644
index 0000000..cf16993
--- /dev/null
+++ b/doc/build/html/_images/math/6a99995af47f16f85dab4ffa3208177455960e73.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6bb003bcdf823b102e5c80f3ca1cd4208c7493fc.svg b/doc/build/html/_images/math/6bb003bcdf823b102e5c80f3ca1cd4208c7493fc.svg
new file mode 100644
index 0000000..f3f435d
--- /dev/null
+++ b/doc/build/html/_images/math/6bb003bcdf823b102e5c80f3ca1cd4208c7493fc.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6bdb1b0b4006f5b62d10449cd280f311f4cf12f8.svg b/doc/build/html/_images/math/6bdb1b0b4006f5b62d10449cd280f311f4cf12f8.svg
new file mode 100644
index 0000000..4cd6eba
--- /dev/null
+++ b/doc/build/html/_images/math/6bdb1b0b4006f5b62d10449cd280f311f4cf12f8.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6c62b0ff237d0ef459470304b79de4219c771037.svg b/doc/build/html/_images/math/6c62b0ff237d0ef459470304b79de4219c771037.svg
new file mode 100644
index 0000000..f9ff864
--- /dev/null
+++ b/doc/build/html/_images/math/6c62b0ff237d0ef459470304b79de4219c771037.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6d7f995d88e257359a4ce4f854c967791c1ec71d.svg b/doc/build/html/_images/math/6d7f995d88e257359a4ce4f854c967791c1ec71d.svg
new file mode 100644
index 0000000..d5c35c6
--- /dev/null
+++ b/doc/build/html/_images/math/6d7f995d88e257359a4ce4f854c967791c1ec71d.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6d95eec30809d2f72c4d645e69ee6ba5fd3f0767.svg b/doc/build/html/_images/math/6d95eec30809d2f72c4d645e69ee6ba5fd3f0767.svg
new file mode 100644
index 0000000..5d2b052
--- /dev/null
+++ b/doc/build/html/_images/math/6d95eec30809d2f72c4d645e69ee6ba5fd3f0767.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6de99ea1d6d13dbeedcdfcf7e3807cdd4f2e8594.svg b/doc/build/html/_images/math/6de99ea1d6d13dbeedcdfcf7e3807cdd4f2e8594.svg
new file mode 100644
index 0000000..b2bef05
--- /dev/null
+++ b/doc/build/html/_images/math/6de99ea1d6d13dbeedcdfcf7e3807cdd4f2e8594.svg
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6e064e1b27f430eda7087e304da72f29d1f0b102.svg b/doc/build/html/_images/math/6e064e1b27f430eda7087e304da72f29d1f0b102.svg
new file mode 100644
index 0000000..a6766a3
--- /dev/null
+++ b/doc/build/html/_images/math/6e064e1b27f430eda7087e304da72f29d1f0b102.svg
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6efb62efa4d897975a5924d6f8ef3b7466fc7b4a.svg b/doc/build/html/_images/math/6efb62efa4d897975a5924d6f8ef3b7466fc7b4a.svg
new file mode 100644
index 0000000..983bd13
--- /dev/null
+++ b/doc/build/html/_images/math/6efb62efa4d897975a5924d6f8ef3b7466fc7b4a.svg
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6f23f2ac78d6d7452697a0a4d711c406a7e04b6b.svg b/doc/build/html/_images/math/6f23f2ac78d6d7452697a0a4d711c406a7e04b6b.svg
new file mode 100644
index 0000000..1fc5df7
--- /dev/null
+++ b/doc/build/html/_images/math/6f23f2ac78d6d7452697a0a4d711c406a7e04b6b.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6fd2125a6059ef9b07f4cbe32c2f5b35ee13ff49.svg b/doc/build/html/_images/math/6fd2125a6059ef9b07f4cbe32c2f5b35ee13ff49.svg
new file mode 100644
index 0000000..1368dbb
--- /dev/null
+++ b/doc/build/html/_images/math/6fd2125a6059ef9b07f4cbe32c2f5b35ee13ff49.svg
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/6fdc8bbb8b19c7ad0794ceefd47b82c0111b21f8.svg b/doc/build/html/_images/math/6fdc8bbb8b19c7ad0794ceefd47b82c0111b21f8.svg
new file mode 100644
index 0000000..344767d
--- /dev/null
+++ b/doc/build/html/_images/math/6fdc8bbb8b19c7ad0794ceefd47b82c0111b21f8.svg
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/702f28367db2bbf757f819d55f238962369384ad.svg b/doc/build/html/_images/math/702f28367db2bbf757f819d55f238962369384ad.svg
new file mode 100644
index 0000000..9bc1f01
--- /dev/null
+++ b/doc/build/html/_images/math/702f28367db2bbf757f819d55f238962369384ad.svg
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/71a114da143774e891c3cb6c37c39d8bc98c0386.svg b/doc/build/html/_images/math/71a114da143774e891c3cb6c37c39d8bc98c0386.svg
new file mode 100644
index 0000000..f3f435d
--- /dev/null
+++ b/doc/build/html/_images/math/71a114da143774e891c3cb6c37c39d8bc98c0386.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/746912d7454caf98daf2e20797372b64bb3b728e.svg b/doc/build/html/_images/math/746912d7454caf98daf2e20797372b64bb3b728e.svg
new file mode 100644
index 0000000..f9e1a4c
--- /dev/null
+++ b/doc/build/html/_images/math/746912d7454caf98daf2e20797372b64bb3b728e.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/75427250d809caece36cbdd61547f4f5e714757e.svg b/doc/build/html/_images/math/75427250d809caece36cbdd61547f4f5e714757e.svg
new file mode 100644
index 0000000..7d11232
--- /dev/null
+++ b/doc/build/html/_images/math/75427250d809caece36cbdd61547f4f5e714757e.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/758e69f9e44c00c28db11caa744ce8468e26062d.svg b/doc/build/html/_images/math/758e69f9e44c00c28db11caa744ce8468e26062d.svg
new file mode 100644
index 0000000..15608ff
--- /dev/null
+++ b/doc/build/html/_images/math/758e69f9e44c00c28db11caa744ce8468e26062d.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/7648bfc0796ff33966fbc002c446b2242d296fd9.svg b/doc/build/html/_images/math/7648bfc0796ff33966fbc002c446b2242d296fd9.svg
new file mode 100644
index 0000000..165e7bb
--- /dev/null
+++ b/doc/build/html/_images/math/7648bfc0796ff33966fbc002c446b2242d296fd9.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/768668a1db4f505075a95e7966ad942d5fb6fd83.svg b/doc/build/html/_images/math/768668a1db4f505075a95e7966ad942d5fb6fd83.svg
new file mode 100644
index 0000000..c2651cb
--- /dev/null
+++ b/doc/build/html/_images/math/768668a1db4f505075a95e7966ad942d5fb6fd83.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/76b4cd411d70f6fc673e2311a6a786f54b72bf67.svg b/doc/build/html/_images/math/76b4cd411d70f6fc673e2311a6a786f54b72bf67.svg
new file mode 100644
index 0000000..4340d20
--- /dev/null
+++ b/doc/build/html/_images/math/76b4cd411d70f6fc673e2311a6a786f54b72bf67.svg
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/78965124ba0a627060835202535c7861f9b8c69b.svg b/doc/build/html/_images/math/78965124ba0a627060835202535c7861f9b8c69b.svg
new file mode 100644
index 0000000..98a4a20
--- /dev/null
+++ b/doc/build/html/_images/math/78965124ba0a627060835202535c7861f9b8c69b.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/79765386818a281cce0f753107ac50656c0cc8fa.svg b/doc/build/html/_images/math/79765386818a281cce0f753107ac50656c0cc8fa.svg
new file mode 100644
index 0000000..adb8faf
--- /dev/null
+++ b/doc/build/html/_images/math/79765386818a281cce0f753107ac50656c0cc8fa.svg
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/7a274836cebcd29820798059050d713d9c2fc3f9.svg b/doc/build/html/_images/math/7a274836cebcd29820798059050d713d9c2fc3f9.svg
new file mode 100644
index 0000000..e68e872
--- /dev/null
+++ b/doc/build/html/_images/math/7a274836cebcd29820798059050d713d9c2fc3f9.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/7a5577f4835bea58fb5e61feccfb2cac76ad365a.svg b/doc/build/html/_images/math/7a5577f4835bea58fb5e61feccfb2cac76ad365a.svg
new file mode 100644
index 0000000..6047b1e
--- /dev/null
+++ b/doc/build/html/_images/math/7a5577f4835bea58fb5e61feccfb2cac76ad365a.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/7aaf1912f6d672948be49227545febbb868e4887.svg b/doc/build/html/_images/math/7aaf1912f6d672948be49227545febbb868e4887.svg
new file mode 100644
index 0000000..ee29efe
--- /dev/null
+++ b/doc/build/html/_images/math/7aaf1912f6d672948be49227545febbb868e4887.svg
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/7b6ca1926b0911a8c3523f091346cf45a7877c61.svg b/doc/build/html/_images/math/7b6ca1926b0911a8c3523f091346cf45a7877c61.svg
new file mode 100644
index 0000000..f7868c7
--- /dev/null
+++ b/doc/build/html/_images/math/7b6ca1926b0911a8c3523f091346cf45a7877c61.svg
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/7bec4ba909b65b3426b4a35a78d3bb691135632f.svg b/doc/build/html/_images/math/7bec4ba909b65b3426b4a35a78d3bb691135632f.svg
new file mode 100644
index 0000000..16ebb54
--- /dev/null
+++ b/doc/build/html/_images/math/7bec4ba909b65b3426b4a35a78d3bb691135632f.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/7c31cda93cce15a6bef0ecb07b4221f15d15cc9f.svg b/doc/build/html/_images/math/7c31cda93cce15a6bef0ecb07b4221f15d15cc9f.svg
new file mode 100644
index 0000000..978e5bc
--- /dev/null
+++ b/doc/build/html/_images/math/7c31cda93cce15a6bef0ecb07b4221f15d15cc9f.svg
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/7df716294edee0018b3f078e794ae5d964c4e7e5.svg b/doc/build/html/_images/math/7df716294edee0018b3f078e794ae5d964c4e7e5.svg
new file mode 100644
index 0000000..a4a90c9
--- /dev/null
+++ b/doc/build/html/_images/math/7df716294edee0018b3f078e794ae5d964c4e7e5.svg
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/7e73c74dddb2e10b652efe45aa14cbb6023c92aa.svg b/doc/build/html/_images/math/7e73c74dddb2e10b652efe45aa14cbb6023c92aa.svg
new file mode 100644
index 0000000..dec7a64
--- /dev/null
+++ b/doc/build/html/_images/math/7e73c74dddb2e10b652efe45aa14cbb6023c92aa.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/815a11ada9963c3e3b8ab06f0764c4a39027b903.svg b/doc/build/html/_images/math/815a11ada9963c3e3b8ab06f0764c4a39027b903.svg
new file mode 100644
index 0000000..01fb6eb
--- /dev/null
+++ b/doc/build/html/_images/math/815a11ada9963c3e3b8ab06f0764c4a39027b903.svg
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/82419b70ee4382ef98b643337d72fb4f360c54dc.svg b/doc/build/html/_images/math/82419b70ee4382ef98b643337d72fb4f360c54dc.svg
new file mode 100644
index 0000000..f3f435d
--- /dev/null
+++ b/doc/build/html/_images/math/82419b70ee4382ef98b643337d72fb4f360c54dc.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/825f35a00bb05b6028399a1a574a9c9eceaae3dc.svg b/doc/build/html/_images/math/825f35a00bb05b6028399a1a574a9c9eceaae3dc.svg
new file mode 100644
index 0000000..0847bb3
--- /dev/null
+++ b/doc/build/html/_images/math/825f35a00bb05b6028399a1a574a9c9eceaae3dc.svg
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/8282bc1515ee7f12235b6cf5ec58b653adacf9ab.svg b/doc/build/html/_images/math/8282bc1515ee7f12235b6cf5ec58b653adacf9ab.svg
new file mode 100644
index 0000000..c31f611
--- /dev/null
+++ b/doc/build/html/_images/math/8282bc1515ee7f12235b6cf5ec58b653adacf9ab.svg
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/83e53e21f5584af23d7fbd41bdc8b4eb06e150d9.svg b/doc/build/html/_images/math/83e53e21f5584af23d7fbd41bdc8b4eb06e150d9.svg
new file mode 100644
index 0000000..29bec1e
--- /dev/null
+++ b/doc/build/html/_images/math/83e53e21f5584af23d7fbd41bdc8b4eb06e150d9.svg
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/845e1f51c7b1adf37c30a54e0205dd325c0fbd83.svg b/doc/build/html/_images/math/845e1f51c7b1adf37c30a54e0205dd325c0fbd83.svg
new file mode 100644
index 0000000..6c61428
--- /dev/null
+++ b/doc/build/html/_images/math/845e1f51c7b1adf37c30a54e0205dd325c0fbd83.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/89771851f25b7b1500b570c182c104346f4caf10.svg b/doc/build/html/_images/math/89771851f25b7b1500b570c182c104346f4caf10.svg
new file mode 100644
index 0000000..7b3fc8f
--- /dev/null
+++ b/doc/build/html/_images/math/89771851f25b7b1500b570c182c104346f4caf10.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/8dd8da75ac6612b08aa1c953fe79f69d9614a370.svg b/doc/build/html/_images/math/8dd8da75ac6612b08aa1c953fe79f69d9614a370.svg
new file mode 100644
index 0000000..9293140
--- /dev/null
+++ b/doc/build/html/_images/math/8dd8da75ac6612b08aa1c953fe79f69d9614a370.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/90592e982322fa08f1b8ae0e6bcdaca11fc8de59.svg b/doc/build/html/_images/math/90592e982322fa08f1b8ae0e6bcdaca11fc8de59.svg
new file mode 100644
index 0000000..f9ff864
--- /dev/null
+++ b/doc/build/html/_images/math/90592e982322fa08f1b8ae0e6bcdaca11fc8de59.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/9074d5122d0889ba7171982a92c523d35a2c447b.svg b/doc/build/html/_images/math/9074d5122d0889ba7171982a92c523d35a2c447b.svg
new file mode 100644
index 0000000..4cd6eba
--- /dev/null
+++ b/doc/build/html/_images/math/9074d5122d0889ba7171982a92c523d35a2c447b.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/90d7e53e2606d1ffdcc0d85fcc0be2db9b919797.svg b/doc/build/html/_images/math/90d7e53e2606d1ffdcc0d85fcc0be2db9b919797.svg
new file mode 100644
index 0000000..410dc5d
--- /dev/null
+++ b/doc/build/html/_images/math/90d7e53e2606d1ffdcc0d85fcc0be2db9b919797.svg
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/916611b9f35e3a8af01f51234df415eb9adbfe61.svg b/doc/build/html/_images/math/916611b9f35e3a8af01f51234df415eb9adbfe61.svg
new file mode 100644
index 0000000..6020781
--- /dev/null
+++ b/doc/build/html/_images/math/916611b9f35e3a8af01f51234df415eb9adbfe61.svg
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/9264520765ac3abdf00f5cff93232ef8f436c08c.svg b/doc/build/html/_images/math/9264520765ac3abdf00f5cff93232ef8f436c08c.svg
new file mode 100644
index 0000000..c31f611
--- /dev/null
+++ b/doc/build/html/_images/math/9264520765ac3abdf00f5cff93232ef8f436c08c.svg
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/93dcd8e1232a9b79d01e09ea8c1be65747300380.svg b/doc/build/html/_images/math/93dcd8e1232a9b79d01e09ea8c1be65747300380.svg
new file mode 100644
index 0000000..5db364a
--- /dev/null
+++ b/doc/build/html/_images/math/93dcd8e1232a9b79d01e09ea8c1be65747300380.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/95f01e99347ef7cc15166f53ec582de9b502f58b.svg b/doc/build/html/_images/math/95f01e99347ef7cc15166f53ec582de9b502f58b.svg
new file mode 100644
index 0000000..0ede58d
--- /dev/null
+++ b/doc/build/html/_images/math/95f01e99347ef7cc15166f53ec582de9b502f58b.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/96b775e1d32106f30d74a6fc743db615ea6e51ea.svg b/doc/build/html/_images/math/96b775e1d32106f30d74a6fc743db615ea6e51ea.svg
new file mode 100644
index 0000000..73a1d5d
--- /dev/null
+++ b/doc/build/html/_images/math/96b775e1d32106f30d74a6fc743db615ea6e51ea.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/996b14e88c00afb0c157a014c7b04c192a6667d8.svg b/doc/build/html/_images/math/996b14e88c00afb0c157a014c7b04c192a6667d8.svg
new file mode 100644
index 0000000..4cd6eba
--- /dev/null
+++ b/doc/build/html/_images/math/996b14e88c00afb0c157a014c7b04c192a6667d8.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/9a55feec1c2be23566d6cb240ecccdb2cb43ffba.svg b/doc/build/html/_images/math/9a55feec1c2be23566d6cb240ecccdb2cb43ffba.svg
new file mode 100644
index 0000000..b00624b
--- /dev/null
+++ b/doc/build/html/_images/math/9a55feec1c2be23566d6cb240ecccdb2cb43ffba.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/9d5c92329653dc668aca7375b3b801213e300119.svg b/doc/build/html/_images/math/9d5c92329653dc668aca7375b3b801213e300119.svg
new file mode 100644
index 0000000..3cf35e5
--- /dev/null
+++ b/doc/build/html/_images/math/9d5c92329653dc668aca7375b3b801213e300119.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/9ee353f5c7ea494aa1bb607f0b42adc51955a770.svg b/doc/build/html/_images/math/9ee353f5c7ea494aa1bb607f0b42adc51955a770.svg
new file mode 100644
index 0000000..181ac5d
--- /dev/null
+++ b/doc/build/html/_images/math/9ee353f5c7ea494aa1bb607f0b42adc51955a770.svg
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/9f2aa4d374eadac24cdfa581a79bc6a768ce1b1d.svg b/doc/build/html/_images/math/9f2aa4d374eadac24cdfa581a79bc6a768ce1b1d.svg
new file mode 100644
index 0000000..1f76872
--- /dev/null
+++ b/doc/build/html/_images/math/9f2aa4d374eadac24cdfa581a79bc6a768ce1b1d.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/a540630fbb5173bbf2de2d38326e10e6977b2c18.svg b/doc/build/html/_images/math/a540630fbb5173bbf2de2d38326e10e6977b2c18.svg
new file mode 100644
index 0000000..027e8ec
--- /dev/null
+++ b/doc/build/html/_images/math/a540630fbb5173bbf2de2d38326e10e6977b2c18.svg
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/a64b8ca02be0eeffa5e995f1fe689a97f456c00b.svg b/doc/build/html/_images/math/a64b8ca02be0eeffa5e995f1fe689a97f456c00b.svg
new file mode 100644
index 0000000..ff4fe76
--- /dev/null
+++ b/doc/build/html/_images/math/a64b8ca02be0eeffa5e995f1fe689a97f456c00b.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/a6502e03af9f1e3d8a7dce9053c7125364a0cae5.svg b/doc/build/html/_images/math/a6502e03af9f1e3d8a7dce9053c7125364a0cae5.svg
new file mode 100644
index 0000000..b26ff03
--- /dev/null
+++ b/doc/build/html/_images/math/a6502e03af9f1e3d8a7dce9053c7125364a0cae5.svg
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/a6b3075593c703668bf03f396fce6a5fe573717f.svg b/doc/build/html/_images/math/a6b3075593c703668bf03f396fce6a5fe573717f.svg
new file mode 100644
index 0000000..e66bdf4
--- /dev/null
+++ b/doc/build/html/_images/math/a6b3075593c703668bf03f396fce6a5fe573717f.svg
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/a7e563f9e2af17336ffd26eba981364f3f1d2168.svg b/doc/build/html/_images/math/a7e563f9e2af17336ffd26eba981364f3f1d2168.svg
new file mode 100644
index 0000000..3cf35e5
--- /dev/null
+++ b/doc/build/html/_images/math/a7e563f9e2af17336ffd26eba981364f3f1d2168.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/a80027a70b057da00d97dd31650e183080cb43b5.svg b/doc/build/html/_images/math/a80027a70b057da00d97dd31650e183080cb43b5.svg
new file mode 100644
index 0000000..dec7a64
--- /dev/null
+++ b/doc/build/html/_images/math/a80027a70b057da00d97dd31650e183080cb43b5.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/a86f901ae855d64263ac2ab365517c5a7e5ccd14.svg b/doc/build/html/_images/math/a86f901ae855d64263ac2ab365517c5a7e5ccd14.svg
new file mode 100644
index 0000000..3cf35e5
--- /dev/null
+++ b/doc/build/html/_images/math/a86f901ae855d64263ac2ab365517c5a7e5ccd14.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/a93c0b8b1360d0ec2ee767ec404fb6345ab0577c.svg b/doc/build/html/_images/math/a93c0b8b1360d0ec2ee767ec404fb6345ab0577c.svg
new file mode 100644
index 0000000..dec7a64
--- /dev/null
+++ b/doc/build/html/_images/math/a93c0b8b1360d0ec2ee767ec404fb6345ab0577c.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/a94d342ea354a4cdc3d38f7892d58fae9545a926.svg b/doc/build/html/_images/math/a94d342ea354a4cdc3d38f7892d58fae9545a926.svg
new file mode 100644
index 0000000..15dfb50
--- /dev/null
+++ b/doc/build/html/_images/math/a94d342ea354a4cdc3d38f7892d58fae9545a926.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/a9edef6fb240c138d22677e925b4b653bf9f990e.svg b/doc/build/html/_images/math/a9edef6fb240c138d22677e925b4b653bf9f990e.svg
new file mode 100644
index 0000000..1b4963d
--- /dev/null
+++ b/doc/build/html/_images/math/a9edef6fb240c138d22677e925b4b653bf9f990e.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ac67f9acd3737b5efcdc6cb35f39df773ebad7fe.svg b/doc/build/html/_images/math/ac67f9acd3737b5efcdc6cb35f39df773ebad7fe.svg
new file mode 100644
index 0000000..522d0fd
--- /dev/null
+++ b/doc/build/html/_images/math/ac67f9acd3737b5efcdc6cb35f39df773ebad7fe.svg
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ad19952585566a69fb8233562ce15d85100265b5.svg b/doc/build/html/_images/math/ad19952585566a69fb8233562ce15d85100265b5.svg
new file mode 100644
index 0000000..0bd5bdc
--- /dev/null
+++ b/doc/build/html/_images/math/ad19952585566a69fb8233562ce15d85100265b5.svg
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ad2a60679e9e7a3465fbf469680cf03f3821da24.svg b/doc/build/html/_images/math/ad2a60679e9e7a3465fbf469680cf03f3821da24.svg
new file mode 100644
index 0000000..f9e1a4c
--- /dev/null
+++ b/doc/build/html/_images/math/ad2a60679e9e7a3465fbf469680cf03f3821da24.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ad3f2f323917c4c577d00563525d086013713d90.svg b/doc/build/html/_images/math/ad3f2f323917c4c577d00563525d086013713d90.svg
new file mode 100644
index 0000000..5cb5293
--- /dev/null
+++ b/doc/build/html/_images/math/ad3f2f323917c4c577d00563525d086013713d90.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ae53d53d52e506becc6c9eba1bbee8d52a0c0096.svg b/doc/build/html/_images/math/ae53d53d52e506becc6c9eba1bbee8d52a0c0096.svg
new file mode 100644
index 0000000..c1529b9
--- /dev/null
+++ b/doc/build/html/_images/math/ae53d53d52e506becc6c9eba1bbee8d52a0c0096.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ae912ca6357b80cd4ac0e500254988780137d73d.svg b/doc/build/html/_images/math/ae912ca6357b80cd4ac0e500254988780137d73d.svg
new file mode 100644
index 0000000..f9e1a4c
--- /dev/null
+++ b/doc/build/html/_images/math/ae912ca6357b80cd4ac0e500254988780137d73d.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/aec9099fc8c459eb433947bd6c9cc0f96fe38f98.svg b/doc/build/html/_images/math/aec9099fc8c459eb433947bd6c9cc0f96fe38f98.svg
new file mode 100644
index 0000000..48fc237
--- /dev/null
+++ b/doc/build/html/_images/math/aec9099fc8c459eb433947bd6c9cc0f96fe38f98.svg
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/afd7514f494125ad1ed346ea20de2b74b04c6b71.svg b/doc/build/html/_images/math/afd7514f494125ad1ed346ea20de2b74b04c6b71.svg
new file mode 100644
index 0000000..d9c297f
--- /dev/null
+++ b/doc/build/html/_images/math/afd7514f494125ad1ed346ea20de2b74b04c6b71.svg
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/b010802103c6f085b1f155800dc07fed61660394.svg b/doc/build/html/_images/math/b010802103c6f085b1f155800dc07fed61660394.svg
new file mode 100644
index 0000000..22f1be6
--- /dev/null
+++ b/doc/build/html/_images/math/b010802103c6f085b1f155800dc07fed61660394.svg
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/b0285722e6eed4a0fa69945efe4dfe0fbe124582.svg b/doc/build/html/_images/math/b0285722e6eed4a0fa69945efe4dfe0fbe124582.svg
new file mode 100644
index 0000000..378228e
--- /dev/null
+++ b/doc/build/html/_images/math/b0285722e6eed4a0fa69945efe4dfe0fbe124582.svg
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/b04167eaade600ab592e2a4441ffc27f5268cccf.svg b/doc/build/html/_images/math/b04167eaade600ab592e2a4441ffc27f5268cccf.svg
new file mode 100644
index 0000000..710b5c8
--- /dev/null
+++ b/doc/build/html/_images/math/b04167eaade600ab592e2a4441ffc27f5268cccf.svg
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/b2dfd7e61552070e476dde55e5f97dc21189d8bd.svg b/doc/build/html/_images/math/b2dfd7e61552070e476dde55e5f97dc21189d8bd.svg
new file mode 100644
index 0000000..4cd6eba
--- /dev/null
+++ b/doc/build/html/_images/math/b2dfd7e61552070e476dde55e5f97dc21189d8bd.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/b3c0a4ea1f5e913e84a4419ab76546940b976999.svg b/doc/build/html/_images/math/b3c0a4ea1f5e913e84a4419ab76546940b976999.svg
new file mode 100644
index 0000000..35cc9eb
--- /dev/null
+++ b/doc/build/html/_images/math/b3c0a4ea1f5e913e84a4419ab76546940b976999.svg
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/b6eae68ed847d26cca7f5a8121d080f07d02bf94.svg b/doc/build/html/_images/math/b6eae68ed847d26cca7f5a8121d080f07d02bf94.svg
new file mode 100644
index 0000000..0a709e2
--- /dev/null
+++ b/doc/build/html/_images/math/b6eae68ed847d26cca7f5a8121d080f07d02bf94.svg
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/b86a1741e36673576f163fbc74134ff742b364d8.svg b/doc/build/html/_images/math/b86a1741e36673576f163fbc74134ff742b364d8.svg
new file mode 100644
index 0000000..8a7892a
--- /dev/null
+++ b/doc/build/html/_images/math/b86a1741e36673576f163fbc74134ff742b364d8.svg
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ba7021e35d6fc44fe3d205ce7c892946b63c7507.svg b/doc/build/html/_images/math/ba7021e35d6fc44fe3d205ce7c892946b63c7507.svg
new file mode 100644
index 0000000..2d46fac
--- /dev/null
+++ b/doc/build/html/_images/math/ba7021e35d6fc44fe3d205ce7c892946b63c7507.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/bc438562da17dd63bb4fb24226789a7afac1650f.svg b/doc/build/html/_images/math/bc438562da17dd63bb4fb24226789a7afac1650f.svg
new file mode 100644
index 0000000..6a8c704
--- /dev/null
+++ b/doc/build/html/_images/math/bc438562da17dd63bb4fb24226789a7afac1650f.svg
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/c067c4215cbfc6897d6e5eaf14ded0dc221b972c.svg b/doc/build/html/_images/math/c067c4215cbfc6897d6e5eaf14ded0dc221b972c.svg
new file mode 100644
index 0000000..f3f435d
--- /dev/null
+++ b/doc/build/html/_images/math/c067c4215cbfc6897d6e5eaf14ded0dc221b972c.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/c11a34fefbc9f3c9204a0f4dae73804946be6692.svg b/doc/build/html/_images/math/c11a34fefbc9f3c9204a0f4dae73804946be6692.svg
new file mode 100644
index 0000000..3ebae7e
--- /dev/null
+++ b/doc/build/html/_images/math/c11a34fefbc9f3c9204a0f4dae73804946be6692.svg
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/c14e418c03a66965d1ff43d7a166d4bc403fb59c.svg b/doc/build/html/_images/math/c14e418c03a66965d1ff43d7a166d4bc403fb59c.svg
new file mode 100644
index 0000000..213dcce
--- /dev/null
+++ b/doc/build/html/_images/math/c14e418c03a66965d1ff43d7a166d4bc403fb59c.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/c2ed36f728a405f51900a56136f234fd1c84253e.svg b/doc/build/html/_images/math/c2ed36f728a405f51900a56136f234fd1c84253e.svg
new file mode 100644
index 0000000..b2e625d
--- /dev/null
+++ b/doc/build/html/_images/math/c2ed36f728a405f51900a56136f234fd1c84253e.svg
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/c3a1a49f30e99ec10fb5965633edca518a10441b.svg b/doc/build/html/_images/math/c3a1a49f30e99ec10fb5965633edca518a10441b.svg
new file mode 100644
index 0000000..074890c
--- /dev/null
+++ b/doc/build/html/_images/math/c3a1a49f30e99ec10fb5965633edca518a10441b.svg
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/c5937687478d980ab66b85de909dcb73d4bc9b13.svg b/doc/build/html/_images/math/c5937687478d980ab66b85de909dcb73d4bc9b13.svg
new file mode 100644
index 0000000..a1375d8
--- /dev/null
+++ b/doc/build/html/_images/math/c5937687478d980ab66b85de909dcb73d4bc9b13.svg
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/c63271fd2e7964699e51df9fee16b043e40449fd.svg b/doc/build/html/_images/math/c63271fd2e7964699e51df9fee16b043e40449fd.svg
new file mode 100644
index 0000000..15dfb50
--- /dev/null
+++ b/doc/build/html/_images/math/c63271fd2e7964699e51df9fee16b043e40449fd.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/c9ac657e040edf18bbbf248d15d73ab640a93f2d.svg b/doc/build/html/_images/math/c9ac657e040edf18bbbf248d15d73ab640a93f2d.svg
new file mode 100644
index 0000000..3cf35e5
--- /dev/null
+++ b/doc/build/html/_images/math/c9ac657e040edf18bbbf248d15d73ab640a93f2d.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/cc49d1fafb6a28c6c042491d610586fbcb48c0b5.svg b/doc/build/html/_images/math/cc49d1fafb6a28c6c042491d610586fbcb48c0b5.svg
new file mode 100644
index 0000000..0d2ba8c
--- /dev/null
+++ b/doc/build/html/_images/math/cc49d1fafb6a28c6c042491d610586fbcb48c0b5.svg
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/cc9ad1bf37cbb0cbc3156f31e10ce7d8148d5e06.svg b/doc/build/html/_images/math/cc9ad1bf37cbb0cbc3156f31e10ce7d8148d5e06.svg
new file mode 100644
index 0000000..f9ff864
--- /dev/null
+++ b/doc/build/html/_images/math/cc9ad1bf37cbb0cbc3156f31e10ce7d8148d5e06.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/cddff17c817c1acda8498e28276cbace394ea817.svg b/doc/build/html/_images/math/cddff17c817c1acda8498e28276cbace394ea817.svg
new file mode 100644
index 0000000..983bd13
--- /dev/null
+++ b/doc/build/html/_images/math/cddff17c817c1acda8498e28276cbace394ea817.svg
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ce745b5797483cfcb6ff4816364d91d3d5b6e6c4.svg b/doc/build/html/_images/math/ce745b5797483cfcb6ff4816364d91d3d5b6e6c4.svg
new file mode 100644
index 0000000..dd1f599
--- /dev/null
+++ b/doc/build/html/_images/math/ce745b5797483cfcb6ff4816364d91d3d5b6e6c4.svg
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/d04fe0dc2dd02e9d27dfd46e93827894feb96d1f.svg b/doc/build/html/_images/math/d04fe0dc2dd02e9d27dfd46e93827894feb96d1f.svg
new file mode 100644
index 0000000..f3f435d
--- /dev/null
+++ b/doc/build/html/_images/math/d04fe0dc2dd02e9d27dfd46e93827894feb96d1f.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/d13a272a60d62c8a6b0ae4f178970b34b3cbc34b.svg b/doc/build/html/_images/math/d13a272a60d62c8a6b0ae4f178970b34b3cbc34b.svg
new file mode 100644
index 0000000..7d11232
--- /dev/null
+++ b/doc/build/html/_images/math/d13a272a60d62c8a6b0ae4f178970b34b3cbc34b.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/d13e748def2419af7ed6d97286f8f8ba95d695ab.svg b/doc/build/html/_images/math/d13e748def2419af7ed6d97286f8f8ba95d695ab.svg
new file mode 100644
index 0000000..7e2b16e
--- /dev/null
+++ b/doc/build/html/_images/math/d13e748def2419af7ed6d97286f8f8ba95d695ab.svg
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/d267fe313a3b9c3638dde67e05f045efc2ddfe06.svg b/doc/build/html/_images/math/d267fe313a3b9c3638dde67e05f045efc2ddfe06.svg
new file mode 100644
index 0000000..75213b1
--- /dev/null
+++ b/doc/build/html/_images/math/d267fe313a3b9c3638dde67e05f045efc2ddfe06.svg
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/d30cef88d057bcc5920fca7d63d0682f802d9006.svg b/doc/build/html/_images/math/d30cef88d057bcc5920fca7d63d0682f802d9006.svg
new file mode 100644
index 0000000..77b75f2
--- /dev/null
+++ b/doc/build/html/_images/math/d30cef88d057bcc5920fca7d63d0682f802d9006.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/d4cef9805eafbbcd57b5fefe36bab8b23012c7d1.svg b/doc/build/html/_images/math/d4cef9805eafbbcd57b5fefe36bab8b23012c7d1.svg
new file mode 100644
index 0000000..67acfed
--- /dev/null
+++ b/doc/build/html/_images/math/d4cef9805eafbbcd57b5fefe36bab8b23012c7d1.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/d50602aa4f63b11b8a8c07c95722fee7ea97b348.svg b/doc/build/html/_images/math/d50602aa4f63b11b8a8c07c95722fee7ea97b348.svg
new file mode 100644
index 0000000..64e5bf7
--- /dev/null
+++ b/doc/build/html/_images/math/d50602aa4f63b11b8a8c07c95722fee7ea97b348.svg
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/d56941a661a880391bd898f16e5dcf9c0b8a7e59.svg b/doc/build/html/_images/math/d56941a661a880391bd898f16e5dcf9c0b8a7e59.svg
new file mode 100644
index 0000000..31ba42e
--- /dev/null
+++ b/doc/build/html/_images/math/d56941a661a880391bd898f16e5dcf9c0b8a7e59.svg
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/d696439e8724d5b54e9b4b344b9c99d0facc8b7c.svg b/doc/build/html/_images/math/d696439e8724d5b54e9b4b344b9c99d0facc8b7c.svg
new file mode 100644
index 0000000..7934125
--- /dev/null
+++ b/doc/build/html/_images/math/d696439e8724d5b54e9b4b344b9c99d0facc8b7c.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/d799367c490fcb15b82b8c5ee3fa5c9cbcc68dd8.svg b/doc/build/html/_images/math/d799367c490fcb15b82b8c5ee3fa5c9cbcc68dd8.svg
new file mode 100644
index 0000000..c94e6e6
--- /dev/null
+++ b/doc/build/html/_images/math/d799367c490fcb15b82b8c5ee3fa5c9cbcc68dd8.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/dce20146d5eb77607e0a55541f4efb1a4b8c4b8c.svg b/doc/build/html/_images/math/dce20146d5eb77607e0a55541f4efb1a4b8c4b8c.svg
new file mode 100644
index 0000000..4c6f8f0
--- /dev/null
+++ b/doc/build/html/_images/math/dce20146d5eb77607e0a55541f4efb1a4b8c4b8c.svg
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ded4d6d37345b9aafba642fa7cfba7494ff14f70.svg b/doc/build/html/_images/math/ded4d6d37345b9aafba642fa7cfba7494ff14f70.svg
new file mode 100644
index 0000000..1bddbca
--- /dev/null
+++ b/doc/build/html/_images/math/ded4d6d37345b9aafba642fa7cfba7494ff14f70.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e0156186842b31629791a1077f601176a7365f82.svg b/doc/build/html/_images/math/e0156186842b31629791a1077f601176a7365f82.svg
new file mode 100644
index 0000000..7934125
--- /dev/null
+++ b/doc/build/html/_images/math/e0156186842b31629791a1077f601176a7365f82.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e15ab32e61ffbf9ec981451984dd7a6e61675385.svg b/doc/build/html/_images/math/e15ab32e61ffbf9ec981451984dd7a6e61675385.svg
new file mode 100644
index 0000000..d9f571a
--- /dev/null
+++ b/doc/build/html/_images/math/e15ab32e61ffbf9ec981451984dd7a6e61675385.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e299a147e6e958303111e813e82a3507ded25437.svg b/doc/build/html/_images/math/e299a147e6e958303111e813e82a3507ded25437.svg
new file mode 100644
index 0000000..f699582
--- /dev/null
+++ b/doc/build/html/_images/math/e299a147e6e958303111e813e82a3507ded25437.svg
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e34c3c7dbb292f28e888bfb49920d7c293055d2b.svg b/doc/build/html/_images/math/e34c3c7dbb292f28e888bfb49920d7c293055d2b.svg
new file mode 100644
index 0000000..23c0fa0
--- /dev/null
+++ b/doc/build/html/_images/math/e34c3c7dbb292f28e888bfb49920d7c293055d2b.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e4dc66520823a07e0df31b43dda92f9b2ea9e792.svg b/doc/build/html/_images/math/e4dc66520823a07e0df31b43dda92f9b2ea9e792.svg
new file mode 100644
index 0000000..23c0fa0
--- /dev/null
+++ b/doc/build/html/_images/math/e4dc66520823a07e0df31b43dda92f9b2ea9e792.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e568b3a2690eb8037909cae4b88b8ab16459605e.svg b/doc/build/html/_images/math/e568b3a2690eb8037909cae4b88b8ab16459605e.svg
new file mode 100644
index 0000000..1efab50
--- /dev/null
+++ b/doc/build/html/_images/math/e568b3a2690eb8037909cae4b88b8ab16459605e.svg
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e56dfd5625638bc4ad9867951a7818cf20c88a2f.svg b/doc/build/html/_images/math/e56dfd5625638bc4ad9867951a7818cf20c88a2f.svg
new file mode 100644
index 0000000..ac92e56
--- /dev/null
+++ b/doc/build/html/_images/math/e56dfd5625638bc4ad9867951a7818cf20c88a2f.svg
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e83c9268a37c748c7cd0f640a1f28bd878bb1749.svg b/doc/build/html/_images/math/e83c9268a37c748c7cd0f640a1f28bd878bb1749.svg
new file mode 100644
index 0000000..f9ff864
--- /dev/null
+++ b/doc/build/html/_images/math/e83c9268a37c748c7cd0f640a1f28bd878bb1749.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e8a47d0c4e105b420931ccbeb7571abc3dd7f73d.svg b/doc/build/html/_images/math/e8a47d0c4e105b420931ccbeb7571abc3dd7f73d.svg
new file mode 100644
index 0000000..445de07
--- /dev/null
+++ b/doc/build/html/_images/math/e8a47d0c4e105b420931ccbeb7571abc3dd7f73d.svg
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e8b568237d1744ae5272cadf1bdd39eaed69c1f6.svg b/doc/build/html/_images/math/e8b568237d1744ae5272cadf1bdd39eaed69c1f6.svg
new file mode 100644
index 0000000..dee034f
--- /dev/null
+++ b/doc/build/html/_images/math/e8b568237d1744ae5272cadf1bdd39eaed69c1f6.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e8e5c388fc50fed467da5027dde63736ec11b971.svg b/doc/build/html/_images/math/e8e5c388fc50fed467da5027dde63736ec11b971.svg
new file mode 100644
index 0000000..f9e1a4c
--- /dev/null
+++ b/doc/build/html/_images/math/e8e5c388fc50fed467da5027dde63736ec11b971.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/e91c8c9e0530c873480544a154b5156c1a3bc5cf.svg b/doc/build/html/_images/math/e91c8c9e0530c873480544a154b5156c1a3bc5cf.svg
new file mode 100644
index 0000000..a724e47
--- /dev/null
+++ b/doc/build/html/_images/math/e91c8c9e0530c873480544a154b5156c1a3bc5cf.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ea96fb3afc754d2d914e95c7197dd020ee4d8eeb.svg b/doc/build/html/_images/math/ea96fb3afc754d2d914e95c7197dd020ee4d8eeb.svg
new file mode 100644
index 0000000..4cd6eba
--- /dev/null
+++ b/doc/build/html/_images/math/ea96fb3afc754d2d914e95c7197dd020ee4d8eeb.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/eb7dc8445c84c126f6834aa63965b5866af4862f.svg b/doc/build/html/_images/math/eb7dc8445c84c126f6834aa63965b5866af4862f.svg
new file mode 100644
index 0000000..83c3726
--- /dev/null
+++ b/doc/build/html/_images/math/eb7dc8445c84c126f6834aa63965b5866af4862f.svg
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ebd2e5584b404461c1046b8bf084d34487e21129.svg b/doc/build/html/_images/math/ebd2e5584b404461c1046b8bf084d34487e21129.svg
new file mode 100644
index 0000000..b00624b
--- /dev/null
+++ b/doc/build/html/_images/math/ebd2e5584b404461c1046b8bf084d34487e21129.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ecf8d8521b87e224ab55f1fb9b3b29c0d61c22d8.svg b/doc/build/html/_images/math/ecf8d8521b87e224ab55f1fb9b3b29c0d61c22d8.svg
new file mode 100644
index 0000000..e391d28
--- /dev/null
+++ b/doc/build/html/_images/math/ecf8d8521b87e224ab55f1fb9b3b29c0d61c22d8.svg
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/ed6af2733291dcf5001173a8dbaf8f59c817212a.svg b/doc/build/html/_images/math/ed6af2733291dcf5001173a8dbaf8f59c817212a.svg
new file mode 100644
index 0000000..773fc05
--- /dev/null
+++ b/doc/build/html/_images/math/ed6af2733291dcf5001173a8dbaf8f59c817212a.svg
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f028854f696e20d8f3e7fc8807f20c444cf43eaa.svg b/doc/build/html/_images/math/f028854f696e20d8f3e7fc8807f20c444cf43eaa.svg
new file mode 100644
index 0000000..1054756
--- /dev/null
+++ b/doc/build/html/_images/math/f028854f696e20d8f3e7fc8807f20c444cf43eaa.svg
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f02d55fb6c249a7da5a9df6b7e5c96ab6be7672b.svg b/doc/build/html/_images/math/f02d55fb6c249a7da5a9df6b7e5c96ab6be7672b.svg
new file mode 100644
index 0000000..0ff2d07
--- /dev/null
+++ b/doc/build/html/_images/math/f02d55fb6c249a7da5a9df6b7e5c96ab6be7672b.svg
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f0910149fc44dd7dabe235ebff17a2060ae8714e.svg b/doc/build/html/_images/math/f0910149fc44dd7dabe235ebff17a2060ae8714e.svg
new file mode 100644
index 0000000..fa0247c
--- /dev/null
+++ b/doc/build/html/_images/math/f0910149fc44dd7dabe235ebff17a2060ae8714e.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f17c96b90fd292ae6974ada44ee78617139e5141.svg b/doc/build/html/_images/math/f17c96b90fd292ae6974ada44ee78617139e5141.svg
new file mode 100644
index 0000000..7934125
--- /dev/null
+++ b/doc/build/html/_images/math/f17c96b90fd292ae6974ada44ee78617139e5141.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f19df02362bdcb3832d9a6e1e22c7d9a8374e613.svg b/doc/build/html/_images/math/f19df02362bdcb3832d9a6e1e22c7d9a8374e613.svg
new file mode 100644
index 0000000..bbe332d
--- /dev/null
+++ b/doc/build/html/_images/math/f19df02362bdcb3832d9a6e1e22c7d9a8374e613.svg
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f3284172ff91453e703a9b5979f8386f44f9948c.svg b/doc/build/html/_images/math/f3284172ff91453e703a9b5979f8386f44f9948c.svg
new file mode 100644
index 0000000..dec7a64
--- /dev/null
+++ b/doc/build/html/_images/math/f3284172ff91453e703a9b5979f8386f44f9948c.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f49c3dd83ce20802dd9b32036339dbb3b354bd2d.svg b/doc/build/html/_images/math/f49c3dd83ce20802dd9b32036339dbb3b354bd2d.svg
new file mode 100644
index 0000000..ff42303
--- /dev/null
+++ b/doc/build/html/_images/math/f49c3dd83ce20802dd9b32036339dbb3b354bd2d.svg
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f670f05da2f796ded634f483374c8523a2ed0ac4.svg b/doc/build/html/_images/math/f670f05da2f796ded634f483374c8523a2ed0ac4.svg
new file mode 100644
index 0000000..98e00ae
--- /dev/null
+++ b/doc/build/html/_images/math/f670f05da2f796ded634f483374c8523a2ed0ac4.svg
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f6fd6928c1aaf2be4844f5d4e293a09bc610f44f.svg b/doc/build/html/_images/math/f6fd6928c1aaf2be4844f5d4e293a09bc610f44f.svg
new file mode 100644
index 0000000..96a726b
--- /dev/null
+++ b/doc/build/html/_images/math/f6fd6928c1aaf2be4844f5d4e293a09bc610f44f.svg
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f7679edba251c469017904363c4f2ee6919879f3.svg b/doc/build/html/_images/math/f7679edba251c469017904363c4f2ee6919879f3.svg
new file mode 100644
index 0000000..15dfb50
--- /dev/null
+++ b/doc/build/html/_images/math/f7679edba251c469017904363c4f2ee6919879f3.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/f9a521977b1461b53094f1bae24aa6d1bb757b07.svg b/doc/build/html/_images/math/f9a521977b1461b53094f1bae24aa6d1bb757b07.svg
new file mode 100644
index 0000000..322f03a
--- /dev/null
+++ b/doc/build/html/_images/math/f9a521977b1461b53094f1bae24aa6d1bb757b07.svg
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/fb4ddd4f20941bccbdf1c7cee61f00284285e536.svg b/doc/build/html/_images/math/fb4ddd4f20941bccbdf1c7cee61f00284285e536.svg
new file mode 100644
index 0000000..15dfb50
--- /dev/null
+++ b/doc/build/html/_images/math/fb4ddd4f20941bccbdf1c7cee61f00284285e536.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/_images/math/fea71c9f02d3639232648b940b80e5b9c1a03db3.svg b/doc/build/html/_images/math/fea71c9f02d3639232648b940b80e5b9c1a03db3.svg
new file mode 100644
index 0000000..5f0dc7c
--- /dev/null
+++ b/doc/build/html/_images/math/fea71c9f02d3639232648b940b80e5b9c1a03db3.svg
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/src/commentary/gm.rst b/doc/build/html/_sources/commentary/gm.rst.txt
similarity index 100%
rename from docs/src/commentary/gm.rst
rename to doc/build/html/_sources/commentary/gm.rst.txt
diff --git a/docs/src/commentary/layout-lexing.rst b/doc/build/html/_sources/commentary/layout-lexing.rst.txt
similarity index 100%
rename from docs/src/commentary/layout-lexing.rst
rename to doc/build/html/_sources/commentary/layout-lexing.rst.txt
diff --git a/doc/build/html/_sources/commentary/stg.rst.txt b/doc/build/html/_sources/commentary/stg.rst.txt
new file mode 100644
index 0000000..f668576
--- /dev/null
+++ b/doc/build/html/_sources/commentary/stg.rst.txt
@@ -0,0 +1,336 @@
+The *Spineless Tagless G-Machine*
+=================================
+
+WIP. This will hopefully be expanded into a thorough walkthrough of the state
+machine.
+
+Evaluation is complete when a single :code:`NNum` remains on the stack and the
+dump is empty.
+
+.. math::
+ \transrule
+ { a : \nillist
+ & \nillist
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & g
+ }
+ { \mathtt{HALT}
+ }
+
+Dereference an indirection passed as an argument to a function.
+
+.. math::
+ \transrule
+ {a : s & d & h
+ \begin{bmatrix}
+ a : \mathtt{NAp} \; a_1 \; a_2 \\
+ a_2 : \mathtt{NInd} \; a_3
+ \end{bmatrix} & g}
+ {a : s & d & h[a : \mathtt{NAp} \; a_1 \; a_3] & g}
+
+Dereference an indirection on top of the stack.
+
+.. math::
+ \transrule
+ {p : s & d & h
+ \begin{bmatrix}
+ p : \mathtt{NInd} \; a
+ \end{bmatrix} & g}
+ {a : s & d & h & g}
+
+Perform a unary operation :math:`o(n)` with internal :code:`Prim` constructor
+:code:`O` on an argument in normal form.
+
+.. math::
+ \transrule
+ { f : a : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{O} \\
+ a : \mathtt{NAp} \; f \; x \\
+ x : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & g
+ }
+ { a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; (o(n))
+ \end{bmatrix}
+ & g
+ }
+
+Evaluate the argument of a unary operation with internal :code:`Prim`
+constructor :code:`O`.
+
+.. math::
+ \transrule
+ { f : a : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{O} \\
+ a : \mathtt{NAp} \; f \; x
+ \end{bmatrix}
+ & g
+ }
+ { x : \nillist
+ & (f : a : \nillist) : d
+ & h
+ & g
+ }
+
+Restore the stack when a sub-computation has completed.
+
+.. math::
+ \transrule
+ { a : \nillist
+ & s : d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & g
+ }
+ { s
+ & d
+ & h
+ & g
+ }
+
+Reduce a supercombinator and update the root with the :math:`\beta`-reduced form
+
+.. math::
+ \transrule
+ { a_0 : a_1 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_0 : \mathtt{NSupercomb} \; [x_1,\ldots,x_n] \; e
+ \end{bmatrix}
+ & g
+ }
+ { a_n : s
+ & d
+ & h'
+ & g
+ \\
+ & \SetCell[c=3]{c}
+ \text{where } h' = \mathtt{instantiateU} \; e \; a_n \; h \; g
+ }
+
+Perform a binary operation :math:`o(x,y)` associated with internal :code:`Prim`
+constructor :code:`O` on two :code:`NNum` s both in normal form.
+
+.. math::
+ \transrule
+ { f : a_1 : a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{O} \\
+ a_1 : \mathtt{NAp} \; f \; (\mathtt{NNum} \; x) \\
+ a_2 : \mathtt{NAp} \; a_1 \; (\mathtt{NNum} \; y)
+ \end{bmatrix}
+ & g
+ }
+ { a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_2 : \mathtt{NNum} \; (o(x,y))
+ \end{bmatrix}
+ & g
+ }
+
+In a conditional primitive, perform the reduction if the condition has been
+evaluated as True (:code:`NData 1 []`).
+
+.. math::
+ \transrule
+ { f : a_1 : a_2 : a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{IfP} \\
+ c : \mathtt{NPrim} \; (\mathtt{NData} \; 1 \; \nillist) \\
+ a_1 : \mathtt{NAp} \; f \; c \\
+ a_2 : \mathtt{NAp} \; a_1 \; x \\
+ a_3 : \mathtt{NAp} \; a_2 \; y
+ \end{bmatrix}
+ & g
+ }
+ { x : s
+ & d
+ & h
+ & g
+ }
+
+In a conditional primitive, perform the reduction if the condition has been
+evaluated as False (:code:`NData 0 []`).
+
+.. math::
+ \transrule
+ { f : a_1 : a_2 : a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{IfP} \\
+ c : \mathtt{NPrim} \; (\mathtt{NData} \; 0 \; \nillist) \\
+ a_1 : \mathtt{NAp} \; f \; c \\
+ a_2 : \mathtt{NAp} \; a_1 \; x \\
+ a_3 : \mathtt{NAp} \; a_2 \; y
+ \end{bmatrix}
+ & g
+ }
+ { y : s
+ & d
+ & h
+ & g
+ }
+
+
+In a conditional primitive, evaluate the condition.
+
+.. math::
+ \transrule
+ { f : a_1 : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{IfP} \\
+ a_1 : \mathtt{NAp} \; f \; x
+ \end{bmatrix}
+ & g
+ }
+ { x : \nillist
+ & (f : a_1 : \nillist) : d
+ & h
+ & g
+ }
+
+Construct :code:`NData` out of a constructor and its arguments
+
+.. math::
+ \transrule
+ { c : a_1 : \ldots : a_n : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; (\mathtt{ConP} \; t \; n) \\
+ a_1 : \mathtt{NAp} \; c \; x_1 \\
+ \vdots \\
+ a_n : \mathtt{NAp} \; a_{n-1} \; x_n
+ \end{bmatrix}
+ & g
+ }
+ { a_n : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ a_n : \mathtt{NData} \; t \; [x_1, \ldots, x_n]
+ \end{bmatrix}
+ & g
+ }
+
+Pairs
+-----
+
+Evaluate the first argument if necessary
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CasePairP} \\
+ p : \mathtt{NAp} \; \_ \: \_ \\
+ a_1 : \mathtt{NAp} \; c \; p \\
+ a_2 : \mathtt{NAp} \; a_2 \; f
+ \end{bmatrix}
+ & g
+ }
+ { p : \nillist
+ & (a_1 : a_2 : \nillist) : d
+ & h
+ & g
+ }
+
+Perform the reduction if the first argument is in normal form
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CasePairP} \\
+ p : \mathtt{NData} \; 0 \; [x,y] \\
+ a_1 : \mathtt{NAp} \; c \; p \\
+ a_2 : \mathtt{NAp} \; a_1 \; f
+ \end{bmatrix}
+ & g
+ }
+ { a_1 : a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_1 : \mathtt{NAp} \; f \; x \\
+ a_2 : \mathtt{NAp} \; a_1 \; y
+ \end{bmatrix}
+ & g
+ }
+
+Lists
+-----
+
+Evaluate the scrutinee
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : a_3 : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CaseListP} \\
+ a_1 : \mathtt{NAp} \; c \; x
+ \end{bmatrix}
+ & g
+ }
+ { x : \nillist
+ & (a_1 : a_2 : a_3) : \nillist
+ & h
+ & g
+ }
+
+If the scrutinee is :code:`Nil`, perform the appropriate reduction.
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CaseListP} \\
+ p : \mathtt{NData} \; 1 \; \nillist \\
+ a_1 : \mathtt{NAp} \; c \; p \\
+ a_2 : \mathtt{NAp} \; p \; f_\text{nil} \\
+ a_3 : \mathtt{NAp} \; a_2 \; f_\text{cons}
+ \end{bmatrix}
+ & g
+ }
+ { a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_3 : \mathtt{NAp} \; f_\text{nil}
+ \end{bmatrix}
+ & g
+ }
+
diff --git a/docs/src/commentary/ti.rst b/doc/build/html/_sources/commentary/ti.rst.txt
similarity index 100%
rename from docs/src/commentary/ti.rst
rename to doc/build/html/_sources/commentary/ti.rst.txt
diff --git a/doc/build/html/_sources/commentary/tim.rst.txt b/doc/build/html/_sources/commentary/tim.rst.txt
new file mode 100644
index 0000000..4dd05cd
--- /dev/null
+++ b/doc/build/html/_sources/commentary/tim.rst.txt
@@ -0,0 +1,336 @@
+The *Template Instantiation Machine*
+====================================
+
+WIP. This will hopefully be expanded into a thorough walkthrough of the state
+machine.
+
+Evaluation is complete when a single :code:`NNum` remains on the stack and the
+dump is empty.
+
+.. math::
+ \transrule
+ { a : \nillist
+ & \nillist
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & g
+ }
+ { \mathtt{HALT}
+ }
+
+Dereference an indirection passed as an argument to a function.
+
+.. math::
+ \transrule
+ {a : s & d & h
+ \begin{bmatrix}
+ a : \mathtt{NAp} \; a_1 \; a_2 \\
+ a_2 : \mathtt{NInd} \; a_3
+ \end{bmatrix} & g}
+ {a : s & d & h[a : \mathtt{NAp} \; a_1 \; a_3] & g}
+
+Dereference an indirection on top of the stack.
+
+.. math::
+ \transrule
+ {p : s & d & h
+ \begin{bmatrix}
+ p : \mathtt{NInd} \; a
+ \end{bmatrix} & g}
+ {a : s & d & h & g}
+
+Perform a unary operation :math:`o(n)` with internal :code:`Prim` constructor
+:code:`O` on an argument in normal form.
+
+.. math::
+ \transrule
+ { f : a : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{O} \\
+ a : \mathtt{NAp} \; f \; x \\
+ x : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & g
+ }
+ { a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; (o(n))
+ \end{bmatrix}
+ & g
+ }
+
+Evaluate the argument of a unary operation with internal :code:`Prim`
+constructor :code:`O`.
+
+.. math::
+ \transrule
+ { f : a : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{O} \\
+ a : \mathtt{NAp} \; f \; x
+ \end{bmatrix}
+ & g
+ }
+ { x : \nillist
+ & (f : a : \nillist) : d
+ & h
+ & g
+ }
+
+Restore the stack when a sub-computation has completed.
+
+.. math::
+ \transrule
+ { a : \nillist
+ & s : d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & g
+ }
+ { s
+ & d
+ & h
+ & g
+ }
+
+Reduce a supercombinator and update the root with the :math:`\beta`-reduced form
+
+.. math::
+ \transrule
+ { a_0 : a_1 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_0 : \mathtt{NSupercomb} \; [x_1,\ldots,x_n] \; e
+ \end{bmatrix}
+ & g
+ }
+ { a_n : s
+ & d
+ & h'
+ & g
+ \\
+ & \SetCell[c=3]{c}
+ \text{where } h' = \mathtt{instantiateU} \; e \; a_n \; h \; g
+ }
+
+Perform a binary operation :math:`o(x,y)` associated with internal :code:`Prim`
+constructor :code:`O` on two :code:`NNum` s both in normal form.
+
+.. math::
+ \transrule
+ { f : a_1 : a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{O} \\
+ a_1 : \mathtt{NAp} \; f \; (\mathtt{NNum} \; x) \\
+ a_2 : \mathtt{NAp} \; a_1 \; (\mathtt{NNum} \; y)
+ \end{bmatrix}
+ & g
+ }
+ { a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_2 : \mathtt{NNum} \; (o(x,y))
+ \end{bmatrix}
+ & g
+ }
+
+In a conditional primitive, perform the reduction if the condition has been
+evaluated as True (:code:`NData 1 []`).
+
+.. math::
+ \transrule
+ { f : a_1 : a_2 : a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{IfP} \\
+ c : \mathtt{NPrim} \; (\mathtt{NData} \; 1 \; \nillist) \\
+ a_1 : \mathtt{NAp} \; f \; c \\
+ a_2 : \mathtt{NAp} \; a_1 \; x \\
+ a_3 : \mathtt{NAp} \; a_2 \; y
+ \end{bmatrix}
+ & g
+ }
+ { x : s
+ & d
+ & h
+ & g
+ }
+
+In a conditional primitive, perform the reduction if the condition has been
+evaluated as False (:code:`NData 0 []`).
+
+.. math::
+ \transrule
+ { f : a_1 : a_2 : a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{IfP} \\
+ c : \mathtt{NPrim} \; (\mathtt{NData} \; 0 \; \nillist) \\
+ a_1 : \mathtt{NAp} \; f \; c \\
+ a_2 : \mathtt{NAp} \; a_1 \; x \\
+ a_3 : \mathtt{NAp} \; a_2 \; y
+ \end{bmatrix}
+ & g
+ }
+ { y : s
+ & d
+ & h
+ & g
+ }
+
+
+In a conditional primitive, evaluate the condition.
+
+.. math::
+ \transrule
+ { f : a_1 : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{IfP} \\
+ a_1 : \mathtt{NAp} \; f \; x
+ \end{bmatrix}
+ & g
+ }
+ { x : \nillist
+ & (f : a_1 : \nillist) : d
+ & h
+ & g
+ }
+
+Construct :code:`NData` out of a constructor and its arguments
+
+.. math::
+ \transrule
+ { c : a_1 : \ldots : a_n : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; (\mathtt{ConP} \; t \; n) \\
+ a_1 : \mathtt{NAp} \; c \; x_1 \\
+ \vdots \\
+ a_n : \mathtt{NAp} \; a_{n-1} \; x_n
+ \end{bmatrix}
+ & g
+ }
+ { a_n : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ a_n : \mathtt{NData} \; t \; [x_1, \ldots, x_n]
+ \end{bmatrix}
+ & g
+ }
+
+Pairs
+-----
+
+Evaluate the first argument if necessary
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CasePairP} \\
+ p : \mathtt{NAp} \; \_ \: \_ \\
+ a_1 : \mathtt{NAp} \; c \; p \\
+ a_2 : \mathtt{NAp} \; a_2 \; f
+ \end{bmatrix}
+ & g
+ }
+ { p : \nillist
+ & (a_1 : a_2 : \nillist) : d
+ & h
+ & g
+ }
+
+Perform the reduction if the first argument is in normal form
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CasePairP} \\
+ p : \mathtt{NData} \; 0 \; [x,y] \\
+ a_1 : \mathtt{NAp} \; c \; p \\
+ a_2 : \mathtt{NAp} \; a_1 \; f
+ \end{bmatrix}
+ & g
+ }
+ { a_1 : a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_1 : \mathtt{NAp} \; f \; x \\
+ a_2 : \mathtt{NAp} \; a_1 \; y
+ \end{bmatrix}
+ & g
+ }
+
+Lists
+-----
+
+Evaluate the scrutinee
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : a_3 : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CaseListP} \\
+ a_1 : \mathtt{NAp} \; c \; x
+ \end{bmatrix}
+ & g
+ }
+ { x
+ & (a_1 : a_2 : a_3) : \nillist
+ & h
+ & g
+ }
+
+If the scrutinee is :code:`Nil`, perform the appropriate reduction.
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CaseListP} \\
+ p : \mathtt{NData} \; 1 \; \nillist \\
+ a_1 : \mathtt{NAp} \; c \; p \\
+ a_2 : \mathtt{NAp} \; p \; f_\text{nil} \\
+ a_3 : \mathtt{NAp} \; a_2 \; f_\text{cons}
+ \end{bmatrix}
+ & g
+ }
+ { a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_3 : \mathtt{NAp} \; f_\text{nil}
+ \end{bmatrix}
+ & g
+ }
+
diff --git a/docs/src/glossary.rst b/doc/build/html/_sources/glossary.rst.txt
similarity index 100%
rename from docs/src/glossary.rst
rename to doc/build/html/_sources/glossary.rst.txt
diff --git a/docs/src/index.rst b/doc/build/html/_sources/index.rst.txt
similarity index 100%
rename from docs/src/index.rst
rename to doc/build/html/_sources/index.rst.txt
diff --git a/doc/build/html/_sources/references/gm-state-transition-rules.rst.txt b/doc/build/html/_sources/references/gm-state-transition-rules.rst.txt
new file mode 100644
index 0000000..0cb9d21
--- /dev/null
+++ b/doc/build/html/_sources/references/gm-state-transition-rules.rst.txt
@@ -0,0 +1,347 @@
+================================
+G-Machine State Transition Rules
+================================
+
+*********************
+Core Transition Rules
+*********************
+
+1. Lookup a global by name and push its value onto the stack
+
+.. math::
+ \gmrule
+ { \mathtt{PushGlobal} \; f : i
+ & s
+ & d
+ & h
+ & m
+ \begin{bmatrix}
+ f : a
+ \end{bmatrix}
+ }
+ { i
+ & a : s
+ & d
+ & h
+ & m
+ }
+
+2. Allocate an int node on the heap, and push the address of the newly created
+ node onto the stack
+
+.. math::
+ \gmrule
+ { \mathtt{PushInt} \; n : i
+ & s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & m
+ }
+
+3. Allocate an application node on the heap, applying the top of the stack to
+ the address directly below it. The address of the application node is pushed
+ onto the stack.
+
+.. math::
+ \gmrule
+ { \mathtt{MkAp} : i
+ & f : x : s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NAp} \; f \; x
+ \end{bmatrix}
+ & m
+ }
+
+4. Push a function's argument onto the stack
+
+.. math::
+ \gmrule
+ { \mathtt{Push} \; n : i
+ & a_0 : \ldots : a_n : s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a_n : a_0 : \ldots : a_n : s
+ & d
+ & h
+ & m
+ }
+
+5. Tidy up the stack after instantiating a supercombinator
+
+.. math::
+ \gmrule
+ { \mathtt{Slide} \; n : i
+ & a_0 : \ldots : a_n : s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a_0 : s
+ & d
+ & h
+ & m
+ }
+
+6. If a number is on top of the stack, :code:`Unwind` leaves the machine in a
+ halt state
+
+.. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & m
+ }
+ { \nillist
+ & a : s
+ & d
+ & h
+ & m
+ }
+
+7. If an application is on top of the stack, :code:`Unwind` continues unwinding
+
+.. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NAp} \; f \; x
+ \end{bmatrix}
+ & m
+ }
+ { \mathtt{Unwind} : \nillist
+ & f : a : s
+ & d
+ & h
+ & m
+ }
+
+8. When a supercombinator is on top of the stack (and the correct number of
+ arguments have been provided), :code:`Unwind` sets up the stack and jumps to
+ the supercombinator's code (:math:`\beta`-reduction)
+
+.. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a_0 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_0 : \mathtt{NGlobal} \; n \; c \\
+ a_1 : \mathtt{NAp} \; a_0 \; e_1 \\
+ \vdots \\
+ a_n : \mathtt{NAp} \; a_{n-1} \; e_n \\
+ \end{bmatrix}
+ & m
+ }
+ { c
+ & e_1 : \ldots : e_n : a_n : s
+ & d
+ & h
+ & m
+ }
+
+9. Pop the stack, and update the nth node to point to the popped address
+
+.. math::
+ \gmrule
+ { \mathtt{Update} \; n : i
+ & e : f : a_1 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_1 : \mathtt{NAp} \; f \; e \\
+ \vdots \\
+ a_n : \mathtt{NAp} \; a_{n-1} \; e_n
+ \end{bmatrix}
+ & m
+ }
+ { i
+ & f : a_1 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_n : \mathtt{NInd} \; e
+ \end{bmatrix}
+ & m
+ }
+
+10. Pop the stack.
+
+.. math::
+ \gmrule
+ { \mathtt{Pop} \; n : i
+ & a_1 : \ldots : a_n : s
+ & d
+ & h
+ & m
+ }
+ { i
+ & s
+ & d
+ & h
+ & m
+ }
+
+11. Follow indirections while unwinding
+
+.. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NInd} \; a'
+ \end{bmatrix}
+ & m
+ }
+ { \mathtt{Unwind} : \nillist
+ & a' : s
+ & d
+ & h
+ & m
+ }
+
+12. Allocate uninitialised heap space
+
+.. math::
+ \gmrule
+ { \mathtt{Alloc} \; n : i
+ & s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a_1 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_1 : \mathtt{NUninitialised} \\
+ \vdots \\
+ a_n : \mathtt{NUninitialised} \\
+ \end{bmatrix}
+ & m
+ }
+
+13. When unwinding, if the top of the stack is in WHNF, pop the dump
+
+.. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a : s
+ & \langle i', s' \rangle : d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & m
+ }
+ { i'
+ & a : s'
+ & d
+ & h
+ & m
+ }
+
+14. Evaluate the top of the stack to WHNF
+
+.. math::
+ \gmrule
+ { \mathtt{Eval} : i
+ & a : s
+ & d
+ & h
+ & m
+ }
+ { i'
+ & a : \nillist
+ & \langle i, s \rangle
+ & h
+ & m
+ }
+
+***************
+Extension Rules
+***************
+
+1. A sneaky trick to enable sharing of :code:`NNum` nodes. We note that the
+ global environment is a mapping of :code:`Name` objects (i.e. identifiers) to
+ heap addresses. Strings of digits are not considered valid identifiers! We
+ abuse this by modifying Core Rule 2 to update the global environment with the
+ new node's address. Consider how this rule might impact garbage collection
+ (remember that the environment is intended for *globals*).
+
+.. math::
+ \gmrule
+ { \mathtt{PushInt} \; n : i
+ & s
+ & h
+ & m
+ }
+ { i
+ & a : s
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & m
+ \begin{bmatrix}
+ n' : a
+ \end{bmatrix}
+ \\
+ \SetCell[c=5]{c}
+ \text{where $n'$ is the base-10 string rep. of $n$}
+ }
+
+2. In order for Extension Rule 1. to be effective, we are also required to take
+ action when a number already exists in the environment:
+
+.. math::
+ \transrule
+ { \mathtt{PushInt} \; n : i
+ & s
+ & h
+ & m
+ \begin{bmatrix}
+ n' : a
+ \end{bmatrix}
+ }
+ { i
+ & a : s
+ & h
+ & m
+ \\
+ \SetCell[c=5]{c}
+ \text{where $n'$ is the base-10 string rep. of $n$}
+ }
+
diff --git a/doc/build/html/_sources/references/gm-state-transitions.rst.txt b/doc/build/html/_sources/references/gm-state-transitions.rst.txt
new file mode 100644
index 0000000..8713dc6
--- /dev/null
+++ b/doc/build/html/_sources/references/gm-state-transitions.rst.txt
@@ -0,0 +1,424 @@
+================================
+G-Machine State Transition Rules
+================================
+
+*********************
+Core Transition Rules
+*********************
+
+#. Lookup a global by name and push its value onto the stack
+
+ .. math::
+ \gmrule
+ { \mathtt{PushGlobal} \; f : i
+ & s
+ & d
+ & h
+ & m
+ \begin{bmatrix}
+ f : a
+ \end{bmatrix}
+ }
+ { i
+ & a : s
+ & d
+ & h
+ & m
+ }
+
+#. Allocate an int node on the heap, and push the address of the newly created
+ node onto the stack
+
+ .. math::
+ \gmrule
+ { \mathtt{PushInt} \; n : i
+ & s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & m
+ }
+
+#. Allocate an application node on the heap, applying the top of the stack to
+ the address directly below it. The address of the application node is pushed
+ onto the stack.
+
+ .. math::
+ \gmrule
+ { \mathtt{MkAp} : i
+ & f : x : s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NAp} \; f \; x
+ \end{bmatrix}
+ & m
+ }
+
+#. Push a function's argument onto the stack
+
+ .. math::
+ \gmrule
+ { \mathtt{Push} \; n : i
+ & a_0 : \ldots : a_n : s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a_n : a_0 : \ldots : a_n : s
+ & d
+ & h
+ & m
+ }
+
+#. Tidy up the stack after instantiating a supercombinator
+
+ .. math::
+ \gmrule
+ { \mathtt{Slide} \; n : i
+ & a_0 : \ldots : a_n : s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a_0 : s
+ & d
+ & h
+ & m
+ }
+
+#. If the top of the stack is in WHNF (currently this just means a number) is on
+ top of the stack, :code:`Unwind` considers evaluation complete. In the case
+ where the dump is **not** empty, the instruction queue and stack is restored
+ from the top.
+
+ .. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a : s
+ & \langle i', s' \rangle : d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & m
+ }
+ { i'
+ & a : s'
+ & d
+ & h
+ & m
+ }
+
+#. Bulding on the previous rule, in the case where the dump **is** empty, leave
+ the machine in a halt state (i.e. with an empty instruction queue).
+
+ .. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a : s
+ & \nillist
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & m
+ }
+ { \nillist
+ & a : s
+ & \nillist
+ & h
+ & m
+ }
+
+#. If an application is on top of the stack, :code:`Unwind` continues unwinding
+
+ .. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NAp} \; f \; x
+ \end{bmatrix}
+ & m
+ }
+ { \mathtt{Unwind} : \nillist
+ & f : a : s
+ & d
+ & h
+ & m
+ }
+
+#. When a supercombinator is on top of the stack (and the correct number of
+ arguments have been provided), :code:`Unwind` sets up the stack and jumps to
+ the supercombinator's code (:math:`\beta`-reduction)
+
+ .. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a_0 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_0 : \mathtt{NGlobal} \; n \; c \\
+ a_1 : \mathtt{NAp} \; a_0 \; e_1 \\
+ \vdots \\
+ a_n : \mathtt{NAp} \; a_{n-1} \; e_n \\
+ \end{bmatrix}
+ & m
+ }
+ { c
+ & e_1 : \ldots : e_n : a_n : s
+ & d
+ & h
+ & m
+ }
+
+#. Pop the stack, and update the nth node to point to the popped address
+
+ .. math::
+ \gmrule
+ { \mathtt{Update} \; n : i
+ & e : f : a_1 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_1 : \mathtt{NAp} \; f \; e \\
+ \vdots \\
+ a_n : \mathtt{NAp} \; a_{n-1} \; e_n
+ \end{bmatrix}
+ & m
+ }
+ { i
+ & f : a_1 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_n : \mathtt{NInd} \; e
+ \end{bmatrix}
+ & m
+ }
+
+#. Pop the stack.
+
+ .. math::
+ \gmrule
+ { \mathtt{Pop} \; n : i
+ & a_1 : \ldots : a_n : s
+ & d
+ & h
+ & m
+ }
+ { i
+ & s
+ & d
+ & h
+ & m
+ }
+
+#. Follow indirections while unwinding
+
+ .. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NInd} \; a'
+ \end{bmatrix}
+ & m
+ }
+ { \mathtt{Unwind} : \nillist
+ & a' : s
+ & d
+ & h
+ & m
+ }
+
+#. Allocate uninitialised heap space
+
+ .. math::
+ \gmrule
+ { \mathtt{Alloc} \; n : i
+ & s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a_1 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_1 : \mathtt{NUninitialised} \\
+ \vdots \\
+ a_n : \mathtt{NUninitialised} \\
+ \end{bmatrix}
+ & m
+ }
+
+#. Evaluate the top of the stack to WHNF
+
+ .. math::
+ \gmrule
+ { \mathtt{Eval} : i
+ & a : s
+ & d
+ & h
+ & m
+ }
+ { \mathtt{Unwind} : \nillist
+ & a : \nillist
+ & \langle i, s \rangle : d
+ & h
+ & m
+ }
+
+#. Reduce a primitive binary operator :math:`*`.
+
+ .. math::
+ \gmrule
+ { * : i
+ & a_1 : a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_1 : x \\
+ a_2 : y
+ \end{bmatrix}
+ & m
+ }
+ { i
+ & a' : s
+ & d
+ & h
+ \begin{bmatrix}
+ a' : (x * y)
+ \end{bmatrix}
+ & m
+ }
+
+#. Reduce a primitive unary operator :math:`\neg`.
+
+ .. math::
+ \gmrule
+ { \neg : i
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : x
+ \end{bmatrix}
+ & m
+ }
+ { i
+ & a' : s
+ & d
+ & h
+ \begin{bmatrix}
+ a' : (\neg x)
+ \end{bmatrix}
+ & m
+ }
+
+#. Consider unapplied functions to be in WHNF
+
+ .. math::
+ \gmrule
+ { \mathtt{Unwind} : \nillist
+ & a_0 : \ldots : a_n : \nillist
+ & \langle i, s \rangle : d
+ & h
+ \begin{bmatrix}
+ a_0 : \mathtt{NGlobal} \; k \; c
+ \end{bmatrix}
+ & m
+ }
+ { i
+ & a_n : s
+ & d
+ & h
+ & m \\
+ \SetCell[c=2]{c}
+ \text{when $n < k$}
+ }
+
+***************
+Extension Rules
+***************
+
+#. A sneaky trick to enable sharing of :code:`NNum` nodes. We note that the
+ global environment is a mapping of plain old strings to heap addresses.
+ Strings of digits are not considered valid identifiers, so putting them on
+ the global environment will never conflict with a supercombinator! We abuse
+ this by modifying Core Rule 2 to update the global environment with the new
+ node's address. Consider how this rule might impact garbage collection
+ (remember that the environment is intended for *globals*).
+
+ .. math::
+ \gmrule
+ { \mathtt{PushInt} \; n : i
+ & s
+ & d
+ & h
+ & m
+ }
+ { i
+ & a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & m
+ \begin{bmatrix}
+ n' : a
+ \end{bmatrix}
+ \\
+ \SetCell[c=5]{c}
+ \text{where $n'$ is the base-10 string rep. of $n$}
+ }
+
+#. In order for the previous rule to be effective, we are also required to take
+ action when a number already exists in the environment:
+
+ .. math::
+ \gmrule
+ { \mathtt{PushInt} \; n : i
+ & s
+ & d
+ & h
+ & m
+ \begin{bmatrix}
+ n' : a
+ \end{bmatrix}
+ }
+ { i
+ & a : s
+ & d
+ & h
+ & m
+ \\
+ \SetCell[c=5]{c}
+ \text{where $n'$ is the base-10 string rep. of $n$}
+ }
+
diff --git a/docs/src/references/ti-state-transitions.rst b/doc/build/html/_sources/references/ti-state-transitions.rst.txt
similarity index 100%
rename from docs/src/references/ti-state-transitions.rst
rename to doc/build/html/_sources/references/ti-state-transitions.rst.txt
diff --git a/doc/build/html/_sources/test.rst.txt b/doc/build/html/_sources/test.rst.txt
new file mode 100644
index 0000000..480ae44
--- /dev/null
+++ b/doc/build/html/_sources/test.rst.txt
@@ -0,0 +1,9 @@
+test page
+=========
+
+ this is a normal paragraph. what follows is a precompiled latex equation::
+
+.. math::
+ \transrule{a : s & d & h \begin{bmatrix} a : \mathtt{NAp} \; a_1 \; a_2 \\ a_2 : \mathtt{NInd} \; a_3 \end{bmatrix} & f}
+ {a : s & d & h[a : \mathtt{NAp} \; a_1 \; a_3] & f}
+
diff --git a/doc/build/html/_static/alabaster.css b/doc/build/html/_static/alabaster.css
new file mode 100644
index 0000000..517d0b2
--- /dev/null
+++ b/doc/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/doc/build/html/_static/basic.css b/doc/build/html/_static/basic.css
new file mode 100644
index 0000000..30fee9d
--- /dev/null
+++ b/doc/build/html/_static/basic.css
@@ -0,0 +1,925 @@
+/*
+ * 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;
+}
+
+a:visited {
+ color: #551A8B;
+}
+
+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;
+}
+
+.sig dd {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+.sig dl {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+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;
+}
+
+.translated {
+ background-color: rgba(207, 255, 207, 0.2)
+}
+
+.untranslated {
+ background-color: rgba(255, 207, 207, 0.2)
+}
+
+/* -- 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/doc/build/html/_static/custom.css b/doc/build/html/_static/custom.css
new file mode 100644
index 0000000..2a924f1
--- /dev/null
+++ b/doc/build/html/_static/custom.css
@@ -0,0 +1 @@
+/* This file intentionally left blank. */
diff --git a/doc/build/html/_static/doctools.js b/doc/build/html/_static/doctools.js
new file mode 100644
index 0000000..d06a71d
--- /dev/null
+++ b/doc/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/doc/build/html/_static/documentation_options.js b/doc/build/html/_static/documentation_options.js
new file mode 100644
index 0000000..7e4c114
--- /dev/null
+++ b/doc/build/html/_static/documentation_options.js
@@ -0,0 +1,13 @@
+const DOCUMENTATION_OPTIONS = {
+ VERSION: '',
+ 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/doc/build/html/_static/file.png b/doc/build/html/_static/file.png
new file mode 100644
index 0000000..a858a41
Binary files /dev/null and b/doc/build/html/_static/file.png differ
diff --git a/doc/build/html/_static/language_data.js b/doc/build/html/_static/language_data.js
new file mode 100644
index 0000000..250f566
--- /dev/null
+++ b/doc/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/doc/build/html/_static/minus.png b/doc/build/html/_static/minus.png
new file mode 100644
index 0000000..d96755f
Binary files /dev/null and b/doc/build/html/_static/minus.png differ
diff --git a/doc/build/html/_static/plus.png b/doc/build/html/_static/plus.png
new file mode 100644
index 0000000..7107cec
Binary files /dev/null and b/doc/build/html/_static/plus.png differ
diff --git a/doc/build/html/_static/pygments.css b/doc/build/html/_static/pygments.css
new file mode 100644
index 0000000..57c7df3
--- /dev/null
+++ b/doc/build/html/_static/pygments.css
@@ -0,0 +1,84 @@
+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 .ges { color: #000000 } /* Generic.EmphStrong */
+.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/doc/build/html/_static/searchtools.js b/doc/build/html/_static/searchtools.js
new file mode 100644
index 0000000..7918c3f
--- /dev/null
+++ b/doc/build/html/_static/searchtools.js
@@ -0,0 +1,574 @@
+/*
+ * 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, highlightTerms) => {
+ const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
+ const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+ const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
+ const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
+ const contentRoot = document.documentElement.dataset.content_root;
+
+ 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 = contentRoot + dirname;
+ linkUrl = requestUrl;
+ } else {
+ // normal html builders
+ requestUrl = contentRoot + 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 + ")";
+ // highlight search terms in the description
+ if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
+ highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
+ }
+ else if (showSearchSummary)
+ fetch(requestUrl)
+ .then((responseData) => responseData.text())
+ .then((data) => {
+ if (data)
+ listItem.appendChild(
+ Search.makeSearchSummary(data, searchTerms)
+ );
+ // highlight search terms in the summary
+ if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
+ highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
+ });
+ 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,
+ highlightTerms,
+) => {
+ // 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, highlightTerms);
+ setTimeout(
+ () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
+ 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, highlightTerms);
+ },
+
+ /**
+ * 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/doc/build/html/_static/sphinx_highlight.js b/doc/build/html/_static/sphinx_highlight.js
new file mode 100644
index 0000000..8a96c69
--- /dev/null
+++ b/doc/build/html/_static/sphinx_highlight.js
@@ -0,0 +1,154 @@
+/* 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)));
+ const rest = document.createTextNode(val.substr(pos + text.length));
+ parent.insertBefore(
+ span,
+ parent.insertBefore(
+ rest,
+ node.nextSibling
+ )
+ );
+ node.nodeValue = val.substr(0, pos);
+ /* There may be more occurrences of search term in this node. So call this
+ * function recursively on the remaining fragment.
+ */
+ _highlight(rest, addItems, text, className);
+
+ 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(
+ '
' +
+ '' +
+ _("Hide Search Matches") +
+ "
"
+ )
+ );
+ },
+
+ /**
+ * 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(() => {
+ /* Do not call highlightSearchWords() when we are on the search page.
+ * It will highlight words from the *previous* search query.
+ */
+ if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
+ SphinxHighlight.initEscapeListener();
+});
diff --git a/doc/build/html/commentary/gm.html b/doc/build/html/commentary/gm.html
new file mode 100644
index 0000000..30a991d
--- /dev/null
+++ b/doc/build/html/commentary/gm.html
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+ The G-Machine — rl' documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+The G-Machine
+
+Motivation
+Our initial model, the Template Instantiator (TI) was a very
+straightforward solution to compilation, but its core design has a major
+Achilles’ heel, being that Compilation is interleaved with evaluation – The
+heap nodes for supercombinators hold uninstantiated expressions, i.e. raw ASTs
+straight from the parser. When a supercombinator is found on the stack during
+evaluation, the template expression is instantiated (compiled) on the spot.
+
+
+
The process of instantiating a supercombinator goes something like this
+
+Augment the environment with bindings to the arguments.
+Using the local augmented environment, instantiate the supercombinator body
+on the heap.
+Remove the nodes applying the supercombinator to its arguments from the
+stack.
+Push the address to the newly instantiated body onto the stack.
+
+
+
src/TI.hs
+
scStep :: Name -> [ Name ] -> Expr -> TiState -> TiState
+scStep n as e ( TiState s d h g sts ) =
+ TiState s' d h' g sts
+ where
+ s' = rootAddr : drop ( length as + 1 ) s -- 3., 4.
+ h' = instantiateU e rootAddr h env -- 2.
+ rootAddr = s !! length as
+
+ env = argBinds ++ g -- 1.
+ argBinds = as ` zip ` argAddrs
+ argAddrs = getArgs h s
+
+
+
+Instantiating the supercombinator’s body in this way is the root of our
+Achilles’ heel. Traversing a tree structure is a very non-linear task unfit for
+an assembly target. The goal of our new G-Machine is to compile a linear
+sequence of instructions which instantiate the expression at execution.
+
+
+Trees and Vines, in Theory
+WIP.
+
+
+Evaluation: Slurping Vines
+WIP.
+
+
+
+Compilation: Squashing Trees
+WIP.
+Notice that we do not keep a (local) environment at run-time. The environment
+only exists at compile-time to map local names to stack indices. When compiling
+a supercombinator, the arguments are enumerated from zero (the top of the
+stack), and passed to compileR as an environment.
+
+
src/GM.hs
+
-- type CompiledSC = (Name, Int, Code)
+
+compileSc :: ScDef -> CompiledSC
+compileSc ( ScDef n as b ) = ( n , d , compileR env b )
+ where
+ env = as ` zip ` [ 0 .. ]
+ d = length as
+
+
+
+Of course, variables being indexed relative to the top of the stack means that
+they will become inaccurate the moment we push or pop the stack a single time.
+The way around this is quite simple: simply offset the stack when w
+
+
src/GM.hs
+
compileC g ( App f x ) = compileC g x
+ <> compileC ( argOffset 1 g ) f
+ <> [ MkAp ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/commentary/layout-lexing.html b/doc/build/html/commentary/layout-lexing.html
new file mode 100644
index 0000000..7119995
--- /dev/null
+++ b/doc/build/html/commentary/layout-lexing.html
@@ -0,0 +1,325 @@
+
+
+
+
+
+
+
+ Lexing, Parsing, and Layouts — rl' documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lexing, Parsing, and Layouts
+The C-style languages of my previous experiences have all had quite trivial
+lexical analysis stages, peaking in complexity when I streamed tokens lazily in
+C. The task of tokenising a C-style language is very simple in description: you
+ignore all whitespace and point out what you recognise. If you don’t recognise
+something, check if it’s a literal or an identifier. Should it be neither,
+return an error.
+On paper, both lexing and parsing a Haskell-like language seem to pose a few
+greater challenges. Listed by ascending intimidation factor, some of the
+potential roadblocks on my mind before making an attempt were:
+
+Operators; Haskell has not only user-defined infix operators, but user-defined
+precedence levels and associativities. I recall using an algorithm that looked
+up infix, prefix, postfix, and even mixfix operators up in a global table to
+call their appropriate parser (if their precedence was appropriate, also
+stored in the table). I never modified the table at runtime, however this
+could be a very nice solution for Haskell.
+Context-sensitive keywords; Haskell allows for some words to be used as identifiers in
+appropriate contexts, such as family , role , as .
+Reading a note found in GHC’s lexer ,
+it appears that keywords are only considered in bodies for which their use is
+relevant, e.g. family and role in type declarations,
+as after case ; if , then , and else in
+expressions, etc.
+Whitespace sensitivity; While I was comfortable with the idea of a system
+similar to Python’s INDENT/DEDENT tokens, Haskell seemed to use whitespace to
+section code in a way that felt different.
+
+After a bit of thought and research, whitespace sensitivity in the form of
+layouts as Haskell and I will refer to them as, are easily the scariest thing
+on this list – however they are achievable!
+
+A Lexical Primer: Python
+We will compare and contrast with Python’s lexical analysis. Much to my dismay,
+Python uses newlines and indentation to separate statements and resolve scope
+instead of the traditional semicolons and braces found in C-style languages (we
+may generally refer to these C-style languages as explicitly-sectioned ).
+Internally during tokenisation, when the Python lexer begins a new line, they
+compare the indentation of the new line with that of the previous and apply the
+following rules:
+
+If the new line has greater indentation than the previous, insert an INDENT
+token and push the new line’s indentation level onto the indentation stack
+(the stack is initialised with an indentation level of zero).
+If the new line has lesser indentation than the previous, pop the stack until
+the top of the stack is greater than the new line’s indentation level. A
+DEDENT token is inserted for each level popped.
+If the indentation is equal, insert a NEWLINE token to terminate the previous
+line, and leave it at that!
+
+Parsing Python with the INDENT, DEDENT, and NEWLINE tokens is identical to
+parsing a language with braces and semicolons. This is a solution pretty in line
+with Python’s philosophy of the “one correct answer” (TODO: this needs a
+source). In developing our layout rules, we will follow in the pattern of
+translating the whitespace-sensitive source language to an explicitly sectioned
+language.
+
+
+But What About Haskell?
+We saw that Python, the most notable example of an implicitly sectioned
+language, is pretty simple to lex. Why then am I so afraid of Haskell’s layouts?
+To be frank, I’m far less scared after asking myself this – however there are
+certainly some new complexities that Python needn’t concern. Haskell has
+implicit line continuation : forms written over multiple lines; indentation
+styles often seen in Haskell are somewhat esoteric compared to Python’s
+“s/[{};]//”.
+-- line continuation
+something = this is a
+ single expression
+
+-- an extremely common style found in haskell
+data Python = Users
+ { are :: Crying
+ , right :: About
+ , now :: Sorry
+ }
+
+-- another formatting oddity
+-- note that this is not a single
+-- continued line! `look at`,
+-- `this`, and `alignment` are all
+-- separate expressions!
+anotherThing = do look at
+ this
+ alignment
+
+
+But enough fear, lets actually think about implementation. Firstly, some
+formality: what do we mean when we say layout? We will define layout as the
+rules we apply to an implicitly-sectioned language in order to yield one that is
+explicitly-sectioned. We will also define indentation of a lexeme as the column
+number of its first character.
+Thankfully for us, our entry point is quite clear; layouts only appear after a
+select few keywords, (with a minor exception; TODO: elaborate) being let
+(followed by supercombinators), where (followed by supercombinators),
+do (followed by expressions), and of (followed by alternatives)
+(TODO: all of these terms need linked glossary entries). In order to manage the
+cascade of layout contexts, our lexer will record a stack for which each element
+is either , denoting an explicit layout written with braces
+and semicolons, or a , denoting an implicitly laid-out
+layout where the start of each item belonging to the layout is indented
+ columns.
+-- layout stack: []
+module M where -- layout stack: [∅]
+
+f x = let -- layout keyword; remember indentation of next token
+ y = w * w -- layout stack: [∅, <10>]
+ w = x + x
+ -- layout ends here
+ in do -- layout keyword; next token is a brace!
+ { -- layout stack: [∅]
+ print y ;
+ print x ;
+ }
+
+
+Finally, we also need the concept of “virtual” brace tokens, which as far as
+we’re concerned at this moment are exactly like normal brace tokens, except
+implicitly inserted by the compiler. With the presented ideas in mind, we may
+begin to introduce a small set of informal rules describing the lexer’s handling
+of layouts, the first being:
+
+If a layout keyword is followed by the token ‘{’, push
+onto the layout context stack. Otherwise, push onto
+the layout context stack where is the indentation of the token
+following the layout keyword. Additionally, the lexer is to insert a virtual
+opening brace after the token representing the layout keyword.
+
+Consider the following observations from that previous code sample:
+
+Function definitions should belong to a layout, each of which may start at
+column 1.
+A layout can enclose multiple bodies, as seen in the let -bindings and
+the do -expression.
+Semicolons should terminate items, rather than separate them.
+
+Our current focus is the semicolons. In an implicit layout, items are on
+separate lines each aligned with the previous. A naïve implementation would be
+to insert the semicolon token when the EOL is reached, but this proves unideal
+when you consider the alignment requirement. In our implementation, our lexer
+will wait until the first token on a new line is reached, then compare
+indentation and insert a semicolon if appropriate. This comparison – the
+nondescript measurement of “more, less, or equal indentation” rather than a
+numeric value – is referred to as offside by myself internally and the
+Haskell report describing layouts. We informally formalise this rule as follows:
+
+When the first token on a line is preceeded only by whitespace, if the
+token’s first grapheme resides on a column number equal to the
+indentation level of the enclosing context – i.e. the on top of the layout stack. Should no such context exist on the
+stack, assume .
+
+We have an idea of how to begin layouts, delimit the enclosed items, and last
+we’ll need to end layouts. This is where the distinction between virtual and
+non-virtual brace tokens comes into play. The lexer needs only partial concern
+towards closing layouts; the complete responsibility is shared with the parser.
+This will be elaborated on in the next section. For now, we will be content with
+naïvely inserting a virtual closing brace when a token is indented right of the
+layout.
+
+Under the same conditions as rule 2., when the lexer shall
+insert a virtual closing brace and pop the layout stack.
+
+This rule covers some cases including the top-level, however, consider
+tokenising the in in a let -expression. If our lexical analysis
+framework only allows for lexing a single token at a time, we cannot return both
+a virtual right-brace and a in . Under this model, the lexer may simply
+pop the layout stack and return the in token. As we’ll see in the next
+section, as long as the lexer keeps track of its own context (i.e. the stack),
+the parser will cope just fine without the virtual end-brace.
+
+
+Parsing Lonely Braces
+When viewed in the abstract, parsing and tokenising are near-identical tasks yet
+the two are very often decomposed into discrete systems with very different
+implementations. Lexers operate on streams of text and tokens, while parsers
+are typically far less linear, using a parse stack or recursing top-down. A
+big reason for this separation is state management: the parser aims to be as
+context-free as possible, while the lexer tends to burden the necessary
+statefulness. Still, the nature of a stream-oriented lexer makes backtracking
+difficult and quite inelegant.
+However, simply declaring a parse error to be not an error at all
+counterintuitively proves to be an elegant solution our layout problem which
+minimises backtracking and state in both the lexer and the parser. Consider the
+following definitions found in rlp’s BNF:
+
+VOpen ::= vopen
+VClose ::= vclose | error
+
+A parse error is recovered and treated as a closing brace. Another point of note
+in the BNF is the difference between virtual and non-virtual braces (TODO: i
+don’t like that the BNF is formatted without newlines :/):
+
+LetExpr ::= let VOpen Bindings VClose in Expr | let `{` Bindings `}` in Expr
+
+This ensures that non-virtual braces are closed explicitly.
+This set of rules is adequete enough to satisfy our basic concerns about line
+continations and layout lists. For a more pedantic description of the layout
+system, see chapter 10 of the
+2010 Haskell Report, which I heavily referenced here.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/commentary/stg.html b/doc/build/html/commentary/stg.html
new file mode 100644
index 0000000..e2d864d
--- /dev/null
+++ b/doc/build/html/commentary/stg.html
@@ -0,0 +1,409 @@
+
+
+
+
+
+
+
+ The Spineless Tagless G-Machine — rlp documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+The Spineless Tagless G-Machine
+WIP. This will hopefully be expanded into a thorough walkthrough of the state
+machine.
+Evaluation is complete when a single NNum remains on the stack and the
+dump is empty.
+
+
+
Dereference an indirection passed as an argument to a function.
+
+
+
Dereference an indirection on top of the stack.
+
+
+
Perform a unary operation with internal Prim constructor
+O on an argument in normal form.
+
+
+
Evaluate the argument of a unary operation with internal Prim
+constructor O .
+
+
+
Restore the stack when a sub-computation has completed.
+
+
+
Reduce a supercombinator and update the root with the -reduced form
+
+
+
Perform a binary operation associated with internal Prim
+constructor O on two NNum s both in normal form.
+
+
+
In a conditional primitive, perform the reduction if the condition has been
+evaluated as True (NData 1 [] ).
+
+
+
In a conditional primitive, perform the reduction if the condition has been
+evaluated as False (NData 0 [] ).
+
+
+
In a conditional primitive, evaluate the condition.
+
+
+
Construct NData out of a constructor and its arguments
+
+
+
+Pairs
+Evaluate the first argument if necessary
+
+
+
Perform the reduction if the first argument is in normal form
+
+
+
+
+Lists
+Evaluate the scrutinee
+
+
+
If the scrutinee is Nil , perform the appropriate reduction.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/commentary/ti.html b/doc/build/html/commentary/ti.html
new file mode 100644
index 0000000..6f4789b
--- /dev/null
+++ b/doc/build/html/commentary/ti.html
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+ The Template Instantiator — rl' documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+The Template Instantiator
+WIP. This will hopefully be expanded into a thorough walkthrough of the state
+machine.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/commentary/tim.html b/doc/build/html/commentary/tim.html
new file mode 100644
index 0000000..f291bdb
--- /dev/null
+++ b/doc/build/html/commentary/tim.html
@@ -0,0 +1,410 @@
+
+
+
+
+
+
+
+ The Template Instantiation Machine — rlp documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+The Template Instantiation Machine
+WIP. This will hopefully be expanded into a thorough walkthrough of the state
+machine.
+Evaluation is complete when a single NNum remains on the stack and the
+dump is empty.
+
+
+
Dereference an indirection passed as an argument to a function.
+
+
+
Dereference an indirection on top of the stack.
+
+
+
Perform a unary operation with internal Prim constructor
+O on an argument in normal form.
+
+
+
Evaluate the argument of a unary operation with internal Prim
+constructor O .
+
+
+
Restore the stack when a sub-computation has completed.
+
+
+
Reduce a supercombinator and update the root with the -reduced form
+
+
+
Perform a binary operation associated with internal Prim
+constructor O on two NNum s both in normal form.
+
+
+
In a conditional primitive, perform the reduction if the condition has been
+evaluated as True (NData 1 [] ).
+
+
+
In a conditional primitive, perform the reduction if the condition has been
+evaluated as False (NData 0 [] ).
+
+
+
In a conditional primitive, evaluate the condition.
+
+
+
Construct NData out of a constructor and its arguments
+
+
+
+Pairs
+Evaluate the first argument if necessary
+
+
+
Perform the reduction if the first argument is in normal form
+
+
+
+
+Lists
+Evaluate the scrutinee
+
+
+
If the scrutinee is Nil , perform the appropriate reduction.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/genindex.html b/doc/build/html/genindex.html
new file mode 100644
index 0000000..87a4b02
--- /dev/null
+++ b/doc/build/html/genindex.html
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+ Index — rl' documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index
+
+
+
C
+
+
+
L
+
+
+
S
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/glossary.html b/doc/build/html/glossary.html
new file mode 100644
index 0000000..a2c61e8
--- /dev/null
+++ b/doc/build/html/glossary.html
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+ Glossary — rl' documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Glossary
+Haskell and Haskell culture is infamous for using scary mathematical terms for
+simple ideas. Please excuse us, it’s really fun :3.
+
+supercombinator An expression with no free variables. For most purposes, just think of a
+top-level definition.
+
+case alternative An possible match in a case expression (TODO: example)
+
+layout The syntax used in rlp and Haskell that allows for implicitly sectioned
+code using alignment and newlines.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/index.html b/doc/build/html/index.html
new file mode 100644
index 0000000..ac6b1ed
--- /dev/null
+++ b/doc/build/html/index.html
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+ Welcome to rlp’s documentation! — rl' documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Welcome to rlp’s documentation!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/objects.inv b/doc/build/html/objects.inv
new file mode 100644
index 0000000..3f7a6b8
Binary files /dev/null and b/doc/build/html/objects.inv differ
diff --git a/doc/build/html/references/gm-state-transition-rules.html b/doc/build/html/references/gm-state-transition-rules.html
new file mode 100644
index 0000000..468841c
--- /dev/null
+++ b/doc/build/html/references/gm-state-transition-rules.html
@@ -0,0 +1,459 @@
+
+
+
+
+
+
+
+ G-Machine State Transition Rules — rl' documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+G-Machine State Transition Rules
+
+Core Transition Rules
+
+Lookup a global by name and push its value onto the stack
+
+
+
+
+Allocate an int node on the heap, and push the address of the newly created
+node onto the stack
+
+
+
+
+Allocate an application node on the heap, applying the top of the stack to
+the address directly below it. The address of the application node is pushed
+onto the stack.
+
+
+
+
+Push a function’s argument onto the stack
+
+
+
+
+Tidy up the stack after instantiating a supercombinator
+
+
+
+
+If a number is on top of the stack, Unwind leaves the machine in a
+halt state
+
+
+
+
+If an application is on top of the stack, Unwind continues unwinding
+
+
+
+
+When a supercombinator is on top of the stack (and the correct number of
+arguments have been provided), Unwind sets up the stack and jumps to
+the supercombinator’s code ( -reduction)
+
+
+
+
+Pop the stack, and update the nth node to point to the popped address
+
+
+
+
+Pop the stack.
+
+
+
+
+Follow indirections while unwinding
+
+
+
+
+Allocate uninitialised heap space
+
+
+
+
+When unwinding, if the top of the stack is in WHNF, pop the dump
+
+
+
+
+Evaluate the top of the stack to WHNF
+
+
+
+
+
+Extension Rules
+
+A sneaky trick to enable sharing of NNum nodes. We note that the
+global environment is a mapping of Name objects (i.e. identifiers) to
+heap addresses. Strings of digits are not considered valid identifiers! We
+abuse this by modifying Core Rule 2 to update the global environment with the
+new node’s address. Consider how this rule might impact garbage collection
+(remember that the environment is intended for globals ).
+
+
+
+
+In order for Extension Rule 1. to be effective, we are also required to take
+action when a number already exists in the environment:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/references/gm-state-transitions.html b/doc/build/html/references/gm-state-transitions.html
new file mode 100644
index 0000000..6377277
--- /dev/null
+++ b/doc/build/html/references/gm-state-transitions.html
@@ -0,0 +1,521 @@
+
+
+
+
+
+
+
+ G-Machine State Transition Rules — rl' documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+G-Machine State Transition Rules
+
+Core Transition Rules
+
+Lookup a global by name and push its value onto the stack
+
+
+
+Allocate an int node on the heap, and push the address of the newly created
+node onto the stack
+
+
+
+Allocate an application node on the heap, applying the top of the stack to
+the address directly below it. The address of the application node is pushed
+onto the stack.
+
+
+
+Push a function’s argument onto the stack
+
+
+
+Tidy up the stack after instantiating a supercombinator
+
+
+
+If the top of the stack is in WHNF (currently this just means a number) is on
+top of the stack, Unwind considers evaluation complete. In the case
+where the dump is not empty, the instruction queue and stack is restored
+from the top.
+
+
+
+Bulding on the previous rule, in the case where the dump is empty, leave
+the machine in a halt state (i.e. with an empty instruction queue).
+
+
+
+If an application is on top of the stack, Unwind continues unwinding
+
+
+
+When a supercombinator is on top of the stack (and the correct number of
+arguments have been provided), Unwind sets up the stack and jumps to
+the supercombinator’s code ( -reduction)
+
+
+
+Pop the stack, and update the nth node to point to the popped address
+
+
+
+Pop the stack.
+
+
+
+Follow indirections while unwinding
+
+
+
+Allocate uninitialised heap space
+
+
+
+Evaluate the top of the stack to WHNF
+
+
+
+Reduce a primitive binary operator .
+
+
+
+Reduce a primitive unary operator .
+
+
+
+Consider unapplied functions to be in WHNF
+
+
+
+
+
+
+Extension Rules
+
+A sneaky trick to enable sharing of NNum nodes. We note that the
+global environment is a mapping of plain old strings to heap addresses.
+Strings of digits are not considered valid identifiers, so putting them on
+the global environment will never conflict with a supercombinator! We abuse
+this by modifying Core Rule 2 to update the global environment with the new
+node’s address. Consider how this rule might impact garbage collection
+(remember that the environment is intended for globals ).
+
+
+
+In order for the previous rule to be effective, we are also required to take
+action when a number already exists in the environment:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/references/ti-state-transitions.html b/doc/build/html/references/ti-state-transitions.html
new file mode 100644
index 0000000..bcfb9c4
--- /dev/null
+++ b/doc/build/html/references/ti-state-transitions.html
@@ -0,0 +1,413 @@
+
+
+
+
+
+
+
+ Template Instantiator State Transition Rules — rl' documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Template Instantiator State Transition Rules
+Evaluation is complete when a single NNum remains on the stack and the
+dump is empty.
+
+
+
Dereference an indirection passed as an argument to a function.
+
+
+
Dereference an indirection on top of the stack.
+
+
+
Perform a unary operation with internal Prim constructor
+O on an argument in normal form.
+
+
+
Evaluate the argument of a unary operation with internal Prim
+constructor O .
+
+
+
Restore the stack when a sub-computation has completed.
+
+
+
Reduce a supercombinator and update the root with the -reduced form
+
+
+
Perform a binary operation associated with internal Prim
+constructor O on two NNum s both in normal form.
+
+
+
In a conditional primitive, perform the reduction if the condition has been
+evaluated as True (NData 1 [] ).
+
+
+
In a conditional primitive, perform the reduction if the condition has been
+evaluated as False (NData 0 [] ).
+
+
+
In a conditional primitive, evaluate the condition.
+
+
+
Construct NData out of a constructor and its arguments
+
+
+
+Pairs
+Evaluate the first argument if necessary
+
+
+
Perform the reduction if the first argument is in normal form
+
+
+
+
+Lists
+Evaluate the scrutinee
+
+
+
If the scrutinee is Nil , perform the appropriate reduction.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/search.html b/doc/build/html/search.html
new file mode 100644
index 0000000..ea7e1fc
--- /dev/null
+++ b/doc/build/html/search.html
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+ Search — rl' documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Search
+
+
+
+
+ Please activate JavaScript to enable the search
+ functionality.
+
+
+
+
+
+
+ Searching for multiple words only shows matches that contain
+ all words.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/build/html/searchindex.js b/doc/build/html/searchindex.js
new file mode 100644
index 0000000..925be43
--- /dev/null
+++ b/doc/build/html/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({"docnames": ["commentary/gm", "commentary/layout-lexing", "commentary/ti", "glossary", "index", "references/gm-state-transitions", "references/ti-state-transitions"], "filenames": ["commentary/gm.rst", "commentary/layout-lexing.rst", "commentary/ti.rst", "glossary.rst", "index.rst", "references/gm-state-transitions.rst", "references/ti-state-transitions.rst"], "titles": ["The G-Machine ", "Lexing, Parsing, and Layouts", "The Template Instantiator ", "Glossary", "Welcome to rlp\u2019s documentation!", "G-Machine State Transition Rules", "Template Instantiator State Transition Rules"], "terms": {"index": 0, "modul": 1, "search": [], "page": [], "begin": [0, 1, 5, 6], "tblr": [], "ccclc": [], "hline": [], "": [0, 1, 3, 5, 6], "d": [0, 5, 6], "h": [0, 5, 6], "bmatrix": [0, 5, 6], "mathtt": [0, 5, 6], "nap": [5, 6], "a_1": [0, 5, 6], "a_2": [5, 6], "nind": [5, 6], "a_3": 6, "end": [0, 1, 5, 6], "f": [0, 1, 5, 6], "impli": [], "thi": [0, 1, 2, 5], "i": [0, 1, 3, 5, 6], "normal": [1, 6], "paragraph": [], "what": [], "follow": [1, 5], "precompil": [], "latex": [], "equat": [], "math": [], "transrul": [0, 6], "test": [], "The": [1, 3, 4, 5], "spineless": [], "tagless": [], "g": [1, 4, 6], "machin": [2, 4], "wip": [0, 2], "here": 1, "typeset": [], "state": [1, 2, 4], "transit": 4, "rule": [1, 4], "describ": 1, "action": 5, "dereferenc": [], "indirect": [5, 6], "when": [0, 1, 5, 6], "pass": [0, 6], "function": [1, 5, 6], "argument": [0, 5, 6], "derefer": 6, "an": [0, 1, 3, 5, 6], "top": [0, 1, 3, 5, 6], "stack": [0, 1, 5, 6], "p": 6, "negat": [], "form": [1, 6], "nprim": 6, "neg": 5, "x": [0, 1, 5, 6], "nnum": [5, 6], "n": [0, 1, 5, 6], "perform": 6, "unari": [5, 6], "oper": [1, 5, 6], "o": 6, "e": [0, 1, 5, 6], "intern": [1, 6], "prim": 6, "constructor": 6, "unevalu": [], "b": 0, "nillist": [5, 6], "hopefulli": 2, "expand": 2, "thorough": 2, "explan": [], "evalu": [5, 6], "complet": [1, 5, 6], "singl": [0, 1, 6], "texttt": [], "remain": 6, "dump": [5, 6], "empti": [5, 6], "halt": [5, 6], "restor": [5, 6], "sub": 6, "comput": 6, "ha": [0, 1, 6], "reduc": [5, 6], "supercombin": [0, 1, 3, 5, 6], "updat": [0, 5, 6], "root": [0, 6], "beta": [5, 6], "a_0": [0, 5, 6], "ldot": [0, 5, 6], "a_n": [0, 5, 6], "nsupercomb": [0, 6], "x_1": [0, 6], "x_n": [0, 6], "text": [0, 1, 5, 6], "where": [0, 1, 5, 6], "instantiateu": [0, 6], "setcel": [0, 5, 6], "r": [], "2": [0, 1, 5], "c": [0, 1, 5, 6], "3": [0, 3, 6], "\u03b2": [], "caption": [], "figur": [], "gather": [], "tag": [], "1": [0, 1, 5, 6], "binari": [5, 6], "y": [1, 5, 6], "associ": [1, 6], "two": [1, 6], "both": [1, 6], "In": [1, 5, 6], "condit": [1, 6], "primit": [5, 6], "placehold": [], "walkthrough": 2, "textt": [], "ifp": 6, "reduct": [5, 6], "been": [5, 6], "true": 6, "conp": 6, "0": [0, 6], "mathbb": [], "fals": 6, "construct": 6, "ndata": 6, "out": [1, 6], "its": [0, 1, 5, 6], "t": [1, 6], "vdot": [5, 6], "a_": [5, 6], "style": 1, "languag": 1, "my": 1, "previou": [1, 5], "experi": 1, "have": [1, 5], "all": 1, "had": 1, "quit": [0, 1], "trivial": 1, "lexic": [], "analysi": 1, "stage": 1, "peak": 1, "complex": 1, "stream": 1, "token": 1, "lazili": 1, "task": [0, 1], "tokenis": 1, "veri": [0, 1], "simpl": [0, 1, 3], "descript": 1, "you": 1, "ignor": 1, "whitespac": 1, "point": [1, 5], "recognis": 1, "If": [1, 5, 6], "don": 1, "someth": [0, 1], "check": 1, "liter": 1, "identifi": [1, 5], "should": 1, "neither": 1, "return": 1, "error": 1, "On": 1, "paper": 1, "haskel": 3, "like": [0, 1], "seem": 1, "pose": 1, "few": 1, "greater": 1, "challeng": 1, "some": 1, "potenti": 1, "roadblock": 1, "mind": 1, "befor": 1, "make": 1, "attempt": 1, "were": 1, "sensit": 1, "while": [1, 5], "wa": [0, 1], "comfort": 1, "idea": [1, 3], "system": 1, "similar": 1, "python": [], "indent": 1, "dedent": 1, "us": [0, 1, 3], "section": [1, 3], "code": [0, 1, 3, 5], "wai": [0, 1], "felt": 1, "differ": 1, "onli": [0, 1], "user": 1, "defin": 1, "infix": 1, "preced": 1, "level": [1, 3], "recal": 1, "algorithm": 1, "look": 1, "up": [1, 5], "prefix": 1, "postfix": 1, "even": 1, "mixfix": 1, "global": [1, 5], "tabl": 1, "call": 1, "appropri": [1, 6], "parser": [0, 1], "also": [1, 5], "store": 1, "never": [1, 5], "modifi": [1, 5], "runtim": 1, "howev": 1, "could": 1, "nice": 1, "solut": [0, 1], "context": 1, "keyword": 1, "allow": [1, 3], "word": 1, "famili": 1, "role": 1, "from": [0, 1, 5], "_note": [], "found": [0, 1], "ghc": 1, "lexer": 1, "first": [1, 6], "ar": [0, 1, 5], "consid": [1, 5], "bodi": [0, 1], "relev": 1, "type": [0, 1], "declar": 1, "lex": 4, "pars": 4, "layout": [3, 4], "note": [1, 5], "list": 1, "ascend": 1, "intimid": 1, "factor": 1, "read": 1, "appear": 1, "which": [0, 1], "after": [1, 5], "case": [1, 3, 5], "els": 1, "express": [0, 1, 3], "etc": 1, "bit": 1, "thought": 1, "research": 1, "refer": [], "them": [1, 5], "easili": 1, "scariest": 1, "thing": 1, "thei": [0, 1], "achiev": 1, "we": [0, 1, 5], "compar": 1, "contrast": 1, "much": 1, "dismai": 1, "newlin": [1, 3], "separ": 1, "statement": 1, "resolv": 1, "scope": 1, "instead": [0, 1], "tradit": 1, "semicolon": 1, "brace": [], "see": 1, "bcpl": [], "http": [], "doc": [], "org": [], "lexical_analysi": [], "html": [], "dure": [0, 1], "new": [0, 1, 5], "line": 1, "appli": [0, 1, 5], "than": 1, "insert": 1, "push": [0, 1, 5], "onto": [0, 1, 5], "initialis": 1, "zero": [0, 1], "lesser": 1, "pop": [0, 1, 5], "until": 1, "each": 1, "equal": 1, "termin": 1, "leav": [1, 5], "ident": 1, "pretti": 1, "philosophi": 1, "one": 1, "correct": [1, 5], "answer": 1, "todo": [1, 3], "need": 1, "sourc": 1, "develop": 1, "our": [0, 1], "pattern": 1, "translat": 1, "explicitli": 1, "saw": 1, "most": [1, 3], "notabl": 1, "exampl": [1, 3], "implicitli": [1, 3], "why": 1, "am": 1, "so": [1, 5], "afraid": 1, "syntax": [1, 3], "A": 5, "primer": [], "But": [], "about": [], "mai": 1, "gener": 1, "To": 1, "frank": 1, "m": [1, 5], "far": 1, "less": 1, "scare": 1, "ask": 1, "myself": 1, "certainli": 1, "needn": 1, "concern": 1, "implicit": 1, "continu": [1, 5], "written": 1, "over": 1, "multipl": 1, "often": 1, "seen": 1, "somewhat": 1, "esoter": 1, "extrem": 1, "common": 1, "data": 1, "cry": 1, "right": 1, "now": 1, "sorri": 1, "anoth": 1, "format": 1, "odditi": 1, "anotherth": 1, "do": [0, 1], "align": [1, 3], "contiat": [], "enough": 1, "fear": 1, "let": 1, "actual": 1, "think": [1, 3], "implement": 1, "firstli": 1, "formal": 1, "mean": [0, 1, 5], "sai": 1, "order": [1, 5], "yield": 1, "thankfulli": 1, "u": [1, 3], "entri": 1, "clear": 1, "select": 1, "minor": 1, "except": 1, "elabor": 1, "being": [0, 1], "altern": [1, 3], "term": [1, 3], "link": 1, "glosarri": [], "cultur": 3, "infam": 3, "scari": 3, "mathemat": 3, "pleas": 3, "excus": 3, "realli": 3, "fun": 3, "glossari": [1, 4], "free": [1, 3], "variabl": [0, 3], "For": [1, 3], "purpos": 3, "just": [1, 3, 5], "definit": [1, 3], "possibl": [1, 3], "match": 3, "under": 1, "assumpt": [], "give": [], "lexem": 1, "next": 1, "file": [], "reach": 1, "henceforth": [], "denot": 1, "repres": 1, "subsequ": [], "column": 1, "number": [1, 5], "charact": 1, "must": [], "introduc": 1, "addit": [], "input": [], "handl": 1, "obvious": [], "would": 1, "requir": [1, 5], "string": 5, "help": [], "book": [], "keep": [0, 1], "tool": [], "good": [], "current": [1, 5], "cascad": 1, "element": 1, "either": 1, "nolayout": [], "indic": 0, "explicit": 1, "programm": [], "herself": [], "non": [0, 1], "integ": [], "enclos": 1, "rememb": [1, 5], "w": [0, 1], "10": [1, 5], "pure": [], "abov": [], "notic": 0, "accom": [], "langl": [1, 5], "rangl": [1, 5], "lastli": [], "compliment": [], "how": [1, 5], "close": 1, "preceed": 1, "provid": 5, "consequ": [], "ll": 1, "more": 1, "pedant": 1, "chapter": 1, "2010": 1, "report": 1, "heavili": 1, "referenc": 1, "manag": 1, "record": 1, "laid": 1, "start": 1, "item": 1, "belong": 1, "With": 1, "plai": 1, "set": [1, 5], "inform": 1, "otherwis": 1, "adequet": 1, "satisfi": 1, "basic": 1, "contin": 1, "varnoth": 1, "final": 1, "concept": 1, "virtual": 1, "re": 1, "moment": [0, 1], "exactli": 1, "compil": 1, "present": 1, "small": 1, "addition": 1, "open": 1, "observ": 1, "sampl": 1, "can": 1, "bind": [0, 1], "rather": 1, "focu": 1, "na\u00efv": 1, "eol": 1, "prove": 1, "unid": 1, "wait": 1, "comparison": 1, "nondescript": 1, "measur": 1, "numer": 1, "valu": [1, 5], "offsid": 1, "formalis": 1, "graphem": 1, "resid": 1, "exist": [0, 1, 5], "assum": 1, "print": 1, "delimit": 1, "last": 1, "distinct": 1, "between": 1, "come": 1, "partial": 1, "toward": 1, "respons": 1, "share": [1, 5], "content": 1, "same": 1, "shall": 1, "cover": 1, "includ": 1, "framework": 1, "time": [0, 1], "cannot": 1, "model": [0, 1], "simpli": [0, 1], "As": 1, "long": 1, "track": 1, "own": 1, "cope": 1, "fine": 1, "without": 1, "view": 1, "abstract": 1, "yet": 1, "decompos": 1, "discret": 1, "typic": 1, "linear": [0, 1], "recurs": 1, "down": 1, "big": 1, "reason": 1, "aim": 1, "tend": 1, "burden": 1, "necessari": [1, 6], "still": 1, "natur": 1, "orient": 1, "backtrack": 1, "difficult": 1, "ineleg": 1, "counterintuit": 1, "eleg": 1, "problem": 1, "minimis": 1, "rlp": [1, 3], "bnf": 1, "setlength": [], "grammarparsep": [], "20pt": [], "plu": [], "1pt": [], "minu": [], "grammarind": [], "12em": [], "grammar": [], "expr": [0, 1], "alt": [], "stat": [], "vopen": 1, "vclose": 1, "recov": 1, "treat": 1, "ensur": 1, "casepairp": 6, "_": 6, "scrutine": 6, "caselistp": 6, "nil": 6, "f_": 6, "con": 6, "initi": 0, "templat": [0, 4], "instanti": [0, 4, 5], "tim": [], "straightforward": 0, "core": 0, "design": 0, "major": 0, "achil": 0, "heel": 0, "interleav": 0, "heap": [0, 5], "node": [0, 5], "hold": 0, "uninstanti": 0, "raw": 0, "ast": 0, "straight": 0, "spot": 0, "lead": [], "loss": [], "travers": 0, "tree": [], "difficulti": [], "lower": [], "investig": [], "scstep": 0, "name": [0, 5], "tistat": 0, "st": 0, "rootaddr": 0, "drop": 0, "length": 0, "env": 0, "argbind": 0, "zip": 0, "argaddr": 0, "getarg": 0, "src": 0, "hello": [], "world": [], "process": 0, "goe": 0, "augment": 0, "environ": [0, 5], "local": 0, "remov": 0, "address": [0, 5], "newli": [0, 5], "4": 0, "structur": 0, "unfit": 0, "assembli": 0, "target": 0, "goal": 0, "sequenc": 0, "instruct": [0, 5], "execut": 0, "lookup": 5, "gmrule": 5, "pushglob": 5, "alloc": 5, "int": [0, 5], "creat": 5, "pushint": 5, "applic": 5, "directli": 5, "below": 5, "mkap": [0, 5], "_n": [], "tidi": 5, "slide": [0, 5], "unwind": [0, 5], "jump": 5, "nglobal": 5, "compiledsc": 0, "compilesc": 0, "scdef": 0, "gm": 0, "run": 0, "map": [0, 5], "enumer": 0, "Of": 0, "cours": 0, "rel": 0, "becom": 0, "inaccur": 0, "around": 0, "offset": 0, "compilec": 0, "app": 0, "argoffset": 0, "sneaki": 5, "trick": 5, "enabl": 5, "object": [], "digit": 5, "valid": 5, "abus": 5, "ad": [], "base": 5, "rep": 5, "5": 5, "effect": 5, "take": 5, "alreadi": 5, "impact": 5, "garbag": 5, "collect": 5, "intend": 5, "might": 5, "e_n": 5, "nth": 5, "ti": 0, "e_1": 5, "uninitialis": 5, "space": 5, "nuninitialis": 5, "whnf": 5, "eval": 5, "z": [], "plain": 5, "old": 5, "put": 5, "conflict": 5, "discard": [], "queue": 5, "buld": 5, "k": 5, "unappli": 5}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"welcom": 4, "rlp": 4, "": 4, "document": 4, "indic": [], "tabl": [], "test": [], "page": [], "commentari": 4, "content": 4, "The": [0, 2], "spineless": [], "tagless": [], "g": [0, 5], "machin": [0, 5], "lex": 1, "pars": 1, "layout": 1, "rule": [5, 6], "refer": [1, 4], "A": 1, "lexic": 1, "primer": 1, "python": 1, "But": 1, "what": 1, "about": 1, "haskel": 1, "glossari": 3, "index": 4, "lone": 1, "brace": 1, "pair": 6, "list": 6, "templat": [2, 6], "instanti": [2, 6], "motiv": 0, "implement": [], "compil": 0, "how": [], "squash": 0, "tree": 0, "vine": 0, "theori": 0, "core": 5, "transit": [5, 6], "evalu": 0, "slurp": 0, "extens": 5, "lazi": 0, "state": [5, 6], "ti": []}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Lexing, Parsing, and Layouts": [[1, "lexing-parsing-and-layouts"]], "A Lexical Primer: Python": [[1, "a-lexical-primer-python"]], "But What About Haskell?": [[1, "but-what-about-haskell"]], "Parsing Lonely Braces": [[1, "parsing-lonely-braces"]], "References": [[1, "references"], [4, null]], "Glossary": [[3, "glossary"]], "Template Instantiator State Transition Rules": [[6, "template-instantiator-state-transition-rules"]], "Pairs": [[6, "pairs"]], "Lists": [[6, "lists"]], "The Template Instantiator": [[2, "the-template-instantiator"]], "Welcome to rlp\u2019s documentation!": [[4, "welcome-to-rlp-s-documentation"]], "Contents": [[4, "contents"]], "Index": [[4, null]], "Commentary": [[4, null]], "The G-Machine": [[0, "the-g-machine"]], "Motivation": [[0, "motivation"]], "Trees and Vines, in Theory": [[0, "trees-and-vines-in-theory"]], "Evaluation: Slurping Vines": [[0, "evaluation-slurping-vines"]], "Laziness": [[0, "laziness"]], "Compilation: Squashing Trees": [[0, "compilation-squashing-trees"]], "G-Machine State Transition Rules": [[5, "g-machine-state-transition-rules"]], "Core Transition Rules": [[5, "core-transition-rules"]], "Extension Rules": [[5, "extension-rules"]]}, "indexentries": {}})
\ No newline at end of file
diff --git a/doc/build/html/test.html b/doc/build/html/test.html
new file mode 100644
index 0000000..1477654
--- /dev/null
+++ b/doc/build/html/test.html
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+ test page — rlp documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test page
+
+this is a normal paragraph. what follows is a precompiled latex equation:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/src/commentary/gm.rst b/doc/src/commentary/gm.rst
new file mode 100644
index 0000000..1682a58
--- /dev/null
+++ b/doc/src/commentary/gm.rst
@@ -0,0 +1,104 @@
+The *G-Machine*
+===============
+
+**********
+Motivation
+**********
+
+Our initial model, the *Template Instantiator* (TI) was a very
+straightforward solution to compilation, but its core design has a major
+Achilles' heel, being that Compilation is interleaved with evaluation -- The
+heap nodes for supercombinators hold uninstantiated expressions, i.e. raw ASTs
+straight from the parser. When a supercombinator is found on the stack during
+evaluation, the template expression is instantiated (compiled) on the spot.
+
+.. math::
+ \transrule
+ { a_0 : a_1 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_0 : \mathtt{NSupercomb} \; [x_1,\ldots,x_n] \; e
+ \end{bmatrix}
+ & g
+ }
+ { a_n : s
+ & d
+ & h'
+ & g
+ \\
+ & \SetCell[c=3]{c}
+ \text{where } h' = \mathtt{instantiateU} \; e \; a_n \; h \; g
+ }
+
+The process of instantiating a supercombinator goes something like this
+
+1. Augment the environment with bindings to the arguments.
+
+2. Using the local augmented environment, instantiate the supercombinator body
+ on the heap.
+
+3. Remove the nodes applying the supercombinator to its arguments from the
+ stack.
+
+4. Push the address to the newly instantiated body onto the stack.
+
+.. literalinclude:: /../../src/TI.hs
+ :dedent:
+ :start-after: -- >> [ref/scStep]
+ :end-before: -- << [ref/scStep]
+ :caption: src/TI.hs
+
+Instantiating the supercombinator's body in this way is the root of our
+Achilles' heel. Traversing a tree structure is a very non-linear task unfit for
+an assembly target. The goal of our new G-Machine is to compile a *linear
+sequence of instructions* which instantiate the expression at execution.
+
+**************************
+Trees and Vines, in Theory
+**************************
+
+WIP.
+
+**************************
+Evaluation: Slurping Vines
+**************************
+
+WIP.
+
+Laziness
+--------
+
+WIP.
+
+* Instead of :code:`Slide (n+1); Unwind`, do :code:`Update n; Pop n; Unwind`
+
+****************************
+Compilation: Squashing Trees
+****************************
+
+WIP.
+
+Notice that we do not keep a (local) environment at run-time. The environment
+only exists at compile-time to map local names to stack indices. When compiling
+a supercombinator, the arguments are enumerated from zero (the top of the
+stack), and passed to :code:`compileR` as an environment.
+
+.. literalinclude:: /../../src/GM.hs
+ :dedent:
+ :start-after: -- >> [ref/compileSc]
+ :end-before: -- << [ref/compileSc]
+ :caption: src/GM.hs
+
+Of course, variables being indexed relative to the top of the stack means that
+they will become inaccurate the moment we push or pop the stack a single time.
+The way around this is quite simple: simply offset the stack when w
+
+.. literalinclude:: /../../src/GM.hs
+ :dedent:
+ :start-after: -- >> [ref/compileC]
+ :end-before: -- << [ref/compileC]
+ :caption: src/GM.hs
+
+
+
diff --git a/doc/src/commentary/layout-lexing.rst b/doc/src/commentary/layout-lexing.rst
new file mode 100644
index 0000000..4fbfd5e
--- /dev/null
+++ b/doc/src/commentary/layout-lexing.rst
@@ -0,0 +1,235 @@
+Lexing, Parsing, and Layouts
+============================
+
+The C-style languages of my previous experiences have all had quite trivial
+lexical analysis stages, peaking in complexity when I streamed tokens lazily in
+C. The task of tokenising a C-style language is very simple in description: you
+ignore all whitespace and point out what you recognise. If you don't recognise
+something, check if it's a literal or an identifier. Should it be neither,
+return an error.
+
+On paper, both lexing and parsing a Haskell-like language seem to pose a few
+greater challenges. Listed by ascending intimidation factor, some of the
+potential roadblocks on my mind before making an attempt were:
+
+* Operators; Haskell has not only user-defined infix operators, but user-defined
+ precedence levels and associativities. I recall using an algorithm that looked
+ up infix, prefix, postfix, and even mixfix operators up in a global table to
+ call their appropriate parser (if their precedence was appropriate, also
+ stored in the table). I never modified the table at runtime, however this
+ could be a very nice solution for Haskell.
+
+* Context-sensitive keywords; Haskell allows for some words to be used as identifiers in
+ appropriate contexts, such as :code:`family`, :code:`role`, :code:`as`.
+ Reading a note_ found in `GHC's lexer`_,
+ it appears that keywords are only considered in bodies for which their use is
+ relevant, e.g. :code:`family` and :code:`role` in type declarations,
+ :code:`as` after :code:`case`; :code:`if`, :code:`then`, and :code:`else` in
+ expressions, etc.
+
+* Whitespace sensitivity; While I was comfortable with the idea of a system
+ similar to Python's INDENT/DEDENT tokens, Haskell seemed to use whitespace to
+ section code in a way that *felt* different.
+
+.. _note: https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/coding-style#2-using-notes
+.. _GHC's lexer: https://gitlab.haskell.org/ghc/ghc/-/blob/master/compiler/GHC/Parser/Lexer.x#L1133
+
+After a bit of thought and research, whitespace sensitivity in the form of
+*layouts* as Haskell and I will refer to them as, are easily the scariest thing
+on this list -- however they are achievable!
+
+A Lexical Primer: Python
+************************
+
+We will compare and contrast with Python's lexical analysis. Much to my dismay,
+Python uses newlines and indentation to separate statements and resolve scope
+instead of the traditional semicolons and braces found in C-style languages (we
+may generally refer to these C-style languages as *explicitly-sectioned*).
+Internally during tokenisation, when the Python lexer begins a new line, they
+compare the indentation of the new line with that of the previous and apply the
+following rules:
+
+1. If the new line has greater indentation than the previous, insert an INDENT
+ token and push the new line's indentation level onto the indentation stack
+ (the stack is initialised with an indentation level of zero).
+
+2. If the new line has lesser indentation than the previous, pop the stack until
+ the top of the stack is greater than the new line's indentation level. A
+ DEDENT token is inserted for each level popped.
+
+3. If the indentation is equal, insert a NEWLINE token to terminate the previous
+ line, and leave it at that!
+
+Parsing Python with the INDENT, DEDENT, and NEWLINE tokens is identical to
+parsing a language with braces and semicolons. This is a solution pretty in line
+with Python's philosophy of the "one correct answer" (TODO: this needs a
+source). In developing our *layout* rules, we will follow in the pattern of
+translating the whitespace-sensitive source language to an explicitly sectioned
+language.
+
+But What About Haskell?
+***********************
+
+We saw that Python, the most notable example of an implicitly sectioned
+language, is pretty simple to lex. Why then am I so afraid of Haskell's layouts?
+To be frank, I'm far less scared after asking myself this -- however there are
+certainly some new complexities that Python needn't concern. Haskell has
+implicit line *continuation*: forms written over multiple lines; indentation
+styles often seen in Haskell are somewhat esoteric compared to Python's
+"s/[{};]//".
+
+.. code-block:: haskell
+
+ -- line continuation
+ something = this is a
+ single expression
+
+ -- an extremely common style found in haskell
+ data Python = Users
+ { are :: Crying
+ , right :: About
+ , now :: Sorry
+ }
+
+ -- another formatting oddity
+ -- note that this is not a single
+ -- continued line! `look at`,
+ -- `this`, and `alignment` are all
+ -- separate expressions!
+ anotherThing = do look at
+ this
+ alignment
+
+But enough fear, lets actually think about implementation. Firstly, some
+formality: what do we mean when we say layout? We will define layout as the
+rules we apply to an implicitly-sectioned language in order to yield one that is
+explicitly-sectioned. We will also define indentation of a lexeme as the column
+number of its first character.
+
+Thankfully for us, our entry point is quite clear; layouts only appear after a
+select few keywords, (with a minor exception; TODO: elaborate) being :code:`let`
+(followed by supercombinators), :code:`where` (followed by supercombinators),
+:code:`do` (followed by expressions), and :code:`of` (followed by alternatives)
+(TODO: all of these terms need linked glossary entries). In order to manage the
+cascade of layout contexts, our lexer will record a stack for which each element
+is either :math:`\varnothing`, denoting an explicit layout written with braces
+and semicolons, or a :math:`\langle n \rangle`, denoting an implicitly laid-out
+layout where the start of each item belonging to the layout is indented
+:math:`n` columns.
+
+.. code-block:: haskell
+
+ -- layout stack: []
+ module M where -- layout stack: [∅]
+
+ f x = let -- layout keyword; remember indentation of next token
+ y = w * w -- layout stack: [∅, <10>]
+ w = x + x
+ -- layout ends here
+ in do -- layout keyword; next token is a brace!
+ { -- layout stack: [∅]
+ print y;
+ print x;
+ }
+
+Finally, we also need the concept of "virtual" brace tokens, which as far as
+we're concerned at this moment are exactly like normal brace tokens, except
+implicitly inserted by the compiler. With the presented ideas in mind, we may
+begin to introduce a small set of informal rules describing the lexer's handling
+of layouts, the first being:
+
+1. If a layout keyword is followed by the token '{', push :math:`\varnothing`
+ onto the layout context stack. Otherwise, push :math:`\langle n \rangle` onto
+ the layout context stack where :math:`n` is the indentation of the token
+ following the layout keyword. Additionally, the lexer is to insert a virtual
+ opening brace after the token representing the layout keyword.
+
+Consider the following observations from that previous code sample:
+
+* Function definitions should belong to a layout, each of which may start at
+ column 1.
+
+* A layout can enclose multiple bodies, as seen in the :code:`let`-bindings and
+ the :code:`do`-expression.
+
+* Semicolons should *terminate* items, rather than *separate* them.
+
+Our current focus is the semicolons. In an implicit layout, items are on
+separate lines each aligned with the previous. A naïve implementation would be
+to insert the semicolon token when the EOL is reached, but this proves unideal
+when you consider the alignment requirement. In our implementation, our lexer
+will wait until the first token on a new line is reached, then compare
+indentation and insert a semicolon if appropriate. This comparison -- the
+nondescript measurement of "more, less, or equal indentation" rather than a
+numeric value -- is referred to as *offside* by myself internally and the
+Haskell report describing layouts. We informally formalise this rule as follows:
+
+2. When the first token on a line is preceeded only by whitespace, if the
+ token's first grapheme resides on a column number :math:`m` equal to the
+ indentation level of the enclosing context -- i.e. the :math:`\langle n
+ \rangle` on top of the layout stack. Should no such context exist on the
+ stack, assume :math:`m > n`.
+
+We have an idea of how to begin layouts, delimit the enclosed items, and last
+we'll need to end layouts. This is where the distinction between virtual and
+non-virtual brace tokens comes into play. The lexer needs only partial concern
+towards closing layouts; the complete responsibility is shared with the parser.
+This will be elaborated on in the next section. For now, we will be content with
+naïvely inserting a virtual closing brace when a token is indented right of the
+layout.
+
+3. Under the same conditions as rule 2., when :math:`m < n` the lexer shall
+ insert a virtual closing brace and pop the layout stack.
+
+This rule covers some cases including the top-level, however, consider
+tokenising the :code:`in` in a :code:`let`-expression. If our lexical analysis
+framework only allows for lexing a single token at a time, we cannot return both
+a virtual right-brace and a :code:`in`. Under this model, the lexer may simply
+pop the layout stack and return the :code:`in` token. As we'll see in the next
+section, as long as the lexer keeps track of its own context (i.e. the stack),
+the parser will cope just fine without the virtual end-brace.
+
+Parsing Lonely Braces
+*********************
+
+When viewed in the abstract, parsing and tokenising are near-identical tasks yet
+the two are very often decomposed into discrete systems with very different
+implementations. Lexers operate on streams of text and tokens, while parsers
+are typically far less linear, using a parse stack or recursing top-down. A
+big reason for this separation is state management: the parser aims to be as
+context-free as possible, while the lexer tends to burden the necessary
+statefulness. Still, the nature of a stream-oriented lexer makes backtracking
+difficult and quite inelegant.
+
+However, simply declaring a parse error to be not an error at all
+counterintuitively proves to be an elegant solution our layout problem which
+minimises backtracking and state in both the lexer and the parser. Consider the
+following definitions found in rlp's BNF:
+
+.. productionlist:: rlp
+ VOpen : `vopen`
+ VClose : `vclose` | `error`
+
+A parse error is recovered and treated as a closing brace. Another point of note
+in the BNF is the difference between virtual and non-virtual braces (TODO: i
+don't like that the BNF is formatted without newlines :/):
+
+.. productionlist:: rlp
+ LetExpr : `let` VOpen Bindings VClose `in` Expr | `let` `{` Bindings `}` `in` Expr
+
+This ensures that non-virtual braces are closed explicitly.
+
+This set of rules is adequete enough to satisfy our basic concerns about line
+continations and layout lists. For a more pedantic description of the layout
+system, see `chapter 10
+`_ of the
+2010 Haskell Report, which I heavily referenced here.
+
+References
+----------
+
+* `Python's lexical analysis
+ `_
+
+* `Haskell syntax reference
+ `_
diff --git a/doc/src/commentary/ti.rst b/doc/src/commentary/ti.rst
new file mode 100644
index 0000000..4e167d0
--- /dev/null
+++ b/doc/src/commentary/ti.rst
@@ -0,0 +1,6 @@
+The *Template Instantiator*
+====================================
+
+WIP. This will hopefully be expanded into a thorough walkthrough of the state
+machine.
+
diff --git a/docs/src/conf.py b/doc/src/conf.py
similarity index 100%
rename from docs/src/conf.py
rename to doc/src/conf.py
diff --git a/doc/src/glossary.rst b/doc/src/glossary.rst
new file mode 100644
index 0000000..6315c39
--- /dev/null
+++ b/doc/src/glossary.rst
@@ -0,0 +1,19 @@
+Glossary
+========
+
+Haskell and Haskell culture is infamous for using scary mathematical terms for
+simple ideas. Please excuse us, it's really fun :3.
+
+.. glossary::
+
+ supercombinator
+ An expression with no free variables. For most purposes, just think of a
+ top-level definition.
+
+ case alternative
+ An possible match in a case expression (TODO: example)
+
+ layout
+ The syntax used in rlp and Haskell that allows for implicitly sectioned
+ code using alignment and newlines.
+
diff --git a/doc/src/index.rst b/doc/src/index.rst
new file mode 100644
index 0000000..bf4caa1
--- /dev/null
+++ b/doc/src/index.rst
@@ -0,0 +1,26 @@
+Welcome to rlp's documentation!
+===============================
+
+Contents
+--------
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Index
+
+ glossary.rst
+
+.. toctree::
+ :maxdepth: 1
+ :caption: Commentary
+ :glob:
+
+ commentary/*
+
+.. toctree::
+ :maxdepth: 1
+ :caption: References
+ :glob:
+
+ references/*
+
diff --git a/docs/src/references/gm-state-transitions.rst b/doc/src/references/gm-state-transitions.rst
similarity index 100%
rename from docs/src/references/gm-state-transitions.rst
rename to doc/src/references/gm-state-transitions.rst
diff --git a/doc/src/references/ti-state-transitions.rst b/doc/src/references/ti-state-transitions.rst
new file mode 100644
index 0000000..ec25182
--- /dev/null
+++ b/doc/src/references/ti-state-transitions.rst
@@ -0,0 +1,334 @@
+============================================
+Template Instantiator State Transition Rules
+============================================
+
+Evaluation is complete when a single :code:`NNum` remains on the stack and the
+dump is empty.
+
+.. math::
+ \transrule
+ { a : \nillist
+ & \nillist
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & g
+ }
+ { \mathtt{HALT}
+ }
+
+Dereference an indirection passed as an argument to a function.
+
+.. math::
+ \transrule
+ {a : s & d & h
+ \begin{bmatrix}
+ a : \mathtt{NAp} \; a_1 \; a_2 \\
+ a_2 : \mathtt{NInd} \; a_3
+ \end{bmatrix} & g}
+ {a : s & d & h[a : \mathtt{NAp} \; a_1 \; a_3] & g}
+
+Dereference an indirection on top of the stack.
+
+.. math::
+ \transrule
+ {p : s & d & h
+ \begin{bmatrix}
+ p : \mathtt{NInd} \; a
+ \end{bmatrix} & g}
+ {a : s & d & h & g}
+
+Perform a unary operation :math:`o(n)` with internal :code:`Prim` constructor
+:code:`O` on an argument in normal form.
+
+.. math::
+ \transrule
+ { f : a : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{O} \\
+ a : \mathtt{NAp} \; f \; x \\
+ x : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & g
+ }
+ { a : s
+ & d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; (o(n))
+ \end{bmatrix}
+ & g
+ }
+
+Evaluate the argument of a unary operation with internal :code:`Prim`
+constructor :code:`O`.
+
+.. math::
+ \transrule
+ { f : a : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{O} \\
+ a : \mathtt{NAp} \; f \; x
+ \end{bmatrix}
+ & g
+ }
+ { x : \nillist
+ & (f : a : \nillist) : d
+ & h
+ & g
+ }
+
+Restore the stack when a sub-computation has completed.
+
+.. math::
+ \transrule
+ { a : \nillist
+ & s : d
+ & h
+ \begin{bmatrix}
+ a : \mathtt{NNum} \; n
+ \end{bmatrix}
+ & g
+ }
+ { s
+ & d
+ & h
+ & g
+ }
+
+Reduce a supercombinator and update the root with the :math:`\beta`-reduced form
+
+.. math::
+ \transrule
+ { a_0 : a_1 : \ldots : a_n : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_0 : \mathtt{NSupercomb} \; [x_1,\ldots,x_n] \; e
+ \end{bmatrix}
+ & g
+ }
+ { a_n : s
+ & d
+ & h'
+ & g
+ \\
+ & \SetCell[c=3]{c}
+ \text{where } h' = \mathtt{instantiateU} \; e \; a_n \; h \; g
+ }
+
+Perform a binary operation :math:`o(x,y)` associated with internal :code:`Prim`
+constructor :code:`O` on two :code:`NNum` s both in normal form.
+
+.. math::
+ \transrule
+ { f : a_1 : a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{O} \\
+ a_1 : \mathtt{NAp} \; f \; (\mathtt{NNum} \; x) \\
+ a_2 : \mathtt{NAp} \; a_1 \; (\mathtt{NNum} \; y)
+ \end{bmatrix}
+ & g
+ }
+ { a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_2 : \mathtt{NNum} \; (o(x,y))
+ \end{bmatrix}
+ & g
+ }
+
+In a conditional primitive, perform the reduction if the condition has been
+evaluated as True (:code:`NData 1 []`).
+
+.. math::
+ \transrule
+ { f : a_1 : a_2 : a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{IfP} \\
+ c : \mathtt{NPrim} \; (\mathtt{NData} \; 1 \; \nillist) \\
+ a_1 : \mathtt{NAp} \; f \; c \\
+ a_2 : \mathtt{NAp} \; a_1 \; x \\
+ a_3 : \mathtt{NAp} \; a_2 \; y
+ \end{bmatrix}
+ & g
+ }
+ { x : s
+ & d
+ & h
+ & g
+ }
+
+In a conditional primitive, perform the reduction if the condition has been
+evaluated as False (:code:`NData 0 []`).
+
+.. math::
+ \transrule
+ { f : a_1 : a_2 : a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{IfP} \\
+ c : \mathtt{NPrim} \; (\mathtt{NData} \; 0 \; \nillist) \\
+ a_1 : \mathtt{NAp} \; f \; c \\
+ a_2 : \mathtt{NAp} \; a_1 \; x \\
+ a_3 : \mathtt{NAp} \; a_2 \; y
+ \end{bmatrix}
+ & g
+ }
+ { y : s
+ & d
+ & h
+ & g
+ }
+
+
+In a conditional primitive, evaluate the condition.
+
+.. math::
+ \transrule
+ { f : a_1 : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ f : \mathtt{NPrim} \; \mathtt{IfP} \\
+ a_1 : \mathtt{NAp} \; f \; x
+ \end{bmatrix}
+ & g
+ }
+ { x : \nillist
+ & (f : a_1 : \nillist) : d
+ & h
+ & g
+ }
+
+Construct :code:`NData` out of a constructor and its arguments
+
+.. math::
+ \transrule
+ { c : a_1 : \ldots : a_n : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; (\mathtt{ConP} \; t \; n) \\
+ a_1 : \mathtt{NAp} \; c \; x_1 \\
+ \vdots \\
+ a_n : \mathtt{NAp} \; a_{n-1} \; x_n
+ \end{bmatrix}
+ & g
+ }
+ { a_n : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ a_n : \mathtt{NData} \; t \; [x_1, \ldots, x_n]
+ \end{bmatrix}
+ & g
+ }
+
+Pairs
+-----
+
+Evaluate the first argument if necessary
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CasePairP} \\
+ p : \mathtt{NAp} \; \_ \: \_ \\
+ a_1 : \mathtt{NAp} \; c \; p \\
+ a_2 : \mathtt{NAp} \; a_2 \; f
+ \end{bmatrix}
+ & g
+ }
+ { p : \nillist
+ & (a_1 : a_2 : \nillist) : d
+ & h
+ & g
+ }
+
+Perform the reduction if the first argument is in normal form
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CasePairP} \\
+ p : \mathtt{NData} \; 0 \; [x,y] \\
+ a_1 : \mathtt{NAp} \; c \; p \\
+ a_2 : \mathtt{NAp} \; a_1 \; f
+ \end{bmatrix}
+ & g
+ }
+ { a_1 : a_2 : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_1 : \mathtt{NAp} \; f \; x \\
+ a_2 : \mathtt{NAp} \; a_1 \; y
+ \end{bmatrix}
+ & g
+ }
+
+Lists
+-----
+
+Evaluate the scrutinee
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : a_3 : \nillist
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CaseListP} \\
+ a_1 : \mathtt{NAp} \; c \; x
+ \end{bmatrix}
+ & g
+ }
+ { x
+ & (a_1 : a_2 : a_3) : \nillist
+ & h
+ & g
+ }
+
+If the scrutinee is :code:`Nil`, perform the appropriate reduction.
+
+.. math::
+ \transrule
+ { c : a_1 : a_2 : a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ c : \mathtt{NPrim} \; \mathtt{CaseListP} \\
+ p : \mathtt{NData} \; 1 \; \nillist \\
+ a_1 : \mathtt{NAp} \; c \; p \\
+ a_2 : \mathtt{NAp} \; p \; f_\text{nil} \\
+ a_3 : \mathtt{NAp} \; a_2 \; f_\text{cons}
+ \end{bmatrix}
+ & g
+ }
+ { a_3 : s
+ & d
+ & h
+ \begin{bmatrix}
+ a_3 : \mathtt{NAp} \; f_\text{nil}
+ \end{bmatrix}
+ & g
+ }
+