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( + '" + ) + ); + }, + + /** + * 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.

+
+

\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. +
  3. Using the local augmented environment, instantiate the supercombinator body +on the heap.

  4. +
  5. Remove the nodes applying the supercombinator to its arguments from the +stack.

  6. +
  7. Push the address to the newly instantiated body onto the stack.

  8. +
+
+
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.

+
+

Laziness

+

WIP.

+
    +
  • Instead of Slide (n+1); Unwind, do 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 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:

+
    +
  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. +
  3. 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.

  4. +
  5. If the indentation is equal, insert a NEWLINE token to terminate the previous +line, and leave it at that!

  6. +
+

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 \varnothing, denoting an explicit layout written with braces +and semicolons, or a \langle n \rangle, denoting an implicitly laid-out +layout where the start of each item belonging to the layout is indented +n 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:

+
    +
  1. If a layout keyword is followed by the token ‘{’, push \varnothing +onto the layout context stack. Otherwise, push \langle n \rangle onto +the layout context stack where 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.

  2. +
+

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:

+
    +
  1. When the first token on a line is preceeded only by whitespace, if the +token’s first grapheme resides on a column number m equal to the +indentation level of the enclosing context – i.e. the \langle n
+\rangle on top of the layout stack. Should no such context exist on the +stack, assume m > n.

  2. +
+

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.

+
    +
  1. Under the same conditions as rule 2., when m < n the lexer shall +insert a virtual closing brace and pop the layout stack.

  2. +
+

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.

+
+

References

+ +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ 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.

+
+

\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.

+
+

\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.

+
+

\transrule
+     {p : s & d & h
+         \begin{bmatrix}
+             p : \mathtt{NInd} \; a
+         \end{bmatrix} & g}
+     {a : s & d & h & g}

+

Perform a unary operation o(n) with internal Prim constructor +O on an argument in normal form.

+
+

\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 Prim +constructor O.

+
+

\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.

+
+

\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 \beta-reduced form

+
+

\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 o(x,y) associated with internal Prim +constructor O on two NNum s both in normal form.

+
+

\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 (NData 1 []).

+
+

\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 (NData 0 []).

+
+

\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.

+
+

\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 NData out of a constructor and its arguments

+
+

\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

+
+

\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

+
+

\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

+
+

\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 Nil, perform the appropriate reduction.

+
+

\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
+}

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ 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.

+
+

\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.

+
+

\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.

+
+

\transrule
+     {p : s & d & h
+         \begin{bmatrix}
+             p : \mathtt{NInd} \; a
+         \end{bmatrix} & g}
+     {a : s & d & h & g}

+

Perform a unary operation o(n) with internal Prim constructor +O on an argument in normal form.

+
+

\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 Prim +constructor O.

+
+

\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.

+
+

\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 \beta-reduced form

+
+

\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 o(x,y) associated with internal Prim +constructor O on two NNum s both in normal form.

+
+

\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 (NData 1 []).

+
+

\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 (NData 0 []).

+
+

\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.

+
+

\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 NData out of a constructor and its arguments

+
+

\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

+
+

\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

+
+

\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

+
+

\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 Nil, perform the appropriate reduction.

+
+

\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
+}

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ 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 + +
+

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!

+
+

Contents

+
+

Index

+ +
+ + +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ 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

+
    +
  1. Lookup a global by name and push its value onto the stack

  2. +
+
+

\gmrule
+{ \mathtt{PushGlobal} \; f : i
+& s
+& d
+& h
+& m
+\begin{bmatrix}
+     f : a
+\end{bmatrix}
+}
+{ i
+& a : s
+& d
+& h
+& m
+}

+
    +
  1. Allocate an int node on the heap, and push the address of the newly created +node onto the stack

  2. +
+
+

\gmrule
+{ \mathtt{PushInt} \; n : i
+& s
+& d
+& h
+& m
+}
+{ i
+& a : s
+& d
+& h
+\begin{bmatrix}
+     a : \mathtt{NNum} \; n
+\end{bmatrix}
+& m
+}

+
    +
  1. 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.

  2. +
+
+

\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
+}

+
    +
  1. Push a function’s argument onto the stack

  2. +
+
+

\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
+}

+
    +
  1. Tidy up the stack after instantiating a supercombinator

  2. +
+
+

\gmrule
+{ \mathtt{Slide} \; n : i
+& a_0 : \ldots : a_n : s
+& d
+& h
+& m
+}
+{ i
+& a_0 : s
+& d
+& h
+& m
+}

+
    +
  1. If a number is on top of the stack, Unwind leaves the machine in a +halt state

  2. +
+
+

\gmrule
+{ \mathtt{Unwind} : \nillist
+& a : s
+& d
+& h
+\begin{bmatrix}
+     a : \mathtt{NNum} \; n
+\end{bmatrix}
+& m
+}
+{ \nillist
+& a : s
+& d
+& h
+& m
+}

+
    +
  1. If an application is on top of the stack, Unwind continues unwinding

  2. +
+
+

\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
+}

+
    +
  1. 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 (\beta-reduction)

  2. +
+
+

\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
+}

+
    +
  1. Pop the stack, and update the nth node to point to the popped address

  2. +
+
+

\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
+}

