From 6767bd0b4fb6c4f6abbcdddd41c7e361309037cd Mon Sep 17 00:00:00 2001 From: crumbtoo Date: Mon, 4 Dec 2023 14:51:44 -0700 Subject: [PATCH] docs -> doc lol --- {docs => doc}/Makefile | 0 doc/build/.DS_Store | Bin 0 -> 6148 bytes doc/build/doctrees/commentary/gm.doctree | Bin 0 -> 13822 bytes .../doctrees/commentary/layout-lexing.doctree | Bin 0 -> 42871 bytes doc/build/doctrees/commentary/stg.doctree | Bin 0 -> 20256 bytes doc/build/doctrees/commentary/ti.doctree | Bin 0 -> 2901 bytes doc/build/doctrees/commentary/tim.doctree | Bin 0 -> 20249 bytes doc/build/doctrees/environment.pickle | Bin 0 -> 229766 bytes doc/build/doctrees/glossary.doctree | Bin 0 -> 4860 bytes doc/build/doctrees/index.doctree | Bin 0 -> 3603 bytes .../gm-state-transition-rules.doctree | Bin 0 -> 25195 bytes .../references/gm-state-transitions.doctree | Bin 0 -> 27884 bytes .../references/ti-state-transitions.doctree | Bin 0 -> 19924 bytes doc/build/html/.buildinfo | 4 + ...420770ada7197f2dc04dc2cb7be7957619046e.svg | 162 +++ ...1357ee48ac0e35395fa99353083fee184026dd.svg | 134 +++ ...341a0151149b70730cfe4fb67c90c60c7b657e.svg | 85 ++ ...7e533b299f8acf5a007a8951726e0fb03c8297.svg | 149 +++ ...8dad807177c214a4019500e8cb3e87d1f16fd3.svg | 17 + ...c8c584f274e78c626596a6cdbb67086a30bf76.svg | 108 ++ ...87f8d42f5944ee828b01d06440da9b5dbd2ab8.svg | 126 +++ ...635090aa47407c859d644721c5384fbb715130.svg | 145 +++ ...6ddb24a14399b5fff7b5f2f691468d437dae7d.svg | 61 ++ ...f13f0deb087a0975f104db0a2fe82979aec7d5.svg | 15 + ...0458d62ece3f6e5019d53d0245ff5facdc5fdf.svg | 149 +++ ...ad12d4109ecbf3e9de69670796aed4e39bad83.svg | 145 +++ ...620d28afa4216e77023746bb49f10715fc8824.svg | 6 + ...c7c9df5cc4f923f6953e615c1f28a6531c0b68.svg | 138 +++ ...e6bec91d32d8e61faf2f5843c718ef27148abd.svg | 147 +++ ...649b728693b5cbf77eeb3b247c50f599f41294.svg | 97 ++ ...81faecef1f280d02390f5e6e4dc19abe5f4eb1.svg | 63 ++ ...cdffb9aaad97f1748e14369a93f303987914df.svg | 114 +++ ...f8d008cc7c2fca0d206330cc817662df3b0c43.svg | 121 +++ ...6119a4c2150b58b13370bfdfa9bb789571ef13.svg | 122 +++ ...da9cdf17e4f8cf26f0caad8bda0e132f604db0.svg | 61 ++ ...fdcdda44eede2cc7be00ace4f3d009e82ebf8d.svg | 15 + ...43958253280895e6abea369c0f9abf4898649c.svg | 149 +++ ...d23b1b737948104e84da7d3e79c697816c10df.svg | 70 ++ ...31c78842178c05d1a9c61aca6fbe3d74247ced.svg | 15 + ...9b0ba6ac3730b32a1d4054ae9a3ec0912ff9c0.svg | 78 ++ ...6a0e2360b1e342041d8129c3a264321ae806ce.svg | 91 ++ ...7ead99c2f67003ebe37c473bac713194eaa50e.svg | 145 +++ ...d617a93c757f0b0e644d4000b9decf2c1730df.svg | 70 ++ ...d81e1fc22e6feb876a993fe30fd9e8336f5bf6.svg | 77 ++ ...94936ebb09fed720f969439d19593b228aec95.svg | 157 +++ ...bf876b63a42c5c5fd537974667f28e4fdfe71f.svg | 15 + ...1d05c2792b02598e523fd646d6268749231320.svg | 97 ++ ...b3a2eb7103da4d39315e15158991ac5eb31a8f.svg | 66 ++ ...7e72c2a7ae8acbb9c293a2681b3cdf41e403b7.svg | 15 + ...c3c5f46f67104788324ef961a5eb2126495009.svg | 89 ++ ...35e0be8716b58b223dddd9dc21d3cbf9b932c9.svg | 82 ++ ...c5e2a4ce5b523a6e99c0937d45b0f285461097.svg | 137 +++ ...219b0570be52c3f596972c4cd5461a162cccf9.svg | 145 +++ ...bd53275636be43362c037f2ad50f5f63231e10.svg | 11 + ...17422cdf63ed202b16462208f8a62630f99679.svg | 97 ++ ...642c97b2dc64d03a103607414f676b6e9daf5c.svg | 63 ++ ...c437dab01cb429328b3fe9d20e8f5b64cefdc0.svg | 11 + ...2187dda48952ac064d34af5a8dc5ccc5df1126.svg | 109 +++ ...f3be2a43bd1ac2dfa07345e26336292899f61f.svg | 75 ++ ...6f330b47308dae1686a2c0030783ed20a8866d.svg | 160 +++ ...8a79d24fb8713d66c77d17909485589a944e60.svg | 108 ++ ...a11053c0f5950b2126ebf4829f569eeaa85ad6.svg | 133 +++ ...63b1f89224cb96d4e2b5a0f9494eac68234a42.svg | 21 + ...4c25ea56a82ed5f9d8182f3c38c632ab47e8bd.svg | 90 ++ ...fab760cd5a82cd980862645b628ea4c2a97f34.svg | 174 ++++ ...c5e48f0f26f08073e6e1cdd70ff876c6ec2434.svg | 152 +++ ...21d478eedaa358bccb9aa3c57a5b290e671863.svg | 89 ++ ...7215ad8dc4415a832b9101c30f98ad94307f61.svg | 89 ++ ...75f944e67c6a986438fad3c0d23ee7cc191a88.svg | 17 + ...ca5614d0c1f1e407a064238095024a155e2466.svg | 15 + ...4087b4a49447d217e1247a7a58aeb2ebf04f6b.svg | 102 ++ ...843bfb29b74cf3428d62c0a0bb4a85018bf793.svg | 134 +++ ...4a9ad9e9541a3f8be7530fed1ec7373510a227.svg | 70 ++ ...b86e3c01637e2ffa96b8a23365bd27e98594fb.svg | 91 ++ ...f37b6cae353c26c80f089c5b354e7575e7c201.svg | 108 ++ ...36a201726f4f03e64783f41d44d9ae3edd5118.svg | 11 + ...e91bc0685dd54adb3e06c06e6fc0cc4d8ad419.svg | 145 +++ ...4d9ac40cde930452a7f40dd91dc043c92aba12.svg | 114 +++ ...c1815c2dba065ef8c2f84100676cf9d1b6511a.svg | 72 ++ ...39cf0a8e341efac8ba1aeb5ae6271cd00c37c7.svg | 134 +++ ...0879f2e436b8778f86d0b3315af89e4b23061e.svg | 63 ++ ...5133875b5087d8f8b521a6b737f82d715cf7e7.svg | 133 +++ ...df4d8583b839b15fed122e5293d261cc34639d.svg | 15 + ...b2a0684a9c3d7c7a02334d788b2bd85cc83b55.svg | 174 ++++ ...0efc21d61f6d73d821b258392b7be1fc9036eb.svg | 160 +++ ...a33eeafbc80a0bcf2766e8f56e9cb2b6148e79.svg | 15 + ...c332dc07916d83f75fcddf6da06a7734032ee9.svg | 122 +++ ...fc6e15d2c381b0ab11691e13dba314d2c6541d.svg | 145 +++ ...04b3a0b74a3d25993573e61733383293f43681.svg | 63 ++ ...273dafbdeac1dd5bdf8568a1e9ab8625c0629d.svg | 162 +++ ...2ce4de46a354723a0f5b33995d885c86bb0e70.svg | 11 + ...98057f95b17024436a0d57ca56eae8125e10ec.svg | 147 +++ ...da9c8a8264ec5b3d99bd3549773d2113758a5f.svg | 150 +++ ...434266ad5b9f36d523d70ff88db5c4e9366b03.svg | 11 + ...13e4c065d6aabec3acece28c5ecc882faa119a.svg | 11 + ...8aeca314882e29dc3a52d64624061fb36948f0.svg | 137 +++ ...d3c54aba5df0dae426f9470d65778e8ccc24ab.svg | 107 ++ ...66d2d6002bc14e00e77569c63b325e5b02f101.svg | 122 +++ ...a5030ceb5f0c5f44d4581db994508f66b20dfa.svg | 145 +++ ...427448f9b8b54db19e316c805033a7abfe11d2.svg | 63 ++ ...588662930e30ecc01abfa745b194bfb5ffbb27.svg | 144 +++ ...c55ad8626b971383946574d473861074202c72.svg | 11 + ...e73a2c1d1501096302e1e173eaf947ceb9c7d4.svg | 174 ++++ ...85c9abccccc8bc1f4b830fa22701457c595b96.png | Bin 0 -> 1478 bytes ...85c9abccccc8bc1f4b830fa22701457c595b96.svg | 88 ++ ...b8ee3def56618c3d5c55841743d53ffbedbcfb.svg | 64 ++ ...bc533fab728efc3a24ef236fcb017ad2888830.svg | 124 +++ ...7fa099ced1d1933aba81912860d6c60e6c6f75.svg | 89 ++ ...80d8227d0a06608b108a26b4a618972b4b7e28.svg | 126 +++ ...8b0fab8c90c1abe8c6abaa3c807886040452db.svg | 89 ++ ...5b4d912dcfd08351ed35fd0deb3cadc0781241.svg | 139 +++ ...b0d3fbe6f17a0e706fda6039130d8aaaf32903.svg | 146 +++ ...00c38ab6f040dfa75be56918953af44dc11637.svg | 130 +++ ...cebcc879cae1694dcc537b99796e0dc0e0ff05.svg | 149 +++ ...d3cd582dce130ac602d5d805972076e5bc0f56.svg | 114 +++ ...f94fab747054130daaf436fc83ab590969c35f.svg | 145 +++ ...158f7fd5d27c3feef4c9b1500d451656fe2aa9.svg | 88 ++ ...6f5e2b2f037821ad3386d2355364f2667e3c34.svg | 126 +++ ...4a42b94739b04fa9559a97c3703816bf57aa5c.svg | 11 + ...7985174357bbbea2e2b47ab0694b2d21a71b35.svg | 75 ++ ...f4e38bb9ff4a7bcb201e82cb956a3ccf064632.svg | 81 ++ ...0e45afe56ccc0dae7d9566d244b13bb6cb0631.svg | 90 ++ ...5a1ccce064b171eb9d5ec015e07d234ef26c74.svg | 97 ++ ...3dd082a2b49d9ebdb87533aac62fdd342f4fd5.svg | 83 ++ ...728a32abbc0b68b58acd0467082b83653421df.svg | 73 ++ ...eb37710389b629d7ffa626fb55276426bef938.svg | 11 + ...99995af47f16f85dab4ffa3208177455960e73.svg | 89 ++ ...b003bcdf823b102e5c80f3ca1cd4208c7493fc.svg | 15 + ...db1b0b4006f5b62d10449cd280f311f4cf12f8.svg | 17 + ...62b0ff237d0ef459470304b79de4219c771037.svg | 11 + ...7f995d88e257359a4ce4f854c967791c1ec71d.svg | 149 +++ ...95eec30809d2f72c4d645e69ee6ba5fd3f0767.svg | 149 +++ ...e99ea1d6d13dbeedcdfcf7e3807cdd4f2e8594.svg | 76 ++ ...064e1b27f430eda7087e304da72f29d1f0b102.svg | 73 ++ ...fb62efa4d897975a5924d6f8ef3b7466fc7b4a.svg | 64 ++ ...23f2ac78d6d7452697a0a4d711c406a7e04b6b.svg | 89 ++ ...d2125a6059ef9b07f4cbe32c2f5b35ee13ff49.svg | 90 ++ ...dc8bbb8b19c7ad0794ceefd47b82c0111b21f8.svg | 127 +++ ...2f28367db2bbf757f819d55f238962369384ad.svg | 126 +++ ...a114da143774e891c3cb6c37c39d8bc98c0386.svg | 15 + ...6912d7454caf98daf2e20797372b64bb3b728e.svg | 11 + ...427250d809caece36cbdd61547f4f5e714757e.svg | 61 ++ ...8e69f9e44c00c28db11caa744ce8468e26062d.svg | 108 ++ ...48bfc0796ff33966fbc002c446b2242d296fd9.svg | 89 ++ ...8668a1db4f505075a95e7966ad942d5fb6fd83.svg | 145 +++ ...b4cd411d70f6fc673e2311a6a786f54b72bf67.svg | 69 ++ ...965124ba0a627060835202535c7861f9b8c69b.svg | 145 +++ ...765386818a281cce0f753107ac50656c0cc8fa.svg | 101 ++ ...274836cebcd29820798059050d713d9c2fc3f9.svg | 108 ++ ...5577f4835bea58fb5e61feccfb2cac76ad365a.svg | 61 ++ ...af1912f6d672948be49227545febbb868e4887.svg | 122 +++ ...6ca1926b0911a8c3523f091346cf45a7877c61.svg | 137 +++ ...ec4ba909b65b3426b4a35a78d3bb691135632f.svg | 149 +++ ...31cda93cce15a6bef0ecb07b4221f15d15cc9f.svg | 134 +++ ...f716294edee0018b3f078e794ae5d964c4e7e5.svg | 138 +++ ...73c74dddb2e10b652efe45aa14cbb6023c92aa.svg | 15 + ...5a11ada9963c3e3b8ab06f0764c4a39027b903.svg | 147 +++ ...419b70ee4382ef98b643337d72fb4f360c54dc.svg | 15 + ...5f35a00bb05b6028399a1a574a9c9eceaae3dc.svg | 64 ++ ...82bc1515ee7f12235b6cf5ec58b653adacf9ab.svg | 90 ++ ...e53e21f5584af23d7fbd41bdc8b4eb06e150d9.svg | 146 +++ ...5e1f51c7b1adf37c30a54e0205dd325c0fbd83.svg | 11 + ...771851f25b7b1500b570c182c104346f4caf10.svg | 11 + ...d8da75ac6612b08aa1c953fe79f69d9614a370.svg | 63 ++ ...592e982322fa08f1b8ae0e6bcdaca11fc8de59.svg | 11 + ...74d5122d0889ba7171982a92c523d35a2c447b.svg | 17 + ...d7e53e2606d1ffdcc0d85fcc0be2db9b919797.svg | 64 ++ ...6611b9f35e3a8af01f51234df415eb9adbfe61.svg | 146 +++ ...64520765ac3abdf00f5cff93232ef8f436c08c.svg | 90 ++ ...dcd8e1232a9b79d01e09ea8c1be65747300380.svg | 89 ++ ...f01e99347ef7cc15166f53ec582de9b502f58b.svg | 89 ++ ...b775e1d32106f30d74a6fc743db615ea6e51ea.svg | 149 +++ ...6b14e88c00afb0c157a014c7b04c192a6667d8.svg | 17 + ...55feec1c2be23566d6cb240ecccdb2cb43ffba.svg | 108 ++ ...5c92329653dc668aca7375b3b801213e300119.svg | 21 + ...e353f5c7ea494aa1bb607f0b42adc51955a770.svg | 114 +++ ...2aa4d374eadac24cdfa581a79bc6a768ce1b1d.svg | 145 +++ ...40630fbb5173bbf2de2d38326e10e6977b2c18.svg | 162 +++ ...4b8ca02be0eeffa5e995f1fe689a97f456c00b.svg | 15 + ...502e03af9f1e3d8a7dce9053c7125364a0cae5.svg | 174 ++++ ...b3075593c703668bf03f396fce6a5fe573717f.svg | 174 ++++ ...e563f9e2af17336ffd26eba981364f3f1d2168.svg | 21 + ...0027a70b057da00d97dd31650e183080cb43b5.svg | 15 + ...6f901ae855d64263ac2ab365517c5a7e5ccd14.svg | 21 + ...3c0b8b1360d0ec2ee767ec404fb6345ab0577c.svg | 15 + ...4d342ea354a4cdc3d38f7892d58fae9545a926.svg | 11 + ...edef6fb240c138d22677e925b4b653bf9f990e.svg | 63 ++ ...67f9acd3737b5efcdc6cb35f39df773ebad7fe.svg | 64 ++ ...19952585566a69fb8233562ce15d85100265b5.svg | 97 ++ ...2a60679e9e7a3465fbf469680cf03f3821da24.svg | 11 + ...3f2f323917c4c577d00563525d086013713d90.svg | 149 +++ ...53d53d52e506becc6c9eba1bbee8d52a0c0096.svg | 89 ++ ...912ca6357b80cd4ac0e500254988780137d73d.svg | 11 + ...c9099fc8c459eb433947bd6c9cc0f96fe38f98.svg | 68 ++ ...d7514f494125ad1ed346ea20de2b74b04c6b71.svg | 105 ++ ...10802103c6f085b1f155800dc07fed61660394.svg | 146 +++ ...285722e6eed4a0fa69945efe4dfe0fbe124582.svg | 162 +++ ...4167eaade600ab592e2a4441ffc27f5268cccf.svg | 90 ++ ...dfd7e61552070e476dde55e5f97dc21189d8bd.svg | 17 + ...c0a4ea1f5e913e84a4419ab76546940b976999.svg | 91 ++ ...eae68ed847d26cca7f5a8121d080f07d02bf94.svg | 162 +++ ...6a1741e36673576f163fbc74134ff742b364d8.svg | 70 ++ ...7021e35d6fc44fe3d205ce7c892946b63c7507.svg | 61 ++ ...438562da17dd63bb4fb24226789a7afac1650f.svg | 127 +++ ...67c4215cbfc6897d6e5eaf14ded0dc221b972c.svg | 15 + ...1a34fefbc9f3c9204a0f4dae73804946be6692.svg | 111 +++ ...4e418c03a66965d1ff43d7a166d4bc403fb59c.svg | 89 ++ ...ed36f728a405f51900a56136f234fd1c84253e.svg | 137 +++ ...a1a49f30e99ec10fb5965633edca518a10441b.svg | 73 ++ ...937687478d980ab66b85de909dcb73d4bc9b13.svg | 160 +++ ...3271fd2e7964699e51df9fee16b043e40449fd.svg | 11 + ...ac657e040edf18bbbf248d15d73ab640a93f2d.svg | 21 + ...49d1fafb6a28c6c042491d610586fbcb48c0b5.svg | 82 ++ ...9ad1bf37cbb0cbc3156f31e10ce7d8148d5e06.svg | 11 + ...dff17c817c1acda8498e28276cbace394ea817.svg | 64 ++ ...745b5797483cfcb6ff4816364d91d3d5b6e6c4.svg | 84 ++ ...4fe0dc2dd02e9d27dfd46e93827894feb96d1f.svg | 15 + ...3a272a60d62c8a6b0ae4f178970b34b3cbc34b.svg | 61 ++ ...3e748def2419af7ed6d97286f8f8ba95d695ab.svg | 160 +++ ...67fe313a3b9c3638dde67e05f045efc2ddfe06.svg | 149 +++ ...0cef88d057bcc5920fca7d63d0682f802d9006.svg | 61 ++ ...cef9805eafbbcd57b5fefe36bab8b23012c7d1.svg | 145 +++ ...0602aa4f63b11b8a8c07c95722fee7ea97b348.svg | 84 ++ ...6941a661a880391bd898f16e5dcf9c0b8a7e59.svg | 127 +++ ...96439e8724d5b54e9b4b344b9c99d0facc8b7c.svg | 15 + ...99367c490fcb15b82b8c5ee3fa5c9cbcc68dd8.svg | 63 ++ ...e20146d5eb77607e0a55541f4efb1a4b8c4b8c.svg | 120 +++ ...d4d6d37345b9aafba642fa7cfba7494ff14f70.svg | 89 ++ ...156186842b31629791a1077f601176a7365f82.svg | 15 + ...5ab32e61ffbf9ec981451984dd7a6e61675385.svg | 89 ++ ...99a147e6e958303111e813e82a3507ded25437.svg | 142 +++ ...4c3c7dbb292f28e888bfb49920d7c293055d2b.svg | 108 ++ ...dc66520823a07e0df31b43dda92f9b2ea9e792.svg | 108 ++ ...68b3a2690eb8037909cae4b88b8ab16459605e.svg | 122 +++ ...6dfd5625638bc4ad9867951a7818cf20c88a2f.svg | 74 ++ ...3c9268a37c748c7cd0f640a1f28bd878bb1749.svg | 11 + ...a47d0c4e105b420931ccbeb7571abc3dd7f73d.svg | 79 ++ ...b568237d1744ae5272cadf1bdd39eaed69c1f6.svg | 19 + ...e5c388fc50fed467da5027dde63736ec11b971.svg | 11 + ...1c8c9e0530c873480544a154b5156c1a3bc5cf.svg | 89 ++ ...96fb3afc754d2d914e95c7197dd020ee4d8eeb.svg | 17 + ...7dc8445c84c126f6834aa63965b5866af4862f.svg | 137 +++ ...d2e5584b404461c1046b8bf084d34487e21129.svg | 108 ++ ...f8d8521b87e224ab55f1fb9b3b29c0d61c22d8.svg | 107 ++ ...6af2733291dcf5001173a8dbaf8f59c817212a.svg | 78 ++ ...28854f696e20d8f3e7fc8807f20c444cf43eaa.svg | 50 + ...2d55fb6c249a7da5a9df6b7e5c96ab6be7672b.svg | 75 ++ ...910149fc44dd7dabe235ebff17a2060ae8714e.svg | 89 ++ ...7c96b90fd292ae6974ada44ee78617139e5141.svg | 15 + ...9df02362bdcb3832d9a6e1e22c7d9a8374e613.svg | 134 +++ ...284172ff91453e703a9b5979f8386f44f9948c.svg | 15 + ...9c3dd83ce20802dd9b32036339dbb3b354bd2d.svg | 91 ++ ...70f05da2f796ded634f483374c8523a2ed0ac4.svg | 117 +++ ...fd6928c1aaf2be4844f5d4e293a09bc610f44f.svg | 73 ++ ...679edba251c469017904363c4f2ee6919879f3.svg | 11 + ...a521977b1461b53094f1bae24aa6d1bb757b07.svg | 80 ++ ...4ddd4f20941bccbdf1c7cee61f00284285e536.svg | 11 + ...a71c9f02d3639232648b940b80e5b9c1a03db3.svg | 97 ++ .../build/html/_sources/commentary/gm.rst.txt | 0 .../_sources/commentary/layout-lexing.rst.txt | 0 .../html/_sources/commentary/stg.rst.txt | 336 +++++++ .../build/html/_sources/commentary/ti.rst.txt | 0 .../html/_sources/commentary/tim.rst.txt | 336 +++++++ .../build/html/_sources/glossary.rst.txt | 0 .../build/html/_sources/index.rst.txt | 0 .../gm-state-transition-rules.rst.txt | 347 +++++++ .../references/gm-state-transitions.rst.txt | 424 ++++++++ .../references/ti-state-transitions.rst.txt | 0 doc/build/html/_sources/test.rst.txt | 9 + doc/build/html/_static/alabaster.css | 703 +++++++++++++ doc/build/html/_static/basic.css | 925 ++++++++++++++++++ doc/build/html/_static/custom.css | 1 + doc/build/html/_static/doctools.js | 156 +++ .../html/_static/documentation_options.js | 13 + doc/build/html/_static/file.png | Bin 0 -> 286 bytes doc/build/html/_static/language_data.js | 199 ++++ doc/build/html/_static/minus.png | Bin 0 -> 90 bytes doc/build/html/_static/plus.png | Bin 0 -> 90 bytes doc/build/html/_static/pygments.css | 84 ++ doc/build/html/_static/searchtools.js | 574 +++++++++++ doc/build/html/_static/sphinx_highlight.js | 154 +++ doc/build/html/commentary/gm.html | 220 +++++ doc/build/html/commentary/layout-lexing.html | 325 ++++++ doc/build/html/commentary/stg.html | 409 ++++++++ doc/build/html/commentary/ti.html | 120 +++ doc/build/html/commentary/tim.html | 410 ++++++++ doc/build/html/genindex.html | 140 +++ doc/build/html/glossary.html | 130 +++ doc/build/html/index.html | 140 +++ doc/build/html/objects.inv | Bin 0 -> 499 bytes .../references/gm-state-transition-rules.html | 459 +++++++++ .../html/references/gm-state-transitions.html | 521 ++++++++++ .../html/references/ti-state-transitions.html | 413 ++++++++ doc/build/html/search.html | 132 +++ doc/build/html/searchindex.js | 1 + doc/build/html/test.html | 105 ++ doc/src/commentary/gm.rst | 104 ++ doc/src/commentary/layout-lexing.rst | 235 +++++ doc/src/commentary/ti.rst | 6 + {docs => doc}/src/conf.py | 0 doc/src/glossary.rst | 19 + doc/src/index.rst | 26 + .../src/references/gm-state-transitions.rst | 0 doc/src/references/ti-state-transitions.rst | 334 +++++++ 304 files changed, 29610 insertions(+) rename {docs => doc}/Makefile (100%) create mode 100644 doc/build/.DS_Store create mode 100644 doc/build/doctrees/commentary/gm.doctree create mode 100644 doc/build/doctrees/commentary/layout-lexing.doctree create mode 100644 doc/build/doctrees/commentary/stg.doctree create mode 100644 doc/build/doctrees/commentary/ti.doctree create mode 100644 doc/build/doctrees/commentary/tim.doctree create mode 100644 doc/build/doctrees/environment.pickle create mode 100644 doc/build/doctrees/glossary.doctree create mode 100644 doc/build/doctrees/index.doctree create mode 100644 doc/build/doctrees/references/gm-state-transition-rules.doctree create mode 100644 doc/build/doctrees/references/gm-state-transitions.doctree create mode 100644 doc/build/doctrees/references/ti-state-transitions.doctree create mode 100644 doc/build/html/.buildinfo create mode 100644 doc/build/html/_images/math/00420770ada7197f2dc04dc2cb7be7957619046e.svg create mode 100644 doc/build/html/_images/math/021357ee48ac0e35395fa99353083fee184026dd.svg create mode 100644 doc/build/html/_images/math/02341a0151149b70730cfe4fb67c90c60c7b657e.svg create mode 100644 doc/build/html/_images/math/037e533b299f8acf5a007a8951726e0fb03c8297.svg create mode 100644 doc/build/html/_images/math/068dad807177c214a4019500e8cb3e87d1f16fd3.svg create mode 100644 doc/build/html/_images/math/06c8c584f274e78c626596a6cdbb67086a30bf76.svg create mode 100644 doc/build/html/_images/math/0787f8d42f5944ee828b01d06440da9b5dbd2ab8.svg create mode 100644 doc/build/html/_images/math/09635090aa47407c859d644721c5384fbb715130.svg create mode 100644 doc/build/html/_images/math/096ddb24a14399b5fff7b5f2f691468d437dae7d.svg create mode 100644 doc/build/html/_images/math/09f13f0deb087a0975f104db0a2fe82979aec7d5.svg create mode 100644 doc/build/html/_images/math/0a0458d62ece3f6e5019d53d0245ff5facdc5fdf.svg create mode 100644 doc/build/html/_images/math/0dad12d4109ecbf3e9de69670796aed4e39bad83.svg create mode 100644 doc/build/html/_images/math/0f620d28afa4216e77023746bb49f10715fc8824.svg create mode 100644 doc/build/html/_images/math/0fc7c9df5cc4f923f6953e615c1f28a6531c0b68.svg create mode 100644 doc/build/html/_images/math/10e6bec91d32d8e61faf2f5843c718ef27148abd.svg create mode 100644 doc/build/html/_images/math/11649b728693b5cbf77eeb3b247c50f599f41294.svg create mode 100644 doc/build/html/_images/math/1181faecef1f280d02390f5e6e4dc19abe5f4eb1.svg create mode 100644 doc/build/html/_images/math/11cdffb9aaad97f1748e14369a93f303987914df.svg create mode 100644 doc/build/html/_images/math/11f8d008cc7c2fca0d206330cc817662df3b0c43.svg create mode 100644 doc/build/html/_images/math/126119a4c2150b58b13370bfdfa9bb789571ef13.svg create mode 100644 doc/build/html/_images/math/13da9cdf17e4f8cf26f0caad8bda0e132f604db0.svg create mode 100644 doc/build/html/_images/math/13fdcdda44eede2cc7be00ace4f3d009e82ebf8d.svg create mode 100644 doc/build/html/_images/math/1543958253280895e6abea369c0f9abf4898649c.svg create mode 100644 doc/build/html/_images/math/15d23b1b737948104e84da7d3e79c697816c10df.svg create mode 100644 doc/build/html/_images/math/1631c78842178c05d1a9c61aca6fbe3d74247ced.svg create mode 100644 doc/build/html/_images/math/169b0ba6ac3730b32a1d4054ae9a3ec0912ff9c0.svg create mode 100644 doc/build/html/_images/math/176a0e2360b1e342041d8129c3a264321ae806ce.svg create mode 100644 doc/build/html/_images/math/187ead99c2f67003ebe37c473bac713194eaa50e.svg create mode 100644 doc/build/html/_images/math/18d617a93c757f0b0e644d4000b9decf2c1730df.svg create mode 100644 doc/build/html/_images/math/18d81e1fc22e6feb876a993fe30fd9e8336f5bf6.svg create mode 100644 doc/build/html/_images/math/1994936ebb09fed720f969439d19593b228aec95.svg create mode 100644 doc/build/html/_images/math/1bbf876b63a42c5c5fd537974667f28e4fdfe71f.svg create mode 100644 doc/build/html/_images/math/1d1d05c2792b02598e523fd646d6268749231320.svg create mode 100644 doc/build/html/_images/math/1db3a2eb7103da4d39315e15158991ac5eb31a8f.svg create mode 100644 doc/build/html/_images/math/1e7e72c2a7ae8acbb9c293a2681b3cdf41e403b7.svg create mode 100644 doc/build/html/_images/math/1ec3c5f46f67104788324ef961a5eb2126495009.svg create mode 100644 doc/build/html/_images/math/1f35e0be8716b58b223dddd9dc21d3cbf9b932c9.svg create mode 100644 doc/build/html/_images/math/1fc5e2a4ce5b523a6e99c0937d45b0f285461097.svg create mode 100644 doc/build/html/_images/math/20219b0570be52c3f596972c4cd5461a162cccf9.svg create mode 100644 doc/build/html/_images/math/22bd53275636be43362c037f2ad50f5f63231e10.svg create mode 100644 doc/build/html/_images/math/2417422cdf63ed202b16462208f8a62630f99679.svg create mode 100644 doc/build/html/_images/math/24642c97b2dc64d03a103607414f676b6e9daf5c.svg create mode 100644 doc/build/html/_images/math/24c437dab01cb429328b3fe9d20e8f5b64cefdc0.svg create mode 100644 doc/build/html/_images/math/262187dda48952ac064d34af5a8dc5ccc5df1126.svg create mode 100644 doc/build/html/_images/math/26f3be2a43bd1ac2dfa07345e26336292899f61f.svg create mode 100644 doc/build/html/_images/math/276f330b47308dae1686a2c0030783ed20a8866d.svg create mode 100644 doc/build/html/_images/math/278a79d24fb8713d66c77d17909485589a944e60.svg create mode 100644 doc/build/html/_images/math/29a11053c0f5950b2126ebf4829f569eeaa85ad6.svg create mode 100644 doc/build/html/_images/math/2a63b1f89224cb96d4e2b5a0f9494eac68234a42.svg create mode 100644 doc/build/html/_images/math/2b4c25ea56a82ed5f9d8182f3c38c632ab47e8bd.svg create mode 100644 doc/build/html/_images/math/2bfab760cd5a82cd980862645b628ea4c2a97f34.svg create mode 100644 doc/build/html/_images/math/2dc5e48f0f26f08073e6e1cdd70ff876c6ec2434.svg create mode 100644 doc/build/html/_images/math/2e21d478eedaa358bccb9aa3c57a5b290e671863.svg create mode 100644 doc/build/html/_images/math/2f7215ad8dc4415a832b9101c30f98ad94307f61.svg create mode 100644 doc/build/html/_images/math/3075f944e67c6a986438fad3c0d23ee7cc191a88.svg create mode 100644 doc/build/html/_images/math/30ca5614d0c1f1e407a064238095024a155e2466.svg create mode 100644 doc/build/html/_images/math/314087b4a49447d217e1247a7a58aeb2ebf04f6b.svg create mode 100644 doc/build/html/_images/math/32843bfb29b74cf3428d62c0a0bb4a85018bf793.svg create mode 100644 doc/build/html/_images/math/334a9ad9e9541a3f8be7530fed1ec7373510a227.svg create mode 100644 doc/build/html/_images/math/33b86e3c01637e2ffa96b8a23365bd27e98594fb.svg create mode 100644 doc/build/html/_images/math/33f37b6cae353c26c80f089c5b354e7575e7c201.svg create mode 100644 doc/build/html/_images/math/3436a201726f4f03e64783f41d44d9ae3edd5118.svg create mode 100644 doc/build/html/_images/math/34e91bc0685dd54adb3e06c06e6fc0cc4d8ad419.svg create mode 100644 doc/build/html/_images/math/354d9ac40cde930452a7f40dd91dc043c92aba12.svg create mode 100644 doc/build/html/_images/math/37c1815c2dba065ef8c2f84100676cf9d1b6511a.svg create mode 100644 doc/build/html/_images/math/3939cf0a8e341efac8ba1aeb5ae6271cd00c37c7.svg create mode 100644 doc/build/html/_images/math/3a0879f2e436b8778f86d0b3315af89e4b23061e.svg create mode 100644 doc/build/html/_images/math/3c5133875b5087d8f8b521a6b737f82d715cf7e7.svg create mode 100644 doc/build/html/_images/math/3cdf4d8583b839b15fed122e5293d261cc34639d.svg create mode 100644 doc/build/html/_images/math/3eb2a0684a9c3d7c7a02334d788b2bd85cc83b55.svg create mode 100644 doc/build/html/_images/math/3f0efc21d61f6d73d821b258392b7be1fc9036eb.svg create mode 100644 doc/build/html/_images/math/3fa33eeafbc80a0bcf2766e8f56e9cb2b6148e79.svg create mode 100644 doc/build/html/_images/math/3fc332dc07916d83f75fcddf6da06a7734032ee9.svg create mode 100644 doc/build/html/_images/math/3ffc6e15d2c381b0ab11691e13dba314d2c6541d.svg create mode 100644 doc/build/html/_images/math/4004b3a0b74a3d25993573e61733383293f43681.svg create mode 100644 doc/build/html/_images/math/42273dafbdeac1dd5bdf8568a1e9ab8625c0629d.svg create mode 100644 doc/build/html/_images/math/422ce4de46a354723a0f5b33995d885c86bb0e70.svg create mode 100644 doc/build/html/_images/math/4298057f95b17024436a0d57ca56eae8125e10ec.svg create mode 100644 doc/build/html/_images/math/42da9c8a8264ec5b3d99bd3549773d2113758a5f.svg create mode 100644 doc/build/html/_images/math/43434266ad5b9f36d523d70ff88db5c4e9366b03.svg create mode 100644 doc/build/html/_images/math/4713e4c065d6aabec3acece28c5ecc882faa119a.svg create mode 100644 doc/build/html/_images/math/478aeca314882e29dc3a52d64624061fb36948f0.svg create mode 100644 doc/build/html/_images/math/48d3c54aba5df0dae426f9470d65778e8ccc24ab.svg create mode 100644 doc/build/html/_images/math/4966d2d6002bc14e00e77569c63b325e5b02f101.svg create mode 100644 doc/build/html/_images/math/49a5030ceb5f0c5f44d4581db994508f66b20dfa.svg create mode 100644 doc/build/html/_images/math/4d427448f9b8b54db19e316c805033a7abfe11d2.svg create mode 100644 doc/build/html/_images/math/4d588662930e30ecc01abfa745b194bfb5ffbb27.svg create mode 100644 doc/build/html/_images/math/4dc55ad8626b971383946574d473861074202c72.svg create mode 100644 doc/build/html/_images/math/4de73a2c1d1501096302e1e173eaf947ceb9c7d4.svg create mode 100644 doc/build/html/_images/math/4f85c9abccccc8bc1f4b830fa22701457c595b96.png create mode 100644 doc/build/html/_images/math/4f85c9abccccc8bc1f4b830fa22701457c595b96.svg create mode 100644 doc/build/html/_images/math/51b8ee3def56618c3d5c55841743d53ffbedbcfb.svg create mode 100644 doc/build/html/_images/math/52bc533fab728efc3a24ef236fcb017ad2888830.svg create mode 100644 doc/build/html/_images/math/537fa099ced1d1933aba81912860d6c60e6c6f75.svg create mode 100644 doc/build/html/_images/math/5380d8227d0a06608b108a26b4a618972b4b7e28.svg create mode 100644 doc/build/html/_images/math/538b0fab8c90c1abe8c6abaa3c807886040452db.svg create mode 100644 doc/build/html/_images/math/565b4d912dcfd08351ed35fd0deb3cadc0781241.svg create mode 100644 doc/build/html/_images/math/57b0d3fbe6f17a0e706fda6039130d8aaaf32903.svg create mode 100644 doc/build/html/_images/math/5a00c38ab6f040dfa75be56918953af44dc11637.svg create mode 100644 doc/build/html/_images/math/5acebcc879cae1694dcc537b99796e0dc0e0ff05.svg create mode 100644 doc/build/html/_images/math/5bd3cd582dce130ac602d5d805972076e5bc0f56.svg create mode 100644 doc/build/html/_images/math/5cf94fab747054130daaf436fc83ab590969c35f.svg create mode 100644 doc/build/html/_images/math/5e158f7fd5d27c3feef4c9b1500d451656fe2aa9.svg create mode 100644 doc/build/html/_images/math/5f6f5e2b2f037821ad3386d2355364f2667e3c34.svg create mode 100644 doc/build/html/_images/math/604a42b94739b04fa9559a97c3703816bf57aa5c.svg create mode 100644 doc/build/html/_images/math/607985174357bbbea2e2b47ab0694b2d21a71b35.svg create mode 100644 doc/build/html/_images/math/60f4e38bb9ff4a7bcb201e82cb956a3ccf064632.svg create mode 100644 doc/build/html/_images/math/620e45afe56ccc0dae7d9566d244b13bb6cb0631.svg create mode 100644 doc/build/html/_images/math/625a1ccce064b171eb9d5ec015e07d234ef26c74.svg create mode 100644 doc/build/html/_images/math/643dd082a2b49d9ebdb87533aac62fdd342f4fd5.svg create mode 100644 doc/build/html/_images/math/64728a32abbc0b68b58acd0467082b83653421df.svg create mode 100644 doc/build/html/_images/math/66eb37710389b629d7ffa626fb55276426bef938.svg create mode 100644 doc/build/html/_images/math/6a99995af47f16f85dab4ffa3208177455960e73.svg create mode 100644 doc/build/html/_images/math/6bb003bcdf823b102e5c80f3ca1cd4208c7493fc.svg create mode 100644 doc/build/html/_images/math/6bdb1b0b4006f5b62d10449cd280f311f4cf12f8.svg create mode 100644 doc/build/html/_images/math/6c62b0ff237d0ef459470304b79de4219c771037.svg create mode 100644 doc/build/html/_images/math/6d7f995d88e257359a4ce4f854c967791c1ec71d.svg create mode 100644 doc/build/html/_images/math/6d95eec30809d2f72c4d645e69ee6ba5fd3f0767.svg create mode 100644 doc/build/html/_images/math/6de99ea1d6d13dbeedcdfcf7e3807cdd4f2e8594.svg create mode 100644 doc/build/html/_images/math/6e064e1b27f430eda7087e304da72f29d1f0b102.svg create mode 100644 doc/build/html/_images/math/6efb62efa4d897975a5924d6f8ef3b7466fc7b4a.svg create mode 100644 doc/build/html/_images/math/6f23f2ac78d6d7452697a0a4d711c406a7e04b6b.svg create mode 100644 doc/build/html/_images/math/6fd2125a6059ef9b07f4cbe32c2f5b35ee13ff49.svg create mode 100644 doc/build/html/_images/math/6fdc8bbb8b19c7ad0794ceefd47b82c0111b21f8.svg create mode 100644 doc/build/html/_images/math/702f28367db2bbf757f819d55f238962369384ad.svg create mode 100644 doc/build/html/_images/math/71a114da143774e891c3cb6c37c39d8bc98c0386.svg create mode 100644 doc/build/html/_images/math/746912d7454caf98daf2e20797372b64bb3b728e.svg create mode 100644 doc/build/html/_images/math/75427250d809caece36cbdd61547f4f5e714757e.svg create mode 100644 doc/build/html/_images/math/758e69f9e44c00c28db11caa744ce8468e26062d.svg create mode 100644 doc/build/html/_images/math/7648bfc0796ff33966fbc002c446b2242d296fd9.svg create mode 100644 doc/build/html/_images/math/768668a1db4f505075a95e7966ad942d5fb6fd83.svg create mode 100644 doc/build/html/_images/math/76b4cd411d70f6fc673e2311a6a786f54b72bf67.svg create mode 100644 doc/build/html/_images/math/78965124ba0a627060835202535c7861f9b8c69b.svg create mode 100644 doc/build/html/_images/math/79765386818a281cce0f753107ac50656c0cc8fa.svg create mode 100644 doc/build/html/_images/math/7a274836cebcd29820798059050d713d9c2fc3f9.svg create mode 100644 doc/build/html/_images/math/7a5577f4835bea58fb5e61feccfb2cac76ad365a.svg create mode 100644 doc/build/html/_images/math/7aaf1912f6d672948be49227545febbb868e4887.svg create mode 100644 doc/build/html/_images/math/7b6ca1926b0911a8c3523f091346cf45a7877c61.svg create mode 100644 doc/build/html/_images/math/7bec4ba909b65b3426b4a35a78d3bb691135632f.svg create mode 100644 doc/build/html/_images/math/7c31cda93cce15a6bef0ecb07b4221f15d15cc9f.svg create mode 100644 doc/build/html/_images/math/7df716294edee0018b3f078e794ae5d964c4e7e5.svg create mode 100644 doc/build/html/_images/math/7e73c74dddb2e10b652efe45aa14cbb6023c92aa.svg create mode 100644 doc/build/html/_images/math/815a11ada9963c3e3b8ab06f0764c4a39027b903.svg create mode 100644 doc/build/html/_images/math/82419b70ee4382ef98b643337d72fb4f360c54dc.svg create mode 100644 doc/build/html/_images/math/825f35a00bb05b6028399a1a574a9c9eceaae3dc.svg create mode 100644 doc/build/html/_images/math/8282bc1515ee7f12235b6cf5ec58b653adacf9ab.svg create mode 100644 doc/build/html/_images/math/83e53e21f5584af23d7fbd41bdc8b4eb06e150d9.svg create mode 100644 doc/build/html/_images/math/845e1f51c7b1adf37c30a54e0205dd325c0fbd83.svg create mode 100644 doc/build/html/_images/math/89771851f25b7b1500b570c182c104346f4caf10.svg create mode 100644 doc/build/html/_images/math/8dd8da75ac6612b08aa1c953fe79f69d9614a370.svg create mode 100644 doc/build/html/_images/math/90592e982322fa08f1b8ae0e6bcdaca11fc8de59.svg create mode 100644 doc/build/html/_images/math/9074d5122d0889ba7171982a92c523d35a2c447b.svg create mode 100644 doc/build/html/_images/math/90d7e53e2606d1ffdcc0d85fcc0be2db9b919797.svg create mode 100644 doc/build/html/_images/math/916611b9f35e3a8af01f51234df415eb9adbfe61.svg create mode 100644 doc/build/html/_images/math/9264520765ac3abdf00f5cff93232ef8f436c08c.svg create mode 100644 doc/build/html/_images/math/93dcd8e1232a9b79d01e09ea8c1be65747300380.svg create mode 100644 doc/build/html/_images/math/95f01e99347ef7cc15166f53ec582de9b502f58b.svg create mode 100644 doc/build/html/_images/math/96b775e1d32106f30d74a6fc743db615ea6e51ea.svg create mode 100644 doc/build/html/_images/math/996b14e88c00afb0c157a014c7b04c192a6667d8.svg create mode 100644 doc/build/html/_images/math/9a55feec1c2be23566d6cb240ecccdb2cb43ffba.svg create mode 100644 doc/build/html/_images/math/9d5c92329653dc668aca7375b3b801213e300119.svg create mode 100644 doc/build/html/_images/math/9ee353f5c7ea494aa1bb607f0b42adc51955a770.svg create mode 100644 doc/build/html/_images/math/9f2aa4d374eadac24cdfa581a79bc6a768ce1b1d.svg create mode 100644 doc/build/html/_images/math/a540630fbb5173bbf2de2d38326e10e6977b2c18.svg create mode 100644 doc/build/html/_images/math/a64b8ca02be0eeffa5e995f1fe689a97f456c00b.svg create mode 100644 doc/build/html/_images/math/a6502e03af9f1e3d8a7dce9053c7125364a0cae5.svg create mode 100644 doc/build/html/_images/math/a6b3075593c703668bf03f396fce6a5fe573717f.svg create mode 100644 doc/build/html/_images/math/a7e563f9e2af17336ffd26eba981364f3f1d2168.svg create mode 100644 doc/build/html/_images/math/a80027a70b057da00d97dd31650e183080cb43b5.svg create mode 100644 doc/build/html/_images/math/a86f901ae855d64263ac2ab365517c5a7e5ccd14.svg create mode 100644 doc/build/html/_images/math/a93c0b8b1360d0ec2ee767ec404fb6345ab0577c.svg create mode 100644 doc/build/html/_images/math/a94d342ea354a4cdc3d38f7892d58fae9545a926.svg create mode 100644 doc/build/html/_images/math/a9edef6fb240c138d22677e925b4b653bf9f990e.svg create mode 100644 doc/build/html/_images/math/ac67f9acd3737b5efcdc6cb35f39df773ebad7fe.svg create mode 100644 doc/build/html/_images/math/ad19952585566a69fb8233562ce15d85100265b5.svg create mode 100644 doc/build/html/_images/math/ad2a60679e9e7a3465fbf469680cf03f3821da24.svg create mode 100644 doc/build/html/_images/math/ad3f2f323917c4c577d00563525d086013713d90.svg create mode 100644 doc/build/html/_images/math/ae53d53d52e506becc6c9eba1bbee8d52a0c0096.svg create mode 100644 doc/build/html/_images/math/ae912ca6357b80cd4ac0e500254988780137d73d.svg create mode 100644 doc/build/html/_images/math/aec9099fc8c459eb433947bd6c9cc0f96fe38f98.svg create mode 100644 doc/build/html/_images/math/afd7514f494125ad1ed346ea20de2b74b04c6b71.svg create mode 100644 doc/build/html/_images/math/b010802103c6f085b1f155800dc07fed61660394.svg create mode 100644 doc/build/html/_images/math/b0285722e6eed4a0fa69945efe4dfe0fbe124582.svg create mode 100644 doc/build/html/_images/math/b04167eaade600ab592e2a4441ffc27f5268cccf.svg create mode 100644 doc/build/html/_images/math/b2dfd7e61552070e476dde55e5f97dc21189d8bd.svg create mode 100644 doc/build/html/_images/math/b3c0a4ea1f5e913e84a4419ab76546940b976999.svg create mode 100644 doc/build/html/_images/math/b6eae68ed847d26cca7f5a8121d080f07d02bf94.svg create mode 100644 doc/build/html/_images/math/b86a1741e36673576f163fbc74134ff742b364d8.svg create mode 100644 doc/build/html/_images/math/ba7021e35d6fc44fe3d205ce7c892946b63c7507.svg create mode 100644 doc/build/html/_images/math/bc438562da17dd63bb4fb24226789a7afac1650f.svg create mode 100644 doc/build/html/_images/math/c067c4215cbfc6897d6e5eaf14ded0dc221b972c.svg create mode 100644 doc/build/html/_images/math/c11a34fefbc9f3c9204a0f4dae73804946be6692.svg create mode 100644 doc/build/html/_images/math/c14e418c03a66965d1ff43d7a166d4bc403fb59c.svg create mode 100644 doc/build/html/_images/math/c2ed36f728a405f51900a56136f234fd1c84253e.svg create mode 100644 doc/build/html/_images/math/c3a1a49f30e99ec10fb5965633edca518a10441b.svg create mode 100644 doc/build/html/_images/math/c5937687478d980ab66b85de909dcb73d4bc9b13.svg create mode 100644 doc/build/html/_images/math/c63271fd2e7964699e51df9fee16b043e40449fd.svg create mode 100644 doc/build/html/_images/math/c9ac657e040edf18bbbf248d15d73ab640a93f2d.svg create mode 100644 doc/build/html/_images/math/cc49d1fafb6a28c6c042491d610586fbcb48c0b5.svg create mode 100644 doc/build/html/_images/math/cc9ad1bf37cbb0cbc3156f31e10ce7d8148d5e06.svg create mode 100644 doc/build/html/_images/math/cddff17c817c1acda8498e28276cbace394ea817.svg create mode 100644 doc/build/html/_images/math/ce745b5797483cfcb6ff4816364d91d3d5b6e6c4.svg create mode 100644 doc/build/html/_images/math/d04fe0dc2dd02e9d27dfd46e93827894feb96d1f.svg create mode 100644 doc/build/html/_images/math/d13a272a60d62c8a6b0ae4f178970b34b3cbc34b.svg create mode 100644 doc/build/html/_images/math/d13e748def2419af7ed6d97286f8f8ba95d695ab.svg create mode 100644 doc/build/html/_images/math/d267fe313a3b9c3638dde67e05f045efc2ddfe06.svg create mode 100644 doc/build/html/_images/math/d30cef88d057bcc5920fca7d63d0682f802d9006.svg create mode 100644 doc/build/html/_images/math/d4cef9805eafbbcd57b5fefe36bab8b23012c7d1.svg create mode 100644 doc/build/html/_images/math/d50602aa4f63b11b8a8c07c95722fee7ea97b348.svg create mode 100644 doc/build/html/_images/math/d56941a661a880391bd898f16e5dcf9c0b8a7e59.svg create mode 100644 doc/build/html/_images/math/d696439e8724d5b54e9b4b344b9c99d0facc8b7c.svg create mode 100644 doc/build/html/_images/math/d799367c490fcb15b82b8c5ee3fa5c9cbcc68dd8.svg create mode 100644 doc/build/html/_images/math/dce20146d5eb77607e0a55541f4efb1a4b8c4b8c.svg create mode 100644 doc/build/html/_images/math/ded4d6d37345b9aafba642fa7cfba7494ff14f70.svg create mode 100644 doc/build/html/_images/math/e0156186842b31629791a1077f601176a7365f82.svg create mode 100644 doc/build/html/_images/math/e15ab32e61ffbf9ec981451984dd7a6e61675385.svg create mode 100644 doc/build/html/_images/math/e299a147e6e958303111e813e82a3507ded25437.svg create mode 100644 doc/build/html/_images/math/e34c3c7dbb292f28e888bfb49920d7c293055d2b.svg create mode 100644 doc/build/html/_images/math/e4dc66520823a07e0df31b43dda92f9b2ea9e792.svg create mode 100644 doc/build/html/_images/math/e568b3a2690eb8037909cae4b88b8ab16459605e.svg create mode 100644 doc/build/html/_images/math/e56dfd5625638bc4ad9867951a7818cf20c88a2f.svg create mode 100644 doc/build/html/_images/math/e83c9268a37c748c7cd0f640a1f28bd878bb1749.svg create mode 100644 doc/build/html/_images/math/e8a47d0c4e105b420931ccbeb7571abc3dd7f73d.svg create mode 100644 doc/build/html/_images/math/e8b568237d1744ae5272cadf1bdd39eaed69c1f6.svg create mode 100644 doc/build/html/_images/math/e8e5c388fc50fed467da5027dde63736ec11b971.svg create mode 100644 doc/build/html/_images/math/e91c8c9e0530c873480544a154b5156c1a3bc5cf.svg create mode 100644 doc/build/html/_images/math/ea96fb3afc754d2d914e95c7197dd020ee4d8eeb.svg create mode 100644 doc/build/html/_images/math/eb7dc8445c84c126f6834aa63965b5866af4862f.svg create mode 100644 doc/build/html/_images/math/ebd2e5584b404461c1046b8bf084d34487e21129.svg create mode 100644 doc/build/html/_images/math/ecf8d8521b87e224ab55f1fb9b3b29c0d61c22d8.svg create mode 100644 doc/build/html/_images/math/ed6af2733291dcf5001173a8dbaf8f59c817212a.svg create mode 100644 doc/build/html/_images/math/f028854f696e20d8f3e7fc8807f20c444cf43eaa.svg create mode 100644 doc/build/html/_images/math/f02d55fb6c249a7da5a9df6b7e5c96ab6be7672b.svg create mode 100644 doc/build/html/_images/math/f0910149fc44dd7dabe235ebff17a2060ae8714e.svg create mode 100644 doc/build/html/_images/math/f17c96b90fd292ae6974ada44ee78617139e5141.svg create mode 100644 doc/build/html/_images/math/f19df02362bdcb3832d9a6e1e22c7d9a8374e613.svg create mode 100644 doc/build/html/_images/math/f3284172ff91453e703a9b5979f8386f44f9948c.svg create mode 100644 doc/build/html/_images/math/f49c3dd83ce20802dd9b32036339dbb3b354bd2d.svg create mode 100644 doc/build/html/_images/math/f670f05da2f796ded634f483374c8523a2ed0ac4.svg create mode 100644 doc/build/html/_images/math/f6fd6928c1aaf2be4844f5d4e293a09bc610f44f.svg create mode 100644 doc/build/html/_images/math/f7679edba251c469017904363c4f2ee6919879f3.svg create mode 100644 doc/build/html/_images/math/f9a521977b1461b53094f1bae24aa6d1bb757b07.svg create mode 100644 doc/build/html/_images/math/fb4ddd4f20941bccbdf1c7cee61f00284285e536.svg create mode 100644 doc/build/html/_images/math/fea71c9f02d3639232648b940b80e5b9c1a03db3.svg rename docs/src/commentary/gm.rst => doc/build/html/_sources/commentary/gm.rst.txt (100%) rename docs/src/commentary/layout-lexing.rst => doc/build/html/_sources/commentary/layout-lexing.rst.txt (100%) create mode 100644 doc/build/html/_sources/commentary/stg.rst.txt rename docs/src/commentary/ti.rst => doc/build/html/_sources/commentary/ti.rst.txt (100%) create mode 100644 doc/build/html/_sources/commentary/tim.rst.txt rename docs/src/glossary.rst => doc/build/html/_sources/glossary.rst.txt (100%) rename docs/src/index.rst => doc/build/html/_sources/index.rst.txt (100%) create mode 100644 doc/build/html/_sources/references/gm-state-transition-rules.rst.txt create mode 100644 doc/build/html/_sources/references/gm-state-transitions.rst.txt rename docs/src/references/ti-state-transitions.rst => doc/build/html/_sources/references/ti-state-transitions.rst.txt (100%) create mode 100644 doc/build/html/_sources/test.rst.txt create mode 100644 doc/build/html/_static/alabaster.css create mode 100644 doc/build/html/_static/basic.css create mode 100644 doc/build/html/_static/custom.css create mode 100644 doc/build/html/_static/doctools.js create mode 100644 doc/build/html/_static/documentation_options.js create mode 100644 doc/build/html/_static/file.png create mode 100644 doc/build/html/_static/language_data.js create mode 100644 doc/build/html/_static/minus.png create mode 100644 doc/build/html/_static/plus.png create mode 100644 doc/build/html/_static/pygments.css create mode 100644 doc/build/html/_static/searchtools.js create mode 100644 doc/build/html/_static/sphinx_highlight.js create mode 100644 doc/build/html/commentary/gm.html create mode 100644 doc/build/html/commentary/layout-lexing.html create mode 100644 doc/build/html/commentary/stg.html create mode 100644 doc/build/html/commentary/ti.html create mode 100644 doc/build/html/commentary/tim.html create mode 100644 doc/build/html/genindex.html create mode 100644 doc/build/html/glossary.html create mode 100644 doc/build/html/index.html create mode 100644 doc/build/html/objects.inv create mode 100644 doc/build/html/references/gm-state-transition-rules.html create mode 100644 doc/build/html/references/gm-state-transitions.html create mode 100644 doc/build/html/references/ti-state-transitions.html create mode 100644 doc/build/html/search.html create mode 100644 doc/build/html/searchindex.js create mode 100644 doc/build/html/test.html create mode 100644 doc/src/commentary/gm.rst create mode 100644 doc/src/commentary/layout-lexing.rst create mode 100644 doc/src/commentary/ti.rst rename {docs => doc}/src/conf.py (100%) create mode 100644 doc/src/glossary.rst create mode 100644 doc/src/index.rst rename {docs => doc}/src/references/gm-state-transitions.rst (100%) create mode 100644 doc/src/references/ti-state-transitions.rst 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 0000000000000000000000000000000000000000..94c7107150a65b7965881f719558b0051abbc156 GIT binary patch literal 6148 zcmZQzU|@7AO)+F(5MW?n;9!8zj35RBCIAV8Fop~hR0Kpbg3L%NFD^*R$xmWnVAu|o z8|)Ow?JNu#3?&S?3^~Z|Pb$dCEG{uHxW>rD%)-jX&cV*X%@G@%kzXEMl2}q&?37p( z4dR95=jSBB*ojGDnW^RR0wT`&c_oRNd8tJpCBc~~sY!`NG2xkcDf#72`K5U&#bCWq z2@XyU&UgXw>S{9+V;u!Uqgow>YBM8K9R+h!quN?d4pC)&>!A4ToZP(pPDpq%GD2tu zUMLNtx)>N3;NB?)1ECdl9B}YSGGz3OO2r#m^1iLtaDoq^T1=Y2n`ZNJ5 w532nk)iJ1|Mr{NzK?W2hph`j2JxD8v23N(543L_9v>^Zsp;3A?1n3_E0Is7-E&u=k literal 0 HcmV?d00001 diff --git a/doc/build/doctrees/commentary/gm.doctree b/doc/build/doctrees/commentary/gm.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fffc47f5f3accf0a5d7eb4b7c39076651cf857cc GIT binary patch literal 13822 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 literal 0 HcmV?d00001 diff --git a/doc/build/doctrees/commentary/layout-lexing.doctree b/doc/build/doctrees/commentary/layout-lexing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c1222aa503864b94693620486f2eca24847775f9 GIT binary patch literal 42871 zcmZo*otm?p0StQhiwiO`^D6WbQ&RHsQ&Nkk^l+r)Czs}?=9NsDJVmo{O6?Sl9?qh~ z^5Xo`qU6*mJq%NNIFd6mb5e>@^QOd3>EQz@FUia))`RM2FHTJ^$;{7#YtLZKV9Q{S zouZM!*~40rS(1~AB-JD1lUk9Pm#(7_kXTdLv6(kmcJdh#S!x;~9AJ{t?%sp&SU-0le3Fb(?DuUd)P}7(?L>GGWav3 zGk7v&GMF=Ddwlgni&Kk=^^=QAbCYsX^|DL5mhF)}cO zWTYxM>lT+(=A`CKotc-e zkeR2DoS$0&Qdd%`P@a*Rr{JkjTvC*pn46lSP?DdWnpdollUS9RQ>l=d$K|Z20CHYQ zVsSReMPT_%P`oQ7Vz^l$vsj@lwWv~|I1^+6$f}go;^d;t0#N$0QmD)?<;qOY%P)dB zzC0tdB(=C8F*#KMl!OZMGxJIm@=Hq;$}K5^%OkQz#=L6dFmwy zajxS0+|-f`a57BJNKMXG$V^knEKx63NL0wlEJ-a&%u&cMQb^2G$V^GiE6GgDOfAw= z2+qha%}G(nEKx{GRme-tEXhbM(%~vfEh#O^1F20dD#|a?gQR7#h*_gCL}Cm*YM4nl zjvh74q)IG7%a9D|41Guj_REk16%!fqwNo@Q6l14kD9298P>r3Ep&mOWLo;?tX@+)& zZiZ}zPKKN}3oPH4CS~YB3eODIo-6)&3I&M;sYN;pN%i)k8s0i&7IyQi~LlGZJ%hQuESNi}e(I zGK))6QxuXa6%vb+Q}a?F8M7oaH!~#>lvfne5|c~vi*yt~=^LEyGE%t;@=HKzI59_| zC_gbJDJMTUyI3JV4^&FzX6B_RB&DW-vQ{o6pC{%iB$kw<<`$GFl&2P@T0xWZF!dZF z71)xV3b>I{0cQ_)QfW?3YDs)fW-+J=gQW^YoyZB2iO(!a%|$NAS28j%_!p!WC6?qD z6Uk*|=GT9%qq3{HZH#l`u_nTaKtWtkBiAejN4<0Dp#M&6K#JV@M$ zjmFs!%5YN<<#QP6`cf>A61_tN+ypq(4 z65Zm|yyDD~%(7I4?9|Hg{Gt@3(mF9GC%?Q{AuYcMQuBhPLG^i3DyV2qQAjLCYDpF= zWae=pmww3*D~fd#ic6C-K#HxB^HWl-64DZLGjl2vbQGZcqWqjx1TV2TL60jaH4)ql zNCZ_EsqqSF`K5WFN4QXA$}^)$V|=v6{VR)Anzz-7IPJ)=A@P-=9TCur0S*X!Q2ORFSx!z zb~30*Us73+s*sYJoRe4tZmSgQa6y$M7AGhqrh(czP=Vyc;?x9dn4y_z2rrjpq~;~) zAe*0>Q=FOr3eePwf}+&o;>`TKVjYFll4Q)%dgo|tf>P+vj7@Oyt&t(tQ#v3S5~(E0 zgOnDK{z3+44?DESh}5d<;e)1RXodhgK0~aB4Z=q}FdU&7?1D7N)XR&~INSb?aJ1V1@boYRq zSe%rBa0F7uhdF^Mu^7n#^Qqwg9^}Fi$#B%5;q2ioN=-{G0yUSBV~{m3za%vt<~$Y< z56O%zcpQk-XY64Cj}!GkwD+(TrKXh@Wlre{$S5f(D7MnqPtPpLNlenqfOHD=@{7{- z(=(F6SXaM1Gdr^wd6XzQA5_#sMtqcwbiwU*U69L)!M)Q>pn&e-C`v8P&nZhync~d| zP8eK>IswTCsG+bKokU`{@Va|AgS*~2sTHY3Nama-EhM;+YNaU|M|y&Y3W=ng z{3QL{#Nv|FB2ah~Wagw6>AQP4>w^XpQ;YO{K#tO@Q1&r2G&V+rMaD5`5YW2%LkbVn za7CnfqDzDacmkB@%*P6@B8hMoQRTsBYB)(8Mc%hXqq+S^~^LOqpp&&e5TkbKq4CsKh}j+F`*0Zm7Xr z!2;qTxx=1H?qGwo1Q8}@;L3e4XMtObaA$#d2+dhRRC1Om*5)X}B2-tV;_aTmMjXX5 zq%*Q8>C5yS4M&Wd!}>CrC6(3+;Tf4ZsS2J7pmCPu{M@wsBFJb>d1eW?(GTjmB!UJL z6BUXpi%U{-xr#G$GjkG)KpmWb%94!yJoRD)Pd^t|zYu*FR}clA572>)oPftS!P5lb z{sYnoen~zTbRJ0o)Y<`+5s3=riItE(idI@`PKlO6N@g0khAzQq)At-14!!~>NKo5$ zD-C@EuDxjzONf-6Rf?8{GB|rUQgaJ35{om7ky}@6keCH~JVUI91r*On#?+%3gW51g zZV;DdXlK=eR7->H1~+)PkrE7&q3CWSF5}5%NM{u?GBA*y_i&rv!v+~Ep3=jp1#Yc) zL+2GhBNpKKMDWZXTS;P3dMff@a!-_=o2JRKtmsCM0+c7B>3uPGyYEo(C)0|U5G2_FRRIqnD^yGT?> z$}9mDlO-AXrRfYH?~}QF4Zk0#ccWRQiI-yONAl(8y7)LVg;T7Gxs0SPL`= z1f41Z8|0}_o|%)Q01jACxm%KvnyZjltOFjsNlh#UO}l~&Do#!;%1kXTQ2@_wa^>fN z7{v;psRspJU8I5U)Jm|{#N>?3)H2ZMydpR=f=VH8DtZVh{~Z7&74Td+r0bkjhny-n z;a&&3BSWl*9U2x$Mw~!1f~ax3BUw;Bpek$D=a{B_yI+kxv51~3Xr-P7M!>hAYAyEl<)7j)N;`B4#@mgW*%s&9z3)N${@w5pmh@^si1`n zC8?lw77%67-myY)a(+Q7S7u&uNoryWB-?^kLnNkTf~I{Ea}gDJFEq+ixpEUL71C4lKnn_t$4k_yV)snBSK4D>1_rKV?sTnq{u1yJDV zfW~brxnRK$DkG3XDjz)I23HM<5%BCER0h6~1Qc{7u6m+nC(txLY#|47wkyd< zgk)Y=_R>+v%qvbU0<{{TT`4Ybb_ZAf1*OH1o>*RLIXF|RgQk!W#T|H-Um-uQBp;O7 z6_70|E=f$z=F$LVdoUBU)+#eEvm`SyC$l&;1(M%E>zt5EPpENe3RS5^`I?x0t}DaQ zm#`dljZU5emwm`F1r2o?MIus}AjO1tuncMV8o3!_k|CWX#za&H3c(M92*|~f@Omf1MD5_*@KLTLQ42X z@MH<8Y4KKu@U?yx8PZvLR7m()&=5sV81$GR? zVd}*S1sRz+`NjDK8I`coSt&m+RUtXQs3RJ9HGvq5VrphXgjBQUF@RT9gMGQYk4) z%qz}GECCq+3Mj-t4APPwh=qu7D9Hye=!SRA6yRMmF4zP-WT7{x%LAHy8Y0mGE>CUp(;!G6 zh>{89EYe4Q>{0q6h@z%PJP|aM3ChO01>mtB-2(754ARi1L?UQF0Hj0#qQpu8t_C`U z3u@hQ!3LM0$Gkr1Sv~dMM=P7ngum#eqgQ6;dk_!JA9+(?B^Jw9y1I=z=9@ z>wrp1Xwe4Ul2Vcn3Qj$R@C@+qN1j4rE@=BpzCvPJQDP=|{0JHrpm8klW}aeuu8@4t zPLZ^t#Jp@B1yA){g|x&X1yEa80W?gTngX3|PAmrRu*t0~PR#-JA2W;5hH60@Uy4$> zl2eOH5;H*y!okb?K`mO)unuSd1+=0YIRF$uB`IjjOLBf*a%xeY9(*P)Be9qZ=6i6d zt)K-Oj?2s|1&=FfS%Dh7xy1_QMVTcfsd)5DdiJ)bMCHV@F2vaZSQYzMuuCBF? z)z?=-6s>N9EqcKPD5R{yh~P&JGf9YIw1H!C;~2bYhKN|6g2;l4;28?i4n`e_=R-{o zu&m94oJx=kTZLvAQN=XK1>j=3dtj0qC>FUMHOzr0xkn9i^^iOTav$mCwP%KO7Ob!W zj~($sR|dv|H{Br3e@5(QWMI(Mh2%fvfJJOfQ?P|Ji84X$Aq52m1<)pqoK(<$KIk%6 zE-qbNP+68*QBsteo0?Mz%2&Dhc?#ehiCFXnU0lYMl30?c0Lg9&whG|Qid-OrtHHSx z#8OaDu(DEcE~?DTO9xBoC=_Larn112R#pn&QXeXlmtPJRhG+`TFDj}8%hW>Ml@Hn; z2QEw!OTdk<{FIc;l1h-HK@*se(h9Tz1610Awz?!jy$DhP4U^Oqa1bdfB!Kp!C?u97 z=zwGsK-!?ofD;mPGSl-w{~fn5~>+WDtotB{hf05uov za+r4@G{_Dt!f@-L8DlgmQ-^+3LdwPr>8vA63=GA1b`11zR^;Ybfj6H{>EQq^I8QAq zOP$ignwAgRHQkA{KDUP*n(?Oe@MUDCXXJo#QhZ`jI%xMXXny$+sN{s~Ck#X_IpA~4 z5h08W44^hwY944#Ss^Vou}DWDC$*$lAu+k66g)Wun&{0|NCdaXKovW9t_xh3>nXTp z78RG|R6_Oxa;4=L+*GK`6q56EN^|qL@=9})Qj0)6&&-lyg)~q= zC?sbj79}Q^q#`!yj)pH}c9!bl3&~L$8PZudLCGAcBZ#+w03UTr$CV>)Fo8C{C+20R zm4c>5K^q!Mi**!0Lj$RKB}J7Akp1A9#n27z$vLTsMb^;N3)=UZQwiM%18aSA6{qHa z1|-r_%i&vlbQCnegBghmxtV$SMGC1E$*JJo=++95;fmCp#H9S9#FA7^g``x_&;oQ_ zeNJjg0+$A4Faokux45(*wJ141HwiR|mtRz@3E$0Ao{?IVnxH^HHEdO9NRK$iC zO~`l;)D8J*XetwPz*EVf%}d3aT+jg*&_+zi9B*-|0%(vCG@lNsaI;fWKpQuUixZ0~ z6+oeynOY1PjDct1+{C=ZbWq8k%9Wg0oSc}F3d(AbqC){xd#6^EK%)h`VjPmpKpXRm zQWO$Flk&;gpvD1cT}*NYWPm+22V8b>fks8ao9h*?$b*byaiNZ5>3}!(!%YT_=H#R*SoLW2+3L^oScuePCXxaow^3~oO~SB$wRgz#22!hJuIMd z5~+XLBMdEEkV{Tj^58}iL^9SEf1smI3ujq_R7)c=qC1t!Wh4ior=TnwW~5c5k}w}) zl;ALb3dW#IAsOxuazC-H5)9vFq577VwFHuz@dpSeG(hs;#TR29lIBE;Jj{uxqj1*( zh!JYos$tlYTF_84Y&~NxO3Nr?Q2zm-DtqmI^CF0M3%3I$tG_XtS^bepra0%(i`+$BKkKjfuWlt5-%k$U@; z3bqR63R()~NG2iKrK4bDXkZtMq@i5FR-r;cTcH9;3^c$4@kwf4O0fc{wFi~W%ma-* zAmrhWL^uXCDw3!GZo()+b%DkusS432E-6U)^#QZhFb7MGSaX@1xi*!oKyrJ zR&dJ%FD?bopn|)9peX}zdlo#JTmWv-DwSmxfyNn>ASn@&Pl`c{PeCUFBo>2bG!l!s z%2U;gKvTQm$p+BGMhRr}GB+PIG6x=*ORY#uF3G7>03Upm2Of$*GZfOvg3nHX4-$he z!bt*8yMP8b!FxaT6vAPflfYvzd7x8~GE-7P$1H#jqsdDFdn-4wk_)^b7PO8cGq0p5 zKcy6OCY3^QE~xiYoC@}1W*%f<1Ttf&06BUr3EXziNCgir6sd#GPRmQl0ga31r$IX# z#gJJh$j}0~69`!an;{kv!^pruRQNt>m;()A&}=I>x8n)pM-4NFb0~vG5K<)sSz3>D2uL0y1A}K8=wvuZVGb>{6WL!<(b8)Xhxv7WfH*aJ;CeWuo(oc zDWML?O8~hR(vL-3vKWdm! z{itCkH02^SKIfrjQq-nA8J(47Xa=GUAz<&UfLs9{H83DG6B6we3VS6xDDsvnQAGmL zej(7II7N|L*MN(Tj8x>M1fU@_P;me*B?eQ0geS;|>+|$xNN3GrCT{Wcba=Remb>`j z+jp9k0%{MYf`~NGm>OGFI*6SCTFscD4O>zOo05hu@##fgKhxvv3_bJ--139eXP{y^ zKdCsis0=)fRIHFzln*@;5VrgjvRS(ryrc%!>Yg0^gwa6u-W6bv!fg@@3>7I68TA=X11!x2%y%z}5k6SbIyN5Rw#>8$@mruIMZ zNQS0%qzKA%gtoL5l0ifLdC57T(@}F_Ymp!al<9!x{b0+EK&1zCBo{RPtecbxJ|h*p zgAd$Pf=Z_3C+H$ZFEJx6gI+d+BN9~6nv!KBQo$sR7F9@t+e8e>E2HT~%WFgoY=i6v zSFS>sp-!AL365l&QO}V)$kC6-dBhd(Gcu&J#94?d-ti@Pr(ndMQ)oG)1)7-y%^ap` zDS&2{iggr<5vo0~WqWh7?oe zL^eo7A(@BnDB{xG>Pk)fRdJC_1fqQjaI$jyg{wM+~Q z{-s3<$)!c0llT?V@{>!!n*=~5G4kdCPw)xpuz_-Dxvm3=F7WVBejXPrtifx(iXqi4 zc)1m9pCZUmSPMi?!BHVE@$mYxR0WW!;F)7^b48&XdY&&=3A|?t(g=4AWPk*KzAZy zTXtr#0^EI|!<4`yVTnbc4eX#D9T1O$Cc0s}NDnWqg4P`sgQoP0AbXaOTkc9Ig;FAD@eO#P zZ&_kaDR{UZ?EbXWBIu%D(7yNlv@}pCYJpBOhc122L~MBn`32-E*h1o>)Pnq?66C=- z$e=+nc#RNj2rs7+w59;G$O*KjAp>M9Xx<>PSOL99(L9V&oi#C$X( zh^qEL_JXUuJUZtgLafLt;44)?>jsNbLFEu=X_!JHbedBEx_S^g ze43j8E%G3XdAN`VQK8$mLHjmR6;i={6j1*eHma+utB|Ress}FKp{Bv7rMX~hjzEPy z(k5m|$p#w`hTb}omk&7{8fI{6MP@PRdH|5gT;QomP*141G&dEtwkcP^P9ZM=qe&QH zI~t3TqHwYQRF*D%?b_>kE%aIIAgYVfCmPJIDg5|ooz z2{IcxISsZNRDI=Cg6>fP9qj_@qJXyjah2qkCl;j?D}aX1K-Ch|XV#!v17u`DPHIW2 zLQ!gQ0caRFDHF6i092nAXMp$TftS&ODqhf5@zf$ct`Jb08r*eBN>zZbfd{| zNDFD9dz2t+nW3w5Axmj9#3G)8DmyAi_oIfHqY)0?<~f)m9MLG{XC-IUdM)vd(w?T! zJn%-A4A735T=2pd$hmRFpwVd1-WUZVJkwkt!dhc#Eh zMge)5qYj!OxN8+qg#m5OfNTagXFRDEKY08_TwS^~Lpn==mAElwS-7VusY|o?SQ!|+ znL*)#y&~O;QjvnxfU5&=a!&^B6EB9`egirL9aL2%=aho(D*%USNq&JYxT~ZCJ1tWO zR7rt)UPX|T&LFo#f=U$VBuyr0)k>a1BJ3U*@Qe=9tPSXHN6@w((EfMi0|dF!iV|~E z%kzt}A=lahTgSvkTpj{`RA_!yz#NO=G)PiD#lA^?9@I{=U&2ahU zpu0T5w;CyEz#6p9eam!3lhjFsuQCLlzMTTk$6a)Cp1Wc{!Wl zIzX)f?}I3{wmB0619;S`EHkwn)R~3Mfh8stgQ|!U9Z(MvbkYR4J_6S~ka`((baP&6 zVv#Q7LS#^V3%c96SfMht1YBj5l;?xz@xWJT=BI%UgGosR%`)YKjv37a9c!7AS)5!1 z>Tg1>kthb&C6Jq+Q(!kdfLDJbCi6gd-hvjI7DF#Q1>IB!y>%LNdAq&%U zVAqKjbAeo4Qds~x1_?AZ1Ur2PG-{k!q@w`7KuIAH>}T*n(V#lA2y`uKDfo_Z1yHLc zCBHlmbnakMW;$pN4m4v1+H?$_A%xCYX6EOCJIy7aQ~Dq~V?i^5phL}IZc#|g%q<3u z4}k6&1>HFcu6}jXic-NF*9-ECi!+mQQbBzN&}|%`+7(iNm!yLBj+EppB$XDWKu>(m zOHED%Z_Wh`{FbDqmFDE778mO&1eavyKpP!-i6y0=d;LJ`mLa!v>*j;50S7IVhZvlj zn4Maz0J_*56!V}Hh`2zpkeOVX13H`yc0qV%UTRKidSYG)q;Ag;ix^Ep#h?TALAhZx z36YqD5arrocqs*GzM(b2(8@K~=CQ*W(pj+b4W(S;U}RwMfZXb<1Gz`O5_;JrWJn3z zqE!Ij&<@RophiAuSsCckcF^U(px$_Leko`QIy0}N6nxbuXhaRN2mq7;LHEroKyw4) z3`B4j1hO-rpeR2nCp8zcK#(gpGcPkYvluOez@=3&xTMI;gWMC2$n2ml1&9ZBZIPY= z^5RUS1+n0RFre!d;Rn(e(VN!Pa9&aE*pZP62pY1sp1fw0DuLw08zI?J@N5 z6@WJsf$j?c-LHYP{}#5`l%aDWDM&hysM?zkuX$?tJZG z0o#Cb$s?%IQmrWJiRC}H#f0J7i_3*QBHv_IQS699m4jRB6i93aDo*> zu3uz@CmMrv1J($UXTv`}gouzVPBsPxy6kC@7fOASnwRtSAW(VLX-{(^>aHX%%un z)J4>?2Yx_Q&kaXt>lN$)P%9L4#!6W#XrT(YHYrL?1hx4Ri$RMUa`M4#d+_*`o`NIj zOqJ9k=!rS`X`r(*Q@JuBJpv~`H;`$d+6dGvgj|rSfMv=`0b|Ol7kFDZ#IEvC`LsRboB22E7NtCoq!bMMOqO$D0w*Ey-zR0VLcsNe)!Bo9fY3JIWrSFpMog#@s= zgz5x@s)X7Egc5LON3XRiuoR2nBVfP4Rdj#@NN9{~9c;%Trn!qygB)CZWX+;d+uCrV^Cn zpcQ2)0iS`CB2|<(QHn&wkq152;0cM;JkYx4V$kLZ(9zInYb}bwBUs=jPzwBLv7AcS z$OmO+AR?KIot*jUJ2-q6VafYmy3=Oz!U>8`HmzSelfS#WR zas*_-w?1?T*2uun0LD(vFf`E1D9O#SONfWs#RZawA8{Q7UMmhBN=wdA@Knf1O)LZ5 zj|jdz5p>Uc3ivD*NVI|~ujSyhG5CWIn(aWx9!Q|2p$xp@asf-*osoqN{ce5WErqCFo23H(4DE!i$vj0&JgRdr7STc$`?=|AWuLdN@py+ z40vPm9%}i5XGVi72(%O)l#z-d!6Md!EQD}~H_<5rG{nH4A)Vy`*8!fpcv_l-ZwGH= z0^~Sr(3$(G6`)am1=!t@h&WHlPcGJj+$+@?Q!_2hKJFa^C@#|0E#>V+pn?8Ap07 zVcC)7kb`H#1W-yx%Z4_TL?-OXe&FIXOc+ z3pH~>JVIOsdY&Pj6$3H_&-u}ybRLi)ofQd>Gf+B5y&)|=0k-L>xH7LKu>x|9C@8xj zLXeU=6B3q)Aq2YEhn&PGgFFvO;u5&Lij=;mf|Qe#zHysM-P&d%IJRkD+ekoLLAsCx zp$jj-kWxELjRHgsBGDiwuMsuT5|G0&5>e42D)@9f|DH%FFBJi8B^7G;git^Jz_exBuoubjhT9RLqm@~zjp@$2m zCN*V>H$y3?_+sqggYNc?hnnTr!vhlmwcMxp^>7rYg717Np3))|cQPmTvoXM<#mr}VIb4z8}8(j%0XpI-vHaRN!w zo3V!%v_?IzG&jBiG!Qw(o3V$lxTGkvAU-)i7c_ZaJjJg^8X^Kcm%2C}G*B6zoRe5w zoC=cWg-9a=cp#mYc<@5UDc(#yTp5WuB`_{)k6>y=W=T9~@~^ZQA5)N| zj0X<~$Ab@3OD&qx!v=C{a>6Ss2 zK-1hK0P;g|PGWIJQEEX>Vsh$~9$wIiW~GVgsqxAADXCL>m{Rkm^az7SuZvRRQ&K?_ zUa5J>nc$FSOU}gd|b^_>|0I z&>d6pa96U!vPOnZ4^MnbDrnCKc#k$HokEqxr)B1(7Eg(t(jx|9#Y0wtXXfX{r{;l7 zOPSKq!(EhE4(EC^_6UOVSA0%tUV2GJJa}u$6kh@L9=?Lqf_QkP0P+kENF*t-I2D{Z zdL&>?x`NaKl*aIs9#N1=umehqa^g!;a|?13OHx6XTcj4~sv4N2OzGh(N=rsF9wdS= zUJYhE=!zLolFd#n(#uRONdq^yQ}UDbLEUxzDLtGeiAnM0nJFb1Q@lBPWJ`)NbK~LJ z6Yha{$o(3fJpz!rEItEvea4g?7SIaUDLp*Jxrs$3@r9-NC8@(d3-`#O(Og+{DbB z_{5YHP(cfJwjju4P?Upi{(=;1ojuH{d1X`lN|SmxAjL^4s2mgk4bp?|O^k=k*MSp` zU~y?uaY<%LDQF5hJ|#5`bhSv25Q-?M#|;+dC`wI(aWr~ZKqcao*eMxX5_`DQGm;^# zswfL~H;Z6tNaW>;)0KKtvzt_^ECXv7VKI zA!`kYxCl~w4n$ai2y+l|5=0yW5w#$q3Ph{}5vxH>iXKjoji8BSko^!lJF`Icb!36; z>c|4w)0qXbqcaO+erFcQ?2asuxt&=cGdr?C=5>^2DArEV06RE?CkyP_fue!ECH7Ypo|3(0hMJib&%*q7J;aXodU`fxk>ps@O%SS zDpFjDA_!N_iDDur%vP`_Ar$kW8|fH(MA6NH$}seBWv0YKm&i=%;ZDxa0o|Jc8YG<3 z!|n`OIx}VRl-en+Q-Y@S@PS%5sqwj>m1^nWf=(lYvxg5d90(JJHvuwOAv0D;Beqtq z@SE2aKqHT!oi9Zt3Xn4;K&yB1i&8*m*yU7{pLU9tUY-w$fSI90VrkS)t7Y#vT?>TA$Lx;_2t+52~y4OF@?jW$5&P%9PY8 zkj;&mAQvDm7=t!0mzO4GWpN-@F;EtY#z>)POl~L|qlBWdCQ?_f3*-l)x^keFrf!CG zRy(PonAHMmrywno}$?}rFM!&4`)$g zd2xPeQF7{(9)>AB9LX7(IVnY{c~fGi^zea{mt^J?>p}Ii7pEqdWaj6=wP&zquw}5v zPSMEV>|rg*EXhellIl?m$w*bu3NFaZOU+3wE>;LhOb65My1t3Y8JT&hT2o+}Swd1P zK(6Xx0qL32ItAi7wt~bWkaIHxdpP4kt^qqfgSm$d>Sn(lmYmGI)G2u^wqW&V)H9Lpnn-LnebcL)I@t&aX5nv4<DhrJ{*9V9g+Lq0<~L$EX{ zHAAy@ibjTZ?34`M*eMzMu~RY(W2a;o$4)8DFwNl4kj~(NIHku~KeRZts8~O_s5Cbz zCsp4C8pp-@#mO1@`8oQ|!H)VxIR*MD`N_rl#YM^b$@#gUa7-+!)Gsbc*DES6nUW#r z%>)iY&Vt0E#Pp)Xf(+y^3=8)R&{GJ>$ShVU&&ZxRYFFUl`X&rm2&%*igvfUxt^6iPBu6^cs|OH#RVA9$Fa> zO-32g8TOFCg2o%(u(i#Q&9KRk^JamCacNS99VEA8u=d2dmL=wtCW3N-LT0f-a(-?> zPHIW2LU~4NoNi-QEF~tW?r#EejY3clCu>O^HM-O zu9VW;0+2zexdkPakO0xh5bIGT${M7E>5J^a49*_*oXnEcqQo5JSmZ%=7A)*pK#oK* zC>+_KM3j)~VF7t-N+NPpmK0@H)N(0+09XUac0SV*`>5SsyB-FS?iBtBJ{A6%x)We5bR!r$(%PY-IN-dh= z*Tb5Vn3S3`#jl4gFTcDfv0zGP4`)Sgj#Y6%BB(OqC@4xTPAw`+1s7O_&`iaJ6j6vw zW$%(&l$w@Wl$w{Es*sqckeQc~Sp=zS6be8EX^KK(F-Rh@C>>mXDS!)_w9-6qbp**a z8Dc#Yn*#|SjST6G4&2!QIjBG>9+n8jk^EK!FEAb=r8-bDQm6(cq+$g%g%kxfg$zjA zQczI9n&!Y76d-98nxgz13&1HaG2RfA02AYl6k=lFrhqhngsk8x(9bh31**Xqt_&s7 zDyS)>L(@2_+oC}(g{5Q+dyQiu8sSNM1o#w^J~E^;rV*EaGMeyan2ffJc2Ej}I8gli{gX~yX zb;|;BI+7`ukWIl|1A;Q;g$(J86X1pnKbqH(%tLim7`)VnHMPLO19uFFhot!l9>*jR zZe>9n$BPp9NT%a*8Yeu0VD4h{N7DA48jg}D6!(yX4k~I;oJm}3PX{R(!;6}Ta7G3O zjM7FSO~DFWeHKGX3pIrl7z0}M;;eT;I^l&5DCWSmC``n^7Ny$7R#T>d>gNg+Wfh=C zCn({fwjn{aHfkXTb7VS%0jr+L^a_gW{7Q4dKG6VW4NZvoCQu4Wjgqf%Y_0LETYAVV$3br8>Y}18^bL0I;gTKLJt3 zTas-HqG-xeVq{=IE}b$+D{r&3(Db8~|AdQNunWLd0xyb(iE|_Vf;Y>Sdah&C!{Z|2 z%2*eq#DXYex$u^;@a{CY+@OC^3n{qpmt|n5RV#oCVp#7VET*QQ0V?sq`4}ppsbGas zU0^E~M?(cARNy697_CY&ccjFLD9Ox&Qj1ISiy#GAaYW zB1Y~~Aca(hSP$9yAs*Jqkj~1$pNG*#abW`o5lG&F=e3?nq{a-!a8)rlX@bTNu(n^o zsTi}Jftocykp>#8D&_)ZRghT_5qO7w09^nH(hTXWGFqjfD5O9~q@jSI)Ra=tAe2IJ zX+dgHa(-@7W?o`Rei3-UwzME6u>_L7it_VIAl(Acur{>o5tEc!l9-@d1U4fD+|2>E zu|d5YGxAJED#$y~5?97Wcz1&r#Q|VDGsJpW!R|paVFH>7XcZt@^1P5CodvQJQsJTc z3KBn{Bo9)7TqzS*y<{PUJ|fBgMNRVY2B5}!ydkL3oRgAY0!s9W@p+&D1bC9gp8UZ& zVNG?vU|3Xw+r7~h@rF7vVDoe;;`3rbt@KnJ!?umMf+twW6fDJR`LzRiRcPLtViZJ_MJUS6q^qSCW}nk{SwjLMq5kkl8WT3K<|a zXwVp*?M8SgK$2F5bk+)5W&Iqa#D~cG6A;4?pgfO#9Hc_0QZqpzvA8%t85Er%=C|LZW&Fy9VqMq}_aV1(v_65}p=)p)_%}|e&IpH-!ggt7< zqZ%@<1Fjk%(;bLL4AvR})U=1!2lxhaK+`HnlPA#07VuDx2HXJH5K4t6d~^rm3b+cW zK9FfK)(V(9D>ZS}I7YCiAIAp zO-R`QQAZVff)*Jh=jWwlf>t0T<|q^tW#(ph7^^iDri8fDLO-T0$)PjwtvE@hwohlQ~ zkscvTH^PcLE`+<0%+f_O3$02cqQ(HZ23%t>X(A7-fP|5&3F6AP=|~ZaDBqk3m2Zjh z#)QiS{H2^{S^#3uIvLcchV>BP1tOxL0;K?OTNOOZ3>(=&F7Lq2a+nFw@(x^1CKFdE zRv;+@`3+v2LCpe{s4>mQkjzRzGmG?+ z4&)jvB^^kZ^pb8JQq&HGlFk5>KL%k*SBX;a51Eo~Xay&{q^qP=Nw*OxJ0MCrV|--| ztc3=inuE9CAT6>Cu^zJYLOcrUpLOFeF3?5;VT0Ajkh}rU)jj7>M(#lE5Kz|#Wrbx5 z7ifr?jNTbay9H`2wsuDao|XbETXVstdB9yqm?&hT2jo1|+%@dH1&RC&>8zQwO64bz zk_RG{+d0D)2*C%wKn=_Uh5XVI(Bid3ZOxTQO0_im;$PM6{Q=M2pLE-|G5kY!MuU>B=g)}@PMx>#4 zBtQ*)Xr=*=d4q@4L1XB!#E*X{9i$!JGRN#EIOpeqIu+ImC7{YPk5K<08KkNLv~m@? zWHqJ?JgyI0!3r7^#~gi0jIYkqH3auYD&ldixQ1$lPTk`76jUv&5CJ7cu<2k=faeDk zpc4cNpcw+J3BUw;SOXF> ziy*}ks5pV}Ag%*t=!f`=6SSI@KSMg}9$W`_@5v{WJtrC{i)Yd@i;7F&Wg}>OCoeTQ zwYWI3s1jDb5w8K^=J#+Hkg`eU3zFMQlQIzHkOuB@2-LABwq=05_<ie$5<<*VJ#D?AuE*; zWsnBMCXgnCk8!m&B1Xduv=fKOFoUGr4C$=Dv?>d}p{8v_YsMBfABT0M6+M3zE1)iX zhGkL;O@a6yRNC+}qYjp$HD1t48)!S;my;3Idx)%CLMZDZhTX8X<|)gw@X8q6e~hls zsf}2nHz-EKAGRI| zYx1I9_(QT(hIE!JGi_#de7R9G9b(3yhqVCQqDX}8_C*LFZTp4qo`deD12q%ywNiXC zi%Sr#6bKLENl>|AMN+u|YNeRNb%0tazRHX!%@i?|W=e5#QE5qLUTP|=yu&4paF7Sw zcoLc*zN(-wg}Ds54bt-jWl#cCEJ4x^q&kMos8G@if|UWFW(X*7k(wb8i(m?1g#@^y zB6gSpVg%f+pjHEtV>7@@kq}cJBgC_i#F8PM6-KKps*aYN5Y@i3CuAxWp0YvvwqfH7 znK=olGq8yT1x5J!j$j}{VBtrz7VMrqq8EAO{X-tC~$xc}2V)o0-LDF4- zrW>tEK*XFU$bRs6h6+*Mg2W4`Q~_xuc`(D*0xi@Lt&vHDS|gBrOrX*RWqx>Wgb!oD zM6hIFlzs%fO#-gIVY!eR&5{DpfJj|#GiMa(+ z{Cc<{7RKjf=4DUu>*0cOON&5fHt?3@C&zy=W=TBgz?jlvm?G95)|Aww z()1~QJ$&VfMR}Qd>G8!SMX8CoQ~Y{3ONtVcQ$e1Z($T}0nO9I+5}%rvoS%}Jmp-M3 zv$P~l*Fv{AGkr>r460;&YEe;sQG7;XUP?}C(UcxGkW-UOru6VbLK?{wRh!v`@J;Rcv)8B_^0%{>AjKNROA7H1Tt7UY0W)8K`jvJwwIf~AKkHE&9f za8YVFKOP~} z!<3marH2=E0!=(T3HtT$fdybonn4EggGIoJ8x;Krp@QPn(v$sksF?i6yC1dN>MF3v^WtOj4%w@D-&cqZtnpK^U(FGd?A;BoUNk zvr~)oGE+;^z;>kMC+laFESF%Oo}hhOex8j;?2<`TT+yn8xPN(a1X>o&Rgm1 z5h$+AD@m+~&&W*A$jMC4D4Ej3l9LZg`aH$CiA5#xg{AqRbE-Oegu#3WH$EpnIT0GP zvdI~VMTyBJsYQ_d7N4014#M2TqU=)8`7WRX!N8|{LCb;89^RDvm$&H{>yRxVB2&CpFrKZFemsIAY7H6cUmQ3mF5lzm?Pt1-7 z9h#IApO}&YDri%Sr*!lPf=tfL&xjKxde+#lZs0+OG?4XCIxizR_&A?Arw*2p*NsX9b{S>oWlmnLMdQzc905(22BHGfplkqI<%!dyvXqlb^vd3CS(&ED2+ixK-n6m4&qZ}5s13jDWLR` zo0OjePeNd&BE^*`f^gNGC?;~kYz1o)LNUL%B(bOjR3(U_n+26&=;6vtiBHZi1?`fU z(!-scpOcdcKDeiNN)Nj;RDAN3+9|D5f~NHF6(klFr^e@krZmzad0q%!_MixJ!-c`I h&YhW;oKuno}$?}rFM!&4`)$g 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 literal 0 HcmV?d00001 diff --git a/doc/build/doctrees/glossary.doctree b/doc/build/doctrees/glossary.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3940bcaf27db8cb1a56444223fceb410af06466c GIT binary patch literal 4860 zcmZo*o%&IT0StQhiwiO`^D6WbQ&RHsQ&Nkk^l+r)Czs}?=9NsDJVmo{O6?Sl9?qh~ z^5Xo`qU6*mJq%NNIFd6mb5e>@^QOd3>EQz@FUia))`RM2FHTJ^$;{7#YtLZKV9Q{S zouZM!*~40rS(1~AB-O*=o|9i(oLE#j1*9f}vxg-lwE|=}l1%Fqh&$K{5{p0%%Mk40 zj0f2Zc4h{14;$2VemyKXnR%&G{7RD&d$lY_ylYU#>!(9~s#jE8G9^RKo2fJ@ zgR_UTAh9Shy(qCD136flJQ9nuQ*&|@67y0NVC>}5oRZR_RE5l9h0MIP#N7PSVuiH) zB8Af8%)E4k;^f4lN`>6Sl8n^c#FEV9#2kf^)S_Il60YLR+=84`h0K)H#9}>#fSlCC z;#7syisaJbRE5%F9fiyi^eN`yu_0HB5){cWQbu(AbjkH?BfiE9@fmfl++3&Q=zWM6%;+} zsd*(unc#%3(ZdExEjg)EFm3D+0l8Ke-Gx0Yxrv#1Q~XM%B!U7p3>v5$8PXYkrAeuX z7)VXT770E`>OH|po(mCtn4Zvs1$R%JW1d24ML|(&adBpToZcb`h zYK{WJW_bFhwKa%%EJlvUL`1mZNx57Z(isJ%N%$4#Wk_duqQnFi6WueUGh9lOGCW}6 z3rRE@8NM)q9)V;~sgRgcl3J9PSdv+m3QwGvG6-KyK=xHeILtJN@i;x1kqD|0lCjv? zBMMH1Ah+nExFroe1@dG_XG}ox_hP&$5Tw4hG$|t=&5ej8XXcovP>^3-oSBr93MxvI zGZZrO6cQCcjzLa~8X^8J{#FX96^Wo?RTCUe8Dc%;YDWa-I^@8_AM3EfjW0twV>K~J zq!%Tq$V(z@If<3|r6phwgGwzJAK`=3$UY!BIl#>8;RYuHm~9wQ52}ezqxk0@-lzwu zKY=&uvqCab6^bkKN)js+N{drdKoMV*Q-D$dmt-WCC?w|OHF zoj{2a+(`_n(f}#4O+>G`oid~|>>&;X)!=w*dQkJPs3bLIN++m#vIXk`wbQ_LKS~XS zRQ1DC3yK(0+W}PaGK0+mn*(aC;SMa26Tt1`44od4lA^@C;+#Zq6QZCfKOIzofm@)g zCHW+oZow449&U(*@j01!*;D*_xS-t9qMRvyJ-j9P$?>4}Fi5s|N)IcjEm1k8 zM<^{nza%feBo#^0o3V!%lo9eubK@)0@{4k(cr*6!6_*rc7Q`p#=Yn!V@f5!vX^2Q_ zPAXU=9#pf(!&>EjJ-iTUgaA)bYC(QcNj$g;pW@Bb!)|U;EXvEwOOG!uDN0Suo#NNSSyGgkoC@;Pl#U+0%)ElqlK9lT z{ndwt{WKbpJQ;Ul7i{dj9^HOqBi>CCjft;FLGNp$f64FSf zu!2pQ(j$u|gJwjQ10w@N4Y(xFB<7`; zCZ?yxg9@T4Jxr;2Q+kApQj_zGQsPrm3sUn^QuC5QjX}R2w&eW0v`kPKab~8(7ZjzY zWmZhdVC&&aEG@~8M+o&WWu{E&;Y}&cEr^FFLBAe8us~)WxV?}AidlZJ2sm+rq8}kt zP@Gztk{@4@3rbP~sTH7xT0F8&a4JbIi7(46&IC1!{d)N0Q!SOE1ZY&&kZqEScgfpx(n*kXjI5l$w@Wl$w{E3i1pONF*t-I5i%WIeH{A zN=gcft@QN^QVWXp3Mxx7^7Hiai_-O{^oW8~f*nv=loMZ)np=>QSdu!Whod01Kv&hk zBxOnuUr|~zn(-hJgz;)H<5Ln#5k_dtAc0VsuZ_6R_#x%iCC^o*R$^o)`zJuEr-prp@JoSRrw z5?@%F59&2{^az9b5N>=j zECNblU{QhM%G{*<9C*S23yPo#!c}vkn8*pU6|6}J#r)!u#G(>VK`)AK7F33zhbuEB zJ~_V>R8UOm;ZDxa$$^X!6;J75cZP~jo>DudbxP2b9=?LaqT3 oD8k%uVQ^e>XXYj6l%}M{=j5k@qLC{FROo>NYYMmvU7Dl^05=Oj+yDRo literal 0 HcmV?d00001 diff --git a/doc/build/doctrees/index.doctree b/doc/build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4d621f1c31c3c1d8ae2a558c3f734147b1d389e3 GIT binary patch literal 3603 zcmZo*oyx(-00uq$#RVCec@=tzDJgmRDXGO%dN@+@lS^|`^Gc>no}$?}rFM!&4`)$g zd2xPeQF7{(9)>AB9LX7(IVnY{c~fGi^zea{mt^J?>p}Ii7pEqdWaj6=wP&zquw}5v zPSMEV>|rg*EXhellIoEUPt8fr&rMY*$yX@KDNrv~02v6fKM`b#;uMh949*^wkkks0 zlX?_UH9TsViJ_%+3dG%P1&KuJb0I8_l+pqOCn+&GyC^jcq^7ioy(BRm zBsC?2KSMf$CqpKKIYYL`Nxu`TZDJNCm1scr7`o+l^`T05e&cTlQML7lf zDf!98`o%@b`k8qtsTF!f#U)cRosyv*J0(Lic1mf6HrVC55ak&<8FJpN zrAZl_JsipTxdr*9c_~OS2#MSbh935k{N$3NROHx&%HgsoL%N3*?8zxT?5TMrMVa8B z_3PnC&&e+?PAsaN(l#ZrhbJ>HIj1xwH7zp-ET0jW*u#;VSdo%iP?9mlo2iFAIk5ng zR;Ki@dV+#%N)JnVPJYsq&K|am%#@VWyeXYMyih~n0vvgzxk;%-sVP&u8G5+D$+9>< zFQ;-!XAf6VVmZP&U@pvtjBrrkIA_R$1BE?9I>VtfDG?i0H_O z?97Pj%!u}8$cX98h>e|+5uZ_w945RO(i!RKVUm$dr!bH&N=-{GO3h17E!I!Z)h#Yb zEJ@WZDN4*M&IF~9Vz9rF6_sRSRRj%*2^o{%;SdBj8CN(=MGgm%4C#z!vce%1o}57W z4VtSHVVM*~3@O8MA&MGs+GH(FLNZ9M98${amgMUe%xjda496V z5xJNE*~*MmOfX^i7^z%=7rPlcJtE*p$pPCQUr>~vUX)r4DRx;)@=FqPAh{A0aXE=4 z;7nQy3SGt?zU0y(P@x_VFT#0XB9NlIhod;Pq$D#hy?9EGAjp^C$|0t{? z%qdMRhL>PHZ26@n1*IiZ{4)6cdN|Wl^HPfvOY)1R`1Nq6B$lKWmn7yEO!4dChFBP% zlbM%2#jl48$}KI*nc~;OTaup~52^$}vc*$+SV84S<&++wwEX;%y!?_>BuQ_^9$ru# znOB+{Uy+tylsm9-3c^r}*_qLqt+@QbC!zIKDiyBqJVH75Vk>LZlG_ zJVmJm`9&r1IjLo-IiO;ZDH1T8L_sRS z4k#_ki7!dbEdXWpDLotosRg>K1|}&}diaXclF^I@i6D$ugBhQaSds`zui2?ZdYP#u zX<$22@{{#5N^*1br}S`^Bqqg|XQqH!3>-bOB}JLJ@$kF}_dtAc0VsuZ_6QVL=9MH? z#AjrtXXIq2XOv9oVadtQOP|uiQ=FSvR1#lUnh$CxcJv5?`4Db=PJVJCq><7io1BqY zl$czSS_H{#@tJwxAk0lH$}TOK(g|)jgPR@DLZGvUHzhwgGcPS4D&Wo7BLpfZic6Ew z)Me&^5^qj^A|xw<+OXMEdIVB)lTuUSi%TkVQj0TEQ%k0F_J}6u8K^DX!vQHvQbC2FKxSS_W>IQ#Nqk9S zQF>}gF{n)}SX`P^T#{K*3QjgDpq6j#lpY}zQBV^YRHTDUOM`RRKv^gSEY1!R1U0fj z?a);j%QF^b%rEWX1c{bZ7C>6z8LK)o7Il_pD1y{1&)~_JpP^gY!;2hsV6%9WGfTkf z9F$xjBA^@!QwMQ0vIs<7>=aN`=O*Rnz*7TQsYr1piXdDyCyI%jFk8Wzgiy>cE=epZ z0Tu0{=w?A>7<#xeQ{t2JOF^Z>lpgNn{G1#}*Qt0)54$r|eDajqDXmk2ru6U?Bo-B? z#^Vt(jzDf`(>FdRKOGczTq&TE4jfoh{6KYgX_6iQzd(Y3 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..59662fa62d2b79cd73998ad0b5a15d34b2444d1d GIT binary patch literal 25195 zcmZo*otluu00uq$#RVCec@=tzDJgmRDXGO%dN@+@lS^|`^Gc>no}$?}rFM!&4`)$g zd2xPeQF7{(9)>AB9LX7(IVnY{c~fGi^zea{mt^J?>p}Ii7pEqdWaj6=wP&zquw}5v zPSMEV>|rg*EXhellIl@#*Y! zB_y>1Rta*vK5Ee&DX#s+hl$e}dl$r)oQ`*B`l9&#X znv%hvA)UdKA(O$JA=?wFA6lGRRIHy|RGOQVldA6m4d!C~;^d6{{2YDfU`PF;oC5un z{N!T&;-X~zqSUn1qSUnAzwR1BSSHEN``Xmlnm9_DH-aqQ!+GT zr<7)BgT1T^QJ$fbA?M9rnv}uW!=IX0nwwgbSdy9&pOaY(ibt5+Ac-S`vxgHT5uaI- znv0x1tbFqGvr7vU5*5;O@{_$2oCS$RiRnd&1sTW&Tas-s#9Xl+3QRx*tv4jBhzVNH3|VlHa%M