+
    +
  1. Pop the stack.

  2. +
+
+

\gmrule
+{ \mathtt{Pop} \; n : i
+& a_1 : \ldots : a_n : s
+& d
+& h
+& m
+}
+{ i
+& s
+& d
+& h
+& m
+}

+
    +
  1. Follow indirections while unwinding

  2. +
+
+

\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
+}

+
    +
  1. Allocate uninitialised heap space

  2. +
+
+

\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
+}

+
    +
  1. When unwinding, if the top of the stack is in WHNF, pop the dump

  2. +
+
+

\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
+}

+
    +
  1. Evaluate the top of the stack to WHNF

  2. +
+
+

\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 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).

  2. +
+
+

\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$}
+}

+
    +
  1. In order for Extension Rule 1. to be effective, we are also required to take +action when a number already exists in the environment:

  2. +
+
+

\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$}
+}

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ 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

+
    +
  1. Lookup a global by name and push its value onto the stack

    +
    +

    \gmrule
+{ \mathtt{PushGlobal} \; f : i
+& s
+& d
+& h
+& m
+\begin{bmatrix}
+     f : a
+\end{bmatrix}
+}
+{ i
+& a : s
+& d
+& h
+& m
+}

    +
  2. +
  3. Allocate an int node on the heap, and push the address of the newly created +node onto the stack

    +
    +

    \gmrule
+{ \mathtt{PushInt} \; n : i
+& s
+& d
+& h
+& m
+}
+{ i
+& a : s
+& d
+& h
+\begin{bmatrix}
+     a : \mathtt{NNum} \; n
+\end{bmatrix}
+& m
+}

    +
  4. +
  5. 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.

    +
    +

    \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
+}

    +
  6. +
  7. Push a function’s argument onto the stack

    +
    +

    \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
+}

    +
  8. +
  9. Tidy up the stack after instantiating a supercombinator

    +
    +

    \gmrule
+{ \mathtt{Slide} \; n : i
+& a_0 : \ldots : a_n : s
+& d
+& h
+& m
+}
+{ i
+& a_0 : s
+& d
+& h
+& m
+}

    +
  10. +
  11. 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.

    +
    +

    \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
+}

    +
  12. +
  13. 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).

    +
    +

    \gmrule
+{ \mathtt{Unwind} : \nillist
+& a : s
+& \nillist
+& h
+\begin{bmatrix}
+     a : \mathtt{NNum} \; n
+\end{bmatrix}
+& m
+}
+{ \nillist
+& a : s
+& \nillist
+& h
+& m
+}

    +
  14. +
  15. If an application is on top of the stack, Unwind continues unwinding

    +
    +

    \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
+}

    +
  16. +
  17. 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 (\beta-reduction)

    +
    +

    \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
+}

    +
  18. +
  19. Pop the stack, and update the nth node to point to the popped address

    +
    +

    \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
+}

    +
  20. +
  21. Pop the stack.

    +
    +

    \gmrule
+{ \mathtt{Pop} \; n : i
+& a_1 : \ldots : a_n : s
+& d
+& h
+& m
+}
+{ i
+& s
+& d
+& h
+& m
+}

    +
  22. +
  23. Follow indirections while unwinding

    +
    +

    \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
+}

    +
  24. +
  25. Allocate uninitialised heap space

    +
    +

    \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
+}

    +
  26. +
  27. Evaluate the top of the stack to WHNF

    +
    +

    \gmrule
+{ \mathtt{Eval} : i
+& a : s
+& d
+& h
+& m
+}
+{ \mathtt{Unwind} : \nillist
+& a : \nillist
+& \langle i, s \rangle : d
+& h
+& m
+}

    +
  28. +
  29. Reduce a primitive binary operator *.

    +
    +

    \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
+}

    +
  30. +
  31. Reduce a primitive unary operator \neg.

    +
    +

    \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
+}

    +
  32. +
  33. Consider unapplied functions to be in WHNF

    +
    +

    \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$}
+}

    +
  34. +
+
+
+

Extension Rules

+
    +
  1. 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).

    +
    +

    \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$}
+}

    +
  2. +
  3. In order for the previous rule to be effective, we are also required to take +action when a number already exists in the environment:

    +
    +

    \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$}
+}

    +
  4. +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ 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.

+
+

\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.

+
+

\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.

+
+

\transrule
+     {p : s & d & h
+         \begin{bmatrix}
+             p : \mathtt{NInd} \; a
+         \end{bmatrix} & g}
+     {a : s & d & h & g}

+

Perform a unary operation o(n) with internal Prim constructor +O on an argument in normal form.

+
+

\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 Prim +constructor O.

+
+

\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.

+
+

\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 \beta-reduced form

+
+

\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 o(x,y) associated with internal Prim +constructor O on two NNum s both in normal form.

+
+

\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 (NData 1 []).

+
+

\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 (NData 0 []).

+
+

\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.

+
+

\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 NData out of a constructor and its arguments

+
+

\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

+
+

\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

+
+

\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

+
+

\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 Nil, perform the appropriate reduction.

+
+

\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
+}

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ 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

+ + + + +

+ 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:

+
+
+

\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}

+
+ + +
+ +
+
+ +
+
+ + + + + + + \ 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 + } +