tQP{ 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..57379289f3b6bcbdcdeceb318e9c19b423ecaf31 GIT binary patch literal 27884 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f5f279b1a49a75af46bd1e197c776afef8d3101d GIT binary patch literal 19924 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 Y%F;m*&Xocx9>F#C6hBa%Uz(%`0IM18e*gdg literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2548abe9f4cb7a2950ece39ff7ca519b43a0a6d2 GIT binary patch literal 1478 zcmeAS@N?(olHy`uVBq!ia0y~yV6c{hwcdT;bWu#=yY9S>O>_%)r2R1cVu|I^tE8AYe6O$wBjD-ycY`jIVb;i`s}%Eb)K zuTDsb#=3@IJj(tilw0es$Rm*(w=aCWf7?qm)^&OlpQLi5N!wTZ6YCcJPPiWEsN?YH z1TTa3E|-!HPVTb{A4i3h$S(}eaB*LdskMv4ibHVT$%Kn%UZ_Z4lw7k`cyZ6OLt7Y+ zv_3ibCixJ`rzB-7s;BIwLZPoniFztc2$aPf6P~-YxVuz1O`dh<03CJZ^*h={ExgN zf5Y$%uL^TX_tzhf%VgC8;}7|jPh`$64L!}+JCn1aYWt0smaE_EOcOItIrc<#_J;$% zzFOT~x}aI)Zu)i4iAJ^yCUYsS$=F`zH=+CBmRI{4+G&9y3Kk$nKd0LUz=smuH(2BTq+Sbt>2GV@6=Mmoa3dZ zQyELTXB@k2_j*P2QP=OTWg&A9bZ@TdUwv+B(N2!Lc|Av>d3G@iN`#jhd^nZY?Ds(E zMOpF^H|a(`mk;|^amVbAUhvw7b9#ln+ot`Gp9Kp(zj{&Z4)@$Esu$iK^U#&r^Nrs{ zZT-0{u@dc)Z1FFvn0I$f+%xmVe6_@;6W3N7&;4$n-{y1vu)o{4*kl~kQfTvJ|d z{XSWyHczc4k7s9-)TV#slJolW)=rO~*3Mg$tdKTu%BkE~3y9}yk z8yjYq=$UVGyv}QBw6&Mn`lskFy^ebleX~0i&CPZndABcOb>6QH|4D6zx;xYJ3cOfi8xOW|Kr~^bLHem z|AkA$OXHU>Jgxoj_^U5ZrfU96pMBK3B!2k?Ao?_g1@?ve|#z*yRdN23IZ4t;n?R)7$s`&r%U3a(tKic(Qa>tV2RX5M< z)HL^WnjZV7Ke{BP+Dr8R=BB&X_uWz9yj%IPe!=U1ZM)u`c&Zcr=X_ULy#G@*&lg7B z|39951k$f@tJZefY?Xzlb^h6Ze%&Sd-#B31?_1MnZ{X4XczT^zAnT5n9BJ;(lO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7o_e}ChEy=Fo!lJ6#wgPI zU9-A1=eok}ZEQDX(r(*2tb58m$7=u1ea82H)jeO=^6%fjou57xMW{G_5a*B3{pP}1 zS6~0}?_b_epFayX9PiZV3J_7<*U-z(&Te62!(wS=#r62dj~f93Q(yV3O;UNueM4ey zPF+*P_cxDwe?L<@A-VUOYxn_?IFqgAjDfX>&K+iC+ZOj{hWM55XBY3QXXIt>UXl5V zY32J_2KpZQFCE-8U%FHkYESx{HDO9L>%8Dl(|ry6XI@BV%vz@ZVSj$)G){LlpS0qd r#>Mpuckiw~`|AFW`^Ks}LhH4IH@r-6bi2gBz`)??>gTe~DWM4fp;vuF literal 0 HcmV?d00001 diff --git a/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 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4h9AWhMwaZzZe)86g^!WLn;`PEt(m4((N1$ qT5J54Rote=BCz_OtVqKR4hDwUH)%$B(trFwnmk?oT-G@yGywom%@%0@ literal 0 HcmV?d00001 diff --git a/doc/build/html/_static/plus.png b/doc/build/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4h9AWhMwaZzZe)86g^!WLn;`PEt(m4((N1$ pT5Cj47Kj#R>InVM$K{a2!oZ-bm^kJ02L~3ACQnyCmvv4FO#meY6wUwu literal 0 HcmV?d00001 diff --git a/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 0000000000000000000000000000000000000000..3f7a6b855e6d00cfa5892e7d81bc176fa66b13df GIT binary patch literal 499 zcmY#Z2rkIT%&Sny%qvUHE6FdaR47X=D$dN$Q!wIERtPA{&q_@$u~I0?QRh-t2!lvj zDR3z(gk+>D6s6`SX6B`&7AfSXDU@Vn7AvG>=A``R=RD)z3QS zUJKRMS8Ifx(D%8ww4bT*V43J9)_CVQ&fd&rE!RwrsLHkIop*4XHE%oDbL(x4uMaVn z91L@O9%R#L>?3siSlNm!&X$~&vW;qtDLG+_#C9EUX7ISNnCIG&>vq*QWj7yOx8=$S zr)?eE-+1)wV)@p0$-JY7XY;0ifBzMp>7I4LkaKbVrh6SL1MmL2sS!LUV_)7+ffwHE zd@p+R-1k@{oH=`%*5czg#q2LEI(PBs!s7SJit60AI@gs?|5xcGr7OLyHP@Q)_FwKB ztJlA})TE-PSK%dP{_u*}99_NFKe=B147gn<^Gx{blUwJ!xV;*mI-av_;TMpbkndkN zr$W}yNa@4UZ&O}ZFdj5+Pxzd*NAhp<`}^Da^A{XBV`>@|pP^q;@Uf})FLU>-RptO} C59P@K literal 0 HcmV?d00001 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 + } +