diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..94eae645 --- /dev/null +++ b/.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: 105bb500e7279fa02026b9e76aa1f655 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/algorithms.doctree b/.doctrees/algorithms.doctree new file mode 100644 index 00000000..c2ffe245 Binary files /dev/null and b/.doctrees/algorithms.doctree differ diff --git a/.doctrees/api.doctree b/.doctrees/api.doctree new file mode 100644 index 00000000..97b6c3a2 Binary files /dev/null and b/.doctrees/api.doctree differ diff --git a/.doctrees/bqm.doctree b/.doctrees/bqm.doctree new file mode 100644 index 00000000..4972e5e6 Binary files /dev/null and b/.doctrees/bqm.doctree differ diff --git a/.doctrees/cli_tools.doctree b/.doctrees/cli_tools.doctree new file mode 100644 index 00000000..5a864793 Binary files /dev/null and b/.doctrees/cli_tools.doctree differ diff --git a/.doctrees/decompiler_and_optimizer.doctree b/.doctrees/decompiler_and_optimizer.doctree new file mode 100644 index 00000000..8b50b0ff Binary files /dev/null and b/.doctrees/decompiler_and_optimizer.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 00000000..75a598a1 Binary files /dev/null and b/.doctrees/environment.pickle differ diff --git a/.doctrees/example_bernstein_vazirani.doctree b/.doctrees/example_bernstein_vazirani.doctree new file mode 100644 index 00000000..fd4ff406 Binary files /dev/null and b/.doctrees/example_bernstein_vazirani.doctree differ diff --git a/.doctrees/example_big_circuit.doctree b/.doctrees/example_big_circuit.doctree new file mode 100644 index 00000000..45d2f208 Binary files /dev/null and b/.doctrees/example_big_circuit.doctree differ diff --git a/.doctrees/example_bqm_polynomial.doctree b/.doctrees/example_bqm_polynomial.doctree new file mode 100644 index 00000000..1251f04c Binary files /dev/null and b/.doctrees/example_bqm_polynomial.doctree differ diff --git a/.doctrees/example_bqm_tsp.doctree b/.doctrees/example_bqm_tsp.doctree new file mode 100644 index 00000000..d3a323c3 Binary files /dev/null and b/.doctrees/example_bqm_tsp.doctree differ diff --git a/.doctrees/example_deutsch_jozsa.doctree b/.doctrees/example_deutsch_jozsa.doctree new file mode 100644 index 00000000..7ac5a790 Binary files /dev/null and b/.doctrees/example_deutsch_jozsa.doctree differ diff --git a/.doctrees/example_grover.doctree b/.doctrees/example_grover.doctree new file mode 100644 index 00000000..8bdab462 Binary files /dev/null and b/.doctrees/example_grover.doctree differ diff --git a/.doctrees/example_grover_factors.doctree b/.doctrees/example_grover_factors.doctree new file mode 100644 index 00000000..7ea08912 Binary files /dev/null and b/.doctrees/example_grover_factors.doctree differ diff --git a/.doctrees/example_grover_hash.doctree b/.doctrees/example_grover_hash.doctree new file mode 100644 index 00000000..e0449f55 Binary files /dev/null and b/.doctrees/example_grover_hash.doctree differ diff --git a/.doctrees/example_grover_subset.doctree b/.doctrees/example_grover_subset.doctree new file mode 100644 index 00000000..b61ec106 Binary files /dev/null and b/.doctrees/example_grover_subset.doctree differ diff --git a/.doctrees/example_grover_sudoku.doctree b/.doctrees/example_grover_sudoku.doctree new file mode 100644 index 00000000..ce1b914a Binary files /dev/null and b/.doctrees/example_grover_sudoku.doctree differ diff --git a/.doctrees/example_simon.doctree b/.doctrees/example_simon.doctree new file mode 100644 index 00000000..73d1d7ad Binary files /dev/null and b/.doctrees/example_simon.doctree differ diff --git a/.doctrees/example_unitary_of_f.doctree b/.doctrees/example_unitary_of_f.doctree new file mode 100644 index 00000000..663f8f5a Binary files /dev/null and b/.doctrees/example_unitary_of_f.doctree differ diff --git a/.doctrees/exporter.doctree b/.doctrees/exporter.doctree new file mode 100644 index 00000000..aee2793b Binary files /dev/null and b/.doctrees/exporter.doctree differ diff --git a/.doctrees/generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa.doctree b/.doctrees/generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa.doctree new file mode 100644 index 00000000..cfdb7949 Binary files /dev/null and b/.doctrees/generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa.doctree differ diff --git a/.doctrees/generated/qlasskit.algorithms.grover.Grover.doctree b/.doctrees/generated/qlasskit.algorithms.grover.Grover.doctree new file mode 100644 index 00000000..5d5b2b53 Binary files /dev/null and b/.doctrees/generated/qlasskit.algorithms.grover.Grover.doctree differ diff --git a/.doctrees/generated/qlasskit.algorithms.qalgorithm.doctree b/.doctrees/generated/qlasskit.algorithms.qalgorithm.doctree new file mode 100644 index 00000000..3750443b Binary files /dev/null and b/.doctrees/generated/qlasskit.algorithms.qalgorithm.doctree differ diff --git a/.doctrees/generated/qlasskit.algorithms.simon.Simon.doctree b/.doctrees/generated/qlasskit.algorithms.simon.Simon.doctree new file mode 100644 index 00000000..c33fca45 Binary files /dev/null and b/.doctrees/generated/qlasskit.algorithms.simon.Simon.doctree differ diff --git a/.doctrees/generated/qlasskit.bqm.decode_samples.doctree b/.doctrees/generated/qlasskit.bqm.decode_samples.doctree new file mode 100644 index 00000000..efde19aa Binary files /dev/null and b/.doctrees/generated/qlasskit.bqm.decode_samples.doctree differ diff --git a/.doctrees/generated/qlasskit.decompiler.Decompiler.doctree b/.doctrees/generated/qlasskit.decompiler.Decompiler.doctree new file mode 100644 index 00000000..0373009e Binary files /dev/null and b/.doctrees/generated/qlasskit.decompiler.Decompiler.doctree differ diff --git a/.doctrees/generated/qlasskit.qcircuit.gates.doctree b/.doctrees/generated/qlasskit.qcircuit.gates.doctree new file mode 100644 index 00000000..7b06cb19 Binary files /dev/null and b/.doctrees/generated/qlasskit.qcircuit.gates.doctree differ diff --git a/.doctrees/generated/qlasskit.qcircuit.qcircuit.QCircuit.doctree b/.doctrees/generated/qlasskit.qcircuit.qcircuit.QCircuit.doctree new file mode 100644 index 00000000..145c06c1 Binary files /dev/null and b/.doctrees/generated/qlasskit.qcircuit.qcircuit.QCircuit.doctree differ diff --git a/.doctrees/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.doctree b/.doctrees/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.doctree new file mode 100644 index 00000000..e6666413 Binary files /dev/null and b/.doctrees/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.doctree differ diff --git a/.doctrees/generated/qlasskit.qlassfun.QlassF.doctree b/.doctrees/generated/qlasskit.qlassfun.QlassF.doctree new file mode 100644 index 00000000..41385190 Binary files /dev/null and b/.doctrees/generated/qlasskit.qlassfun.QlassF.doctree differ diff --git a/.doctrees/generated/qlasskit.qlassfun.qlassf.doctree b/.doctrees/generated/qlasskit.qlassfun.qlassf.doctree new file mode 100644 index 00000000..634dc067 Binary files /dev/null and b/.doctrees/generated/qlasskit.qlassfun.qlassf.doctree differ diff --git a/.doctrees/generated/qlasskit.qlassfun.qlassfa.doctree b/.doctrees/generated/qlasskit.qlassfun.qlassfa.doctree new file mode 100644 index 00000000..048b1d30 Binary files /dev/null and b/.doctrees/generated/qlasskit.qlassfun.qlassfa.doctree differ diff --git a/.doctrees/generated/qlasskit.types.doctree b/.doctrees/generated/qlasskit.types.doctree new file mode 100644 index 00000000..2f91c68d Binary files /dev/null and b/.doctrees/generated/qlasskit.types.doctree differ diff --git a/.doctrees/generated/qlasskit.types.parameter.doctree b/.doctrees/generated/qlasskit.types.parameter.doctree new file mode 100644 index 00000000..eb9b076f Binary files /dev/null and b/.doctrees/generated/qlasskit.types.parameter.doctree differ diff --git a/.doctrees/generated/qlasskit.types.qbool.doctree b/.doctrees/generated/qlasskit.types.qbool.doctree new file mode 100644 index 00000000..da0bfac0 Binary files /dev/null and b/.doctrees/generated/qlasskit.types.qbool.doctree differ diff --git a/.doctrees/generated/qlasskit.types.qchar.doctree b/.doctrees/generated/qlasskit.types.qchar.doctree new file mode 100644 index 00000000..e9de2965 Binary files /dev/null and b/.doctrees/generated/qlasskit.types.qchar.doctree differ diff --git a/.doctrees/generated/qlasskit.types.qfixed.doctree b/.doctrees/generated/qlasskit.types.qfixed.doctree new file mode 100644 index 00000000..aea8a357 Binary files /dev/null and b/.doctrees/generated/qlasskit.types.qfixed.doctree differ diff --git a/.doctrees/generated/qlasskit.types.qint.doctree b/.doctrees/generated/qlasskit.types.qint.doctree new file mode 100644 index 00000000..4a76e4db Binary files /dev/null and b/.doctrees/generated/qlasskit.types.qint.doctree differ diff --git a/.doctrees/generated/qlasskit.types.qlist.doctree b/.doctrees/generated/qlasskit.types.qlist.doctree new file mode 100644 index 00000000..390bc6d6 Binary files /dev/null and b/.doctrees/generated/qlasskit.types.qlist.doctree differ diff --git a/.doctrees/generated/qlasskit.types.qmatrix.doctree b/.doctrees/generated/qlasskit.types.qmatrix.doctree new file mode 100644 index 00000000..3b910f90 Binary files /dev/null and b/.doctrees/generated/qlasskit.types.qmatrix.doctree differ diff --git a/.doctrees/generated/qlasskit.types.qtype.doctree b/.doctrees/generated/qlasskit.types.qtype.doctree new file mode 100644 index 00000000..9ea13745 Binary files /dev/null and b/.doctrees/generated/qlasskit.types.qtype.doctree differ diff --git a/.doctrees/how_it_works.doctree b/.doctrees/how_it_works.doctree new file mode 100644 index 00000000..43121d22 Binary files /dev/null and b/.doctrees/how_it_works.doctree differ diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 00000000..3675f4b0 Binary files /dev/null and b/.doctrees/index.doctree differ diff --git a/.doctrees/parameters.doctree b/.doctrees/parameters.doctree new file mode 100644 index 00000000..48884043 Binary files /dev/null and b/.doctrees/parameters.doctree differ diff --git a/.doctrees/quickstart.doctree b/.doctrees/quickstart.doctree new file mode 100644 index 00000000..39c799ac Binary files /dev/null and b/.doctrees/quickstart.doctree differ diff --git a/.doctrees/supported.doctree b/.doctrees/supported.doctree new file mode 100644 index 00000000..bc760f33 Binary files /dev/null and b/.doctrees/supported.doctree differ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/_images/134555be2b0ec8b6542fa4c9920ed78256557fd3823098fae0e5b794a7d039f7.png b/_images/134555be2b0ec8b6542fa4c9920ed78256557fd3823098fae0e5b794a7d039f7.png new file mode 100644 index 00000000..f6567cc2 Binary files /dev/null and b/_images/134555be2b0ec8b6542fa4c9920ed78256557fd3823098fae0e5b794a7d039f7.png differ diff --git a/_images/23765ce2dceda23c652d4690e559278bbbcbf48bed62ae08c66b1d06767614c4.png b/_images/23765ce2dceda23c652d4690e559278bbbcbf48bed62ae08c66b1d06767614c4.png new file mode 100644 index 00000000..afaf7fc3 Binary files /dev/null and b/_images/23765ce2dceda23c652d4690e559278bbbcbf48bed62ae08c66b1d06767614c4.png differ diff --git a/_images/317b4a8fac0c5bc2bcd5ab20dd179c2a9240473def08b3ba93eb3b0d553781ea.png b/_images/317b4a8fac0c5bc2bcd5ab20dd179c2a9240473def08b3ba93eb3b0d553781ea.png new file mode 100644 index 00000000..61c89cc2 Binary files /dev/null and b/_images/317b4a8fac0c5bc2bcd5ab20dd179c2a9240473def08b3ba93eb3b0d553781ea.png differ diff --git a/_images/38de6c110ed81ea81303c7d605b59843cce73ba51cc6f4e85a6ff5669271c5a2.png b/_images/38de6c110ed81ea81303c7d605b59843cce73ba51cc6f4e85a6ff5669271c5a2.png new file mode 100644 index 00000000..d5162851 Binary files /dev/null and b/_images/38de6c110ed81ea81303c7d605b59843cce73ba51cc6f4e85a6ff5669271c5a2.png differ diff --git a/_images/4502fb99b0b62a89285bf5856a32dbf7264a0322771aaf5ee33a084aaa9e9167.png b/_images/4502fb99b0b62a89285bf5856a32dbf7264a0322771aaf5ee33a084aaa9e9167.png new file mode 100644 index 00000000..cf12b886 Binary files /dev/null and b/_images/4502fb99b0b62a89285bf5856a32dbf7264a0322771aaf5ee33a084aaa9e9167.png differ diff --git a/_images/45432fc52cfef82701297322f1f2a4c9e1f401b5cce28af1b6fccf623bb39f57.png b/_images/45432fc52cfef82701297322f1f2a4c9e1f401b5cce28af1b6fccf623bb39f57.png new file mode 100644 index 00000000..0b0630e2 Binary files /dev/null and b/_images/45432fc52cfef82701297322f1f2a4c9e1f401b5cce28af1b6fccf623bb39f57.png differ diff --git a/_images/47b6cd81bccaa913335a53e27b39ebaa13a3e237adc57d32abf8f74664f5531b.png b/_images/47b6cd81bccaa913335a53e27b39ebaa13a3e237adc57d32abf8f74664f5531b.png new file mode 100644 index 00000000..1a5a56f9 Binary files /dev/null and b/_images/47b6cd81bccaa913335a53e27b39ebaa13a3e237adc57d32abf8f74664f5531b.png differ diff --git a/_images/5b50037dd2c0a981ffc361d45ac7e20ede9efca0e92c747457be1727c64ae36b.png b/_images/5b50037dd2c0a981ffc361d45ac7e20ede9efca0e92c747457be1727c64ae36b.png new file mode 100644 index 00000000..3373e0ba Binary files /dev/null and b/_images/5b50037dd2c0a981ffc361d45ac7e20ede9efca0e92c747457be1727c64ae36b.png differ diff --git a/_images/5c37e1641175e805bd069b05b0507bee333663522ca9e04c1584a329607d7490.png b/_images/5c37e1641175e805bd069b05b0507bee333663522ca9e04c1584a329607d7490.png new file mode 100644 index 00000000..e4461546 Binary files /dev/null and b/_images/5c37e1641175e805bd069b05b0507bee333663522ca9e04c1584a329607d7490.png differ diff --git a/_images/68ebd5e59484021eb207a14eb3a4a3219a6ecd8b1971abfe71fe0b3484f576f0.png b/_images/68ebd5e59484021eb207a14eb3a4a3219a6ecd8b1971abfe71fe0b3484f576f0.png new file mode 100644 index 00000000..b9cbb464 Binary files /dev/null and b/_images/68ebd5e59484021eb207a14eb3a4a3219a6ecd8b1971abfe71fe0b3484f576f0.png differ diff --git a/_images/816fddadcdd0ee15c32e424045ea5f4d76f6b0add32f18cce0949ecf40028a30.png b/_images/816fddadcdd0ee15c32e424045ea5f4d76f6b0add32f18cce0949ecf40028a30.png new file mode 100644 index 00000000..66cbc78e Binary files /dev/null and b/_images/816fddadcdd0ee15c32e424045ea5f4d76f6b0add32f18cce0949ecf40028a30.png differ diff --git a/_images/975f9c766c4ab546bee9118a765d044bdce43b9ce3694cef8b60e97c42ddb931.png b/_images/975f9c766c4ab546bee9118a765d044bdce43b9ce3694cef8b60e97c42ddb931.png new file mode 100644 index 00000000..7d242f54 Binary files /dev/null and b/_images/975f9c766c4ab546bee9118a765d044bdce43b9ce3694cef8b60e97c42ddb931.png differ diff --git a/_images/9ac701aaf0d8c9378deb40e6f6e1227621ca77e43af7118940ff005d10a3b4cc.png b/_images/9ac701aaf0d8c9378deb40e6f6e1227621ca77e43af7118940ff005d10a3b4cc.png new file mode 100644 index 00000000..da93447f Binary files /dev/null and b/_images/9ac701aaf0d8c9378deb40e6f6e1227621ca77e43af7118940ff005d10a3b4cc.png differ diff --git a/_images/a056b3021724ac94b5d8671bfd9097e73add05704cfb48363ea95e2e450eadb5.png b/_images/a056b3021724ac94b5d8671bfd9097e73add05704cfb48363ea95e2e450eadb5.png new file mode 100644 index 00000000..9cc7bbb3 Binary files /dev/null and b/_images/a056b3021724ac94b5d8671bfd9097e73add05704cfb48363ea95e2e450eadb5.png differ diff --git a/_images/a1154c255c589e0e4d1936fc4b97b314aad8947cab4b38c090c94fd12164d179.png b/_images/a1154c255c589e0e4d1936fc4b97b314aad8947cab4b38c090c94fd12164d179.png new file mode 100644 index 00000000..ce169847 Binary files /dev/null and b/_images/a1154c255c589e0e4d1936fc4b97b314aad8947cab4b38c090c94fd12164d179.png differ diff --git a/_images/a8917ace04cb0420613da4cfd474deb06536a17cf19a713c5f187839fee6a0e4.png b/_images/a8917ace04cb0420613da4cfd474deb06536a17cf19a713c5f187839fee6a0e4.png new file mode 100644 index 00000000..b36d9daa Binary files /dev/null and b/_images/a8917ace04cb0420613da4cfd474deb06536a17cf19a713c5f187839fee6a0e4.png differ diff --git a/_images/ad35bf91a8374681d3e8c22fb6a31f69e9e6518f1478a6054e776c29ee27b211.png b/_images/ad35bf91a8374681d3e8c22fb6a31f69e9e6518f1478a6054e776c29ee27b211.png new file mode 100644 index 00000000..30821c78 Binary files /dev/null and b/_images/ad35bf91a8374681d3e8c22fb6a31f69e9e6518f1478a6054e776c29ee27b211.png differ diff --git a/_images/b3dbb3fff0ce1009d50d5e24935a30672c92435754f28ff636bbf1526ef4795b.png b/_images/b3dbb3fff0ce1009d50d5e24935a30672c92435754f28ff636bbf1526ef4795b.png new file mode 100644 index 00000000..918ab699 Binary files /dev/null and b/_images/b3dbb3fff0ce1009d50d5e24935a30672c92435754f28ff636bbf1526ef4795b.png differ diff --git a/_images/c7d04b10d56938794e94628eaa66357bee167db80983c3bb53291d7d04661f70.png b/_images/c7d04b10d56938794e94628eaa66357bee167db80983c3bb53291d7d04661f70.png new file mode 100644 index 00000000..c0a33ac8 Binary files /dev/null and b/_images/c7d04b10d56938794e94628eaa66357bee167db80983c3bb53291d7d04661f70.png differ diff --git a/_images/cf4aae3eb9d9826b4e5fe76c28059345d7d992a93d8d58ea268d206cb1d8f981.png b/_images/cf4aae3eb9d9826b4e5fe76c28059345d7d992a93d8d58ea268d206cb1d8f981.png new file mode 100644 index 00000000..bdb04f12 Binary files /dev/null and b/_images/cf4aae3eb9d9826b4e5fe76c28059345d7d992a93d8d58ea268d206cb1d8f981.png differ diff --git a/_images/d104916566a99e2da51900e9162fefb55e749ecadff8c23ba5799ed5707897f0.png b/_images/d104916566a99e2da51900e9162fefb55e749ecadff8c23ba5799ed5707897f0.png new file mode 100644 index 00000000..bb451411 Binary files /dev/null and b/_images/d104916566a99e2da51900e9162fefb55e749ecadff8c23ba5799ed5707897f0.png differ diff --git a/_images/da85ccdadfc65e79823ec5a7fc70b3b6b00b858a049aa91045f7704195a4891b.png b/_images/da85ccdadfc65e79823ec5a7fc70b3b6b00b858a049aa91045f7704195a4891b.png new file mode 100644 index 00000000..dd904a22 Binary files /dev/null and b/_images/da85ccdadfc65e79823ec5a7fc70b3b6b00b858a049aa91045f7704195a4891b.png differ diff --git a/_images/e017f3e106e1cd0f02b1307f42b531383710dab1353d524ef5e4ddbf761ef27a.png b/_images/e017f3e106e1cd0f02b1307f42b531383710dab1353d524ef5e4ddbf761ef27a.png new file mode 100644 index 00000000..13c3c20d Binary files /dev/null and b/_images/e017f3e106e1cd0f02b1307f42b531383710dab1353d524ef5e4ddbf761ef27a.png differ diff --git a/_images/e55818cf800a54a7925e4b1baed5679302c1ce0167ab0196e4a51a1b8b528332.png b/_images/e55818cf800a54a7925e4b1baed5679302c1ce0167ab0196e4a51a1b8b528332.png new file mode 100644 index 00000000..26c4d603 Binary files /dev/null and b/_images/e55818cf800a54a7925e4b1baed5679302c1ce0167ab0196e4a51a1b8b528332.png differ diff --git a/_images/e701c8c7d288b7c8b31d67bfd74640291b3169f82970a1c5a96fbc03e0bfef59.png b/_images/e701c8c7d288b7c8b31d67bfd74640291b3169f82970a1c5a96fbc03e0bfef59.png new file mode 100644 index 00000000..d95e0349 Binary files /dev/null and b/_images/e701c8c7d288b7c8b31d67bfd74640291b3169f82970a1c5a96fbc03e0bfef59.png differ diff --git a/_images/e74cc1e022296f53ce2cd1099f078f7715eebe81e2ffa3bbedb069c9a35398dd.png b/_images/e74cc1e022296f53ce2cd1099f078f7715eebe81e2ffa3bbedb069c9a35398dd.png new file mode 100644 index 00000000..fa1ca0c0 Binary files /dev/null and b/_images/e74cc1e022296f53ce2cd1099f078f7715eebe81e2ffa3bbedb069c9a35398dd.png differ diff --git a/_images/eea1152a92a8945a7719dd6b12beb892cf9e185f4f75aadc434c540509580588.png b/_images/eea1152a92a8945a7719dd6b12beb892cf9e185f4f75aadc434c540509580588.png new file mode 100644 index 00000000..21ff9a5f Binary files /dev/null and b/_images/eea1152a92a8945a7719dd6b12beb892cf9e185f4f75aadc434c540509580588.png differ diff --git a/_images/f136ea25a6a1c5e568142875d165f98fbe43f5c4323eadeafad237a185d8ca93.png b/_images/f136ea25a6a1c5e568142875d165f98fbe43f5c4323eadeafad237a185d8ca93.png new file mode 100644 index 00000000..36d91c17 Binary files /dev/null and b/_images/f136ea25a6a1c5e568142875d165f98fbe43f5c4323eadeafad237a185d8ca93.png differ diff --git a/_images/f3e9cd6f4bfc037a2c61c72684f180e5ae89c4a01198673478cc56fb746c1be7.png b/_images/f3e9cd6f4bfc037a2c61c72684f180e5ae89c4a01198673478cc56fb746c1be7.png new file mode 100644 index 00000000..9ea64326 Binary files /dev/null and b/_images/f3e9cd6f4bfc037a2c61c72684f180e5ae89c4a01198673478cc56fb746c1be7.png differ diff --git a/_images/fb5ffd2c19f4003e4c45d4b0d46226c60255334a56fc579013eeac5c4c9a29a8.png b/_images/fb5ffd2c19f4003e4c45d4b0d46226c60255334a56fc579013eeac5c4c9a29a8.png new file mode 100644 index 00000000..545764f9 Binary files /dev/null and b/_images/fb5ffd2c19f4003e4c45d4b0d46226c60255334a56fc579013eeac5c4c9a29a8.png differ diff --git a/_images/qlasskit_transformations.png b/_images/qlasskit_transformations.png new file mode 100644 index 00000000..ebf860ac Binary files /dev/null and b/_images/qlasskit_transformations.png differ diff --git a/_sources/algorithms.ipynb.txt b/_sources/algorithms.ipynb.txt new file mode 100644 index 00000000..de3776cc --- /dev/null +++ b/_sources/algorithms.ipynb.txt @@ -0,0 +1,247 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Algorithms" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Qlasskit implements high level representation of quantum algorithms that relies on black boxes functions and oracles.\n", + "\n", + "- Grover search\n", + "- Simon periodicity\n", + "- Deutsch Jozsa\n", + "- Bernstein Vazirani" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Abstraction tools\n", + "\n", + "All algorithms share the same base class `QAlgorithm` which inherits from `QCircuitWrapper`. The `QCircuitWrapper` is also father of `qlassf` functions, and offers useful methods to handle high level types.\n", + "\n", + "One of those tools is `decode_counts`, that translates the result dictionary from a quantum sampling in its binary form, to the high level representation of data types used in the qlasskit function; `decode_output` instead, translate a single bitstring." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from typing import Tuple\n", + "from qlasskit import qlassf, Qint, Qint4\n", + "\n", + "\n", + "@qlassf\n", + "def test_tools(a: Qint[4]) -> Qint[4]:\n", + " return a + 1\n", + "\n", + "\n", + "test_tools.decode_output(\"0100\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another method called `encode_input` is able to do the reverse job, transforming high level types to binary form." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0100'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_tools.encode_input(Qint4(4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Grover search\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import Grover\n", + "\n", + "\n", + "@qlassf\n", + "def g_orac(a: Tuple[bool, bool]) -> bool:\n", + " return a[0] and not a[1]\n", + "\n", + "\n", + "q_algo = Grover(g_orac, True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Further examples can be found on the following notebooks:\n", + "\n", + "- [example_grover.ipynb]()\n", + "- [example_grover_subset.ipynb]()\n", + "- [example_grover_hash.ipynb]()\n", + "- [example_grover_sudoku.ipynb]()\n", + "- [example_grover_factors.ipynb]()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simon periodicity" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import Simon\n", + "\n", + "\n", + "@qlassf\n", + "def f(a: Qint[4]) -> Qint[4]:\n", + " return (a >> 3) + 1\n", + "\n", + "\n", + "q_algo = Simon(f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Further examples can be found on the following notebooks:\n", + "\n", + "- [example_simon.ipynb]()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Deutsch Jozsa" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import DeutschJozsa\n", + "\n", + "\n", + "@qlassf\n", + "def f(b: Qint[4]) -> bool:\n", + " return b < 16\n", + "\n", + "\n", + "q_algo = DeutschJozsa(f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Further examples can be found on the following notebooks:\n", + "\n", + "- [example_deutsch_jozsa.ipynb]()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bernstein Vazirani" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import BernsteinVazirani, secret_oracle\n", + "\n", + "oracle = secret_oracle(4, 14)\n", + "\n", + "q_algo = BernsteinVazirani(oracle)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Further examples can be found on the following notebooks:\n", + "\n", + "- [example_bernstein_vazirani.ipynb]()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/api.rst.txt b/_sources/api.rst.txt new file mode 100644 index 00000000..02673f0d --- /dev/null +++ b/_sources/api.rst.txt @@ -0,0 +1,22 @@ +API +=== + +.. autosummary:: + :toctree: generated + :recursive: + + qlasskit.qlassfun.qlassf + qlasskit.qlassfun.qlassfa + qlasskit.qlassfun.QlassF + qlasskit.algorithms.qalgorithm + qlasskit.algorithms.grover.Grover + qlasskit.algorithms.simon.Simon + qlasskit.algorithms.deutschjozsa.DeutschJozsa + qlasskit.qcircuit.qcircuit.QCircuit + qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper + qlasskit.qcircuit.gates + qlasskit.bqm.decode_samples + qlasskit.decompiler.Decompiler + qlasskit.types + + .. qlasskit.decompiler.circuit_boolean_optimizer \ No newline at end of file diff --git a/_sources/bqm.ipynb.txt b/_sources/bqm.ipynb.txt new file mode 100644 index 00000000..92893061 --- /dev/null +++ b/_sources/bqm.ipynb.txt @@ -0,0 +1,172 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Binary Quadratic Model, Qubo & Ising " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Any qlassf function can be transformed to a binary quadratic model using the `to_bqm` function. In this example we create a generic function that factorize `num`, and we bind `num` with 15." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Vars: 14 \n", + "Interactions: 41\n" + ] + } + ], + "source": [ + "from qlasskit import qlassf, Qint, Parameter\n", + "\n", + "\n", + "@qlassf\n", + "def test_factor_generic(num: Parameter[Qint[4]], a: Qint[3], b: Qint[3]) -> Qint[4]:\n", + " return num - (a * b)\n", + "\n", + "\n", + "test_factor = test_factor_generic.bind(num=15)\n", + "bqm = test_factor.to_bqm()\n", + "\n", + "print(\"Vars:\", bqm.num_variables, \"\\nInteractions:\", bqm.num_interactions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A qlassf function can also be exported as a QUBO model using `to_bqm('qubo')` or as an Ising model using `to_bqm('ising')`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### Running on simulated sampler annealer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can run a simulated sampler annealer to minimize this function; qlasskit offer a `decode_samples` helper function that translates sample result to the high level types of qlasskit." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'a': 3, 'b': 5}\n" + ] + } + ], + "source": [ + "import neal\n", + "from qlasskit.bqm import decode_samples\n", + "\n", + "sa = neal.SimulatedAnnealingSampler()\n", + "sampleset = sa.sample(bqm, num_reads=10)\n", + "decoded_samples = decode_samples(test_factor, sampleset)\n", + "best_sample = min(decoded_samples, key=lambda x: x.energy)\n", + "print(best_sample.sample)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is 5 and 3 as expected (since 5 times 3 is equal to 15)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Running on DWave annealer\n", + "\n", + "If we have a valid DWave account, we can run our problem on a real quantum annealer as follow:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "SolverFailureError", + "evalue": "Problem not accepted because user has insufficient remaining solver access time in project DEV.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mSolverFailureError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 5\u001b[0m\n\u001b[1;32m 3\u001b[0m sampler \u001b[38;5;241m=\u001b[39m EmbeddingComposite(DWaveSampler())\n\u001b[1;32m 4\u001b[0m sampleset \u001b[38;5;241m=\u001b[39m sampler\u001b[38;5;241m.\u001b[39msample(bqm, num_reads\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10\u001b[39m)\n\u001b[0;32m----> 5\u001b[0m decoded_samples \u001b[38;5;241m=\u001b[39m \u001b[43mdecode_samples\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtest_factor\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msampleset\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m best_sample \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mmin\u001b[39m(decoded_samples, key\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mlambda\u001b[39;00m x: x\u001b[38;5;241m.\u001b[39menergy)\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28mprint\u001b[39m(best_sample\u001b[38;5;241m.\u001b[39msample)\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/qlasskit-0.1.18-py3.10.egg/qlasskit/bqm.py:142\u001b[0m, in \u001b[0;36mdecode_samples\u001b[0;34m(qf, sampleset)\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Get dimod sampleset and return an high level decoded solution\"\"\"\u001b[39;00m\n\u001b[1;32m 141\u001b[0m model \u001b[38;5;241m=\u001b[39m qf\u001b[38;5;241m.\u001b[39mto_bqm(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpq_model\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 142\u001b[0m decoded \u001b[38;5;241m=\u001b[39m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode_sampleset\u001b[49m\u001b[43m(\u001b[49m\u001b[43msampleset\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 144\u001b[0m new_dec \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 145\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m el \u001b[38;5;129;01min\u001b[39;00m decoded:\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dimod/sampleset.py:1121\u001b[0m, in \u001b[0;36mSampleSet.record\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1105\u001b[0m \u001b[38;5;129m@property\u001b[39m\n\u001b[1;32m 1106\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecord\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1107\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\":obj:`numpy.recarray` containing the samples, energies, number of occurences, and other sample data.\u001b[39;00m\n\u001b[1;32m 1108\u001b[0m \n\u001b[1;32m 1109\u001b[0m \u001b[38;5;124;03m Examples:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1119\u001b[0m \n\u001b[1;32m 1120\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1121\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1122\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_record\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dimod/sampleset.py:1485\u001b[0m, in \u001b[0;36mSampleSet.resolve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1483\u001b[0m \u001b[38;5;66;03m# if it doesn't have the attribute then it is already resolved\u001b[39;00m\n\u001b[1;32m 1484\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_future\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m-> 1485\u001b[0m samples \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_result_hook\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_future\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1486\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__init__\u001b[39m(samples\u001b[38;5;241m.\u001b[39mrecord, samples\u001b[38;5;241m.\u001b[39mvariables, samples\u001b[38;5;241m.\u001b[39minfo, samples\u001b[38;5;241m.\u001b[39mvartype)\n\u001b[1;32m 1487\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_future\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/system/composites/embedding.py:284\u001b[0m, in \u001b[0;36mEmbeddingComposite.sample..async_unembed\u001b[0;34m(response)\u001b[0m\n\u001b[1;32m 279\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21masync_unembed\u001b[39m(response):\n\u001b[1;32m 280\u001b[0m \u001b[38;5;66;03m# unembed the sampleset aysnchronously.\u001b[39;00m\n\u001b[1;32m 282\u001b[0m warninghandler\u001b[38;5;241m.\u001b[39mchain_break(response, embedding)\n\u001b[0;32m--> 284\u001b[0m sampleset \u001b[38;5;241m=\u001b[39m \u001b[43munembed_sampleset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43membedding\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msource_bqm\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbqm\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 285\u001b[0m \u001b[43m \u001b[49m\u001b[43mchain_break_method\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchain_break_method\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 286\u001b[0m \u001b[43m \u001b[49m\u001b[43mchain_break_fraction\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchain_break_fraction\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 287\u001b[0m \u001b[43m \u001b[49m\u001b[43mreturn_embedding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreturn_embedding\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 289\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m return_embedding:\n\u001b[1;32m 290\u001b[0m sampleset\u001b[38;5;241m.\u001b[39minfo[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124membedding_context\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mupdate(\n\u001b[1;32m 291\u001b[0m embedding_parameters\u001b[38;5;241m=\u001b[39membedding_parameters,\n\u001b[1;32m 292\u001b[0m chain_strength\u001b[38;5;241m=\u001b[39membedding\u001b[38;5;241m.\u001b[39mchain_strength)\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/embedding/transforms.py:606\u001b[0m, in \u001b[0;36munembed_sampleset\u001b[0;34m(target_sampleset, embedding, source_bqm, chain_break_method, chain_break_fraction, return_embedding)\u001b[0m\n\u001b[1;32m 603\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n\u001b[1;32m 604\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgiven bqm does not match the embedding\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 606\u001b[0m record \u001b[38;5;241m=\u001b[39m \u001b[43mtarget_sampleset\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecord\u001b[49m\n\u001b[1;32m 608\u001b[0m unembedded, idxs \u001b[38;5;241m=\u001b[39m chain_break_method(target_sampleset, chains)\n\u001b[1;32m 610\u001b[0m reserved \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msample\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124menergy\u001b[39m\u001b[38;5;124m'\u001b[39m}\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dimod/sampleset.py:1121\u001b[0m, in \u001b[0;36mSampleSet.record\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1105\u001b[0m \u001b[38;5;129m@property\u001b[39m\n\u001b[1;32m 1106\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecord\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1107\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\":obj:`numpy.recarray` containing the samples, energies, number of occurences, and other sample data.\u001b[39;00m\n\u001b[1;32m 1108\u001b[0m \n\u001b[1;32m 1109\u001b[0m \u001b[38;5;124;03m Examples:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1119\u001b[0m \n\u001b[1;32m 1120\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1121\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1122\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_record\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dimod/sampleset.py:1485\u001b[0m, in \u001b[0;36mSampleSet.resolve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1483\u001b[0m \u001b[38;5;66;03m# if it doesn't have the attribute then it is already resolved\u001b[39;00m\n\u001b[1;32m 1484\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_future\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m-> 1485\u001b[0m samples \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_result_hook\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_future\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1486\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__init__\u001b[39m(samples\u001b[38;5;241m.\u001b[39mrecord, samples\u001b[38;5;241m.\u001b[39mvariables, samples\u001b[38;5;241m.\u001b[39minfo, samples\u001b[38;5;241m.\u001b[39mvartype)\n\u001b[1;32m 1487\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_future\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/system/samplers/dwave_sampler.py:452\u001b[0m, in \u001b[0;36mDWaveSampler.sample.._hook\u001b[0;34m(computation)\u001b[0m\n\u001b[1;32m 450\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SolverError, InvalidAPIResponseError) \u001b[38;5;28;01mas\u001b[39;00m exc:\n\u001b[1;32m 451\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfailover:\n\u001b[0;32m--> 452\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\n\u001b[1;32m 453\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(exc, SolverAuthenticationError):\n\u001b[1;32m 454\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/system/samplers/dwave_sampler.py:439\u001b[0m, in \u001b[0;36mDWaveSampler.sample.._hook\u001b[0;34m(computation)\u001b[0m\n\u001b[1;32m 436\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m sampleset\n\u001b[1;32m 438\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 439\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mresolve\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcomputation\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 441\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProblemUploadError, RequestTimeout, PollingTimeout) \u001b[38;5;28;01mas\u001b[39;00m exc:\n\u001b[1;32m 442\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfailover:\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/system/samplers/dwave_sampler.py:429\u001b[0m, in \u001b[0;36mDWaveSampler.sample.._hook..resolve\u001b[0;34m(computation)\u001b[0m\n\u001b[1;32m 427\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mresolve\u001b[39m(computation):\n\u001b[1;32m 428\u001b[0m sampleset \u001b[38;5;241m=\u001b[39m computation\u001b[38;5;241m.\u001b[39msampleset\n\u001b[0;32m--> 429\u001b[0m \u001b[43msampleset\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 431\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m warninghandler \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 432\u001b[0m warninghandler\u001b[38;5;241m.\u001b[39mtoo_few_samples(sampleset)\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dimod/sampleset.py:1485\u001b[0m, in \u001b[0;36mSampleSet.resolve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1483\u001b[0m \u001b[38;5;66;03m# if it doesn't have the attribute then it is already resolved\u001b[39;00m\n\u001b[1;32m 1484\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_future\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m-> 1485\u001b[0m samples \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_result_hook\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_future\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1486\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__init__\u001b[39m(samples\u001b[38;5;241m.\u001b[39mrecord, samples\u001b[38;5;241m.\u001b[39mvariables, samples\u001b[38;5;241m.\u001b[39minfo, samples\u001b[38;5;241m.\u001b[39mvartype)\n\u001b[1;32m 1487\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_future\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/cloud/computation.py:823\u001b[0m, in \u001b[0;36mFuture.sampleset..\u001b[0;34m(f)\u001b[0m\n\u001b[1;32m 818\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m:\n\u001b[1;32m 819\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCan\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt construct SampleSet without dimod. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 820\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRe-install the library with \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbqm\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m support.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 822\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sampleset \u001b[38;5;241m=\u001b[39m sampleset \u001b[38;5;241m=\u001b[39m dimod\u001b[38;5;241m.\u001b[39mSampleSet\u001b[38;5;241m.\u001b[39mfrom_future(\n\u001b[0;32m--> 823\u001b[0m \u001b[38;5;28mself\u001b[39m, \u001b[38;5;28;01mlambda\u001b[39;00m f: \u001b[43mf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait_sampleset\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 825\u001b[0m \u001b[38;5;66;03m# propagate id to sampleset as well\u001b[39;00m\n\u001b[1;32m 826\u001b[0m \u001b[38;5;66;03m# note: this requires dimod>=0.8.21 (before that version SampleSet\u001b[39;00m\n\u001b[1;32m 827\u001b[0m \u001b[38;5;66;03m# had slots set which prevented dynamic addition of attributes).\u001b[39;00m\n\u001b[1;32m 828\u001b[0m sampleset\u001b[38;5;241m.\u001b[39mwait_id \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwait_id\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/cloud/computation.py:755\u001b[0m, in \u001b[0;36mFuture.wait_sampleset\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 752\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Blocking sampleset getter.\"\"\"\u001b[39;00m\n\u001b[1;32m 754\u001b[0m \u001b[38;5;66;03m# blocking result get\u001b[39;00m\n\u001b[0;32m--> 755\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_load_result\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 757\u001b[0m \u001b[38;5;66;03m# common problem info: id/label\u001b[39;00m\n\u001b[1;32m 758\u001b[0m problem_info \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mdict\u001b[39m(problem_id\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mid)\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/cloud/computation.py:893\u001b[0m, in \u001b[0;36mFuture._load_result\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 891\u001b[0m \u001b[38;5;66;03m# Check for other error conditions\u001b[39;00m\n\u001b[1;32m 892\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_exception \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 893\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_exception\n\u001b[1;32m 895\u001b[0m \u001b[38;5;66;03m# If someone else took care of this while we were waiting\u001b[39;00m\n\u001b[1;32m 896\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/cloud/client/base.py:1309\u001b[0m, in \u001b[0;36mClient._handle_problem_status\u001b[0;34m(self, message, future)\u001b[0m\n\u001b[1;32m 1307\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124merror_code\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m message \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124merror_msg\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m message:\n\u001b[1;32m 1308\u001b[0m logger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mError response received: \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, message)\n\u001b[0;32m-> 1309\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SolverFailureError(message[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124merror_msg\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m 1311\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mstatus\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m message:\n\u001b[1;32m 1312\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m InvalidAPIResponseError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mstatus\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m missing in problem description response\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[0;31mSolverFailureError\u001b[0m: Problem not accepted because user has insufficient remaining solver access time in project DEV." + ] + } + ], + "source": [ + "from dwave.system import DWaveSampler, EmbeddingComposite\n", + "\n", + "sampler = EmbeddingComposite(DWaveSampler())\n", + "sampleset = sampler.sample(bqm, num_reads=10)\n", + "decoded_samples = decode_samples(test_factor, sampleset)\n", + "best_sample = min(decoded_samples, key=lambda x: x.energy)\n", + "print(best_sample.sample)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/cli_tools.rst.txt b/_sources/cli_tools.rst.txt new file mode 100644 index 00000000..5996a012 --- /dev/null +++ b/_sources/cli_tools.rst.txt @@ -0,0 +1,62 @@ +CLI Tools +========= + +Qlasskit also offer two cli tools: +- py2bexp: translate python code to boolean expressions +- py2qasm: translate python code to quantum circuits in qasm format + + +py2bexp +------- + +Receives a python script (file or stdin) in input and outputs bool expressions. The python script should +contain at least one qlassf function. + +.. code-block:: + + usage: py2bexp [-h] [-i INPUT_FILE] [-e ENTRYPOINT] [-o OUTPUT] [-f {anf,cnf,dnf,nnf}] [-t {sympy,dimacs}] [-v] + + Convert qlassf functions in a Python script to boolean expressions. + + options: + -h, --help show this help message and exit + -i INPUT_FILE, --input-file INPUT_FILE + Input file (default: stdin) + -e ENTRYPOINT, --entrypoint ENTRYPOINT + Entrypoint function name + -o OUTPUT, --output OUTPUT + Output file (default: stdout) + -f {anf,cnf,dnf,nnf}, --form {anf,cnf,dnf,nnf} + Expression form (default: sympy) + -t {sympy,dimacs}, --format {sympy,dimacs} + Output format (default: sympy) + -v, --version show program's version number and exit + + + +py2qasm +------- + +Receives a python script (file or stdin) in input and outputs qasm code. The python script should +contain at least one qlassf function. + +.. code-block:: + + usage: py2qasm [-h] [-i INPUT_FILE] [-e ENTRYPOINT] [-o OUTPUT] [-c {internal,tweedledum,recompiler}] [-q {2.0,3.0}] + [-v] + + Convert qlassf functions in a Python script to qasm code expressions. + + options: + -h, --help show this help message and exit + -i INPUT_FILE, --input-file INPUT_FILE + Input file (default: stdin) + -e ENTRYPOINT, --entrypoint ENTRYPOINT + Entrypoint function name + -o OUTPUT, --output OUTPUT + Output file (default: stdout) + -c {internal,tweedledum,recompiler}, --compiler {internal,tweedledum,recompiler} + QASM compiler (default: internal) + -q {2.0,3.0}, --qasm-version {2.0,3.0} + QASM version (default: 3.0) + -v, --version show program's version number and exit \ No newline at end of file diff --git a/_sources/decompiler_and_optimizer.ipynb.txt b/_sources/decompiler_and_optimizer.ipynb.txt new file mode 100644 index 00000000..3fd0566a --- /dev/null +++ b/_sources/decompiler_and_optimizer.ipynb.txt @@ -0,0 +1,167 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Decompiler and Circuit Optimizer\n", + "\n", + "Qlasskit offers two useful tool for circuit analysis and optimization.\n", + "\n", + "- Decompiler: given a quantum circuit is able to detect section that can be represented as boolean expressions\n", + "- circuit_boolean_optimizer: a pipeline that given a quantum circuit, decompose it in boolean expressions form and optimize it using boolean algebra" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We first write a qlasskit function that perform an And between the elements of a Qlist; we use the `fastOptimizer` in order to obtain an unoptimized circuit." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "QCircuit(7 gates, 6 qubits)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qlasskit import qlassfa, qlassf, boolopt, Qlist\n", + "from qlasskit.decompiler import Decompiler, circuit_boolean_optimizer\n", + "\n", + "\n", + "@qlassfa(bool_optimizer=boolopt.fastOptimizer)\n", + "def qf(a: Qlist[bool, 2]) -> bool:\n", + " s = True\n", + " for i in a:\n", + " s = s and i\n", + " return s\n", + "\n", + "\n", + "qf.circuit()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see from the circuit, this is not the best solution." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qf.export().draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the decompiler we are able to translate a quantum circuit to its boolean representation (if applicable):" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DecompiledResults[\n", + "\t(\n", + "\t\t(0, 7)\n", + "\t\t(X, [2], None), (CCX, [0, 2, 3], None), (CCX, [1, 3, 4], None), (CX, [4, 5], None), (CCX, [1, 3, 4], None), (CCX, [0, 2, 3], None), (X, [2], None)\n", + "\t\t(q5, q4 ^ q5 ^ (q1 & (q3 ^ (q0 & ~q2))))\n", + "\t)\n", + "]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc = Decompiler().decompile(qf.circuit())\n", + "dc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `circuit_boolean_optimizer` allows us to perform boolean optimizations in a quantum circuit; from the previous unoptimized example, we get the following optimized circuit:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = circuit_boolean_optimizer(qf.circuit(), preserve=[0, 1])\n", + "qc.export().draw(\"mpl\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_bernstein_vazirani.ipynb.txt b/_sources/example_bernstein_vazirani.ipynb.txt new file mode 100644 index 00000000..1cf434a9 --- /dev/null +++ b/_sources/example_bernstein_vazirani.ipynb.txt @@ -0,0 +1,158 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Bernstein Vazirani algorithm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We first create an oracle embedding the secret number 14; we can do this in two equivalent ways:\n", + "- using `secret_oracle()` function\n", + "- writing the oracle from scratch in python" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qlasskit import qlassf, Qint\n", + "\n", + "\n", + "@qlassf\n", + "def oracle(x: Qint[4]) -> bool:\n", + " s = Qint4(14)\n", + " return (x[0] & s[0]) ^ (x[1] & s[1]) ^ (x[2] & s[2]) ^ (x[3] & s[3])\n", + "\n", + "\n", + "oracle.export(\"qiskit\").draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qlasskit.algorithms import secret_oracle\n", + "\n", + "oracle = secret_oracle(4, 14)\n", + "oracle.export(\"qiskit\").draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `BernsteinVazirani` to discover the secret embedded in the oracle." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qlasskit.algorithms import BernsteinVazirani\n", + "\n", + "q_algo = BernsteinVazirani(oracle)\n", + "qc = q_algo.export(\"qiskit\")\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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PqiOHTtq/PjxGjhwoLp27aqgoCC5XC7OHAKoEqIQALzQmDFjtHjxYgUGBmrKlCnavn27Vq5cqc8//1zLly9Xx44dFRkZqR9//FHh4eEKCgqSxKVkAFXH5WMA8FLr16/XU089pQkTJmj69Ok6e/assrOztXbtWq1fv17ffvutzGazOnTooKFDh6pjx47q37+/goOD63rpAOohohAAvFhKSoreeOMNrVixQr/85S/ldDplMpl0+PBhdejQQVFRUbpy5YrOnj0rSdq1a5e6du1ax6sGUB9x+RgAvNiMGTO0f/9+TZ06Vffee6/atGkjSdqyZYtcLpcmTZqkRx99VGvXrtWmTZsIQgBVxplCAPBSTqdTZrNZx44dU1JSkjp37qzPPvtMknT//ffrwoULWrNmjdq3by+Hw6GioiL5+/vX8aoB1Fd8fwEAeCmz2SyXy6XY2FhNnTpVK1as0DvvvKMff/xRu3btUr9+/XT33XdLknx9fQlCALeFy8cA4MXcTxOPHj1ae/fu1bx585SVlSWz2ax+/frJYrEYZxQB4Hbwf0UAwMu57/KZOXOm2rRpo3/+85/q3bu37rvvPkl8DQ2A6sE9hQDghW7+Emr366+//lorVqxQTEyMXnjhhTpcIYCGhigEAC9w5coVnThxQq1atarQvYGFhYXy8/OTVDIgAaAquHwMAF7gvffe08iRIzV37lxt3LhRp06dUnFxscccl8uloqIiuVwu+fn56ezZsyoqKiIIAVQLzhQCgBeIjIzUqVOnZLFYFBISop49eyopKUn333+/WrdurdDQUI/5BQUFeu2113Tu3DktXLiQB00A3DaePgaAOnb48GHZbDb16NFDTz/9tL788ktt27ZNa9euVatWrZSYmKgBAwaoc+fOuuuuu9S4cWMdOHBACxYsUGJiIkEIoFoQhQBQxw4fPqyrV68qKSlJL7/8sh555BEdOnRI27Zt04YNG/T5559r6dKl6tChg/r166fBgwcrMzNTdrtdycnJdb18AA0El48BoI6tWLFCw4YN06effqphw4YZ4w6HQz/88IP27t2rf/3rX8rKytK3334rX19f477C8+fP1+HKATQkRCEA1DGXy6XvvvtOd9xxh2JjY0t9mrigoECHDx/WoUOHlJqaqi+//FLjx4/XX//61zpaNYCGhigEAC9WWiBOmDBB8+fP1+7du9W5c+c6WhmAhoYoBIB6wP1TdsePH9djjz2mCxcu6MSJE3W9LAANCI+sAUA94H7C+OTJk3I4HHrppZfqeEUAGhrOFAJAPeJyuZSbm6umTZsqICCgrpcDoAEhCgEAAMDlYwAAABCFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAASf8PSUulZO9VulMAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit\n", + "from qiskit.visualization import plot_histogram\n", + "from qiskit_aer import AerSimulator\n", + "\n", + "qc.measure_all()\n", + "simulator = AerSimulator()\n", + "result = simulator.run(qc).result()\n", + "counts = result.get_counts(qc)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/_sources/example_big_circuit.ipynb.txt b/_sources/example_big_circuit.ipynb.txt new file mode 100644 index 00000000..637fc739 --- /dev/null +++ b/_sources/example_big_circuit.ipynb.txt @@ -0,0 +1,75 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Working with big circuits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qlasskit is capable of producing large circuit without any issue. The only thing that you have to do, is to use the `fastOptimizer`, since running CSE is too slow on large expressions lists.\n", + "\n", + "In the next example we are going to create a quantum circuit with 64 `Qint8` in input, and one `Qint8` in output, resulting on a circuit of ~21984 qubits and ~1044 gates in around 5 seconds." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import Qint8, Qlist, boolopt, qlassfa\n", + "\n", + "\n", + "@qlassfa(bool_optimizer=boolopt.fastOptimizer)\n", + "def test(a_list: Qlist[Qint8, 64]) -> Qint8:\n", + " h_val = Qint8(0)\n", + " for c in a_list:\n", + " h_val = h_val + c\n", + " return h_val" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "QCircuit(21831 gates, 1036 qubits)\n" + ] + } + ], + "source": [ + "print(test.circuit())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_bqm_polynomial.ipynb.txt b/_sources/example_bqm_polynomial.ipynb.txt new file mode 100644 index 00000000..7c417fd0 --- /dev/null +++ b/_sources/example_bqm_polynomial.ipynb.txt @@ -0,0 +1,124 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# BQM Polynomial solver" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(x0, ~(x.3 ^ x.4 ^ (x.4 & x.5))),\n", + " (x1, x0 & y.4),\n", + " (x2, x.3 & x.4),\n", + " (x3, x.4 & x.5 & (x.3 ^ x.4)),\n", + " (x4, ~(x.0 ^ x.3 ^ x2 ^ x3)),\n", + " (x5, ~(x.4 ^ x.5)),\n", + " (x6, x5 & y.5 & (x0 ^ y.4)),\n", + " (x7, x1 ^ x4 ^ x6 ^ y.3),\n", + " (x8, ~x7),\n", + " (x9, x4 & y.3),\n", + " (x10, x.0 & x.3),\n", + " (x11, (x.0 ^ x.3) & (x2 ^ x3)),\n", + " (x12, ~(x.0 ^ x.1 ^ x10 ^ x11)),\n", + " (x13, (x1 ^ x6) & (x4 ^ y.3)),\n", + " (x14, ~(x12 ^ x13 ^ x9 ^ y.0)),\n", + " (_ret.0, x7),\n", + " (_ret.1, x14 ^ x8),\n", + " (_ret.2,\n", + " (x14 & x8) ^ ~(y.1 ^ (x12 & y.0) ^ ((x12 ^ y.0) & (x13 ^ x9)) ^ ~(x.1 ^ x.2 ^ (x.0 & x.1) ^ ((x.0 ^ x.1) & (x10 ^ x11))))),\n", + " (_ret.3, ~(x0 ^ y.4 ^ (x5 & y.5))),\n", + " (_ret.4, ~(x5 ^ y.5)),\n", + " (_ret.5, x.5)]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qlasskit import qlassf, Qfixed\n", + "\n", + "\n", + "@qlassf\n", + "def poly(x: Qfixed[3, 3], y: Qfixed[3, 3]) -> Qfixed[3, 3]:\n", + " return x * 3 - y * 2 + 1.0\n", + "\n", + "\n", + "poly.expressions" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Vars: 127 \n", + "Interactions: 1951\n" + ] + } + ], + "source": [ + "bqm = poly.to_bqm()\n", + "print(\"Vars:\", bqm.num_variables, \"\\nInteractions:\", bqm.num_interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'x': 7.875, 'y': 7.375}\n" + ] + } + ], + "source": [ + "import neal\n", + "from qlasskit.bqm import decode_samples\n", + "\n", + "sa = neal.SimulatedAnnealingSampler()\n", + "sampleset = sa.sample(bqm, num_reads=10)\n", + "decoded_samples = decode_samples(poly, sampleset)\n", + "best_sample = min(decoded_samples, key=lambda x: x.energy)\n", + "print(best_sample.sample)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_bqm_tsp.ipynb.txt b/_sources/example_bqm_tsp.ipynb.txt new file mode 100644 index 00000000..b7288e48 --- /dev/null +++ b/_sources/example_bqm_tsp.ipynb.txt @@ -0,0 +1,112 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# TSP" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "# Encode the TSP using qlasskit and parameters\n", + "\n", + "from qlasskit import qlassf, Parameter, Qlist, Qmatrix, Qint\n", + "\n", + "\n", + "@qlassf\n", + "def tsp(\n", + " dst_matrix: Parameter[Qmatrix[Qint[4], 3, 3]], order: Qlist[Qint[2], 3]\n", + ") -> Qint[6]:\n", + " dst_sum = Qint4(0)\n", + " assertion = False\n", + " \n", + " if sum(order) != 3:\n", + " assertion = True\n", + "\n", + " for i in range(2):\n", + " oim = order[i]\n", + " oi = order[i + 1]\n", + " dst_sum += dst_matrix[oim][oi] if not assertion else 0xF\n", + " return dst_sum\n", + "\n", + "\n", + "dst_matrix=[\n", + " [0xF, 1, 4], \n", + " [1, 0xF, 1], \n", + " [1, 1, 0xF]\n", + "]\n", + "tsp_f = tsp.bind(dst_matrix=dst_matrix)\n", + "# tsp_f.expressions" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Vars: 18 \n", + "Interactions: 81\n" + ] + } + ], + "source": [ + "bqm = tsp_f.to_bqm()\n", + "print(\"Vars:\", bqm.num_variables, \"\\nInteractions:\", bqm.num_interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'order': (0, 1, 2)}\n" + ] + } + ], + "source": [ + "import neal\n", + "from qlasskit.bqm import decode_samples\n", + "\n", + "sa = neal.SimulatedAnnealingSampler()\n", + "sampleset = sa.sample(bqm, num_reads=10)\n", + "decoded_samples = decode_samples(tsp_f, sampleset)\n", + "best_sample = min(decoded_samples, key=lambda x: x.energy)\n", + "print(best_sample.sample)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_deutsch_jozsa.ipynb.txt b/_sources/example_deutsch_jozsa.ipynb.txt new file mode 100644 index 00000000..b7f4c059 --- /dev/null +++ b/_sources/example_deutsch_jozsa.ipynb.txt @@ -0,0 +1,132 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deutsch Jozsa algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint\n", + "\n", + "\n", + "@qlassf\n", + "def f(a: Qint[4]) -> bool:\n", + " return a > 7" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.export(\"qiskit\").draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import DeutschJozsa\n", + "\n", + "q_algo = DeutschJozsa(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAFvCAYAAAC/9krTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0UElEQVR4nO3df1RU550/8PcMKAM4Gn4ZEEQQRFBBrL9Ksk2i1a6sRWO0mm8x6mpMtq2VZFk5W9N2o7U1FNta9aRrm6SNfk8pmrYblbo2xjQhtlGU2PgDgVigIDPQiYiAAzLMfP/wqy1h0JlhZh7u87xf53hywtx756Of+Ty+vffOjM7hcDhAREREpFF60QUQERERDQbDDBEREWkawwwRERFpGsMMERERaRrDDBEREWkawwwRERFpGsMMERERaRrDDBEREWkawwwRERFpGsMMERERaRrDDBEREWkawwwRERFpGsMMERERaRrDDBEREWkawwwRERFpGsMMERERaRrDDBEREWkawwwRERFpGsMMERERaRrDDBEREWkawwwRERFpGsMMERERaRrDDBEREWkawwwRERFpGsMMERERaRrDDBEREWkawwwRERFpGsMMERERaRrDDBEREWkawwwRERFpGsMMERERaRrDDBEREWkawwwRERFpGsMMESmltrYWjz/+OKKioqDT6bBmzRrRJRHRIAWKLoCIyJ/WrFmDjz76CC+88AKio6ORlJQkuiQiGiSdw+FwiC6CiMgfuru7ERwcjA0bNmDXrl2iyyEiL+FlJiJSRnNzMxwOB8LDw0WXQkRexDMziujq6sJLL72E4uJiNDQ0YPjw4Rg7diwWLFiAoqIi0eX143A4gO5u0WW4JygIOp1OdBU0gDVr1uD111/v9/N33nkHjz32mP8LIr/jOugHgtZBhhlFrFu3Dq+99hpWrVqFhx56CDabDTU1NSgrK8PZs2dFl9ePo6sLtuWrRZfhlsADr0NnMIgugwbwpz/9CadOncLzzz+PJUuW4IknngAAzJ8/Hw8++KDg6sgfuA76nqh1kDcAK+K3v/0tsrOznf7LlEgFWVlZiImJwfPPP4+MjAysXLlSdEnkZ1wH5cV7ZhQxatQoXLx4ERcuXBBdChGREFwH5cUwo4idO3eitbUV6enpSEpKwtNPP40333wTdrtddGlERH7BdVBeDDOKWLx4Merq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", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = q_algo.export(\"qiskit\")\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoUAAAH5CAYAAAD3IUTzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5+UlEQVR4nO3deVTVdeL/8de9bAKyCKhIIOKSmmi4ZmiCG5o2VpNpVqbOZKWjjuNM9WsmM1t0bBnrqzW5hWU2mZbalAalouWGS7iVCikCKiYugKhs9/7+8Hvv1yuLiMDl4vNxjme678/73vu+9kfP+awGs9lsFgAAAG5pRnsvAAAAAPZHFAIAAIAoBAAAAFEIAAAAEYUAAAAQUQgAAAARhQAAAJDkbO8F3GpMJpNOnDghLy8vGQwGey8HAADUcWazWbm5uQoKCpLRWPb+QKKwhp04cUIhISH2XgYAALjFpKenKzg4uMztRGEN8/LyknTlX4y3t7edVwMAAOq6nJwchYSEWBukLERhDbMcMvb29iYKAQBAjbneaWtcaAIAAACiEAAAAEQhANSoTZs26Xe/+52CgoJkMBi0atUqm+1ms1kvvfSSmjRpInd3d/Xr10/JycnW7ampqfrjH/+osLAwubu7q0WLFpo2bZoKCgpK/b6UlBR5eXnJ19e3Gn8VgLqAKASAGpSXl6c777xT7733Xqnb33jjDf3P//yPPvjgA23fvl2enp4aMGCALl++LEk6ePCgTCaT5s2bpwMHDmj27Nn64IMP9Pe//73EZxUWFmrEiBG65557qvU3AagbDGaz2WzvRdxKcnJy5OPjo+zsbC40AW5xBoNBK1eu1AMPPCDpyl7CoKAg/fWvf9Xf/vY3SVJ2drYaN26sxYsX65FHHin1c9588039+9//1pEjR2zGn3/+eZ04cUJ9+/bV5MmTdf78+er8OQBqqYq2B3sKAaCWOHr0qDIzM9WvXz/rmI+Pj+666y5t3bq1zPdlZ2fLz8/PZmz9+vVavnx5mXskAeBaRCEA1BKZmZmSpMaNG9uMN27c2LrtWikpKZozZ46efvpp69iZM2c0evRoLV68mCMSACqMKAQAB3X8+HENHDhQDz/8sMaOHWsdHzt2rB599FH16tXLjqsD4GiIQgCoJQIDAyVJp06dshk/deqUdZvFiRMn1Lt3b0VGRmr+/Pk229avX6+33npLzs7OcnZ21h//+EdlZ2fL2dlZH374YfX+CAAOiyeaAEAtERYWpsDAQK1bt04RERGSrpwgvn37do0bN8467/jx4+rdu7c6d+6s2NjYEg+437p1q4qLi62vV69erVmzZmnLli267bbbauS3AHA8RCEA1KALFy4oJSXF+vro0aNKSkqSn5+fmjZtqsmTJ+u1115Tq1atFBYWpqlTpyooKMh6hfLx48cVHR2t0NBQvfXWWzp9+rT1syx7E9u2bWvznTt37pTRaFR4eHj1/0AADosoBIAatHPnTvXu3dv6esqUKZKkUaNGafHixXruueeUl5enp556SufPn1fPnj317bffql69epKk7777TikpKUpJSVFwcLDNZ3OHMQA3g/sU1jDuUwgAAGoS9ykEAABAhRGFAAAAIAoBAABAFAIAAEBEIQAAAEQUAgAAQEQhAAAARBQCAABARCEAAABEFAIAAEBEIQAAAEQUAgAAQEQhAAAARBQCAABARCEAAABEFAIAAEBEIQAAAEQUAgAAQEQhAAAAJDnbewGoHmPfsfcKAABARSyYbO8VXMGeQgAAABCFAAAAqKVR+Mknn+jpp59Wly5d5ObmJoPBoMWLF5c5PycnR1OmTFFoaKjc3NzUrFkzPfvss7pw4UKp800mk+bMmaP27dvL3d1dDRs21IgRI3TkyJEyvyMuLk5RUVHy8vKSt7e3evfurXXr1t3sTwUAAKgVamUUvvjii5o/f76OHTumJk2alDs3Ly9PUVFRmj17ttq0aaO//OUvat26td566y316dNHly9fLvGep59+WpMmTZLZbNakSZM0cOBAffnll+ratauSk5NLzP/kk080cOBA/fLLLxo9erRGjRqlAwcOqH///lqxYkWV/W4AAAB7qZVRuHDhQqWmpur06dN65plnyp37xhtvKCkpSc8//7zi4uL0z3/+U3FxcXr++ee1Y8cOzZ4922b+hg0btHDhQvXq1Uu7d+/WrFmztGTJEq1atUpnz57VhAkTbOafO3dOEydOVEBAgHbv3q05c+Zozpw52r17t/z9/TVu3Djl5uZW+d8BAABATaqVUdivXz+FhoZed57ZbNbChQtVv359TZ061Wbb1KlTVb9+fS1cuNBmfMGCBZKkV199Va6urtbxe++9V9HR0YqPj1daWpp1fPny5Tp//rwmTpyo4OBg63hwcLAm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rdShQwc1atRIX375pY4dO6aIiAitXr1aISEhdvwFAG5V3KcQAKqQyWSSJH3wwQfy8/NT//79rdvOnj0rZ2dnmc1mvffee4qNjdXbb7+tX375RWPGjFFSUpK+/fZbey0dwC2OKASAKmS51czSpUsVExNjvR+hJB05ckTJyckaPny4evbsKWdnZxUUFKhevXoaN26cPDw8tHfvXm5YDcAuiEIAqCKWmNu2bZtOnTqlZs2a2dx8OjExURkZGRo3bpykK3sVLReUWC4ycXFxsbllDQDUFC5vA4AqYom5RYsWSZL+/e9/6+eff9aAAQN055136rvvvlPTpk111113WQPS8p7Dhw8rLy9PMTEx9lk8gFseUQgAVezZZ59Vs2bN9MUXX+irr77SV199JX9/f+Xl5enee++VdCUGLUF4/vx5bdiwQfXr19fAgQPtuXQAtzCuPgaAalJUVKTExER9/vnnWrlypdLT0yVJHTp0UHR0tGJiYjRw4EAdOnRI9957r/r27WvdywgANY0oBIAakJubq40bN2rp0qVas2aNcnNz5erqqm7duqlBgwb673//q8TERHXp0sXeSwVwiyIKAaCGZWZm6ptvvtGnn36qH374QUVFRWrcuLFOnjxp76UBuIURhQBgRwcPHtSSJUvUsmVLjRkzxt7LAXALIwoBAADAfQoBAABAFAIAAEBEIQAAAEQUAgAAQEQhAAAARBQCAABARCEAAABEFAIAAEBEIQAAAEQUAgAAQNL/BxiXs8lKQi0SAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "from qiskit_aer import AerSimulator\n", + "\n", + "qc.measure_all()\n", + "simulator = AerSimulator()\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_grover.ipynb.txt b/_sources/example_grover.ipynb.txt new file mode 100644 index 00000000..91e1160b --- /dev/null +++ b/_sources/example_grover.ipynb.txt @@ -0,0 +1,168 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover search\n", + "\n", + "Qlasskit offer a class to easily perform a `Grover` search over a qlasskit oracle. \n", + "First, we define a function named `and_all` that returns `True` iff all the element of an input list `a_list` are `True`. We want to use a Grover search to find the input value that led to a `True` result of the function." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qlist\n", + "\n", + "\n", + "@qlassf\n", + "def and_all(a_list: Qlist[bool, 4]) -> bool:\n", + " r = True\n", + " for i in a_list:\n", + " r = r and i\n", + " return r" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The qlasskit compiler will produce an optimized quantum circuit performing the given function." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "and_all.export(\"qiskit\").draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now can use our quantum function as an oracle for a Grover search. For instance, we want to find the input value that yeld to a `True` value of the function:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import Grover\n", + "\n", + "q_algo = Grover(and_all, True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qlasskit prepares the quantum circuit for the Grover search:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = q_algo.export(\"qiskit\")\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we use our prefered framework and simulator for sampling the result; this is an example using `qiskit` with `aer_simulator`.\n", + "\n", + "The `Grover` class, along with all circuit wrappers in qlasskit, provides utilities to encode inputs and decode outputs from a quantum circuit using the high level type definitions. In the output histogram, it's now evident that the input leading to a `True` result in the `and_all` function is a list where all elements are set to `True`, aligning with our expectations.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAocAAAKOCAYAAADUG7MqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADYK0lEQVR4nOzdd1gUV9sG8HvovYggYsGGDXuLvQdbiv2NJjGW2FMs0WiMGnuJeROTGGMvMZYklkRjbAgYeyxYYsOCDbADgkp9vj/45rysgAUWFt37d11el8zO7nOePbOzz86cOaOJiICIiIiICICFqRtARERERPkHi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIsTJ1A150qampiIiIgLOzMzRNM3VziIiI6CUnIrh//z58fHxgYWH843wsDnMoIiICxYoVM3UziIiIyMxcvXoVRYsWNfrrsjjMIWdnZwBpHeTi4mLi1hAREdHLLjY2FsWKFVM1iLGxOMwh/VSyi4sLi0MiIiLKM7k1nI0XpBARERGRwuKQiIiIzFqJEiWgaVqGf4MHDwYAzJ8/H02bNoWLiws0TUN0dHSG15gyZQrq168PBwcHuLm55W0CRsbikIiIiMzaP//8g8jISPVv+/btAIAuXboAAB48eIDWrVvjs88+y/I1EhMT0aVLFwwcODBP2pybOOaQiIiIzJqnp6fB39OnT0fp0qXRpEkTAMCQIUMAAMHBwVm+xoQJEwAAS5cuzY0m5ikeOSQiIiL6f4mJiVixYgV69+5ttvMXszgkIiIi+n8bNmxAdHQ0evbsaeqmmAyLQyIiIqL/t2jRIrRp0wY+Pj6mborJcMwhEREREYDLly9jx44dWLdunambYlI8ckhEREQEYMmSJfDy8kK7du1M3RST4pFDIiIiMnupqalYsmQJ3nvvPVhZGZZHUVFRiIqKwvnz5wEAJ06cgLOzM4oXL44CBQoAAK5cuYK7d+/iypUrSElJQWhoKACgTJkycHJyytNccorFIREREZm9HTt24MqVK+jdu3eGx3788Uc1VQ0ANG7cGEDakUb9wpVx48Zh2bJlap3q1asDAIKCgtC0adPca3gu0ERETN2IF1lsbCxcXV0RExPDeysTERFRrsvt2oNjDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZFiZeoGEBEREeUnfb/J2fMXDDFGK0yHRw6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIiVfF4fr16/Hq6++Cg8PD9jZ2aFkyZLo1q0brl69arBebGwshg0bBl9fX9ja2qJEiRIYMWIE4uLiMn3d1NRUfPfdd6hcuTLs7e3h6emJbt264eLFi3mRFhEREVG+ZWXqBmRGRDBgwADMnz8fpUuXxltvvQVnZ2dEREQgJCQEly9fRrFixQAA8fHxaNKkCUJDQxEQEIBu3brh6NGjmDVrFkJCQrBr1y7Y2dkZvH7//v2xcOFC+Pv746OPPkJERAR++eUXbNu2Dfv374efn58p0iYiIiIyuXxZHH777beYP38+Bg0ahG+//RaWlpYGjycnJ6v/z5w5E6Ghofj0008xffp0tXzUqFGYMWMGvv76a4wePVotDwoKwsKFC9G4cWNs374dNjY2AIDu3bujbdu2+OCDD7B169ZczpCIiIgof9JEREzdiPQePnyIIkWKwN3dHWfPnoWVVdb1q4igaNGiiI2NRVRUFBwdHdVj8fHx8Pb2hpeXFy5cuKCWd+/eHatWrUJISAgaN25s8HrNmjVDcHAwLl++jOLFiz9Te2NjY+Hq6oqYmBi4uLg8Z7ZERESU3/T9JmfPXzDEGK3IWm7XHvluzOG2bdtw7949tG/fHikpKVi3bh2mT5+OH3/8EefPnzdYNywsDBEREWjQoIFBYQgAjo6OaNCgAS5evGgwRjE4OFg99rhWrVoBAEJCQnIhMyIiIqL8L9+dVj58+DAAwNLSElWqVMG5c+fUYxYWFhg6dChmzZoFIK04BJDlGEE/Pz9s3boVYWFhKFasGOLj4xEZGYlKlSplOFWd/nX0181MQkICEhIS1N+xsbEAgKSkJCQlJal2WlpaIiUlBampqQbtt7S0RHJyMtIfsLW0tISFhUWWy/XX1elHU9OfXn/Scmtra6SmpiIlJUUt0zQNVlZWWS7Pqu3MiTkxJ+bEnJjTy5+TNXIiL3LKTfmuOLx58yYA4L///S9q1KiBgwcPokKFCjh69Cj69euHr776CqVLl8bAgQMRExMDAHB1dc30tfRDrfp6z7t+ZqZNm4YJEyZkWL5t2zY4ODgAAIoXL47q1avj+PHjuHLlilqnXLlyKF++PA4ePIhbt26p5dWqVYOvry927dqF+/fvq+X16tWDl5cXtm3bZrAhNGvWDPb29ti8ebNBG9q2bYuHDx8iKChILbOyskK7du1w+/Zt7Nu3Ty13dnZG8+bNcfXqVYSGhqrlnp6eqF+/PsLCwnD27Fm1nDkxJ+bEnJgTczKXnIB2yInczkk/kJZb8t2Yw379+mHBggWwt7fH+fPn4ePjox47efIkqlatipIlS+L8+fNYuXIl3n77bYwZMwaTJ0/O8FpjxozB1KlTsW7dOnTo0AEREREoUqQIGjRogN27d2dYf/v27QgICMBHH32E2bNnZ9q+zI4cFitWDLdv31bFJX+ZMSfmxJyYE3NiTi9uToPm5OzI4byPcjenu3fvwsPDI9fGHOa7I4f6Ub1atWoZFIYAUKlSJZQqVQrnz59HdHS0WjerI336KV99veddPzO2trawtbXNsNza2hrW1oYbk6WlZaanr7O6yCar5Y+/bnaWW1hYwMIi4xDTrJZn1XbmxJyedzlzYk4Ac8qqjc+7nDmZLqfnYaqcjCXfXZBSrlw5AICbm1umj+vLHz58+NQxgo+PSXR0dEThwoVx6dIlg8o9q/WJiIiIzE2+Kw6bNWsGADh9+nSGx5KSknD+/Hk4OjrC09MTfn5+8PHxwZ49exAfH2+wbnx8PPbs2YOSJUuqCbMBoEmTJuqxx+nzGz4+xQ0RERGRuch3xWHp0qUREBCA8+fPY+HChQaPTZ8+HdHR0ejQoQOsrKygaRref/99xMXFYdKkSQbrTpo0CXFxcejbt6/B8n79+gEAxo4di8TERLX8r7/+QnBwMAICAuDr65tL2RERERHlb/nughQAuHDhAurXr4+bN2+iXbt2KF++PI4ePYqdO3fC19cX+/fvh7e3N4C0I4QNGjTAsWPHEBAQgBo1auDIkSPYtm0bateujZCQENjb2xu8ft++fdXt89q1a4fIyEisWbMGTk5O2LdvH8qWLfvMbeUk2ERERC8XToKdD5UuXRqHDh1Cz549cfjwYXz77bcICwvD4MGDcfDgQVUYAmnjCENCQjBkyBCcPn0aX331Fc6cOYPhw4cjMDAwQ2EIAPPmzVNXI8+ePRubN29Ghw4dcPDgwecqDImIiIheNvnyyOGLhEcOiYiIXi48ckhERERE9P9YHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpGS7ONy1axeuXLnyxHWuXr2KXbt2ZTcE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kyZNsHr1auzZsyfDVDb6/IaPLyciIiIyF7laHF64cOG5Lkaxt7fPspjs2bMnwsLCMHr0aIM7pLz//vuYOHEiJk2aZDAJ9qRJkxAXF4fPPvvM4HX69euH1atXY+zYsQaTYP/1118IDg5GQEAAfH19nydNIiIiopeG0YvD1NRUXL9+HUuXLsXvv/+OFi1aGDuEgZEjR+L333/HjBkzcPToUdSoUQNHjhxRt88bMmSIwfrNmjXD+++/j4ULF6JGjRpo164dIiMjsWbNGhQoUADfffddrraXiIiIKD/LdnGo31s5KyICd3d3fPXVV9kN8UwcHR0REhKCL774AmvXrkVQUBAKFy6M4cOHY/z48bC3t8/wnHnz5qFy5cqYP38+Zs+eDScnJ3To0AFTpkxB6dKlc7W9RERERPlZtqeyadq0aabFoYWFBdzd3VG7dm306tULXl5eOW5kfsbb5xEREb1czP32edk+chgcHGzEZhARERFRfpBv761MRERERHnPKBek7NmzB6GhoYiNjYWLiwuqVauGBg0aGOOliYiIiCgP5ag43Lt3L3r16oXz588DSLsIRR+H6OfnhyVLlqhJq4mIiIgo/8t2cfjvv/8iICAADx48wKuvvopmzZqhcOHCiIqKQlBQELZt24ZWrVph//796k4mRERERJS/Zbs4nDhxIhITE7F582a0bt3a4LFPP/0UW7ZswRtvvIGJEydi9erVOW4oEREREeW+bF+QEhwcjM6dO2coDHWtW7dG586dERQUlO3GEREREVHeynZxGBMTg5IlSz5xnZIlSyImJia7IYiIiIgoj2W7OPTx8cH+/fufuM6BAwfg4+OT3RBERERElMeyXRy+8cYbCA4OxtixY/Ho0SODxx49eoTx48cjKCgIb775Zo4bSURERER5I9u3z7tz5w5eeeUVXLp0CR4eHqhTpw4KFSqEGzdu4J9//sGtW7dQqlQpHDx4EAUKFDB2u/MN3j6PiIjo5cLb52WTh4cH9u/fj5EjR2L16tXYvHmzeszOzg69evXCjBkzXurCkIiIiOhlk6NJsAsWLIjFixdj3rx5OHPmjLpDSvny5WFtbW2sNhIRERFRHnnu4nDKlCmIj4/HhAkTVAFobW2NypUrq3USExMxZswYODs7Y9SoUcZrLRERERHlque6IGXHjh0YN24cPDw8nnhk0MbGBh4eHhgzZgznOSQiIiJ6gTxXcbh8+XK4u7vjgw8+eOq6gwcPRoECBbBkyZJsN46IiIiI8tZzFYd79+5Fy5YtYWtr+9R1bW1t0bJlS+zZsyfbjSMiIiKivPVcxWFERARKlSr1zOuXLFkSkZGRz90oIiIiIjKN5yoOLSwskJSU9MzrJyUlwcIi2/NsExEREVEee67KzcfHBydPnnzm9U+ePIkiRYo8d6OIiIiIyDSeqzhs1KgRdu7cifDw8KeuGx4ejp07d6Jx48bZbRsRERER5bHnKg4HDx6MpKQkdO7cGbdv385yvTt37qBLly5ITk7GwIEDc9xIIiIiIsobzzUJdo0aNTBkyBB88803qFixIgYMGIBmzZqhaNGiAIDr168jMDAQ8+fPx61btzBs2DDUqFEjVxpORERERMb33HdI+eqrr2BnZ4cvv/wSU6ZMwZQpUwweFxFYWlpi9OjRmDx5stEaSkRERES577mLQ03TMHXqVPTp0wdLlizB3r17ERUVBQDw9vZGgwYN0LNnT5QuXdrojSUiIiKi3PXcxaGudOnSPDJIRERE9JLhJIREREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESk5Lvi8Pr16/jmm28QEBCA4sWLw8bGBt7e3ujUqRMOHDiQ6XNiY2MxbNgw+Pr6wtbWFiVKlMCIESMQFxeX6fqpqan47rvvULlyZdjb28PT0xPdunXDxYsXczM1IiIionwv3xWH3333HYYOHYqLFy8iICAAw4cPR8OGDfH777+jfv36WLNmjcH68fHxaNKkCb7++muUL18eQ4cORbly5TBr1iw0b94cjx49yhCjf//++OijjyAi+Oijj9C6dWusW7cOtWvXRlhYWF6lSkRERJTvWJm6AY+rU6cOgoOD0aRJE4Plf//9N1q0aIGBAweiffv2sLW1BQDMnDkToaGh+PTTTzF9+nS1/qhRozBjxgx8/fXXGD16tFoeFBSEhQsXonHjxti+fTtsbGwAAN27d0fbtm3xwQcfYOvWrXmQKREREVH+o4mImLoRz6pVq1bYtm0b/vnnH9SqVQsigqJFiyI2NhZRUVFwdHRU68bHx8Pb2xteXl64cOGCWt69e3esWrUKISEhaNy4scHrN2vWDMHBwbh8+TKKFy/+TG2KjY2Fq6srYmJi4OLiYpxEiYiIyGT6fpOz5y8YYoxWZC23a498d1r5SaytrQEAVlZpBzzDwsIQERGBBg0aGBSGAODo6IgGDRrg4sWLuHr1qloeHBysHntcq1atAAAhISG5lQIRERFRvpbvTitn5cqVK9ixYwcKFy6MypUrA4AaH+jn55fpc/z8/LB161aEhYWhWLFiiI+PR2RkJCpVqgRLS8tM10//uplJSEhAQkKC+js2NhYAkJSUhKSkJACAhYUFLC0tkZKSgtTUVLWuvjw5ORnpD9haWlrCwsIiy+X66+r04jg5OfmZlltbWyM1NRUpKSlqmaZpsLKyynJ5Vm1nTsyJOTEn5sScXv6crJETeZFTbnohisOkpCS8++67SEhIwIwZM1RhFxMTAwBwdXXN9Hn6oVZ9veddPzPTpk3DhAkTMizftm0bHBwcAADFixdH9erVcfz4cVy5ckWtU65cOZQvXx4HDx7ErVu31PJq1arB19cXu3btwv3799XyevXqwcvLC9u2bTPYEJo1awZ7e3ts3rzZoA1t27bFw4cPERQUpJZZWVmhXbt2uH37Nvbt26eWOzs7o3nz5rh69SpCQ0PVck9PT9SvXx9hYWE4e/asWs6cmBNzYk7MiTmZS05AO+REbud0+PDhHLXvafL9mMPU1FS8++67WLlyJfr27Yv58+erx1auXIm3334bY8aMweTJkzM8d8yYMZg6dSrWrVuHDh06ICIiAkWKFEGDBg2we/fuDOtv374dAQEB+OijjzB79uxM25PZkcNixYrh9u3bqrjkLzPmxJyYE3NiTszpxc1p0JycHTmc91Hu5nT37l14eHjk2pjDfH3kMDU1Fb1798bKlSvxzjvv4McffzR4XD8CmNWRPv2Ur77e866fGVtbW3WldHrW1tZqTKTO0tIy09PX+ofkWZc//rrZWW5hYQELi4xDTLNanlXbmRNzet7lzIk5AcwpqzY+73LmZLqcnoepcjKWfHtBSmpqKnr16oVly5ahW7duWLp0aYY39GljBB8fk+jo6IjChQvj0qVLBpV7VusTERERmZt8WRzqheHy5cvxn//8Bz/99FOWF5D4+Phgz549iI+PN3gsPj4ee/bsQcmSJVGsWDG1vEmTJuqxx+nzGz4+xQ0RERGRuch3xaF+Knn58uXo0qULVqxYkWlhCKSdq3///fcRFxeHSZMmGTw2adIkxMXFoW/fvgbL+/XrBwAYO3YsEhMT1fK//voLwcHBCAgIgK+vr5GzIiIiInox5LsLUr744gtMmDABTk5O+PjjjzM9r96+fXtUq1YNQNoRwgYNGuDYsWMICAhAjRo1cOTIEWzbtg21a9dGSEgI7O3tDZ7ft29fLFy4EP7+/mjXrh0iIyOxZs0aODk5Yd++fShbtuwzt5eTYBMREb1czH0S7Hx3QUp4eDgAIC4uDlOmTMl0nRIlSqji0NHRESEhIfjiiy+wdu1aBAUFoXDhwhg+fDjGjx+foTAEgHnz5qFy5cqYP38+Zs+eDScnJ3To0AFTpkxB6dKlcys1IiIionwv3x05fNHwyCEREdHLxdyPHOa7MYdEREREZDosDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIR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", + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "from qiskit_aer import AerSimulator\n", + "\n", + "qc.measure_all()\n", + "simulator = AerSimulator()\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_grover_factors.ipynb.txt b/_sources/example_grover_factors.ipynb.txt new file mode 100644 index 00000000..84040984 --- /dev/null +++ b/_sources/example_grover_factors.ipynb.txt @@ -0,0 +1,105 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover: factorize number" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from typing import Tuple\n", + "from qlasskit import qlassf, Qint\n", + "from qlasskit.algorithms import Grover\n", + "\n", + "\n", + "@qlassf\n", + "def factorize(a: Tuple[Qint[2], Qint[2]]) -> bool:\n", + " return a[0] * a[1] == 9\n", + "\n", + "\n", + "q_algo = Grover(factorize)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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v0X16tWxcOFCx3SEiIiIyI7sEvJ2796NhIQEZGRkoEqVKmjWrFm+FxsuDR4eHoiLi8PkyZOxdu1axMTEwN/fH6NHj8akSZPg7u6e5zGff/45HnroISxevBgfffQRPD090bt3b0yfPh3169cvk3YTERERlSabLqGyZ88eDBw4EElJSQDu/NjCcp5ecHAwli1bpv5QQqsyMjLg7e1d6M+YiYiIqGIYvMC2x38xwh6tKFhRs0eJZ/J+//13REZG4ubNm+jUqRMiIiLg7++P1NRUxMTEIDo6Gp07d0Z8fHyBtyUjIiIiotJR4pA3depUZGdnY+PGjejSpYvVurFjx2Lz5s3o0aMHpk6dim+++cbmhhIRERFR0eW9Il8RxcbG4tlnn80T8Cy6dOmCZ5991uoWJkRERERUNkoc8tLT01G3bt17blO3bt173geWiIiIiEpHiUNeQEAA4uPj77nNb7/9hoCAgJKWICIiIqISKnHI69GjB2JjYzFx4kTcvn3bat3t27cxadIkxMTEoGfPnjY3koiIiIiKp8SXULl69Spat26NM2fOwMfHB61atcIDDzyAf/75B/v378fly5dRr1497Nu3D9WrV7d3u8sNXkKFiIhIWyr9JVR8fHwQHx+Pd955B9988w02btyornNzc8PAgQMxe/ZsTQc8IiIiovLKpjte3H///fjyyy/x+eef488//1TveBESEgJnZ2d7tZGIiIiIiqnYIW/69OkwGAyYMmWKGuScnZ3x0EMPqdtkZ2fj3XffhZeXF8aNG2e/1hIRERFRkRTrhxfbtm3D+++/Dx8fn3vO1Lm4uMDHxwfvvvsur5NHRERE5ADFCnkrVqxAtWrVMGzYsEK3HTp0KKpXr45ly5aVuHFEREREVDLFCnl79uzBE088AVdX10K3dXV1xRNPPIHdu3eXuHFEREREVDLFCnkXL15EvXr1irx93bp1kZKSUuxGEREREZFtihXydDodcnJyirx9Tk4OdLoSX2+ZiIiIiEqoWAksICAAx48fL/L2x48fR82aNYvdKCIiIiKyTbFC3uOPP47t27fj7NmzhW579uxZbN++HeHh4SVtGxERERGVULFC3tChQ5GTk4Nnn30WV65cKXC7q1ev4rnnnoPRaMSbb75pcyOJiIiIqHiKdTHkFi1aYMSIEViwYAGaNGmCN954AxEREahVqxYA4O+//8avv/6KxYsX4/Llyxg1ahRatGhRKg0nIiIiooIV+44XH374Idzc3PDBBx9g+vTpmD59utV6EYFer8f48eMxbdo0uzWUiIiIiIqu2CFPURTMmDEDr732GpYtW4Y9e/YgNTUVAFCjRg2EhYVhwIABqF+/vt0bS0RERERFU+yQZ1G/fn3O1BERERGVU7yIHREREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGlbuQ9/fff2PBggWIjIxE7dq14eLigho1auCZZ57Bb7/9lu9jMjIyMGrUKAQFBcHV1RV16tTBmDFjkJmZme/2ZrMZCxcuxEMPPQR3d3f4+vqiT58+OH36dGl2jYiIiKjMlLuQt3DhQowcORKnT59GZGQkRo8ejbZt2+LHH39EmzZt8O2331ptbzAY0K5dO8yfPx8hISEYOXIkGjVqhLlz56JDhw64fft2nhqvv/46hg8fDhHB8OHD0aVLF6xbtw6hoaFITEwsq64SERERlRonRzfgbq1atUJsbCzatWtntXznzp3o2LEj3nzzTfTq1Quurq4AgDlz5iAhIQFjx47FrFmz1O3HjRuH2bNnY/78+Rg/fry6PCYmBkuWLEF4eDi2bt0KFxcXAEDfvn3RrVs3DBs2DFu2bCmDnhIRERGVHkVExNGNKKrOnTsjOjoa+/fvR8uWLSEiqFWrFjIyMpCamgoPDw91W4PBgBo1asDPzw+nTp1Sl/ft2xerV69GXFwcwsPDrfYfERGB2NhYnDt3DrVr1y5SmzIyMuDt7Y309HRUqVLFPh0lIiIihxm8wLbHfzHCHq0oWFGzR7n7uvZenJ2dAQBOTncmIBMTE3Hx4kWEhYVZBTwA8PDwQFhYGE6fPo3k5GR1eWxsrLrubp07dwYAxMXFlVYXiIiIiMpEhQl558+fx7Zt2+Dv74+HHnoIANTz54KDg/N9jGW5ZTuDwYCUlBTUrVsXer2+0O2JiIiIKqpyd05efnJycvDKK68gKysLs2fPVgNaeno6AMDb2zvfx1mmMC3bFXf7/GRlZSErK0v9d0ZGhtrGnJwcAIBOp4Ner4fJZILZbFa3tSw3Go3I/S25Xq+HTqcrcLllvxaWmUyj0Vik5c7OzjCbzTCZTOoyRVHg5ORU4PKC2s4+sU/sE/vEPrFP2u+TM2xRFn0qinIf8sxmMwYMGIAdO3Zg8ODBeOWVVxzanpkzZ2LKlCl5lkdHR+O+++4DANSuXRvNmzfH0aNHcf78eXWbRo0aISQkBPv27cPly5fV5c2aNUNQUBB27NiBGzduqMsfe+wx+Pn5ITo62mpAIyIi4O7ujo0bN1q1oVu3brh16xZiYmLUZU5OTujevTuuXLmCvXv3qsu9vLzQoUMHJCcnIyEhQV3u6+uLNm3aIDExEX/99Ze6nH1in9gn9ol9Yp8qS5+A7rBFaffp4MGDRWpHuf7hhdlsxquvvorly5fj5ZdfxvLly6HT/e8b5g0bNuDJJ5/EsGHDsHDhwjyPf/vtt/HJJ5/g119/RYcOHWAwGODp6YkHH3wQx44dy7P92rVr8eyzz2LixImYOnVqvm3KbyYvMDAQV65cUWcC+UmJfWKf2Cf2iX1inypun9761LaZvM+Hl26f0tLS4OPjU+gPL8rtTJ7ZbMbAgQOxYsUK9OnTB1999ZVVwAMKP4fu7nP2PDw84O/vjzNnzsBkMuU5L6+wc/wAwNXVVb18S27Ozs7qD0Ms9Hp9vuf+WQ72oi6/e78lWa7T6fI8f/daXlDb2Sf2qbjL2Sf2CWCfCmpjcZezT47rU3E4qk956hVpqzKWO+C98MIL+Prrr/PtZHBwMAICArB7924YDAardQaDAbt370bdunURGBioLm/Xrp267m6W6+PdfWkVIiIiooqm3IU8y1e0K1aswHPPPYeVK1fmG/CAO9OcgwYNQmZmJqKioqzWRUVFITMzE4MHD7ZaPmTIEADAxIkTkZ2drS7ftGkTYmNjERkZiaCgIDv3ioiIiKhslbtz8iZPnowpU6bA09MT//73v/OdkuzVqxeaNWsG4M6MXVhYGI4cOYLIyEi0aNEChw4dQnR0NEJDQxEXFwd3d3erxw8ePBhLlixB06ZN0b17d6SkpODbb7+Fp6cn9u7di4YNGxa5vbwYMhERkbZo5WLI5e6cvLNnzwIAMjMzMX369Hy3qVOnjhryPDw8EBcXh8mTJ2Pt2rWIiYmBv78/Ro8ejUmTJuUJeADw+eef46GHHsLixYvx0UcfwdPTE71798b06dNRv3790uoaERERUZkpdzN5FQ1n8oiIiLRFKzN55e6cPCIiIiKyHUMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeEd3TzJkzERoaCi8vL/j5+aFXr17466+/rLZJTU3FK6+8gho1asDDwwMtWrTA2rVrHdRiIqroCnvfOXv2LBRFyfe/77//3oEtL18Y8ojonuLi4jB06FDEx8dj69atyMnJQWRkJAwG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", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "from qiskit_aer import AerSimulator\n", + "\n", + "qc = q_algo.export(\"qiskit\")\n", + "qc.measure_all()\n", + "simulator = AerSimulator()\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts, discard_lower=5)\n", + "plot_histogram(counts_readable)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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kCFDtG/fvgtuu6CgQK+//rp69OihqlWrKiQkRC1atNDEiRNltVpLbLNx40b961//UpcuXVSnTh0FBwerfv36GjZsmDZt2nTBfX3//fcaMGCAatWqpcDAQNWoUUOtWrXSqFGjtG7dOoOvjnscSUrTvsNJ8vOzqHf3DqbWAgAAAAAAAAAAYDafmaPtTMj2xhtvaMyYMapXr55q166t3bt3Ky8vT/Xr11d8fLw+++wzPfroo6pbt67q1KlzdnmdOnW0fft21axZ85ztpqenq3///oqPj5efn58aNGigqKgo7d27VwUFBbrkkku0cuVKNWnS5Jx2zZo104EDB1S9enXVrVtXQUFB+v3335WRkaGAgAB98cUXGjp06DltZs2apUceeUSSVKNGDTVs2FB5eXk6evSocnJy9NBDD+ntt9/24Kv4196f9732HU5Sl3YtNbT/labVAQAAAAAAAAAAUBbM0XYBkyZN0kcffaTk5GTFxcUpKSlJXbp0UXJyskaNGqUnnnhCH330kVJSUhQXF6ejR4+qU6dOSktL08svv3zOtpxOp4YPH674+HgNHDhQBw4c0OHDh7V9+3ZZrVaNGjVKv//+u+66667z6pgyZYr27dunjIwM7dy5U3FxcTp27JgWLFigkJAQ3X///crJyTm7vt1u1+TJkyWdDtzS09O1ZcsWJSQk6NSpU1q9erWuu+46z754f4Gn2QAAAAAAAAAAAM7lc0+0jR07VjNmzDhn2Q8//KD+/ftfcPnSpUs1YMAAtWvXTtu2bTv78++//14DBw7UpZdeqk2bNikkJOScdsXFxeratavi4uL0yy+/6IorrihVrU899ZSef/55zZ07V7fddpskKS0tTXXr1lW1atV04sQJ1375i5j50QJl5+SVaRu5efmyFxcrMDBAocHBbqoMAAAAAAAAAADA+woL8vXMhPslSS/N/kz/fPAOQ9sJcGdR5cH9999/3s86duxYquUHDx485+dff/21JGnkyJHnhWyS5O/vr8GDBysuLk6rVq06L2jbt2+fvvjiC23btk0ZGRkqKiqSJB07dkyStHXr1rNBW82aNRUSEqKsrCwtW7ZM/fr1K/XvfDHZOXk6lWNzy7aKiuwqKrK7ZVsAAAAAAAAAAABmKCwsOPvfOWV4WMnngramTZue97M/zrtW0vJatWpJ0jlDOUrS9u3bJUkffPCB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AAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAAAAAAAAAwgaANAAAAAAAAAAAAMIGgDQAAAAAAAAAAADCBoA0AAAAA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8/nIVl9fn9ra2tx9991CGwAAAAAAvAx4R9t+UF1dnenTp2fQoEEpKytL3759M23atNTW1uayyy5LSUlJbr755rYek5eorq4uc+fOzUc+8pHcddddTSJbx44dc9RRR+XEE0/MSSedlOOOOy6vec1rmpz/+OOP59vf/nauueaarF69OknTyJYkp512Wi655JL996UAAAAAAIDdsqKtlS1dujQTJ07Mhg0bUl5enmHDhmXdunW56aabsnLlymzatClJMnr06LYdlJekuro6M2fOzJo1axq3de7cOaeeempOPfXUHHHEEWnXbteuXVNTk7/85S+58847s2zZsiTJ3/72t3z84x/PCSeckD/96U9NItu73/3uZq8DAAAAAADsf0JbK6qurs7kyZOzYcOGXHXVVbn22mvTpUuXJMmNN96YD3/4wyktLU1JSUlGjhzZxtNS1N///vf853/+ZzZu3JgkadeuXc4555ycd955KSsre9FzKyoqcuKJJ+bEE0/MypUrM2vWrPztb3/Lzp07s3DhwsbjRDYAAAAAAHj58f/at6Irr7wyVVVVmTp1ambOnNkY2ZJk+vTpGTVqVOrq6tK/f/907dq1DSelqC1btuQzn/lMY2R7zWtek09/+tO56KKL9hjZ/tmRRx6Z66+/PmPHjm2yvX///iIbAAAAAAC8DPl/7lvJsmXLMmfOnPTq1Ss33HBDs8eMGTMmSTJq1Khd9v30pz/NiSeemPLy8hx88MF5/etfn4ceeqhVZ6ZlGhoa8o1vfCNPPPFEkqRPnz751Kc+lSOPPLLwNRcvXpzFixc32bZmzZosX778Jc0KAAAAAADse0JbK5k9e3bq6+szZcqUVFRUNHtMp06dkuwa2m666aa85S1vyUknnZTbbrsts2fPzoQJE7J169ZWn5u9d/fdd+fPf/5zkuTggw/ONddck27duhW+3j333JObbrqp8Z1sAwYMaNz39a9/Pdu2bXtJ8wIAAAAAAPuWd7S1kvnz5ydJxo8fv9tjqqqqkjQNbStXrszVV1+dL3zhC5k6dWrj9je+8Y2tNClFPPvss/nud7/b+Pnyyy9Pjx49Cl/vnyPbaaedlssvvzyf+tSnsmLFimzYsCE///nPc8EFF7zk2QEAAAAAgH1DaGsljz32WJKkX79+ze6vq6vLwoULkzQNbbfeemsOOuigvOtd79qn8wwePLhN3/H1pnd8IOUVXbN+w/r06dNnl88vNx06dNjtIz+TZOHChampqUmSnHDCCTn++OML36u5yPb8O9ne85735EMf+lDq6+vzm9/8Juedd15KS5v/aztkyJBs37698BwAAAAAAPBqVFlZuctrnfaW0NZKamtrk2S3j3ucM2dOqqur06VLlyaPCPzjH/+Yo446Kt///vdz3XXXZe3atRk8eHA++clP5q1vfWvhedavX1/43H2hfufOxt8ff/zxXT6/3HTs2HG3+xoaGvLrX/+68fO5555b+D4vFtmS5LDDDsvxxx+fe++9N1u2bMn//M//5MQTT2z2WuvWrfN4SQAAAAAA2I+EtlZSWVmZzZs3Z8mSJRk3blyTfevXr8/VV1+dJBk5cmRKSkqa7Hv88cfz0Y9+NDNmzEjfvn3zrW99K29729tyyCGHZMKECYXm6d27d5uuaGvXvn3j74cffvgun19uOnTosNt969ata1yxOGjQoCahtCX2FNmed+aZZ+bee+9N8lyI3V1oO+yww6xoAwAAAACAFqqsrCx8rtDWSiZMmJBly5ZlxowZOeOMMzJkyJAkyaJFi3LJJZekuro6STJ69Ogm59XX16empibf+973ct555yVJ/uVf/iUPP/xwPv3pTxcObStWrEh5eXnh7/NSXf+VH+Spmtr0ruydqqqqXT6/3NTV1WXu3LnN7lu5cmXjn4877rhC19/byJYkQ4cOTadOnbJ169asWrVqt9dcvnz5bh8rCQAAAAAA7Httt8TpADd9+vT07Nkza9euzfDhwzNixIgMHjw4Y8eOzcCBA3P66acnafp+tiTp0aNHkjQJaiUlJZkwYUIefPDB/fcF2K0Xxq6BAwe2+PyWRLYkadeuXeN9Nm3alC1btrR8aAAAAAAAYJ8T2lpJnz59smDBgkyaNCllZWVZs2ZNevTokVmzZmXevHlZvnx5kl1D2/Dhw3d7zWeffbZVZ2bvrFu3rvHP/fr1a9G5LY1szd3n5fhOOwAAAAAAeDXynLlWNHTo0Nx+++27bK+pqcmaNWvSrl27HH300U32nXvuubn11lvz61//Ov/6r/+a5LnHSd555505/vjj98vcvLiKior07NkzO3bsaNHjOP/nf/6nUGRLku7du6d79+456KCD2vRdewAAAAAAwP8jtLWBhx56KA0NDRkyZEg6d+7cZN/kyZNz8skn593vfnc2btyYI444It/85jfz0EMP5c4772yjiXmhK6+8stB5vXv3Tnl5eZ5++ukWRbbkuf8uJk+eXOi+AAAAAABA6xDa2sADDzyQZNfHRibPvY/ttttuy4c//OFcc801eeqppzJq1Kjccccdje9145Wpb9+++eQnP5nf//73mTJlipVpAAAAAADwCie0tYEXC21J0q1bt8yaNSuzZs3an2OxH/Tt2zeXXHJJW48BAAAAAADsA5bUtIE9hTYAAAAAAABe/qxoawPz589v6xEAAAAAAAB4iaxoAwAAAAAAgAKENgAAAAAAAChAaAMAAAAAAIAChDYAAAAAAAAoQGgDAAAAAACAAoQ2AAAAAAAAKEBoAwAAAAAAgAKENgAAAAAAAChAaAMAAAAAAIAChDYAAAAAAAAoQGgDAAAAAACAAkrbegB4OWrfvn3OP//8fXa9z82ak6dra9OlvDxXX3HhLp/3hfbt2++T6wAAAAAAAHtHaINmlJSUpLR03/31aEhS3/Dc76Wlpbt8BgAAAAAAXnk8OhIAAAAAAAAKENoAAAAAAACgAKENAAAAAAAAChDaAAAAAAAAoAChDQAAAAAAAAoQ2gAAAAAAAKAAoQ0AAAAAAAAKENoAAAAAAACgAKENAAAAAAAAChDaAAAAAAAAoAChDQAAAAAAAAoQ2gAAAAAAAKAAoQ0AAAAAAAAKENoAAAAAAACgAKENAAAAAAAAChDaAAAAAAAAoAChDQAAAAAAAAoobesBgJenhoaG7Ny5s63HaJH27dunpKSkrccAAAAAAOBVQmgDmrVz587MnTu3rcdokfPPPz+lpf5ZAwAAAABg//DoSAAAAAAAAChAaAMAAAAAAIAChDYAAAAAAAAoQGgDAAAAAACAAoQ2AAAAAAAAKEBoAwAAAAAAgAKENgAAAAAAAChAaAMAAAAAAIAChDYAAAAAAAAoQGgDAAAAAACAAoQ24BWhoaEh1dXVbT0GAAAAAAA0Km3rAYAD186dO7N69eqsWrUqq1evzpNPPpkdO3aktLQ0Xbp0yYABAzJgwIAMGjQonTt33u11Ghoa8v3vfz+/+93v8rGPfSxHHnnkfvwWAAAAAADQPKEN2Oc2bdqU+fPn57e//W02b9682+PuueeeJEmHDh1y4okn5swzz8zAgQObHPN8ZJs3b16S5Prrr8+XvvSlVFRUtN4XAAAAAACAveDRkftBdXV1pk+fnkGDBqWsrCx9+/bNtGnTUltbm8suuywlJSW5+eab23pMeMl27NiRH/7wh3n/+9+fn/zkJy8a2V5o+/bt+f3vf59rrrkmn/3sZ7Nx48Yku0a2kpKSXHzxxSIbAAAAAAAvC1a0tbKlS5dm4sSJ2bBhQ8rLyzNs2LCsW7cuN910U1auXJlNmzYlSUaPHt22g8JLtHr16nzlK19JVVVV47aSkpIce+yxGTFiRAYMGJA+ffqkY8eOqaury5NPPpnVq1dn+fLl+eMf/5hnnnkmyXN/Z66++upccsklqaqqahLZ3v3ud2f8+PFt8v0AAAAAAOCfCW2tqLq6OpMnT86GDRty1VVX5dprr02XLl2SJDfeeGM+/OEPp7S0NCUlJRk5cmQbTwvFLV26NP/1X/+V7du3J0nat2+fN77xjXnDG96QXr167XJ8aWlp+vbtm759++aUU07JxRdfnLvvvjtz587N5s2b88wzz2TWrFmNx4tsAAAAAAC8HHl0ZCu68sorU1VVlalTp2bmzJmNkS1Jpk+fnlGjRqWuri79+/dP165d23BSKO6BBx7IzJkzGyNb//79c/3112fKlCnNRrbmlJWVZcKECfnc5z6Xk08+eZf9IhsAAAAAAC9HQlsrWbZsWebMmZNevXrlhhtuaPaYMWPGJElGjRrVuO20005LSUlJs7/+/d//fb/MDnururo6//Vf/5W6urokydixY/PpT386/fr1K3S98vLyZqNzhw4dXtKcAAAAAADQGjw6spXMnj079fX1mTJlSioqKpo9plOnTkmahravfvWreeqpp5ocN2/evFx33XU5++yzW29gaKGGhobMmjUrW7duTfJcOL7yyitTWlrsn5WGhoZ8//vfb3wn2wt9+9vfzvDhw9OtW7eXMjIAAAAAAOxTVrS1kvnz5yfJiz7urqqqKknT0DZs2LCccMIJTX4tXbo0hxxySM4666zWHRpa4Pe//30eeOCBJEmPHj3yvve9b59FtpKSklxxxRU54YQTkiQ1NTW59dZb983gAAAAAACwj1jR1koee+yxJNntI/Tq6uqycOHCJE1D2z978skn88tf/jLvfe97C0eMJBk8eHDatWu7rvqmd3wg5RVds37D+vTp02eXzwe6V+L379Chw24fe1pfX5+f/exnjZ/f9a53pXPnzoXu01xk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ZeDApu/YGjRoUFauXJkePXqkd+/e6dChQ/72t79l48aNKS0tzQ9/+MOcf/75Tc756le/mve9731Jkp49e6Zfv37ZunVr1q5dm5qamlxxxRX5+te/vtc/k3396Mhf/WFRfven+9L70J658t/+tUXv1GpoaMh3fvLLPLJqbZLkDaccn/HjjnlJ87zS/OWvq/K/f/abJMlrenXP1Evf9KoIjc975tlt+dKtP8k/nq5NSZJ3vfXsDHyVhEYAAAAAAA5MB8yKtudNnz493/3ud/P4449nyZIlqaqqyvHHH5/HH38873znO3PNNdfku9/9btatW5clS5Zk7dq1GTNmTDZs2JDPf/7zTa7V0NCQCy+8MPfdd18mTZqUlStXZs2aNfnLX/6S6urqvPOd78zf/va3XHzxxbvM8clPfjIrVqzIxo0b8+CDD2bJkiV54okn8v/9f/9fysrKcvnll6empqbx+Lq6unz84x9P8lxw+/vf/54///nPefjhh/PUU0/lrrvuyhve8IbW/eG9iBeuZpvw+jEtimzJcyH0/ImnpnOnjul3+GtyyutGtcaYL2sjXzswxwwf9NxqvrNfHav5XqhzWce8+Y2nJUlOHjtSZAMAAAAA4BXvgFvR9v73vz833XRTk32//OUvM3HixN3u/8UvfpE3vvGNGTlyZO6///7G7XfccUcmTZqUo48+OosWLUpZWVmT83bu3JmxY8dmyZIlufvuu/P6179+r2b9xCc+keuuuy6zZ8/ORRddlCTZsGFDevfune7du2fTpk0t+/K78cIVbdd+/pvp0LFsD2fs3rbt27Nt+460a9cuFZ07Fb7Ojrq6tG/XLu3aHXCNd680NDRkR11dOhx0UFuP0ma279iRg0pLWxxrAQAAAACgNXSp6JT3X/qvhc494JbUXH755btsO/bYY/dq/6pVq5psnzt3bpLk0ksv3SWyJUn79u1zzjnnZMmSJfn973+/S2hbsWJFfvjDH+b+++/Pxo0bs2PHjiTJE088kSRZunRpY2g75JBDUlZWli1btuTOO+/MGWecsdffeW88VftMOuzY+ZKvU19fn6dqavfBRK9uz27b3tYjtKlX+/cHAAAAAODAcMCFtiOPPHKXbS9871pz+w899NAkafIoxyT5y1/+kiT59re/nf/zf/5Ps/f7+9//niR5/PHHm2z//Oc/n4985COpq6vb7awbN25s/HP79u0zbdq0zJgxI2eeeWaOPfbYTJgwISeddFJOPfXUdO3adbfX2RtdyzsXXtG2r1azAQAAAAAAvNx0qSjePg640FZeXr7Lthc+om5P+19oy5YtSZKHH354j/d95plnGv+8cOHCfOhDH0r79u1z3XXX5dxzz03//v1TXl6ekpKS3HrrrbnssssaV7g97/rrr0+fPn3yla98JUuWLMmSJUty4403pmPHjnnb296WmTNnpkePHnucpTlXX3FRs999T2q3Ppsbvz47STLl3AkZPqR/ofsDAAAAAAAcaA640LYvPf9+s9tuuy2TJ0/e6/O+973vJUmuuuqqfOxjH9tl/wtXsr1Qu3btMnXq1EydOjVVVVVZsGBB7rzzzvzoRz/Kt7/97axduzZ33nnnXs/RuXPn1NTU5Gs/+Fm++O2fFnon1gtXs/3szoX52Z0LW3wNAAAAAACAlyvvaGslw4cPz9KlS/Pggw+2KLStXr06SXLSSSc1u/+ee+7Z4zX69OmTt771rXnrW9+aq666KiNGjMhvfvObrF69OgMGDNirOUpKSlJeXp7tOxrydO0zez7hRXg3GwAAAAAAQFNC24u44IIL8oMf/CC33HJL3v/+9zeucNuTTp2ee5bnhg0bdtm3YsWK3H777S2aY/jw4Tn44IOzZcuWrFu3bq9D2/OKPlvUu9kAAAAAAIADnXe0tZJzzz03p556au66666ceeaZueWWW3L00Uc37q+vr8+9996b7373u5k+fXoGDhyYJDn55JPzs5/9LDfccENOP/30HHnkkUmShx56KOeff37atWu3y70efvjhfOELX8hll12W173udY2Pedy5c2e+/OUvZ8uWLSkrK8vw4cNb/D2KLHf0bjYAAAAAAIAXV9LQ0NDQ1kPsC8+Hqd19naL7q6urc+655+aPf/xjkqRfv36prKzM1q1bs3LlytTWPvc4xWXLluW1r31tkuTpp5/Osccem0cffTQHHXRQjjrqqNTX12fZsmXp3bt33vve9+bjH/94Lr300nznO99JkixdujTHHHNMkqRLly458sgj0759+6xZs6bxnW5f/epX8573vKfQz6elfvWHRfndn+5L70N75sp/+9dC73cDAAAAAAA4kO26tIomevXqlbvuuivf+c53csYZZ6S2tjaLFy/O6tWrM2jQoEybNi133XVXhgwZ0nhOly5dcvfdd+ed73xnunfvnkceeSQ1NTW54oorsmTJkhx++OG73GfIkCH55je/mQsvvDC9e/fOqlWrcv/996esrCxvfvObs2DBgv0W2Wq3Pps//vnBJMmE148R2QAAAAAAAJpxwKxoY9/ZuOWp/J9fLUjNM89azQYAAAAAALAbQhu79ey27Snr2KGtxwAAAAAAAHhZEtoAAAAAAACgAO9oAwAAAAAAgAKENgAAAAAAAChAaAMAAAAAAIAChDYAAAAAAAAoQGgDAAAAAACAAoQ2AAAAAAAAKEBoAwAAAAAAgP+/PTsWAAAAABjkbz2H3aXRINoAAAAAAABgEG0AAAAAAAAwiDYAAAAAAAAYRBsAAAAAAAAMog0AAAAAAAAG0QYAAAAAAACDaAMAAAAAAIBBtAEAAAAAAMAg2gAAAAAAAGAQbQAAAAAAADCINgAAAAAAABhEGwAAAAAAAAyiDQAAAAAAAAbRBgAAAAAAAINoAwAAAAAAgEG0AQAAAAAAwCDaAAAAAAAAYBBtAAAAAAAAMIg2AAAAAAAAGEQbAAAAAAAADKINAAAAAAAABtEGAAAAAAAAg2gDAAAAAACAQbQBAAAAAADAINoAAAAAAABgEG0AAAAAAAAwiDYAAAAAAAAYRBsAAAAAAAAMog0AAAAAAAAG0QYAAAAAAACDaAMAAAAAAIBBtAEAAAAAAMAQGhemd1SJDuYAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.draw(\"mpl\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_grover_hash.ipynb.txt b/_sources/example_grover_hash.ipynb.txt new file mode 100644 index 00000000..41d5f9de --- /dev/null +++ b/_sources/example_grover_hash.ipynb.txt @@ -0,0 +1,193 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover search: hash function preimage attack\n", + "\n", + "In the ever-evolving landscape of cybersecurity, the advent of quantum computing presents both an extraordinary opportunity and an unprecedented challenge. In this notebook we exploit a Grover Search to perform a preimage attack on a toy hash function.\n", + "\n", + "A preimage attack on a cryptographic hash function `h(m)` tries to find a message `m` that has a specific hash value. Using qlasskit it is easy to write an hash function like the following `hash_simp`:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint, Qint8, Qlist\n", + "\n", + "\n", + "@qlassf\n", + "def hash_simp(m: Qlist[Qint[4], 2]) -> Qint[8]:\n", + " hv = 0\n", + " for i in m:\n", + " hv = ((hv << 4) ^ (hv >> 1) ^ i) & 0xFF\n", + "\n", + " return hv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thanks to the fact that qlasskit function are standard python functions, we can call the `original_f` to perform some kind of analysis on the hash function. Since the input space is tiny (it is a toy hash function), we can detect if the hash function is uniform (if it maps equally to the output space)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hash function output space: 256\n" + ] + } + ], + "source": [ + "from collections import Counter\n", + "\n", + "d = Counter(hex(hash_simp.original_f((x, y))) for x in range(2**4) for y in range(2**4))\n", + "\n", + "print(\"Hash function output space:\", len(d))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We got that `hash_simp` is following an uniform distribution. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0IAAAQzCAYAAABOh5yeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACRTElEQVR4nOzdeXiU1d3/8c8kAbIDIeikJLJHSSBBCSguaDBYkcUVRRE33OUBlRKr1mprK8bSpy1FW2y1ti4xihsm4hqtEZUmRiyEIBAJJiEDDAlLFpbJzO8Pf+YhYQKZZJaQ835dVy8v5j7nPt8zndyZT869WFwul0sAAAAAYJCgQBcAAAAAAP5GEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyB0FHa7XZmZmRo2bJhCQ0OVkJCg+fPnq76+XnPmzJHFYtHSpUsDXSYA+Ex51T498lSxbvjFp7r+wX/r/j8VqmRzbaDLAgCg0ywul8sV6CK6ojVr1mjy5Mmy2WyKiIhQYmKitm3bpu3bt2vKlCmqqanRF198oYKCAp199tmBLhcAvGrz93t1zxNfKq+gQu5+S5ybZtXiBeOUltzf/8UBAOAFBCE37Ha7Tj31VFVWVmrBggV6+OGHFRUVJUl64okndN999ykkJERNTU3avXu3oqOjA1wxAHjPN9/uUsat78peu/+o7cJDQ7RiySSdf8ZP/FQZAADeQxBy45prrlF2drbmzp2rP//5z0dsHz16tL755hsNHjxY3333XQAqBADfsNfuV+qMN7RtR0O72kdF9FBR9sVKHNTbx5UBAOBdXCPUSmlpqXJychQbG6tFixa5bTNmzBhJUmpqaovXt2zZounTpysqKkp9+/bVddddp127dvm8ZgDwlr+//m27Q5Ak7as/pD++sM6HFQEA4BsEoVays7PldDo1a9YsRUZGum0TFhYmqWUQ2rdvn9LT01VZWans7Gw9/fTTKigo0NSpU+V0Ov1SOwB0RlOTU399dYPH/Z7P3ax99Qd9UBEAAL4TEugCupr8/HxJUnp6epttKisrJbUMQk8//bSqqqr06aef6qSTTpIkxcfH68wzz9SKFSt0ySWX+K5oAPCCkrLd2rqtzuN+dQ0O/bvIpqnnnuSDqgAA8A2uEWolISFBlZWV+vrrrzV69OgjtjscDsXFxclut6usrExDhgyR9H/B6eOPP27RfujQoTrvvPP0zDPPeFxLWlqabDab55MAgA44EDJQ9uibOtS3b93rCj/4jZcrAgDg6KxWq4qKijrUlxWhVurr6yVJjY2Nbrfn5OTIbrcrKipKgwcPbn59/fr1mjFjxhHtk5OTtX79+g7VYrPZVFVV1aG+AOCxsJ5SB2+CWbvLptq9HK8AAMcPglArVqtVtbW1Ki4u1vjx41tsq66u1sKFCyVJKSkpslgszdtqa2vVp0+fI/YXExOjb7/9tsO1AIC/OC0W2VyH5LL0aH8nl0uyWHRi74MKiRrgu+IAAHCjM9+XCUKtZGRkqLS0VFlZWZo0aZISExMlSYWFhZo9e7bsdrskuT1tzts6uswHAB11yyMF+vvrG9vfwWLRT88coHf/utZ3RQEA4APcNa6VzMxM9evXTxUVFUpOTtaoUaM0fPhwjRs3TkOGDNHEiRMlHXnr7L59+2r37t1H7K+mpkYxMTH+KB0AOm3u1UkKCrIcu+Fh5s1K9lE1AAD4DkGolfj4eBUUFGjKlCkKDQ1VeXm5YmJitGzZMuXl5Wnjxh/+Uto6CI0YMcLttUDr16/XiBEj/FI7AHRW6sn99Oefn9Hu9vfdlKKLzknwYUUAAPgGd43zQF1dnaKjo2WxWLRv3z6Fh4c3b1u8eLEeeOABfffdd4qPj5ckrV69WmeccYZef/11XXrppYEqGwA89uwbGzV30edq3N/kdntIsEUP33GqHrxldIvrJQEAOF4QhDzwY7A5+eSTtWFDy4cO7t27V6NGjVJsbKx+9atfaf/+/crMzFT//v31xRdfKCiIxTcAx5favQf0z7c26Zk3NqqkrFYulxQcbNHDt5+qWy4/WdbY8GPvBACALopv5x5Yu/aHi4FbnxYnSdHR0crPz1dcXJxmzpypm2++WWeeeaZyc3MJQQCOS32je+nu2SO19vXL9JP+P4Qea78wPXTbqYQgAMBxj7vGeeBoQUj64eGpubm5/iwJAAAAQAewVOGBYwUhAAAAAMcHVoQ8kJ+fH+gSAAAAAHgBK0IAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEoaOw2+3KzMzUsGHDFBoaqoSEBM2fP1/19fWaM2eOLBaLli5dGugyfWr/AYf+s3anPvpym778ZofqGw4FuiQAAOBHBw81qXDd/30X2Fd/MNAlAV4REugCuqo1a9Zo8uTJstlsioiIUFJSkrZt26YlS5aorKxMNTU1kqTRo0cHtlAfKa/ap7+8Uqpn3tioXbsPNL8eHdlDN0wfrrtmJilxUO8AVggAAHyp0lavv75aqr+99q121Oxvfj0yPESzpw7T3KuTlDS0bwArBDrH4nK5XIEuoqux2+069dRTVVlZqQULFujhhx9WVFSUJOmJJ57Qfffdp5CQEDU1NWn37t2Kjo4OcMXe9f7nlbr83o9U1+Bos02vnkF64bHzdMUFg/1YGYBAic/IVtWOBg04IVyVH14d6HIA+NinRdW6eP6H2r2v7dWfHiFBeuZXZ2v2tOF+rAzwHk6Nc2PevHmqrKzU3LlztXjx4uYQJEmZmZlKTU2Vw+HQoEGDul0IWvX1dk2f98FRQ5AkHTjo1Mz7PtbKggo/VQYAAPzhq/V2XXTX+0cNQZJ0yOHU9b/4VK9/WO6fwgAvIwi1UlpaqpycHMXGxmrRokVu24wZM0aSlJqa2vzaj8Fp3Lhx6tWrlywWi1/q9SaXy6Vbf/2ZDhx0tqt9U5NLt/zqMzkc7WsPAAC6vjt/87nqG4/+B9EfuVzSbY+u0v4D7WsPdCUEoVays7PldDo1a9YsRUZGum0TFhYmqWUQ2rx5s1577TVZrVaNHTvWL7V626df2bS+bLdHfap2NGjFJ9/7piAAAOBXRSU79Z91Oz3qY6/dr1ff3+KjigDfIQi1kp+fL0lKT09vs01lZaWklkFowoQJqq6u1ooVK5SRkeHbIn3k2Tc2dqzfmx3rBwAAupaOfxfY5OVKAN/jrnGtbN26VZI0cOBAt9sdDodWrVolqWUQCgryfqZMS0uTzWbz+n7bsjPqBqmH5zc/eC+/SPHxN3m/IABdRnWfe6Wg3qq2VSs+Pj7Q5QDwEXvkLKlnosf9Cr4sUXz8rT6oCDg6q9WqoqKiDvUlCLVSX18vSWpsbHS7PScnR3a7XVFRURo82Ld3TLPZbKqqqvLpGC0MPij18Lybw+Hwb50A/C+qSQqSnE1N/LwD3dmgA1JPz7s1cWzAcYgg1IrValVtba2Ki4s1fvz4Ftuqq6u1cOFCSVJKSorPb4hgtVp9uv/WanockPv4d3S9ghsVO2CA1+sB0HVUBwfLKSkoOFhx/LwD3VZtj4Nq6EC/npYG9efYgADozPdlglArGRkZKi0tVVZWliZNmqTExB+WhwsLCzV79mzZ7XZJ/nmQakeX+Trq3c8qNfnO9zzu98ziOZo1xf0d9gB0Dz8+RyjOGqfKdZWBLgeAjxR8ZdOEG/M87vfnR6/RrVf82gcVAb7DzRJayczMVL9+/VRRUaHk5GSNGjVKw4cP17hx4zRkyBBNnDhRUsvrg7qLC84coCHxUcdueJjYvqG6YhIPVQUAoDs4+7QTNXJYX4/6REf20DUXDfVRRYDvEIRaiY+PV0FBgaZMmaLQ0FCVl5crJiZGy5YtU15enjZu/OFuKt0xCAUFWbT0/vEKDm7/KX9L7jtDvXoG+7AqAADgLxaLRX++f7x6hLT/K+L//ux0RYZ34CJjIMAIQm6MGDFCubm52rdvn/bt26fVq1fr1ltvVX19vcrLyxUUFKSRI0cGukyfmHxOgl547NxjHgCDgiz660Nn6Wr+AgQAQLdy3tg4vfr7iQrtdew/dP7vwtM157KT/VAV4H1cI+SBkpISuVwuJSYmKjw8/Ijty5cvlyStX7++xb8HDRqktLQ0/xXaSTMnD9WIIX30xxdK9PK732n/gaaW2y8covmzknVG6gkBqhAAAPjSxekDVZR9sf70YolezCtTw35Hi+2XZwzS/FnJOmeMf2/sBHiTxeVyuQJdxPHi73//u2655RZdeeWVysnJOWJ7W3eRu/766/Xcc8/5uDrfqNlzQF98s12zH/i3avcelLVfmKo/vibQZQHwsx9vljDghHBVfnh1oMsB4Ee79x7QqjWHfxcIVfXHswJdFtBprAh5YO3atZLavj6oO2bKmN69NGXCSQoPDVHt3oMeXT8EAACOf32iW38X4MoKdA98kj1wrCAEAAAA4PjAipAH8vPzA10CAAAAAC9gRQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BKGjsNvtyszM1LBhwxQaGqqEhATNnz9f9fX1mjNnjiwWi5YuXRroMuEje+sO6qmX1+us697W4AtzNGzKK5p060q9vLJMBw81Bbo8AADgY/UNh/S35Rt0zvW5GnxhjoZe9IomznlHL+Ru1v4DjkCXh04KCXQBXdWaNWs0efJk2Ww2RUREKCkpSdu2bdOSJUtUVlammpoaSdLo0aMDWyh84qmX1+u+PxaqrqHlQa6sYp8+/HKbTuwXpmd+dbamTDgpQBUCAABf+sebG3XP71Zrz76DLV7/rnKfPi6s1t1PfKllD52lyycNDlCF6CxWhNyw2+2aNm2abDabFixYoOrqahUXF8tmsykrK0t5eXkqLCyUxWJRSkpKoMuFly36+ze667EvjghBh9u+q1HT532o1z7Y4sfKAACAP/zphXW66ZcFR4Sgw+3afUAzfpav59/e5MfK4E0EITfmzZunyspKzZ07V4sXL1ZUVFTztszMTKWmpsrhcGjQoEGKjo4OYKXwtg+/rNIDS4ra1dbpdGnW/Z+orGKvj6sCAAD+surr7brnd6vb1dblkm76ZYFKNtf6uCr4AkGoldLSUuXk5Cg2NlaLFi1y22bMmDGSpNTU1ObXli9frssvv1wDBw5UeHi4TjnlFD344IOqq6vzS93wjj88v86j9gcOOvXXVzb4qBoAAOBvf3qxRC5X+9s7mlx68uX1visIPkMQaiU7O1tOp1OzZs1SZGSk2zZhYWGSWgahxYsXKzg4WI899phWrlypO+64Q3/5y1904YUXyul0+qV2dM53lXu18rNKj/s9++ZGNe7ngkkAAI531Tsb9MZH5R73ez53s/bWtX0aHbombpbQSn5+viQpPT29zTaVlT98WT48CL399tvq379/87/PPfdc9e/fX7NmzdJnn32mCRMmeFxLWlqabDabx/18obrPvVJQb1XbqhUfHx/ocnyioedIuSJneNyvZs8BDTp5nHo07fBBVUDXYMIxAMDRmXAcaOyRKEfULI/71TU4NCx5gno2ef4HVXSO1WpVUVH7LmtojSDUytatWyVJAwcOdLvd4XBo1apVkloGocND0I/S0tIkSVVVVR2qxWazdbiv10U1SUGSs6mp69TkbX0HS+4XAY9ph32P1NBN3xdAMuMYAODoTDgO9P6JFHXsZu7srNkn1XXT96WbIgi1Ul9fL0lqbGx0uz0nJ0d2u11RUVEaPPjot0v8+OOPJUkjRozoUC1Wq7VD/XyhOjhYTklBwcGKGzAg0OX4RGOPMNV0sO8JsdHq0dQ93xdAMuMYAODoTDgO7O8Rrl0d7Ns/JlI9e3fP96Ur68z3ZYJQK1arVbW1tSouLtb48eNbbKuurtbChQslSSkpKbJYLG3up6qqSg899JAuvPDCDj9rqKPLfL4Qn5Gtqh0NirPGqXJd91z23b6rUQmTXtYhh2fXdCVYI/Rd8VcKCeGSO3RfJhwDABydCceB3XsPaEDGy2rw8Nrf/n1DVVH0uXr1DPZRZfAFvrm1kpGRIUnKysrSxo0bm18vLCxUenq67Ha7pKM/SLWurk4XX3yxevbsqWeffdan9cJ7TuwXphkXeP5QtNuuOIUQBABAN9AnupdmTRnqcb+bLzuZEHQc4ttbK5mZmerXr58qKiqUnJysUaNGafjw4Ro3bpyGDBmiiRMnSmp5fdDhGhsbNW3aNG3ZskXvv/++4uLi/Fk+OmnBdSPVw4NQE9s3VDdffrIPKwIAAP5097XJCu3V/lDTO7Kn7rjqFB9WBF8hCLUSHx+vgoICTZkyRaGhoSovL1dMTIyWLVumvLy85lUid0Ho0KFDuuKKK1RUVKSVK1cqKSnJ3+Wjk05LitW/fjtBwcFtn/b4o6iIHnp7ySSd2C/MD5UBAAB/SBraVy8/kd6uP4yGh4bojT+erwRrB++2hIDiGiE3RowYodzc3CNer6urU3l5uYKCgjRy5MgW23589tBHH32kd955R+PGjfNXufCymZOHqm90L939xJfasGWP2zZnpPTXsl+erZTEGD9XBwAAfO3i9IF6768/1f8s+kIlZbvdthmTFKu//OJMjR155J2DcXwgCHmgpKRELpdLiYmJCg8Pb7Htrrvu0quvvqqf//znCg8P15dfftm8bejQoW5vr42u66dnxWv9m5fr4/9U6/nczcpeWaYDB52KCAvRp/+YotOSYgNdIgAA8KH0cT/R2tcv02fF2/XPFZv0Qt7m5u8CHz9zEQGoG+DUOA+sXbtWkvvT4lauXClJevzxxzV+/PgW/8vLy/NrnfAOi8Wiiaf/RP94dIJi+4RKkvpE9SQEAQBgCIvFonPGWPX3X53T4rsAIah7YEXIA0cLQuXl5X6uBgAAAEBHsSLkgaMFIQAAAADHD1aEPJCfnx/oEgAAAAB4AStCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BKGjsNvtyszM1LBhwxQaGqqEhATNnz9f9fX1mjNnjiwWi5YuXRroMgGfaWpyamVBhbKe/UaPPFWsJS+WaEvlvkCXBQAA/MTpdOnDL6uavwv88fl12rR1T6DL8oqQQBfQVa1Zs0aTJ0+WzWZTRESEkpKStG3bNi1ZskRlZWWqqamRJI0ePTqwhQI+0NTk1J9eLNHS7FJtqWoZfO5+4ktNPjtev7h1tMannhigCgEAgC85nS49lVOqJS+VaNPWvS223fO71brgzAF64OZUnZsWF6AKO48VITfsdrumTZsmm82mBQsWqLq6WsXFxbLZbMrKylJeXp4KCwtlsViUkpIS6HIBrzpwsEmX3fORFiz+zxEhSJJcLumdgkqde+M7ynn3uwBUCAAAfMnhcOqan3+s/1n0xREh6Efvf16l829ZqX++tcnP1XkPQciNefPmqbKyUnPnztXixYsVFRXVvC0zM1OpqalyOBwaNGiQoqOjA1gp4H23/uozrfjk+2O2O+Rw6tr7P9G/i6r9UBUAAPCX+VlfKufdLcds19Tk0k0PF+jdzyr9UJX3EYRaKS0tVU5OjmJjY7Vo0SK3bcaMGSNJSk1NbX6toKBAGRkZiouLU69evRQfH6+rrrpKpaWlfqkb8IZ1m2r0r7c3t7u9o8mlB//8lQ8rAgAA/vRd5V795ZX2f391Ol26f0mhXC6XD6vyDYJQK9nZ2XI6nZo1a5YiIyPdtgkLC5PUMgjV1tZq1KhRWrJkid5//31lZWWppKRE48ePV2Xl8ZmSYZ6/vLLB4z6rvt6ub77d5YNqAACAv/31lQ3yNNOs2VCjL/+7wzcF+RA3S2glPz9fkpSent5mmx+DzeFBaPr06Zo+fXqLdmPHjtXJJ5+s1157TfPnz/dBtYB3vfL+sZfB3fZ7b4tST+7n5WoAAIC/dfS7QM67W467mygRhFrZunWrJGngwIFutzscDq1atUpSyyDkTr9+P3wxDAnp2NuclpYmm83Wob7eVt3nXimot6pt1YqPjw90OX5nwvxdssge80iH+v5x6TP65xOXeLMcdDEm/AwAODrTjwOmzH9b3wclS0+P+z397Eta/ucrfFDR0VmtVhUVFXWoL0Golfr6eklSY2Oj2+05OTmy2+2KiorS4MGDj9je1NQkp9OprVu36v7775fVatWVV17ZoVpsNpuqqqo61NfropqkIMnZ1NR1avInU+bf1yFZPD8sNNTtUUN1N35fYM7PAIC2mX4cMGX+vQ9JwZ4Hocb6fcfd+0IQasVqtaq2tlbFxcUaP358i23V1dVauHChJCklJUUWi+WI/ueee27zitGwYcOUn5+v/v37d7iWrqI6OFhOSUHBwYobMCDQ5fidKfPf3rRLjhDPl7V7h+1XZDd+X2DOzwCAtpl+HDBl/jtcNTqkCI/7RYc2KioA70tnvi8ThFrJyMhQaWmpsrKyNGnSJCUmJkqSCgsLNXv2bNntdkltP0j1mWee0e7du7Vlyxb97ne/0wUXXKBVq1bppJNO8riWji7z+UJ8RraqdjQozhqnynXm3fzBlPkvzV6v/1n0hUd9wkKDVf5ZtvpE9/JRVegKTPkZANA2048Dpsz/H29u1E2/LPCoT4+QIG1c/Q+d2C/MR1X5BneNayUzM1P9+vVTRUWFkpOTNWrUKA0fPlzjxo3TkCFDNHHiREltXx908skn6/TTT9fMmTP10Ucfad++fXriiSf8OQWgw2ZPHabIcM/+PnLtlGGEIAAAuomrfjpEMb09+70+44LBx10IkghCR4iPj1dBQYGmTJmi0NBQlZeXKyYmRsuWLVNeXp42btwo6dg3SpCkPn36aNiwYdq8uf3PZQECqXdUTz3/2Llyc9anWyOG9FHWPWN9WxQAAPCb8LAQvfT4eQoJbt+XgaEJUfpj5uk+rso3CEJujBgxQrm5udq3b5/27dun1atX69Zbb1V9fb3Ky8sVFBSkkSNHHnM/O3bs0LfffquhQ4f6oWrAOy6ZOEivLp6o0F7BR22Xlhyrj5+5SH1ZDQIAoFv56VnxemvJJEWEHf0skZTEGH3yzBT1jzn+VoMkrhHySElJiVwulxITExUeHt5i27XXXqthw4Zp9OjR6tOnjzZt2qQ//OEPCgkJ0T333BOgioGOuXzSYJ116ol65vWNWrZ8gyps9c3bJo3/ie68aoSmTjhJISH8LQUAgO7oonMSVP7uVXr2jY36yyulKt9W17wtfWyc7rxqhC5OH6gePY7f7wIEIQ+sXbtWkvvT4s444wz961//0p/+9Cft379fCQkJSk9P1wMPPNDmM4mArswaG64Hbx2t+29OVXxGtqrtjYrrH6b3l00OdGkAAMAPYvuGKvOmFP3shlH/910gNkz5z1wU6NK8giDkgaMFoblz52ru3Ln+LgnwuaAgi4KCfjhPOKi9Fw8BAIBuo8V3gaDu813g+F3LCoCjBSEAAAAAxw9WhDyQn58f6BIAAAAAeAErQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOCGBLgAAgK7M5XKpZs8B1TUcUnRkT/WJ6imLxRLosgAAncSKUBvsdrsyMzM1bNgwhYaGKiEhQfPnz1d9fb3mzJkji8WipUuXBrpMAICP7N57QH96YZ1GXPyaYie8qEEXvqKYs1/Q2KtX6Nk3Nqqh0RHoEgEAncCKkBtr1qzR5MmTZbPZFBERoaSkJG3btk1LlixRWVmZampqJEmjR48ObKEAAJ/4rNimi+d/qJo9B47Y9tV6u+Y8XKBfL/ta7zx5gZKG9g1AhQCAzmJFqBW73a5p06bJZrNpwYIFqq6uVnFxsWw2m7KyspSXl6fCwkJZLBalpKQEulwAgJf9Z+1OXXDbu25D0OG2bqvTeTe9o7KKvX6qDADgTQShVubNm6fKykrNnTtXixcvVlRUVPO2zMxMpaamyuFwaNCgQYqOjg5gpQAAb3M6Xbr6vo/VeKCpXe131u7XzY985uOqAAC+QBA6TGlpqXJychQbG6tFixa5bTNmzBhJUmpqapv7mTx5siwWix555BFflAkA8JH3VlXqu8p9HvX5pLBa68tqfVQRAMBXCEKHyc7OltPp1KxZsxQZGem2TVhYmKS2g9Arr7yiNWvW+KpEAIAPPf3atx3rt7xj/QAAgcPNEg6Tn58vSUpPT2+zTWVlpST3QWjv3r26++67tXjxYl177bWdrictLU02m63T+/GG6j73SkG9VW2rVnx8fKDL8Tvmb/b8Yc5nYHvvu6TgEzzu99d/vKnlf77CBxUBXYcpx4G2MP+uOX+r1aqioqIO9SUIHWbr1q2SpIEDB7rd7nA4tGrVKknug9CDDz6oxMREzZo1yytByGazqaqqqtP78YqoJilIcjY1dZ2a/In5mz1/mPMZiJAU7Hm3Awcd3ft9ASRzjgNtYf7dbv4EocPU19dLkhobG91uz8nJkd1uV1RUlAYPHtxiW1FRkf72t7/pq6++8lo9VqvVa/vqrOrgYDklBQUHK27AgECX43fM3+z5w5zPwI7gAzrUgX5hPRyK6cbvCyCZcxxoC/PvmvPvzPdlgtBhrFaramtrVVxcrPHjx7fYVl1drYULF0qSUlJSWjxVvKmpSbfddpvmzp2r5ORkr9XT0WU+X4jPyFbVjgbFWeNUua4y0OX4HfM3e/4w5zPwx+fX6Z7frfa434tP3a1Lz/+j9wsCuhBTjgNtYf7db/7cLOEwGRkZkqSsrCxt3Lix+fXCwkKlp6fLbrdLOvJBqkuXLtX27du5SxwAHOeuv3i4wkI9OzduwAnhmnbuST6qCADgKwShw2RmZqpfv36qqKhQcnKyRo0apeHDh2vcuHEaMmSIJk6cKKnl9UF2u10PPfSQfvnLX8rhcGj37t3avXu3JGn//v3avXu3nE5nIKYDAPBQ3+heevDm0R71efzusQoJ4dcpABxvOHIfJj4+XgUFBZoyZYpCQ0NVXl6umJgYLVu2THl5ec2rRIcHocrKSu3bt0+33Xab+vbt2/w/6YeVpb59++r7778PyHwAAJ574JZUzZ/VvtOcFy8Yp2unDvNxRQAAX+AaoVZGjBih3NzcI16vq6tTeXm5goKCNHLkyObXhw0bpo8//viI9unp6br++ut1ww03dKmbHgAAjs5isegPmacrLTlW//uvdfp6w64j2pybZlXmjSm66JyEAFQIAPAGglA7lZSUyOVyKTExUeHh4c2vR0ZG6rzzznPbZ9CgQW1uAwB0XRaLRddOHaZZU4bqP2t36qe3v6s9dYfUO7KHVv1rmpKH9Q10iQCATuLUuHZau3atJPfPDwIAdE8Wi0Wnp5ygyPAekqTI8B6EIADoJlgRaidPg5DL5fJlOQAAAAA6gRWhdmJFCAAAAOg+WBFqp/z8/ECXAAAAAMBLWBECAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCB2F3W5XZmamhg0bptDQUCUkJGj+/Pmqr6/XnDlzZLFYtHTp0kCXCQCATzgcTr318VZdc9/HyrhlpS668z3dnfWl1pfVBro0AOi0kEAX0FWtWbNGkydPls1mU0REhJKSkrRt2zYtWbJEZWVlqqmpkSSNHj06sIUCAOADL+WV6ed/KlSFrb7F6ys/q9SfXixR+tg4/e2RszU0ITpAFQJA57Ai5Ibdbte0adNks9m0YMECVVdXq7i4WDabTVlZWcrLy1NhYaEsFotSUlICXS4AAF71x+fXadb9nxwRgg73cWG1xl/7NqtDAI5bBCE35s2bp8rKSs2dO1eLFy9WVFRU87bMzEylpqbK4XBo0KBBio7mL2EAgO7j3c8qdc/vVrer7c7a/brorvdV33DIx1UBgPcRhFopLS1VTk6OYmNjtWjRIrdtxowZI0lKTU1tfu2TTz6RxWI54n+cOgcAOJ5k/eO/HrXfuq1OL7/7nY+qAQDf4RqhVrKzs+V0OjVr1ixFRka6bRMWFiapZRD60ZNPPqnTTjut+d8RERG+KRQAAC9bX1arTwqrPe73VE6pbro0URaLxQdVAYBvEIRayc/PlySlp6e32aayslKS+yCUlJSkM844wzfFAQDgQx9+ua1D/YpLd6l270HF9O7l5YoAwHcIQq1s3bpVkjRw4EC32x0Oh1atWiXJfRDyprS0NNlsNp+O0V7Vfe6Vgnqr2lat+Pj4QJfjd8zf7PmDz4Ap898bOkEKP79DfZNGjVGIc7d3C0KXYsrPQVuYf9ecv9VqVVFRUYf6EoRaqa//4Q45jY2Nbrfn5OTIbrcrKipKgwcPPmL7VVddJbvdrn79+mn69Ol6/PHHFRsb26FabDabqqqqOtTX66KapCDJ2dTUdWryJ+Zv9vzBZ8CU+fezS+Ed67p921apqc679aBrMeXnoC3Mv9vNnyDUitVqVW1trYqLizV+/PgW26qrq7Vw4UJJUkpKSotzoXv37q2FCxdqwoQJioyM1BdffKFFixbpyy+/VFFRkUJDQztUS1dRHRwsp6Sg4GDFDRgQ6HL8jvmbPX/wGTBl/geD92inJLlckgfX+wQ32XWitY8s6u2z2hB4pvwctIX5d835d+b7MkGolYyMDJWWliorK0uTJk1SYmKiJKmwsFCzZ8+W3W6XdOSDVE899VSdeuqpzf8+77zzNHLkSE2fPl3Z2dm68cYbPa6lo8t8vhCfka2qHQ2Ks8apcl1loMvxO+Zv9vzBZ8CU+btcLqXNfEvFpbs86ve7n0/RPbPv81FV6CpM+TloC/PvfvPn9tmtZGZmql+/fqqoqFBycrJGjRql4cOHa9y4cRoyZIgmTpwoqX3XB02dOlURERFdKtAAANAWi8Wie68b6VGfvtE9dcPFw31UEQD4DkGolfj4eBUUFGjKlCkKDQ1VeXm5YmJitGzZMuXl5Wnjxo2SPLtRArcTBQAcL665aKjmz0puV9vQXsF6848Z6hvN3eIAHH84Nc6NESNGKDc394jX6+rqVF5erqCgII0ceey/mK1YsUL19fUaN26cL8oEAMDrLBaL/pB5uk6ICdVv/rZGjfub3LYbPCBKLz1+ns5IPcHPFQKAdxCEPFBSUiKXy6XExESFh7e8rc61116rIUOG6LTTTmu+WcITTzyh0aNHa+bMmQGqGAAAz1ksFj1wy2jdcdUI/fOtTXr53e9UVGJXk9Ol0J7Beu0P5+unZw5QcDAnlgA4fnEE88DatWsluT8tLjk5WW+88Yauu+46TZ48Wc8++6xuueUWffLJJ+rZs6e/SwUAoNP6RvfS3bNH6ssXp8saGyZJ6tenly46J4EQBOC4x4qQB44WhO6//37df//9/i4JAAAAQAfw5xwPHC0IAQAAADh+sCLkgfz8/ECXAAAAAMALWBECAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCB2F3W5XZmamhg0bptDQUCUkJGj+/Pmqr6/XnDlzZLFYtHTp0kCXCQAAfGjtxhq9+v4WvZi3We9/XqkDB5sCXRIALwgJdAFd1Zo1azR58mTZbDZFREQoKSlJ27Zt05IlS1RWVqaamhpJ0ujRowNbKAAA8Dqn06XslWV68uVSffHNjhbb+vcN1ZzLEjV/VrKsseEBqhBAZ7Ei5Ibdbte0adNks9m0YMECVVdXq7i4WDabTVlZWcrLy1NhYaEsFotSUlICXS4AAPCiQ4ecmv3Av3Xt/f8+IgRJ0s7a/Xr8mf8qbeZbWruxJgAVAvAGgpAb8+bNU2VlpebOnavFixcrKiqqeVtmZqZSU1PlcDg0aNAgRUdHB7BSAADgbbf/ZpVeeqfsmO2qdjTogtvf1ffVdX6oCoC3EYRaKS0tVU5OjmJjY7Vo0SK3bcaMGSNJSk1NPWLbG2+8oTPPPFMRERHq3bu3zjrrLJWUlPi0ZgAA4B2F63bq2Tc2tru9zd6oX//1ax9WBMBXCEKtZGdny+l0atasWYqMjHTbJiwsTNKRQWjJkiW68sordfbZZ2vFihXKzs5WRkaGGhsbfV43AADovKdySj3u89LKMtXuPeCDagD4EjdLaCU/P1+SlJ6e3mabyspKSS2DUFlZmRYuXKg//OEPmjt3bvPrF110kY8qBQAA3nTwUJNefvc7j/s17m/Sax+U6+bLT/ZBVQB8hSDUytatWyVJAwcOdLvd4XBo1apVkloGoWeffVY9evTQLbfc4rVa0tLSZLPZvLa/zqjuc68U1FvVtmrFx8cHuhy/Y/5mzx98Bkyfv2TGe9BkidT+vgs71Pfe+x7VI/M/8W5BXYwJn4GjYf5dc/5Wq1VFRUUd6ksQaqW+vl6S2jydLScnR3a7XVFRURo8eHDz659//rlOPvlkvfDCC/rNb36jiooKDR8+XL/85S919dVXd6gWm82mqqqqDvX1uqgmKUhyNjV1nZr8ifmbPX/wGTB9/pIZ70FwlNS3Y1337dujfTu66fvyIxM+A0fD/Lvd/AlCrVitVtXW1qq4uFjjx49vsa26uloLF/7wl6KUlBRZLJYW26qqqnT//fcrKytLCQkJeuaZZ3TNNdeof//+ysjI6FAtXUV1cLCckoKCgxU3YECgy/E75m/2/MFnwPT5S2a8By4Fqdq1Xy5LqMd9+0Y0Kbybvi8/MuEzcDTMv2vOvzPflwlCrWRkZKi0tFRZWVmaNGmSEhMTJUmFhYWaPXu27Ha7pCMfpOp0OlVXV6fnn39el1xyiSTp/PPP1/r16/Xoo492KAh1dJnPF+IzslW1o0Fx1jhVrqsMdDl+x/zNnj/4DJg+f8mc92DuY5/ryZc9u2FC76ieqvjyLUWE9/BRVV2DKZ+BtjD/7jd/7hrXSmZmpvr166eKigolJydr1KhRGj58uMaNG6chQ4Zo4sSJko68Y1xMTIwktQg8FotFGRkZWrdunf8mAAAAOuyOK0d43OeG6cO7fQgCuiOCUCvx8fEqKCjQlClTFBoaqvLycsXExGjZsmXKy8vTxo0/PFugdRBKTk5uc5/79+/3ac0AAMA7kof11f1zjnxOYFuGD4zWL24d7buCAPgMQciNESNGKDc3V/v27dO+ffu0evVq3Xrrraqvr1d5ebmCgoI0cuTIFn0uvvhiSdL777/f/JrT6dQHH3ygsWPH+rV+AADQcb/5nzH62fWjjtkuaWgfffj0ZMX29fyaIgCBxzVCHigpKZHL5VJiYqLCw8NbbJs2bZrOOecc3Xrrrdq1a5dOOukk/f3vf1dJSYk++OCDAFUMAAA8FRRk0e8WjNPUcxP05MuleuOjcjmaXM3bk4f20Z1XjdB104crklPigOMWQcgDa9eulXTkaXHSD9cDrVixQvfdd58eeOAB7d27V6mpqXrnnXearysCAADHj3PT4nRuWpx27GrUyMte087aAzohJlRrX7+sxZ1jARyfCEIeOFoQkqQ+ffpo2bJlWrZsmT/LAgAAPnRCvzD17BEsSeoREkQIAroJrhHywLGCEAAAAIDjAytCHsjPzw90CQAAAAC8gBUhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEjsJutyszM1PDhg1TaGioEhISNH/+fNXX12vOnDmyWCxaunRpoMsE4CPF6+26+eECnXjei+p52j/U+8x/6byb8pTz7nc6eKgp0OUBAIBOCAl0AV3VmjVrNHnyZNlsNkVERCgpKUnbtm3TkiVLVFZWppqaGknS6NGjA1soAK+razikWT//RCs++b7F64fqnPp3kU3/LrJpwAnheuOPGRo7sn+AqgQAAJ3BipAbdrtd06ZNk81m04IFC1RdXa3i4mLZbDZlZWUpLy9PhYWFslgsSklJCXS5ALyocb9DP7393SNCUGtVOxqUPucdFa7b6afKAACANxGE3Jg3b54qKys1d+5cLV68WFFRUc3bMjMzlZqaKofDoUGDBik6OjqAlQLwtgf/XKTP1+xoV9v6RocuvftDTpMDAOA4RBBqpbS0VDk5OYqNjdWiRYvcthkzZowkKTU1tfm18847TxaLxe3/br/9dr/UDqBz6hoO6Zk3NnrUp2pHg17/sNw3BQEAAJ/hGqFWsrOz5XQ6NWvWLEVGRrptExYWJqllEHrqqae0d+/eFu3y8vL0m9/8RlOnTvVdwQC85qV3yrS37pDH/Z7KKdXMyUN9UBEAAPAVglAr+fn5kqT09PQ221RWVkpqGYSSkpKOaPfb3/5W/fv314UXXtihWtLS0mSz2TrU19uq+9wrBfVWta1a8fHxgS7H75i/GfPfHT5VCh3rcb/Pvtrard8XyZzPQFtMn7/Ee2D6/CXeA+bfNedvtVpVVFTUob4EoVa2bt0qSRo4cKDb7Q6HQ6tWrZLUMgi1tnPnTr377ru68847FRLSsbfZZrOpqqqqQ329LqpJCpKcTU1dpyZ/Yv5mzD/+oBTqeTeXQrr3+yKZ8xloi+nzl3gPTJ+/xHvA/Lvd/AlCrdTX10uSGhsb3W7PycmR3W5XVFSUBg8e3OZ+srOz5XA4NHv27A7XYrVaO9zX26qDg+WUFBQcrLgBAwJdjt8xfzPmvzssSPUd6BfkOtCt3xfJnM9AW0yfv8R7YPr8Jd4D5t8159+Z78sEoVasVqtqa2tVXFys8ePHt9hWXV2thQsXSpJSUlJksVja3M/zzz+vESNGKC0trcO1dHSZzxfiM7JVtaNBcdY4Va6rDHQ5fsf8zZh//uptOv+WlR73u+HyU/XMr7rv+yKZ8xloi+nzl3gPTJ+/xHvA/Lvf/LlrXCsZGRmSpKysLG3c+H93jyosLFR6errsdrukoz9IdcOGDSoqKurUahAA/0sfF6eTB/X2uN+dV43wQTUAAMCXCEKtZGZmql+/fqqoqFBycrJGjRql4cOHa9y4cRoyZIgmTpwo6ejXBz3//POyWCyaNWuWv8oG4AUWi0WP3HGqR32mTkjQmKRYH1UEAAB8hSDUSnx8vAoKCjRlyhSFhoaqvLxcMTExWrZsmfLy8ppXidoKQi6XSy+++KLOO+88nXTSSf4sHYAXzJw8VIvmt++U1jNS+uulrPN8WxAAAPAJrhFyY8SIEcrNzT3i9bq6OpWXlysoKEgjR4502/fTTz/V1q1b9fDDD/u6TAA+8vM5qRoYF6lf/fVrfVu+54jtURE9dOPFw7Vo/liFh3EYBQDgeMRvcA+UlJTI5XIpMTFR4eHhbts8//zzCgsL0xVXXOHn6gB409UXDdXMyUP08X+q9dbHW/W3179V4/4m9Ynqoe/fn6moiJ6BLhEAAHQCp8Z5YO3atZLaPi1u//79Wr58uS655BJFRUX5szQAPmCxWDTx9J/oTz8fr5joXpKkiLAehCAAALoBVoQ8cKwgFBoaqt27d/uxIgAAAAAdwYqQB44VhAAAAAAcH1gR8kB+fn6gSwAAAADgBawIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGCckEAXgK7r4KEmlWyuVdWOBjXudzS/tv+AQ6G9+OgA6P72H3Bo7aZaNR744RjYeKBJazbsUvLQvurRg78lAsDxjG+zaOH76jo9vXyD3vu8Sv/dWKODh5wttu+sPaCo8f/SyGF9lXH6AN024xQNOyk6QNUCgPdtLN+jZcs36KPV21RSViuHw9W8rWbPAZ165Zvq1TNYKYl9NfmsBN1y+cmKt0YEsGIAQEcQhCBJWruxRg89+ZXe/neFnE7XUds6HC6t2VCjNRtqtPifa3XhWfF65I5TdXrKCX6qFgC87/M12/XIX4r1wRfbjtn2wMEmFa6zq3CdXb/9+xpdfN5APTr3NCUN7euHSgEA3sC6vuEOHXLq0WVfa8zMt/TWx98fMwS58+6qSp15Xa7u+8N/tP//nz4CAMeLhkaHFixerbOvz21XCGqtqcml1z8q16lXvqnHn/lGDofz2J0AAAFHEDLYzppGnX19rn75ZLEOdfIXt9Pp0hP/WKu0mW+pwlbnpQoBwLe2btunMTPf1P/+a51cnv8dqIWDh5y6/09FOvemPNXsOeCdAgEAPkMQMtSOXY0696Z39J91O72635Ky3Tr7+lxt3bbPq/sFAG/7rnKvzr4+Txu27PHqfj9fs0Pn3pinXbv3e3W/AADvIggZqHG/Q5PvfE+l3+32yf6/r67XpNve1e69/EUUQNdUs+eAJt36riq31/tk/+s212ryne/pwMEmn+wfANB5BCED/fLJYhWX7vKoT2H2dFV8MFOF2dPb1X7T1r1a8Pv/dKQ8APC5+Vlf6LvK9q9ce3oMlKTCdXY9uuzrjpQHAPADgpBhvvhmu37/r7Ue97PGhiv+xAhZY8Pb3efZNzZqZUGFx2MBgC+t+HirXsgt86hPR46BkvT4s/9VUYl3T0EGAHgHQego7Ha7MjMzNWzYMIWGhiohIUHz589XfX295syZI4vFoqVLlwa6TI/cnbW60xcEe2L+E1926E50AOALTU1O3f3Eaj+O59K9v/PfeACA9uM5Qm1Ys2aNJk+eLJvNpoiICCUlJWnbtm1asmSJysrKVFNTI0kaPXp0YAv1QFHJTq/fHOFYNm3dqw+/rNIFZ8b7dVwAcGflZ5XaUuXfm7kUFG/X2o01GpUY49dxAQBHx4qQG3a7XdOmTZPNZtOCBQtUXV2t4uJi2Ww2ZWVlKS8vT4WFhbJYLEpJSQl0ue32l1c2BGTcp3JKAzIuALQWqOMRx0EA6HoIQm7MmzdPlZWVmjt3rhYvXqyoqKjmbZmZmUpNTZXD4dCgQYMUHR0dwErbz+Vy6c38rQEZ+52CSu6cBCDgGhodeu/zqoCM/Ub+Vrn8eV4yAOCYCEKtlJaWKicnR7GxsVq0aJHbNmPGjJEkpaamtni9oKBA559/vmJjY9WnTx+dccYZev31131ec3uUV9UF7AF/hxxOrd1UE5CxAeBHa77dFbBrFrfvatS2HQ0BGRsA4B5BqJXs7Gw5nU7NmjVLkZGRbtuEhYVJahmEvvnmG02aNEnBwcF67rnnlJOTo4SEBF1xxRXKzc31S+1H89V6e4DH9+x23QDgbYE/DgZ2fABAS9wsoZX8/HxJUnp6epttKisrJbUMQjk5ObJYLHrzzTcVHv7D7VUzMjI0ZMgQvfjii5o6daoPqz42T56X4Qv+vjgZAFrjOAgAOBxBqJWtW3+4jmbgwIFutzscDq1atUpSyyB08OBB9ezZs3m1SJKCg4MVFRUlp9PZoVrS0tJks9k61Le1vaHnSuET3W4rzJ5+zGdjWGPDmv9b8cHMNtvZ7A0ae/WKI15f+tTTemHxpR5U3LVU97lXCuqtalu14uPNuwOe6fOXeA+6w/x3h0+RQse53Xas42B7j4FS28fBXz7yG/3u5595UHHX0h0+A51h+vwl3gPm3zXnb7VaVVRU1KG+BKFW6uvrJUmNjY1ut+fk5MhutysqKkqDBw9ufn327Nl68skntWDBAt13330KCQnRsmXLtGnTJj311FMdqsVms6mqyksX9vbfLbXxO/7HBwW2R0hwULvbHq5+3x7V2wJzkbJXRDVJQZKzqcl7/58cT0yfv8R70B3mH7dPCnW/qb3HwY4eAyVp755a7bUfp++d1D0+A51h+vwl3gPm3+3mTxBqxWq1qra2VsXFxRo/fnyLbdXV1Vq4cKEkKSUlRRaLpXlbamqqPvroI1122WX6wx/+IEmKiIjQq6++qgkTJnS4Fm+p79VDu9vYZrMf+wJea2yYQoKD5GhyymZ3HxKPtq/oiGBFDRjQjkq7purgYDklBQUHK+44nkdHmT5/ifegO8x/b1iQ2jo57VjHwfYeA4+2rz5RPRTR6/h876Tu8RnoDNPnL/EeMP+uOf/OfF8mCLWSkZGh0tJSZWVladKkSUpMTJQkFRYWavbs2bLbf7jYtfWDVDdt2qSrrrpKY8eO1Z133qng4GC9+OKLmjlzpnJzczVxovvT0o6mo8t87vxn7U6dPuvIUzUkuT2Fo7WKD2Yq/sQI2eyNSpj0ssfjv/yPJzT5nASP+3UV8RnZqtrRoDhrnCrXVQa6HL8zff4S70F3mP9bH2/VJfM/dLvtWMfBzh4DJenjd/6p0af061DfrqA7fAY6w/T5S7wHzL/7zZ8g1EpmZqZeeuklVVRUKDk5Waeccor279+vzZs3a/LkyRo0aJDee++9I26d/cADDyg8PFxvvPGGQkJ+eFsvuOACff/991qwYIG+/vrrQEynWUpiX4WEWORwBObWsWOSYgMyLgD8aMyIwB2HevUMVvLQvgEbHwBwJG6f3Up8fLwKCgo0ZcoUhYaGqry8XDExMVq2bJny8vK0ceNGSUc+Q2jt2rVKTU1tDkE/SktLU2lp4J8oHtorRONG9g/I2IkDe+uEfmHHbggAPjTgxHANHhB17IY+cEZKf/Xowa9cAOhKWBFyY8SIEW6f/VNXV6fy8nIFBQVp5MiRLbZZrVatWbNGDoejRRgqLCzUgC5yHuWtl5+iz9fs8Pu4t8042e9jAkBrFotFt15xsu7/k/dOO26v2644xe9jAgCOjj9PeaCkpEQul0vDhw9vflbQj+666y5t2rRJl156qXJzc7Vy5UrNnj1b//73vzV//vwAVdzSlT8drJjevfw6ZmivYN1wcaJfxwSAttx0SaJ6+nll5oSYUF2WMcivYwIAjo0g5IG1a9dKOvK0OEmaMWOG3n77be3evVvXX3+9rr76an377bd68cUXNW/ePH+X6lZYaIgWXDfy2A296M6rRvg9fAFAW07oF6Zb/bw6s/CGFPXqGezXMQEAx8apcR44WhCSpKlTp2rq1Kn+LMljC29I0Wsflqu4dJfPxxp2UrQevWuMz8cBAE8smp+m3H9/r/JtdT4fa9zI/rr72mSfjwMA8BwrQh44VhA6HvToEaTnHp3g8akhNnuDKrfXt+uZQ5JksUjP/uochYeRtQF0LZHhPfTsr8/xqI+nx0DphzvFPfebCQoJ4VctAHRFfEv1QH5+fqBL8IpRiTF6YdF5mpn5sZzO9t1Ouz3PGjrcsofO0jljvPdAWADwpvRxP9HSB8Zr7mNftKu9p8fA4GCLXn7iPI0Y0qcD1QEA/IE/UxlqxgWD9dLj5ykkxOLV/Vos0l8fOku3cIckAF3cXTOT9Of7x3t9vz17BCnniXRdMnGQ1/cNAPAegpDBrrpwiD7++0UamuCd52rEnxihlU/9VLfNIAQBOD7MvTpJuUsnKa5/+LEbt0PiwN765NmLdPmkwV7ZHwDAdwhChjv7NKu+efVSzbsmSUFBHVsdslikmy5N1LrXL9NPz4r3coUA4FtTJpykkjcu03XThnV4H8HBFi24bqTWvHqJxqee6MXqAAC+wjVCUER4D/3p5+P1sxtG6enl3+pvr32r7bsaj9kvpncv3XRJom6/8hQNTYj2Q6UA4Bt9o3vpn789V7+4dbT++uoGPfvGRu3ed/CY/eL6h+vWy0/WLZefrAEnRvihUgCAtxCE0CzBGqlH547RL287Vd9s3KWiEru+Wm/Xtp0NOnDQqZ49gnRivzCNSYpVWlKsRp8So9BefIQAdB/DB/bW7392un77P2P09YYfj4O7tKOmUQcPOdWrZ5AGnBDxw3EwOVYpw2PUw88PaAUAeAffYnGEHj2ClJbcX2nJ/QNdCgAERGivEI1PPZHT3ACgG+PPWAAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADBOSKALALqa+oZDWvlZpQpLduqr9bu0/rvdstkbJEk2e6Omzn1fY0bE6oyU/po0foBCQvh7AoDuZffeA3qnoFJF6384Dm7cukfbdzVK+uE4eOndH2pMUj+dNfpEnZsWp6AgS4ArBgDPEYSA/29j+R49lVOq51Zs0p59B922aXK6lPdphfI+rZAkDTghXLdcfrJuveIUxfUP92e5AOB1azbs0lM5pXoxr0wN+x1u2zQ5XXozf6vezN8qSRqaEKXbZ4zQTZcmKqZ3L3+WCwCdwp+yYbwDB5v04JIiJV36mv70YkmbIcidqh0NeuQvX2v41Ff1l5xSOZ0uH1YKAL5R13BId/32c5165Zv622vfthmC3Cmr2KeF//sfJU57VS+vLJPLxXEQwPGBIASjrdtUo7SZb+mxv3+jpqaO//Kub3Tozt9+rkm3rlT1zgYvVggAvvX5mu0addnreiqntFP72bX7gK6+7xNdcW++du894KXqAMB3CEIw1hffbNc5N+Rp3eZar+0z/z/VOvv6XJVX7fPaPgHAV94pqND5t6xU+bY6r+3z9Y/KlX7zO9pZ0+i1fQKALxCEYKSvS+268I73tNuD0+Da67vKfTr/FlaGAHRt+au36bJ7PtL+A01e3/eaDTX66e3veXSqMQD4G0EIxqlrOKTL783X3rpDPhvju8p9uvb+T7hmCECXtH1Xo65cmK8DB70fgn709YZduvO3n/ts/wDQWQQhGOf+PxVpi4enrhVmT1fFBzNVmD293X3y/1Otp5dv8LQ8APApl8ulO3/zuXbt9uw6no4cB196p0xv5pd7WCEA+AdB6CjsdrsyMzM1bNgwhYaGKiEhQfPnz1d9fb3mzJkji8WipUuXBrpMeODLb3ZoafZ6j/tZY8MVf2KErLGe3SL7Z7//D6fIAehSVnzyvV7/qNzjfh09Dt7+6Oeqa/DdCjwAdBRBqA1r1qzRqFGj9Lvf/U42m01JSUk6dOiQlixZoquuukqlpT/cXWf06NGBLRQe+cML6/w6Xn2jQ3977Vu/jgkAR/P7f67163jbdzXqpXfK/DomALQHQcgNu92uadOmyWazacGCBaqurlZxcbFsNpuysrKUl5enwsJCWSwWpaSkBLpctFP1zoYO/RW0s5Yt36BDh5x+HxcAWlu7sUYFxdv9Pu6TL5fyfCEAXQ5ByI158+apsrJSc+fO1eLFixUVFdW8LTMzU6mpqXI4HBo0aJCio6MDWCk88WJemRwO//8i3rajQR98WeX3cQGgtedWbArIuP/dWKM1G3YFZGwAaAtBqJXS0lLl5OQoNjZWixYtcttmzJgxkqTU1NQWr3/44Yc644wzFBoaqhNOOEG333679uzZ4/Oa0T5f/neHkWMDwI8CexzcGbCxAcAdglAr2dnZcjqdmjVrliIjI922CQsLk9QyCP373//WhRdeqAEDBuiNN97Qb3/7Wy1fvlyXXHIJpwN0EV+ttxs5NgBIUlOTU2s21ARsfI6DALqakEAX0NXk5+dLktLT09tsU1lZKallEPr1r3+t4cOH69VXX1VQ0A/5sl+/frr88suVl5enqVOn+rBqHMu++oNefXK6p/67sTZgYwOA9MPzzRr2OwI2/n83BS6EAYA7BKFWtm7dKkkaOHCg2+0Oh0OrVq2S1DIIrV69WjfeeGNzCJKkCy64QJL05ptvdigIpaWlyWazedwPR2qyREl9f9bm9sLs6Ue9Jaw1Nqz5vxUfzGyznc3eoLFXrzji9apqu+Lj4z2ouGup7nOvFNRb1bbq43oenWH6e2D6/LuDg8FxUu/b3W471jFQ6vxx8OtvShUff5cHFXct/AzwHjD/rjl/q9WqoqKiDvUlCLVSX18vSWpsbHS7PScnR3a7XVFRURo8eHDz68HBwerZs2eLtj169JDFYlFJSUmHarHZbKqq4iJ7rwjpI/Vte/OPz8c45m6Cg9rVrjWXy3V8/38Z1SQFSc6mpuN7Hp1h+ntg+vy7g7AQqbf7Te09BkodPw46HMf5Z4efAd4D5t/t5k8QasVqtaq2tlbFxcUaP358i23V1dVauHChJCklJUUWi6V5W2JiolavXt2ifWFhoVwul2pqOnY6gNVq7VA/HMlpCVX1Ubbb7Ed/6Kk1NkwhwUFyNDlls7sPyUfbT5ClSXEDBrSn1C6pOjhYTklBwcHH9Tw6w/T3wPT5dweHgvqqrVslHOsYKHX+ONgj2KkTjuPPDj8DvAfMv2vOvzPflwlCrWRkZKi0tFRZWVmaNGmSEhMTJf0QambPni27/YeLPVs/SHXevHm67rrr9Jvf/Ea33367Kisrdeeddyo4OLjF6XKe6OgyH47kcrkUNzFb23e5/+Xt7jSOw1V8MFPxJ0bIZm9UwqSXPR7/3NMTlf9Mpcf9uor4jGxV7WhQnDVOleuO33l0hunvgenz7w4OHGxS1Bn/0iHHkc81O9YxUOr8cXDG9HP04uMPedyvq+BngPeA+Xe/+XPXuFYyMzPVr18/VVRUKDk5WaNGjdLw4cM1btw4DRkyRBMnTpR05K2zr732Wt1333169NFH1b9/f6WlpSk9PV2jR49WXFxcIKaCw1gsFo1J6hew8cckxQZsbACQpF49gzVy2FHOEfaxQB6DAcAdglAr8fHxKigo0JQpUxQaGqry8nLFxMRo2bJlysvL08aNGyUdGYQsFosef/xx2e12ffPNN9q+fbt+//vfa9OmTTrzzDMDMRW0Mja5f+DGHkkQAhB4gTwWBfIYDADucGqcGyNGjFBubu4Rr9fV1am8vFxBQUEaOXKk275RUVFKSUmRJP3tb39TY2OjbrzxRp/Wi/a5evIQ/eqvX/t93OjIHppyToLfxwWA1q65aKieXv6t38cd+JNInTn6BL+PCwBHQxDyQElJiVwulxITExUe3vI2o0VFRfrggw902mmnyeFw6MMPP9SSJUu0ePFiDR06NEAV43AnD+6j80//iT5avc2v494wfbgiwnv4dUwAcGfCGKuShvbR+rLdfh33titOUXAwJ6EA6Fo4Knlg7dq1ko48LU6SevXqpbffflszZszQjBkz9PnnnysnJ0f33HOPv8vEUcy7Jsmv4wUFWXTHVSP8OiYAtMVisWjeNcl+HTMsNFhzLk3065gA0B6sCHngaEFo1KhR+vzzz/1dEjw07byTNP28k7Tik+/9Mt59N6bolMF9/DIWALTHzZcl6rm3NurL/+70y3iPzx+rE/qF+WUsAPAEK0IeOFoQwvHBYrHorw+dpb7RPY/d+DA2e4Mqt9e361kbP0oa2kcP33GqpyUCgE8FBwfpH49OUK+ewR7168hxcMIYq+Ze7d+VeABoL1aEPJCfnx/oEuAFcf3D9c/fnKtL7/lQTU2udvVpzzM2Dtc7qqeys9I9/qIBAP5wyuA+eurBMzXn4YJ29/H0OPjDsXaCgoIsx24MAAHAihCMNO28k/Sv35yr4GDv/4KOjuyhd568QCmJMV7fNwB4y02XJuoPC0/3yb5P7BemD5ZdqEEDonyyfwDwBoIQjHXNlKF64w8ZHp8mdzSDfhKpj/9+kc4cfaLX9gkAvnL37JF67tEJCg/13gkiyUP7qOC5KUoO4MNbAaA9CEIw2rTzTlLJG5dr2rkndXpfd141Qmtfv0ynJfHwVADHj+svHq7/vnapJoyxdmo/wcEWPXBzqr7KuUTDB/b2UnUA4DtcIwTjxfUP11tLMrTik+/155fWe/ScoeBgiy6dOFD3zB7JKhCA49bQhGh9/MxFyl5ZpqXZ6z26o1yvnsGaeeEQ3TM7Wakn9/NhlQDgXQQhQD/cTe7i9IG6OH2gNmzZrZfeKVNRiV1frbdrR83+Fm1PiovQmKRYnTHqBF07dah+ckJEgKoGAO8JCrJo1pRhmjVlmIrX2/XK+1v01fofjoO1ew+2aDs0IUpjkmJ1ZuoJunbqMPXrExqgqgGg4whCQCunDO6jX981RpLkcrlUu/eg6hsPKchiUVRED0VHeu+aIgDoik5Lim0+zdflcmnX7gNqPOBQcJBF0ZE9FRneI8AVAkDnEYSAo7BYLIrp3UsxvXsFuhQACAiLxaLYvqz4AOh+uFkCAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxQgJdAICuaWdNo75av0tfb9ilPXUHJUl76g5q2asblJYcq5HD+qpXz+AAVwkAvrNtR72+Wr9L32zcpT37/u84+OwbG5WWHKukIX0UEsLflIHjFUEIQLPavQf0z7c2adnyDdqwZc8R2+saHLr90VWSpB4hQbronHjdNTNJ55/+EwUFWfxdLgB43fZdjfr7a9/q769/q/JtdUdsr2twaM7DBZKksNBgXTpxkO68aoTOHH2CLBaOg8DxhCAEQA2NDj38VLGezFmvxv1N7epzyOHUWx9/r7c+/l6JA3vrj5mna/I5CT6uFAB8Y/feA7rvj4X6x5ubdMjhbFefxv1NeumdMr30TplGnxKjJx84U2eOPtHHlQLwFtZzAcOt+nq7Rl/5hhb/c227Q1BrG7fu0UV3va85Dxdo994DXq4QAHxrZUGFRl72up5e/m27Q1BrazbU6Ozrc7Vg8Wo17nd4uUIAvkAQAgz27BsbNeHGPG3autdr+xs3a4W+rz7ydBIA6Ioef+YbXXTX+6ra0dDpfblc0v/+a53OuSFP9tr9XqgOgC8RhABD/f21bzXn4QI5nS6v7nfT1r2acGOeKm31Xt0vAHjbb57+Wvf/qcjr+/1qvV3pc95RzR5WyIGujCAEGOiDL6p0668/89n+t26r04V3vKv9Bzg9BEDX9ELuZj20tNhn+1+3uVaX3v2hmpo6dqodAN8jCAGG2bPvoG76ZYFcHiwEFWZPV8UHM1WYPb3dfUrKduvhp3z3JQMAOqpqe73mLvrCoz4dOQ5++pVNf35pvaflAfATghBgmAWLV6tyu2enrVljwxV/YoSsseEe9Vv8z3X68psdHvUBAF9yuVy67dFVzc8Faq+OHgcf+HORNm098nEEAALPyCBkt9uVmZmpYcOGKTQ0VAkJCZo/f77q6+s1Z84cWSwWLV26NNBlAl5XVrFXz7650W/jOZ0uPfIXVoUAdB1f/neH8j6t8Nt4jfub9Njfv/HbeADaz7jnCK1Zs0aTJ0+WzWZTRESEkpKStG3bNi1ZskRlZWWqqamRJI0ePTqwhQI+sOzVDR6dEucN731epc3f79Wwk6L9OzAAuPFUTqnfx3z53e+0eME49esT6vexAbTNqBUhu92uadOmyWazacGCBaqurlZxcbFsNpuysrKUl5enwsJCWSwWpaSkBLpcwKsOHGzy62rQ4f76iv+/eABAa7t279cr723x+7j7DzTpubc2+X1cAEdnVBCaN2+eKisrNXfuXC1evFhRUVHN2zIzM5WamiqHw6FBgwYpOpq/XqN7WbNhl3btDsytXD9cvS0g4wLA4QqKbTp4KDB3cfvwS46DQFdjTBAqLS1VTk6OYmNjtWjRIrdtxowZI0lKTU1tfu3H4DRu3Dj16tVLFoulzTG2bNmi6dOnKyoqSn379tV1112nXbt2eXciQAd9td4esLFLymq5lTaAgPtqfeB+J3+13i6Xv89NBnBUxgSh7OxsOZ1OzZo1S5GRkW7bhIWFSWoZhDZv3qzXXntNVqtVY8eObXP/+/btU3p6uiorK5Wdna2nn35aBQUFmjp1qpxOniGAwPuqNHBfABwOl/67sTZg4wOAFNg/CO2s3e/xHTsB+JYxN0vIz8+XJKWnp7fZprKyUlLLIDRhwgRVV1dLkh555BGtWrXKbd+nn35aVVVV+vTTT3XSSSdJkuLj43XmmWdqxYoVuuSSSzyuOS0tTTabzeN+gDv2yFlSz0S32wqzpx/1lrDW2LDm/1Z8MPOo49jsDRp79YojXp88/SqFHQrMNUreUN3nXimot6pt1YqPjw90OX5n+vzRPeyIvk0K+Ynbbf44Do45faJ6Nh2/p8iZfhxg/l1z/larVUVFRR3qa0wQ2rp1qyRp4MCBbrc7HI7mkHN4EAoKat+iWW5urs4+++zmECRJ48eP15AhQ/T22293KAjZbDZVVVV53A9wa5BD6ul+04/PxziWkOCgdrVzp6Zmr7T3OP48RzVJQZKzqcnMn0vT54/uIdzV5jcffxwHd9prpYbj+OfH9OMA8+928zcmCNXX/7Ac3djY6HZ7Tk6O7Ha7oqKiNHjwYI/3v379es2YMeOI15OTk7V+fceeKm21WjvUD3DH3itEbd0qwWZvOGpfa2yYQoKD5GhyymZ3/zN0rH3FxEQrLGpAe0rtkqqDg+WUFBQcrLgBx+88Osr0+aN72BFi0aE2tvnjONg/tq96Nh2/Pz+mHweYf9ecf2e+LxsThKxWq2pra1VcXKzx48e32FZdXa2FCxdKklJSUo56Q4S21NbWqk+fPke8HhMTo2+//bZDNXd0mQ9w59Zffaa/veb+s+juFI7DVXwwU/EnRshmb1TCpJc7NP77ea9oTFJsh/p2BfEZ2ara0aA4a5wq11UGuhy/M33+6B6mzX1fuW08TNUfx8E1hR/rJyd0bDWpKzD9OMD8u9/8jblZQkZGhiQpKytLGzf+33UKhYWFSk9Pl93+wwWUPEgV3VUgQ0iPkCCNHNY3YOMDgBTY46A1Nuy4DkFAd2RMEMrMzFS/fv1UUVGh5ORkjRo1SsOHD9e4ceM0ZMgQTZw4UVLL64M80bdvX+3evfuI12tqahQTE9OZ0gGvGJPUL2BjjxreV716BgdsfACQAhuEjucVcaC7MiYIxcfHq6CgQFOmTFFoaKjKy8sVExOjZcuWKS8vr3mVqKNBaMSIEW6vBVq/fr1GjBjRqdoBb0hN7KcT+4UFZOwLz+o6d5cBYK5zTjtRYaGB+aMMx0Gg6zEmCEk/hJXc3Fzt27dP+/bt0+rVq3Xrrbeqvr5e5eXlCgoK0siRIzu076lTp+qzzz5rvgW3JK1evVplZWWaNm2at6YAdFiPHkG65fKT/T5uUJBFt17h/3EBoLU+0b10zeShfh83IixEs6cO8/u4AI7OqCDUlpKSErlcLg0fPlzh4Uc+Q2D58uVavnx584rPj/8+/GYGt956q+Li4nTxxRcrNzdXy5cv19VXX61x48bp4osv9ttcgKO59YqTFRTk+c1AOmPqhAQN/EmUX8cEgLbceZX/z9K4duow9Y5q4/kFAAKGICRp7dq1kto+LW7GjBmaMWOGXn311Rb/Xrp0aXOb6Oho5efnKy4uTjNnztTNN9+sM888U7m5ue1+FhHgawnWSM2d6b8vASEhFv3qztP8Nh4AHMtpSbGacYHnj8noqKiIHrp/TorfxgPQfsbcPvtojhWEXC5Xu/YzdOhQ5ebmeq0uwBcem5emvIIKlVXs8/lYv7hltEafEribNACAO08+MF6fFFZrZ+1+n4+1eME4VsWBLoqlCh07CAHdSUR4Dz336ASFhLT/FDmbvUGV2+uP+cDBw40dGasHbh7dgQoBwLf6x4Rp2S/P8qhPR46Dk8+OD8i1mQDahxUhSfn5+YEuAfCrs0+z6oXHztM1P/9ETuexVzyP9aDB1k4Z3Ft5Sy9Qjx78rQVA13Tp+YO05OdnaN7jX7arvafHwdNH9VfO79I79JB2AP7BtxTAUFddOEQ5T6SrR4h3DwOjT4nRJ89OUf+YwNyqGwDa63+uSdZTD54pb2eVc9Osen/ZhYqK4AYJQFdGEAIMdsUFg1X08sU61QvX8Vgs0r3XjdTn/5oWsOcVAYCn7rhqhAqem6rhA6M7va8eIUF6dO5p+mDZZEVHEoKAro4gBBguJTFGq1+crt/+zxjF9O7VoX2MHRmrz/45Vb//2ekKC+WMWwDHl7NOPVFrXrlUmTeOUmR4jw7t47yxcSp6+WL94tZTOS0YOE7wjQWAevQI0gO3jNY9s0fqlfe2aNnyDfrPup1qamr7+qE+UT11ycSBuvOqERo7sr8fqwUA7wsPC1HWPeP04C2j9ULuZv399Y1a8+0uHe3Gsf37hurKnw7WHVeOUPKwvv4rFoBXEIQANAsLDdH1Fw/X9RcPV+N+h/67sUZfb9ilmj0HdMjhVGivYA0eEKW05FgNHhDFRcAAup3oyJ66c2aS7pyZpLqGQ1qzYZfWfFujPfsOytHkVFivEA0fGK205FjFnxjBcRA4jhGEALgVFhqi01NO0OkpJwS6FAAIiMjwHjr7NKvOPs0a6FIA+AAnsQIAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGCck0AUAQFfW0OhQha1OhxxOSVKT0xXgigAAgDcQhADgMA6HU7mffq+3Pv5eX623a/13u9XU9H/hx2Zv1ICMbI0ZEatz06y6fvpwxfYNDWDFAACgIwhCACCpruGQ/vjCOi179VtVbq8/atttOxq0bcf3evvf3+vBP3+lGRcM0n03pmjk8Bg/VQsAADqLa4QAGC9/9TaNuux1PbS0+JghqLUDB5v0Qm6ZTrvqLT267GsdOuT0UZUAAMCbCEIAjOV0uvSzxat1/i0rVb6trlP7OuRw6pdPFuuMa1eoysMwBQAA/I8gBMBITqdLNz70qX7/r3Ve3W9x6S6dfX2uyqv2eXW/AADAuwhCAIw07/Ev9K+3N/tk3+Xb6jTptne1s6bRJ/sHAACdRxACYJy3Pt6qJ18u9ahPYfZ0VXwwU4XZ09vVfvP3ezV30RcdKQ8AAPgBQQiAUWr2HNDtj67yuJ81NlzxJ0bIGhve7j6vvLdFy9/f4vFYAADA94wMQna7XZmZmRo2bJhCQ0OVkJCg+fPnq76+XnPmzJHFYtHSpUsDXSYAH3j4qWLZ7P47ZW3uoi904GCT38YDAADtY9xzhNasWaPJkyfLZrMpIiJCSUlJ2rZtm5YsWaKysjLV1NRIkkaPHh3YQgF43d66g3rurU1+HXP7rkYt/2CLZk0Z5tdxAQDA0Rm1ImS32zVt2jTZbDYtWLBA1dXVKi4uls1mU1ZWlvLy8lRYWCiLxaKUlJRAlwvAy17I3ay6hkN+H/epHM+uRwIAAL5nVBCaN2+eKisrNXfuXC1evFhRUVHN2zIzM5WamiqHw6FBgwYpOjo6gJUC8IWX3/0uION+vmaHKmyde04RAADwLmOCUGlpqXJychQbG6tFixa5bTNmzBhJUmpqavNrPwancePGqVevXrJYLG77trcdgMBoanKquHRXwMYvKrEHbGwAAHAkY4JQdna2nE6nZs2apcjISLdtwsLCJLUMQps3b9Zrr70mq9WqsWPHtrn/9rYDEBgbt+5VfaMjYON/tZ4gBABAV2JMEMrPz5ckpaent9mmsrJSUssgNGHCBFVXV2vFihXKyMhos2972wEIjG/Ldwd4/D0BHR8AALRkzF3jtm7dKkkaOHCg2+0Oh0OrVv3wbJHDg1BQUPuyYnvbeSItLU02m83r+wVM1NBzpBQ5w+22wuzpx3w+kDU2rPm/FR/MbLOdzd6gsVevOOL1t/PeU3zO9R5U3LVU97lXCuqtalu14uPjA10OgAAw/TjA/Lvm/K1Wq4qKijrU15ggVF9fL0lqbHT//JCcnBzZ7XZFRUVp8ODB/iytTTabTVVVVYEuA+geesdJ7s+KbX5YanuEBAe1u+3hDuxvOL5/nqOapCDJ2dR0fM8DQMeZfhxg/t1u/sYEIavVqtraWhUXF2v8+PEttlVXV2vhwoWSpJSUlC5zowOr1RroEoBuY3+PCLV1qwSbveGY/a2xYQoJDpKjyXnUB7K2ta+wXkGKGTCgPaV2SdXBwXJKCgoOVtxxPA8AHWf6cYD5d835d+b7sjFBKCMjQ6WlpcrKytKkSZOUmJgoSSosLNTs2bNlt/9wIXNXepBqR5f5ABxp2456Dch42e02d6eytVbxwUzFnxghm71RCZPc7+dofvXzm7XwxiUe9+sq4jOyVbWjQXHWOFWuqwx0OQACwPTjAPPvfvM35mYJmZmZ6tevnyoqKpScnKxRo0Zp+PDhGjdunIYMGaKJEydKanl9EIDu4ycnRCiu/9GvA/KltOTYgI0NAACOZEwQio+PV0FBgaZMmaLQ0FCVl5crJiZGy5YtU15enjZu3CiJIAR0Z+NTTgjIuD1CgnTaCIIQAABdiTGnxknSiBEjlJube8TrdXV1Ki8vV1BQkEaOHBmAygD4w5zLEvX6R+V+H3fGBYPVO6qn38cFAABtMyoItaWkpEQul0uJiYkKDz/y1Jnly5dLktavX9/i34MGDVJaWprH7QAExk/PHKDBA6K0pWqfX8e986oRfh0PAAAcG0FI0tq1ayW1fVrcjBkz3P77+uuv13PPPedxOwCBERwcpAXXj9Tcx77w25jjU0/QmaMDc0oeAABoG0FIxw5CLperXftpbzsAgXP7jFOUvfI7rfp6u8/H6tUzWM/86pwuc0t+AADwf4y5WcLRHCsIAeg+goOD9I9fn6Ow0GCP+tnsDarcXt+uZw796Nd3nqYRQ/p4WCEAAPAHVoQk5efnB7oEAH40fGBvvfDYeZrxs3w5ne1byW3Ps4YON/PCIVpwPTdfAQCgq2JFCICRLssYpBceO1chId4/bW3GBYP1z99OUHAwh1gAALoqfksDMNbVFw3Vu09dqPgTI7yyv+Bgi35x62hlZ52nnj08O/UOAAD4F0EIgNHOP+MnWvf6Zbrp0sRO7Sd5aB99+cI0PTp3DCtBAAAcB/htDcB4vaN66plfnaM1r16i22acooiw9l8+mT42Tq8unqivX7lUacn9fVglAADwJm6WAAD/X+rJ/fTXh85S1t1jlf+fbfpqvV1FJXZtqarT/oMO9QgJUr/eoTptRD+NSYrVhDFWJQ7qHeiyAQBABxCEAKCV3lE9den5g3Tp+YMCXQoAAPARTo0DAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcUICXQAAoOv5dsturV67U1+tt2vtplrtqNkvSdpZu193PLpKY5JiNXZkrFISY2SxWAJcLQAAniMIAQAkSfsPOLT8g3I9+fJ6ffnfnW7bHDzk1F9f3dD875HD+urOq0bo2qlDFRXR01+lAgDQaZwaBwDQyoIKDZ+6XLMf+HebIciddZtrdedvP9fAn+bohdzNcrlcPqwSAADvIQgBgMH21R/UnIcLdNFd76tye32H91O796BmP/BvXTL/Q23f1ejFCgEA8A2CEAAYatfu/Tr/lpV69o2NXtvnik++11nXva3yqn1e2ycAAL5AEAIAA+3Zd1AX3PauCtfZvb7vsop9mnjzSlV1YoUJAABfIwgBgGFcLpdu+mWBikt3+WyMLVX7dMWCj9TU5PTZGAAAdAZBCAAM88p7W/T6R+Ue9SnMnq6KD2aqMHt6u/t8+d+d+t9/rfOwOgAA/IMgBAAG2bV7v+567HOP+1ljwxV/YoSsseEe9XvoyWJt2rrH4/EAAPA1I4OQ3W5XZmamhg0bptDQUCUkJGj+/Pmqr6/XnDlzZLFYtHTp0kCXCQBe98zrG7Vr9wG/jXfgYJP+9GKJ38YDAKC9jHug6po1azR58mTZbDZFREQoKSlJ27Zt05IlS1RWVqaamhpJ0ujRowNbKAB4WVNTy4eh+su/3t6sx+8eq8jwHn4fGwCAthi1ImS32zVt2jTZbDYtWLBA1dXVKi4uls1mU1ZWlvLy8lRYWCiLxaKUlJRAlwsAXpX/n2ptCcBtrffVH1LOu9/5fVwAAI7GqCA0b948VVZWau7cuVq8eLGioqKat2VmZio1NVUOh0ODBg1SdHR0ACsFAO/7rHh7wMZetSZwYwMA4I4xQai0tFQ5OTmKjY3VokWL3LYZM2aMJCk1NbX5tR+D07hx49SrVy9ZLBa3fZcvX67LL79cAwcOVHh4uE455RQ9+OCDqqur8/5kAKADvir1/jOD2j32et/dqhsAgI4wJghlZ2fL6XRq1qxZioyMdNsmLCxMUssgtHnzZr322muyWq0aO3Zsm/tfvHixgoOD9dhjj2nlypW644479Je//EUXXnihnE6eowEg8NZsCFwYKSmr1cFDTQEbHwCA1oy5WUJ+fr4kKT09vc02lZWVkloGoQkTJqi6ulqS9Mgjj2jVqlVu+7799tvq379/87/PPfdc9e/fX7NmzdJnn32mCRMmeFxzWlqabDabx/0AwJ1tfR+QLL3cbivMnn7UW2NbY8Oa/1vxwcw229nsDRp79YojXm9qcmngkFMU7Gr0sGoAXUV1n3uloN6qtlUrPj4+0OX4HfPvmvO3Wq0qKirqUF9jgtDWrVslSQMHDnS73eFwNIecw4NQUFD7Fs0OD0E/SktLkyRVVVV5VOuPbDZbh/sCwBH6BEnuz+5tfk7QsYQEB7WrnTs22w7JsbdDfQF0AVFNUpDkbGoy8/sJ8+928zcmCNXX10uSGhvd/zUyJydHdrtdUVFRGjx4sFfG/PjjjyVJI0aM6FB/q9XqlToAQJK2ySGX3N/C2mZvOGpfa2yYQoKD5GhyymZve1XnaPuJOzFWQYpqczuArq06OFhOSUHBwYobMCDQ5fgd8++a8+/M92VjgpDValVtba2Ki4s1fvz4Ftuqq6u1cOFCSVJKSkqbN0TwRFVVlR566CFdeOGFHX4mUUeX+QDAnbSZb+mr9e5vmODudLbDVXwwU/EnRshmb1TCpJc9HvuEmFBVfbPZK8dXAIERn5Gtqh0NirPGqXJdZaDL8Tvm3/3mb8zNEjIyMiRJWVlZ2rhxY/PrhYWFSk9Pl93+w5cDbzxIta6uThdffLF69uypZ599ttP7AwBvGJPUL4BjxxKCAABdijFBKDMzU/369VNFRYWSk5M1atQoDR8+XOPGjdOQIUM0ceJESS2vD+qIxsZGTZs2TVu2bNH777+vuLg4b5QPAJ2WlhQbsLHHBHBsAADcMSYIxcfHq6CgQFOmTFFoaKjKy8sVExOjZcuWKS8vr3mVqDNB6NChQ7riiitUVFSklStXKikpyVvlA0CnTTvvJPUICcxh/4pJgwIyLgAAbTHmGiHph5sW5ObmHvF6XV2dysvLFRQUpJEjR3Zo3z8+o+ijjz7SO++8o3HjxnW2XADwKmtsuC7PGKSX3/3Or+OedeqJSj05cKflAQDgjlFBqC0lJSVyuVxKTExUePiRz9FYvny5JGn9+vUt/j1o0KDmW2TfddddevXVV/Xzn/9c4eHh+vLLL5v7Dx061O3ttQHA3+6aOcLvQejOKzt250wAAHyJICRp7dq1kto+LW7GjBlu/3399dfrueeekyStXLlSkvT444/r8ccfb9H+H//4h2644QYvVgwAHXP2aVZdc9FQvfROmV/GmzDGqpmTh/hlLAAAPEEQ0rGDkMvlOuY+ysvLvVkSAPjMkp+foY9Wb9P2XW0/D8gbwkND9Oyvz1FQEHeLAwB0PcbcLOFojhWEAKA76dcnVM89OkHBwe0PKDZ7gyq31x/zwauHW/rAeA1NiO5IiQAA+BwrQpLy8/MDXQIA+NWFZ8fr+d+eq2sf+LeczmOveh/rgaut/e7ecbrxksSOlgcAgM+xIgQAhrr6oqFa/vuJigzv4bV99ggJ0l9+caZ+dsMor+0TAABfIAgBgMEuPX+Q1r52qSaO6/zDn08b0U9FL1+s27lLHADgOEAQAgDDDRoQpQ//Nln/ePQcjRre1+P+Q+Kj9IeFp+vLF6YrJTHGBxUCAOB9XCMEAJDFYtENFyfq+unDterr7XrurU1avXan1n+32+01RIkDe2vsyFhdO2WYLjhzAHeGAwAcdwhCAIBmFotFZ59m1dmnWSVJDY0ObdiyW/saDsnlkiLCQnTyoN6KjuwZ4EoBAOgcghAAoE3hYSE6LSk20GUAAOB1XCMEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGCckEAXAAAAgK5pZ02jvlq/S5Xb61XXcEiS1HjAoQpbneJPjJDFYglwhUDHEYQAAADQ7Jtvd+kvr2zQOwUVqrDVH7G9Zs9BnXRBjvr3DdXE0+N0x5UjNGGMlVCE4w5BCAAAAFr19Xbd98dCrfp6e7va76zdr5x3tyjn3S1KGtpHv7rjNF1xwWAfVwl4D9cIAQAAGKyh0aF7f/elzrkht90hqLX1Zbs142f5umphvnbWNHq5QsA3CEIAAACGqtper3HXvKU/PF8il6vz+3vlvS0adfkb+rrU3vmdAT5GEAIAADBQ1fZ6nXNDnkrKdnt1v9t3NSr95pUqXk8YQtdGEAIAADBMQ6NDP739XW2p2ueT/e/Zd1A/veM9VdjqfLJ/wBsIQgAAAIZ5YEmRxytBhdnTVfHBTBVmT29Xe3vtft3yyGdyeeOcO8AHCEIAAAAGKfjKpiUvlXjczxobrvgTI2SNDW93n/c+r9Izr2/0eCzAH4wMQna7XZmZmRo2bJhCQ0OVkJCg+fPnq76+XnPmzJHFYtHSpUsDXSYAAIDXLfzf/3jlxgjtdf+SIh042OS/AYF2Mu45QmvWrNHkyZNls9kUERGhpKQkbdu2TUuWLFFZWZlqamokSaNHjw5soQAAAF721Xq7Vq/d6dcx7bX7tfyDLZo1ZZhfxwWOxagVIbvdrmnTpslms2nBggWqrq5WcXGxbDabsrKylJeXp8LCQlksFqWkpAS6XAAAAK/6S05pQMZ98uXAjAscjVFBaN68eaqsrNTcuXO1ePFiRUVFNW/LzMxUamqqHA6HBg0apOjo6ABWCgAA4F0ul0u5n1YEZOwvvtmhmj0HAjI20BZjglBpaalycnIUGxurRYsWuW0zZswYSVJqamrzaz8Gp3HjxqlXr16yWCxu+xYUFCgjI0NxcXHq1auX4uPjddVVV6m0lL+AAACAwNu2o0HbdzUGbPxiHrKKLsaYIJSdnS2n06lZs2YpMjLSbZuwsDBJLYPQ5s2b9dprr8lqtWrs2LFt7r+2tlaj/l979x4ddXnncfwzkxByh1yAQQKEGAK5kAAJwdQuEhasFIndrSAWKLouq+1mQesmu+hpxbanGKW1srgVXVa0XWMU6paSXsRGt5StmhBZIQkiSCCBGXAg4ZKES5LZPzhQkMltMpkJPO/XOZw48/s9z/c7iufMJ7/f73kmTNCaNWv09ttvq6ioSFVVVcrJyVF9fb13PwwAAEAPVdYc92v9HWywin7GmMUSysrKJEm5ubkdnnMpsFwZhKZNmya73S5JWrlypbZv3+52bF5envLyrl5Xf8qUKRo3bpw2bdqk5cuX96p/AACA3jjk581ND9mb/Fof+CJjgtDBgwclSaNHj3Z7vLW19XLIuTIIWa2eXzSLiYmRJAUGevavOSsrSw6Hw+P6AAAAl5wOzpFC73B7rLw4r8v9gWyxIZd/1m1d0OF5Dmezpty7+Zr3N7zyC/3qZ/N70HH/Yh/8Hck6SHaHXXFxcf5ux+f66+e32WyqqKjwaKwxQaip6eJvIVpa3N8bW1JSIqfTqYiICI0ZM8bjOm1tbWpvb9fBgwe1YsUK2Ww2zZ/v2f/0DodDhw8f9rgXAACAy2JOSB1knUubpXZHYIC12+deqbnplJqPXMffayLaJKvU3tZm5vezG/DzGxOEbDabGhoaVFlZqZycnKuO2e12FRQUSJLS09M7XBChO2677bbLV5YSExNVVlamIUOGeNwzAACANzQHDVBDB8cczuYux9tiQxQYYFVrW7sczo4XXehorohQiyJHjOhOq/2SPSBA7ZKsAQEafh1/Dk/118/fm+/LxgShmTNnqqamRkVFRZo1a5aSkpIkSeXl5Vq8eLGczosP8PV2I9X169ersbFRBw4c0DPPPKPbb79d27dv16hRo3o8l6eX+QAAAL5ob+1Jjcvb6PaYu1vZvqhu6wLFDQuTw9mikbNe73H9n7/4Q92V6/4RhetB3MxiHT7WrOG24arfbd5CWDfi5zdm1bjCwkLFxMSorq5OqampmjBhgsaOHavs7GwlJCRoxowZkq5+PsgT48aN09SpU7VgwQL94Q9/0OnTp/X000974yMAAAB4LHFUpCLCBvitfmZyrN9qA+4YE4Ti4uK0bds2zZkzR8HBwaqtrVV0dLTWrVun0tJS7d27V1Lvg9CVBg8erMTERO3bt89rcwIAAHjCarVoetZwv9ROHBWpEcM6X4wB8DVjbo2TpOTkZG3ZsuWa98+cOaPa2lpZrValpaV5rd6xY8f0ySefaOrUqV6bEwAAwFMPzR+vX//PId/XnTe+V89gA33BqCDUkaqqKrlcLiUlJSk09NrfVmzcePF+2urq6qtex8fHKysrS5K0aNEiJSYmauLEiRo8eLA+/fRTPfvsswoMDNQjjzzio08CAADQsTtujdOYERE6cPi0z2oGDwzQ/V9L8lk9oLsIQpJ27dolqePb4ubNm+f29ZIlS7RhwwZJ0i233KJXX31Vzz33nM6ePauRI0cqNzdXjz32WId7FwEAAPiS1WrREw9N0n3f/aPPai77RoqiBw30WT2guwhC6joIuVyuLufIz89Xfn6+V/sCAADwtm/mJeqNtz/Tb7b1/cpf48cM0pPfntzndQBPGLNYQme6CkIAAAA3CovFohe/92VFRQb1aJzD2az6o03d2nNIkgICLHr5+9MUPJDfu6N/4m+mpLKyMn+3AAAA4DMjhoVpy9rbNesffqfms63dGtOdvYYusVikV394m27JGOppi0Cf44oQAACAgb40cZh+/8JXNCiiZ1eGuhIYaNEvfjRd35hzs1fnBbyNIAQAAGCoL0+2qfy1PN06aZhX5ksaPUh/fHkOIQjXBYIQAACAwcaOHqT/+c+v6tmCqYoMH+DRHEEDrHr0m2na+ebXlJPhnVAF9DWeEQIAADBcQIBVDy9O099/fZyKf7Nfz5fU6P8+OdHluPibwvXQ/PH6u68laUh0iA86BbyHIAQAAABJUnjoAC29e7yW3j1eR441aUf1ce2odqr+aJPOnm9T0ACrhkaHKDMlVpkpMRozIkIWi8XfbQMeIQgBAADgGjcNDdNNQ8M0d/oof7cC9AmeEQIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAOiEy+WSy+W6/M+4MQT6uwEAAACgPzl2vEUbtx7Qh7ud2lHtVM2BRrW1XQxARz5v0aT5bykzOVZTJwzR3bePUVTkQD93DE9YXMRaAAAAQB98fEz/VlytN98+oPMX2rs1JiQ4QN+YfbOWLUxVelJ0H3foP3Ezi3X4WLNGDA1V/Tv3+rsdr+DWOAAAABjtdNN5fesH23XLol/rv0r3dzsESVLL2Tatf2uvJs3/b/3Lsx/q7LnWPuwU3kQQAgAAgLE++PiY0r/+ll54c0+v5mlvd+npl3dp0vz/1u5PT3ipO/QlghAAAACMVPbBEf310t+q9sgZr82558BJTbu/VOW7P/fanOgbBCEAAAAY54OPjylv2VY1tXj/VraGU+d1x7d+r6p9DV6fG95DEAIAAIBRTp05r/kFZX0Sgi45cfKc7iko07nzbX1WA71DEAIAAIBRCn7yoQ7Zm3o0prw4T3VbF6i8OK/bY6r2N+r7L3zU0/bgI8YFIafTqcLCQiUmJio4OFgjR47U8uXL1dTUpAceeEAWi0Vr1671d5sAAADoA/+786he3PhJj8fZYkMVNyxMttjQHo0revlj1XzW2ON66HtGbai6c+dOzZ49Ww6HQ2FhYUpJSdGRI0e0Zs0a7d+/XydOXFzhY+LEif5tFAAAAH1izWtVPq3X1ubS869Xa+1jX/JpXXTNmCtCTqdTc+fOlcPh0KOPPiq73a7Kyko5HA4VFRWptLRU5eXlslgsSk9P93e7AAAA8DKHs1mb3qn1ed1Xf71Pp5vO+7wuOmdMEFq2bJnq6+uVn5+v1atXKyIi4vKxwsJCZWRkqLW1VfHx8YqMjPRjpwAAAOgLJb/7TK2tLp/XPd10Qb9695DP66JzRgShmpoalZSUKDY2VqtWrXJ7TmZmpiQpIyPj8nuXglN2drYGDhwoi8XSrXqzZ8+WxWLRypUre907AAAAvOPD3U6/1WZfof7HiCBUXFys9vZ2LVy4UOHh4W7PCQkJkXR1ENq3b582bdokm82mKVOmdKvWG2+8oZ07d/a6ZwAAAHhXRZX/glBFtf9qwz0jglBZWZkkKTc3t8Nz6uvrJV0dhKZNmya73a7Nmzdr5syZXdY5deqUHn74Ya1evbqXHQMAAMCbzl9o096DJ/1Wv2p/o99qwz0jVo07ePCgJGn06NFuj7e2tmr79u2Srg5CVmvPcuLjjz+upKQkLVy4UIsWLfKw27/IysqSw+Ho9TwAAACma7cES1ErOjxeXpzX6dLYttiQyz/rti7o8DyHs1lT7t18zfsnT7UoLi6uBx33L/bB35Gsg2R32PvV57DZbKqoqPBorBFBqKnp4oZZLS0tbo+XlJTI6XQqIiJCY8aM8ahGRUWFXnrpJe3YscPjPr/I4XDo8OHDXpsPAADAWNYQKarjw5f2CepKYIC1W+ddy3V9f6+LaJOsUntb2/X9Oa5gRBCy2WxqaGhQZWWlcnJyrjpmt9tVUFAgSUpPT+/2gghXamtr04MPPqj8/HylpqZ6pWfpYt8AAADoPZcCdMTVLlnc3/HjcDZ3Ot4WG6LAAKta29rlcLr/5Xpn81hcF3TTiBHdb7ifsQcEqF2SNSBAw/vR5+jN92UjgtDMmTNVU1OjoqIizZo1S0lJSZKk8vJyLV68WE7nxYfXPN1Ide3atTp69KjXV4nz9DIfAAAArjU+b6M+qXX/nJC729muVLd1geKGhcnhbNHIWa/3uPaXMuP1p1fqezyuv4ibWazDx5o13DZc9buv389xJSMWSygsLFRMTIzq6uqUmpqqCRMmaOzYscrOzlZCQoJmzJgh6erng7rL6XTqu9/9rr73ve+ptbVVjY2NamxslCSdPXtWjY2Nam9v9+bHAQAAgAcyU2L9Vzs5xm+14Z4RQSguLk7btm3TnDlzFBwcrNraWkVHR2vdunUqLS3V3r17JXkWhOrr63X69Gk9+OCDioqKuvxHkoqKihQVFaVDh9hACwAAwN+mThjit9rZfqwN94y4NU6SkpOTtWXLlmveP3PmjGpra2W1WpWWltbjeRMTE/Xuu+9e835ubq6WLFmi++67j2d9AAAA+oF77kjQP//4Q11o9e3dOpHhA3RXrvvVi+E/xgShjlRVVcnlcikpKUmhodcumbhx40ZJUnV19VWv4+PjlZWVpfDwcE2fPt3t3PHx8R0eAwAAgG8NiwnR3bPiVfzbz3xad0neWIWHDvBpTXTN+CC0a9cuSR3fFjdv3jy3r5csWaINGzb0aW8AAADwruULU30ahAIDLfrHe5J9Vg/dRxDqIgi5XC6P5vV0HAAAAPrO1PSh+vY9yfr3khqf1HvsgYkaN2awT2qhZ4xYLKEzXQUhAAAA3FiKHpmi+JvCezTG4WxW/dGmLvcbulJ6UrQe/we+Y/ZXFheXLgAAAGCYiqrPlfvAb3Wm+UKfzB8zeKD+9MqdGn+DXA26tI/QiKGhqn/nXn+34xXGXxECAACAebJSh2jL2ll9sohBzOCBevuFO26YEHSjIggBAADASLdlDde762crIS7Ca3OmJUZp24Y7NdmPm7eiewhCAAAAMFZW6hB9vPFvtOwbKb2aJyDAoseXZqji9buUnDDYO82hTxGEAAAAYLSw0AF67l9ztOP1u3TfXWMVPDCg+2NDAvXQvPH6eOPf6If/lKWBQd0fC/9isQQAAADgCscbz2rTO7Uq3/25dlQfV/VnjTp3vk2SFBIcoLTEKGUmxyp7whB9fWa8IsOD/Nxx37sRF0sgCAEAAABdaG1tl8UiBQSYeUPVjRiEjN9QFQAAAOhKYKCZAehGxn9RAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjBPq7AQAAAAD9S1tbu/YcOKkd1U59tOe4Tpw8J0k6ceqcnni+UpkpMcpMidVNQ0NlsVj83K1nLC6Xy+XvJgAAAAD43yH7Gb24cY9e2vSJjp042+X5k5Nj9O17knXv7JsVGnJ9XWMhCAEAAACGazx1To/++ENt+NWnam/veTwYHBGkHy3L0oPzxstqvT6uEBGEAAAAAIP9dludlj75Jx0+1tzruWZkD9f6J/9K8SMivNBZ3yIIAQAAAIb66c9365FnPvDqnLFRwfrdz76izJRYr87rbQQhAAAAwEB9EYIuGRQRpPfWf1UTx8f0yfzeQBACAAAADFP6x0O6M39rn9awxYZo9y//VjGDg/u0jqfYRwgAAAAwSMOpc1r65PYejSkvzlPd1gUqL87r9hiHs0XLnnq/p+35DEEIAAAAMMh3nvlA9s97tjCCLTZUccPCZIsN7dG4136zX79692CPxviKkUHI6XSqsLBQiYmJCg4O1siRI7V8+XI1NTXpgQcekMVi0dq1a/3dJgAAAOBVB+pP65XNn/q05pM/+0j98Wmc62vXIy/YuXOnZs+eLYfDobCwMKWkpOjIkSNas2aN9u/frxMnTkiSJk6c6N9GAQAAAC9bt3GPfJ1JPtpzXB/u+lxT04f6tnAXjLoi5HQ6NXfuXDkcDj366KOy2+2qrKyUw+FQUVGRSktLVV5eLovFovT0dH+3CwAAAHjNhQvtWv/WXr/U/tkbe/xStzNGBaFly5apvr5e+fn5Wr16tSIi/rLRU2FhoTIyMtTa2qr4+HhFRkb6sVMAAADAu3bvOyFnw1m/1H6vwu6Xup0xJgjV1NSopKREsbGxWrVqldtzMjMzJUkZGRmX37sUnLKzszVw4EBZLBa3Y9977z1ZLJZr/nCLHQAAAPqDHdXH/Vb74JEzfgthHTHmGaHi4mK1t7dr4cKFCg8Pd3tOSEiIpKuD0L59+7Rp0yZNmTJFQUFB2r6986UGn3/+eU2ePPny67CwMC90DwAAAPROZY3T7/Vv/1KcX3u4kjFBqKysTJKUm5vb4Tn19fWSrg5C06ZNk91+8VLeypUruwxCKSkpuuWWW3rbriQpKytLDofDK3MBAADAbMfD50tBqW6PlRfndbo0ti025PLPuq0LOq3jcDZryr2br3l/waKlCj2/qwcdd81ms6miosKjscYEoYMHL65fPnr0aLfHW1tbL4ecK4OQ1eq/uwcdDocOHz7st/oAAAC4gYw6LwW5P3Rpn6CuBAZYu3WeOw0Np9TQ2H++2xoThJqamiRJLS0tbo+XlJTI6XQqIiJCY8aM8bjOPffcI6fTqZiYGOXl5empp55SbGysR3PZbDaP+wAAAACudCI4UO6/CV+8itMZW2yIAgOsam1rl8PZ0SydzxUVFaHQsBHdabXbevN92ZggZLPZ1NDQoMrKSuXk5Fx1zG63q6CgQJKUnp7e4YIInRk0aJAKCgo0bdo0hYeH689//rNWrVql999/XxUVFQoODu7xnJ5e5gMAAAC+qPAnH+qZDe5vTXN3K9uV6rYuUNywMDmcLRo563WP6pe+9YpyMoZ5NLYvGBOEZs6cqZqaGhUVFWnWrFlKSkqSJJWXl2vx4sVyOi8+PObpKm+TJk3SpEmTLr+ePn260tLSlJeXp+LiYt1///29/gwAAACApzJTPLtLyRusVosykmL8Vt8dY5bPLiwsVExMjOrq6pSamqoJEyZo7Nixys7OVkJCgmbMmCHp6ueDeuvOO+9UWFgYV3YAAADgd/4MQikJgxUa0r+uwRgThOLi4rRt2zbNmTNHwcHBqq2tVXR0tNatW6fS0lLt3Xtxl11vBqFLPLnVDgAAAPCmm0dGKDlhsF9q33nbSL/U7Uz/imV9LDk5WVu2bLnm/TNnzqi2tlZWq1VpaWleq7d582Y1NTUpOzvba3MCAAAAnrBYLPrW/PFa9tT7Pq4rPTRvvE9rdodRQagjVVVVcrlcSkpKUmjoteunb9y4UZJUXV191ev4+HhlZWVJkhYtWqSEhARNnjz58mIJTz/9tCZOnKgFCzpfax0AAADwhW/OHasVz1WoqaXVZzXn/NVIjb4pwmf1uosgJGnXrourZ3R0W9y8efPcvl6yZIk2bNggSUpNTdVrr72mn/70p2ppaVFcXJyWLl2qJ554QkFBHSzYDgAAAPjQoIggPfHQJBU+W+6TekEDrHrq4Sk+qdVTBCF1HYRcLleXc6xYsUIrVqzwal8AAACAt33nm2n65R9q9f7Hn/d5rZXfmqzUxKg+r+MJYxZL6ExXQQgAAAC4UQQEWPXyD6YpMnxAt8c4nM2qP9rU5carV7p10jAV3DfBkxZ9wuLqzuUOAAAAADeUP1U69JWHfq/ms95/XihjXLTeXf9VRUUO9Prc3sIVIQAAAMBAX55s0zsv3aHoQd4NK7dOGtbvQ5BEEAIAAACMlZMxTLt/+beae9uoXs81INCqH+Zn6t3/6P8hSOLWOAAAAMB4LpdLxb/5TD948SPtOXCyR2MtFumOW+NU9PAUTUiK7qMOvY8gBAAAAEDSxUD0XrldL7y5R++V23XsxNkOzx0XP0hzbxulh+aP180jI33YpXcQhAAAAABcw+Vy6fDRZlXWOHX85DldaG3XwAEBih8RrknjYxQZfn3vlUkQAgAAAGAcFksAAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcQhCAAAAAIxDEAIAAABgHIIQAAAAAOMQhAAAAAAYhyAEAAAAwDgEIQAAAADGIQgBAAAAMA5BCAAAAIBxCEIAAAAAjEMQAgAAAGAcghAAAAAA4xCEAAAAABiHIAQAAADAOAQhAAAAAMYhCAEAAAAwDkEIAAAAgHEIQgAAAACMQxACAAAAYByCEAAAAADjEIQAAAAAGIcgBAAAAMA4BCEAAAAAxiEIAQAAADAOQQgAAACAcf4fZcPeZoFIjwEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hash_simp.export(\"qiskit\").draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Now we use our quantum function as an oracle for a Grover search, in order to find which input maps to the value `0xca`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import Grover\n", + "\n", + "q_algo = Grover(hash_simp, Qint8(0xCA))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we use our prefered framework and simulator for sampling the result; this is an example using `qiskit` with `aer_simulator`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnkAAAHtCAYAAABlFmhpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABXnklEQVR4nO3dd3gU1eL/8c+kEpKQQAiXFqqBSBMQRAFBEBIBLxawK0URG2IvqLSLoIL1XttVEEVFQVGv+qVJlyZYAogIiUgH6QlJIGw5vz/47cqSBJJAstnJ+/U8PI85c3Zzztnj5LMzZ2YsY4wRAAAAbCXI3w0AAADAuUfIAwAAsCFCHgAAgA0R8gAAAGyIkAcAAGBDhDwAAAAbIuQBAADYUIi/GxDo3G63du3apejoaFmW5e/mAAAAmzPG6MiRI6pZs6aCggo+XkfIO0u7du1SQkKCv5sBAADKme3bt6t27doFbifknaXo6GhJJwa6UqVKfm4NAACwu8zMTCUkJHgzSEEIeWfJc4q2UqVKhDwAAFBqzrRMjAsvAAAAbIiQBwAAYEOEPAAAABsi5AEos0aNGiXLsnz+JSUlSZK2bNmSZ5vn32effeZ9j9WrV+vyyy9XbGysKleurJSUFK1Zs8ZfXQKAUkPIA1CmNW3aVLt37/b+W7p0qSQpISHBp3z37t0aPXq0oqKi1KNHD0lSVlaWrrjiCtWpU0c//PCDli5dqujoaKWkpMjhcPizWwBQ4ri6FkCZFhISourVq+cpDw4OzlP+5Zdf6vrrr1dUVJQk6ffff9fBgwf1r3/9y3s/y5EjR6pFixbaunWrzjvvvJLvAAD4CUfyAJRpaWlpqlmzpho0aKBbbrlF27Zty7feTz/9pNTUVN1xxx3essaNGysuLk6TJk3S8ePHdfToUU2aNEnnn3++6tWrV0o9AAD/IOQBKLPatWun999/X7Nnz9Zbb72lP//8U5deeqmOHDmSp64nvLVv395bFh0drUWLFumjjz5SRESEoqKiNHv2bM2aNUshIZzIAGBvhDwAZVaPHj103XXXqUWLFkpJSdHMmTN1+PBhTZ8+3afe0aNHNXXqVJ+jeJ7yO+64Qx06dNDKlSu1bNkyNWvWTL169dLRo0dLsysAUOr4KgsgYMTGxqpRo0ZKT0/3Kf/888+Vk5Ojfv36+ZRPnTpVW7Zs0YoVK7wP8Z46daoqV66s//3vf7rxxhtLre0AUNo4kgcgYGRlZemPP/5QjRo1fMonTZqk3r17Kz4+3qc8JydHQUFBPo/+8fzsdrtLpc0A4C+EPABl1qOPPqrFixdry5YtWr58ua655hoFBwfrpptu8tZJT0/XkiVLNGjQoDyv7969uw4dOqT77rtPGzZs0Pr16zVw4ECFhISoS5cupdkVACh1hDwAZdaOHTt00003qXHjxrr++usVFxenlStX+hyxe++991S7dm0lJyfneX1SUpK++eYbrV27VpdccokuvfRS7dq1S7Nnz85zNBAA7MYyxhh/N6IgX375pd588039/PPPys7OVo0aNXTxxRdr/Pjx3nteSVJmZqZGjRqlGTNmaM+ePapRo4auu+46jRw50nu/rJO53W698cYbeuedd5Senq6oqCh169ZNY8eOVYMGDYrUxszMTMXExCgjI0OVKlU66z4DAACcTmGzR5kMecYY3X333XrnnXfUsGFDpaSkKDo6Wrt27dLixYv18ccfq2PHjpKk7OxsdezYUampqUpOTlarVq30yy+/aO7cuWrbtq2WLFmiChUq+Lz/nXfeqYkTJ6pp06bq1auXdu3apenTpysqKkorV65UYmJiodtKyAMAAKWp0NnDlEGvvvqqkWTuvfde43Q682x3OBze/x4xYoSRZJ544gmfOk888YSRZMaNG+dTvmDBAiPJdOrUyeTm5nrLZ86caSSZ5OTkIrU1IyPDSDIZGRlFeh0AAEBxFDZ7lLkjeUePHlWtWrVUuXJlbdy48bQ3LDXGqHbt2srMzNSePXsUGRnp3Zadna3q1aurWrVq+uOPP7zlN998sz755BMtXrxYnTp18nm/Ll26aNGiRdq6davq1KlTqPZyJA8AAJSmwmaPMnfhxdy5c3Xo0CFdffXVcrlc+uKLL/T888/r7bffznNvrLS0NO3atUsdOnTwCXiSFBkZqQ4dOmjz5s3avn27t3zRokXebadKSUmRJC1evLgEegYAAFB6ytzNkH/66SdJJx4+3qJFC23atMm7LSgoSA899JBefPFFSSdCnqQC19AlJiZqzpw5SktLU0JCgrKzs7V79241a9ZMwcHB+dY/+X3zk5ubq9zcXO/PmZmZkiSHwyGHw+FtZ3BwsFwul8+9uDzlTqdTJx9ADQ4OVlBQUIHlnvf18BzddDqdhSoPDQ2V2+2W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tWjRQpJ09OhRff/993rvvfcUEhKimJgYXXTRRerWrZtq1arlXcZhu6UcBrbhdDpN06ZNTbVq1cz48ePN999/b6ZOnWpeeeUV079/f9OwYUMTFBRkGjRoYF588UXv69xutx9bHXhcLpfp3r27CQ0NNcnJyWbUqFHmn//8pwkKCjKdOnUyu3fv9ncTgSJxuVymbt265rLLLjNZWVnGGGO2bNliqlatagYNGmRuv/12ExQUZCzLMpZlmYsvvtgsX77cz60OLC6XyxhjzO23324syzLBwcHGsizTsmVLM378ePPHH39462ZmZpq2bduar7/+2hhzYh/teb0xJ/b1yJ/T6TShoaHm/vvvN9nZ2d7yu+++20RERBjLskxUVJQJCgoykZGR5q677jIZGRk+72Gnv4mEPBvwTMgPP/zQhIWFmYkTJ+apc+DAAbN69WozYcIE06pVK2NZlunRo4fZt2+fz/vYaXKfa56x+fjjj41lWeaJJ57wbjt8+LC5++67jWVZZsKECXles23bNrN+/XpjDDtolB0nz+nQ0FDz8ccf+2xv27atCQsLM127djVvv/22mTdvnnnkkUeMZVmmTZs2ZufOnf5odkAbNmyYsSzLXHnllaZnz57e4GFZlunatav56quvzLhx44xlWd59OfuMM/PM5ffff98EBQWZadOmGWOMOX78uJk8ebKxLMu0b9/efPXVV2bJkiXmyy+/NFdeeaWxLMvcdddd5tixY/5sfokh5NmAZ3L369fPJCQkmI0bNxpjTkzuU0Obw+Ewq1evNldffbWxLMs8/vjjpd7eQOX5Jt29e3fTrl07s2HDBmPM3zvggwcPmg4dOpjKlSv7hGdjjHnxxRdNUFCQ2bx5c+k2GjgNz5y+/vrrTfPmzb1fRIwxZuPGjaZVq1bmggsuMDt27PCWHzp0yPTt29dYlmVWrVpV6m0OdMeOHTM333yz6dWrl8nJyTGrVq0yTz/9tLnooou8R0tDQkJMXFyceffdd/3d3IDhmcuXXnqpufjii7374PXr15vWrVubSy65JM+XkjVr1pjzzz/fVKxY0WzZsqXU21waWKRiA5ZlyeVyqUqVKsrIyPApP3V9QUhIiNq0aaPPP/9cnTt31scff6zs7OzSbnJACgoKUkZGhv7880+df/75Ou+88ySduALO7XarcuXKeuihh3T48GG999573tft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", + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "from qiskit_aer import AerSimulator\n", + "\n", + "qc = q_algo.export(\"qiskit\")\n", + "qc.measure_all()\n", + "simulator = AerSimulator()\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts, discard_lower=5)\n", + "plot_histogram(counts_readable)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using `QlassF.original_f` we can double check the result without invoking a quantum simulator; calling it with the tuple `(12,12)` must result in the hash value `0xca`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0xca\n" + ] + } + ], + "source": [ + "print(hex(hash_simp.original_f((12, 12))))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_grover_subset.ipynb.txt b/_sources/example_grover_subset.ipynb.txt new file mode 100644 index 00000000..325e5259 --- /dev/null +++ b/_sources/example_grover_subset.ipynb.txt @@ -0,0 +1,111 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover search: subset problem\n", + "\n", + "We define a function named `subset_sum(i,j)` that returns the sum of the elements `i` and `j` of a list `set_`. We want to use a Grover search to find which `i` `j` combination led to a given value." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint, Qint3, Qlist, Parameter\n", + "from typing import Tuple\n", + "\n", + "\n", + "@qlassf\n", + "def subset_sum(\n", + " ii: Tuple[Qint[2], Qint[2]], set_: Parameter[Qlist[Qint3, 4]]\n", + ") -> Qint[3]:\n", + " return set_[ii[0]] + set_[ii[1]] if ii[0] != ii[1] else 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our quantum function `subset_sum` will be used as an oracle for a Grover search. For instance, here we want to find the input value that produce the value `7`. Since we know that there are at least two result (`(i,j)` and `(j,i)`), we set `n_matching=2`. We also bind the parameter `set_` with the set of numbers where we want to search the solution." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import Grover\n", + "\n", + "q_algo = Grover(subset_sum.bind(set_=[0, 5, 2, 3]), Qint3(7), n_matching=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we use our prefered framework and simulator for sampling the result; this is an example using `qiskit` with `aer_simulator`.\n", + "\n", + "In the output histogram, it's now evident that the input leading to a value of `7` are the tuples `(1,2)` and `(2,1)` (5+2 and 2+5), aligning with our expectations.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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8ODByMjIwPTp002WTZ8+HRkZGRgyZIhJ+9ChQwHcuY9eTk6O2r5lyxbEx8cjKiqqWPfoIyIiIrJndnlOXnR0tHphxPHjx9W2+Ph4AECbNm0wePBgAMD48eOxceNGzJ07F7/++iuaNWuGo0ePIjY2FmFhYRg1apTJc0dGRmLw4MGIjo5Gs2bN0K1bN6SkpODrr79G5cqVsXjx4jIbJxEREVFpscuQt2fPHqxevdqkbe/evSaHWI0hz9PTEzt37sTUqVOxfv16xMXFITAwEGPHjsWUKVPg4eFR4PmXLVuGRo0aYfny5fjggw/g5eWFXr16YebMmahbt27pDo6IiIioDNj9LVTsXXp6Onx9fe97GTMRmWfIIssev2KUNXrhmPi7J7JPxc0e5fqcPCIiIiIqHEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERERkQYx5BERERFpEEMeERHZpdmzZyMsLAze3t4ICAhAz549cerUKZN1Xn31VdStWxceHh7w9/dHjx49cPLkSRv1mMi+MOQREZFd2rlzJ4YPH44DBw5g27ZtyM3NRVRUFDIzM9V1Hn30UaxcuRInTpxATEwMRARRUVHIy8uzYc+J7IOzrTtARERUmK1bt5r8vGrVKgQEBODIkSOIiIgAAAwdOlRdXqtWLcyYMQOPPPII/vrrL9StW7dM+0tkb7gnr5wozmGLrKwsDB8+HH5+fvDy8sIzzzyDS5cu2ajH1uXo4yciIC0tDQBQuXLlQpdnZmZi5cqVqF27NoKDg8uya0R2iSGvnCjOYYvRo0dj06ZN+Pbbb7Fz504kJyfj6aeftmGvrcfR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", + "text/plain": [ + "
" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "from qiskit_aer import AerSimulator\n", + "\n", + "qc = q_algo.export(\"qiskit\")\n", + "qc.measure_all()\n", + "simulator = AerSimulator()\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_grover_sudoku.ipynb.txt b/_sources/example_grover_sudoku.ipynb.txt new file mode 100644 index 00000000..bae66351 --- /dev/null +++ b/_sources/example_grover_sudoku.ipynb.txt @@ -0,0 +1,196 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover search: sudoku solver\n", + "\n", + "In this example we are going to solve a sudoku puzzle. Since we have few qubits, we cannot solve a real 9x9 sudoku puzzle; our toy examples uses a 2x2 matrix where a valid solution is when in every row and every column there are no repeated values (`0` or `1`). We encode these xor-ing the values for each row and column. \n", + "Since we want a specific solution, we add a constraint `constr`: we want the `[0][0]` element to be `True`.\n", + "\n", + "`sudoku_check` is already an oracle so we can instantiate the `Grover` algorithm without value." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qmatrix\n", + "from qlasskit.algorithms import Grover\n", + "\n", + "\n", + "@qlassf\n", + "def sudoku_check(m: Qmatrix[bool, 2, 2]) -> bool:\n", + " constr = m[0][0]\n", + " sub0 = m[0][0] ^ m[0][1]\n", + " sub1 = m[1][0] ^ m[1][1]\n", + " sub2 = m[0][0] ^ m[1][0]\n", + " sub3 = m[0][1] ^ m[1][1]\n", + " return sub0 and sub1 and sub2 and sub3 and constr\n", + "\n", + "\n", + "q_algo = Grover(sudoku_check)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we use our prefered framework and simulator for sampling the result; this is an example using `qiskit` with `aer_simulator`.\n", + "\n", + "We obtain that the solution for this puzzle is the matrix `[[True, False], [False, True]]`." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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DHpERERUkkp90CtNGPSIiIioJD1M9jC5MXpERERE9Hgw6BERERGZKQY9IiIiIjPFoEdERERkphj0iIiIiMwUgx4RERGRmWLQIyIiIjJTVsauABGRKRn+hbFr8OR8P8HYNSCiksYePSIiIiIzxaBHREREZKYY9IiIiIjMFIMeERERkZli0CMiIiIyUwx6RERERGaKQY+IiIjITDHoEREREZkpBj0iIiIiM8WgR0RERGSmGPSIiIiIzBSDHhEREZGZYtAjIiIiMlMMekRERERmikGPiIiIyEwx6BERERGZKQY9IiIiIjPFoEdERERkphj0iIiIiMwUgx4RERGRmWLQIyIiIjJTDHpEREREZopBj4iIiMhMMegRERERmSkGPSIiIiIzxaBHREREZKYY9IiIiIjMFIMeERERkZli0CMiIiIyUwx6RERERGaKQY+IiIjITDHoEREREZkpBj0iIiIiM8WgR0RERGSmGPSIiIiIzBSDHhEREZGZYtAjIiIiMlMMekRERERmikGPiIiIyEwx6BERERGZKQY9IiIiIjPFoEdERERkphj0iIiIiMwUgx4RERGRmWLQIyIiIjJTDHpEREREZopBj4iIiMhMMegRERERmSkGPSIiIiIzxaBHREREZKYY9IiIiIjMFIMeERERkZli0CMiIiIyUwx6RERERGaKQY+IiIjITDHoEREREZkpBj0iIiIiM8WgR0RERGSmGPSIiIiIzBSDHhEREZGZYtAjIiIiMlMMekRERERmikGPiIiIyEwx6BERERGZKQY9IiIiIjPFoEdERERkphj0iIiIiMwUgx4RERGRmTLpoPf777+jc+fOcHd3h52dHfz9/TFw4EBcuXLFYL309HS89dZb8PX1ha2tLfz8/DBp0iRkZGQU+b06nQ5fffUVgoKCYG9vDw8PDwwcOBAXLlwoic0iIiIiKhFWxq5AUUQEo0aNwpIlS1C9enUMGDAAzs7OSEhIQGRkJC5fvgwfHx8AQGZmJtq2bYuYmBiEhIRg4MCBOHLkCObOnYvIyEjs3r0bdnZ2Bt8/cuRILF26FHXr1sX48eORkJCAtWvXIjQ0FAcOHEBAQIAxNpuIiIjosTLJoPfll19iyZIleP311/Hll1/C0tLSYLlGo1H/+7PPPkNMTAzeffddzJkzRy1/77338Omnn2LBggWYPHmyWh4eHo6lS5eiTZs22LFjB2xsbAAAgwYNQvfu3TF27Fhs3779CW8hERER0ZOniIgYuxIFZWdno0qVKnBzc8OZM2dgZVV8FhUReHt7Iz09HUlJSXB0dFSXZWZmwsvLC56enjh//rxaPmjQIPz666+IjIxEmzZtDL6vffv2iIiIwOXLl1G1atUHqm96ejpcXV2RlpYGFxeXh9xaIjI1w78wdg2enO8nGLsGRPQ4PEz2MLkxeqGhobh16xZ69+4NrVaLDRs2YM6cOVi8eDHOnTtnsG5cXBwSEhIQHBxsEPIAwNHREcHBwbhw4YLBmL6IiAh12b26dOkCAIiMjHwCW0ZERERUskzu1m10dDQAwNLSEk899RTOnj2rLrOwsMCbb76JuXPnArgb9AAUO6YuICAA27dvR1xcHHx8fJCZmYnExETUq1ev0O3ggt+j/96i5ObmIjc3V/05PT0dAJCfn4/8/Hy1npaWltBqtdDpdAb1t7S0hEajQcGOVEtLS1hYWBRbrv9ePX0vZ8Fb2Pcrt7a2hk6ng1arVcsURYGVlVWx5cXVndvEbTL/bbKGudL/Pcyjne5fzm3iNpn7Nj0okwt6N27cAADMnz8fjRo1QlRUFGrXro0jR45gxIgRmDdvHqpXr47Ro0cjLS0NAODq6lrkd+m7M/XrPez6RZk9ezZmzJhRqDw0NBQODg4AgKpVq6Jhw4Y4evQo4uPj1XVq1aqFwMBAREVF4ebNm2p5gwYN4Ovri927d+POnTtqeYsWLeDp6YnQ0FCDRm3fvj3s7e2xZcsWgzp0794d2dnZCA8PV8usrKzQo0cPJCcnY//+/Wq5s7MzOnTogCtXriAmJkYt9/DwQMuWLREXF4czZ86o5dwmblPZ2aZeMFcajcaM2uku8/q3x23iNj3YNuk7xR6EyY3RGzFiBL7//nvY29vj3LlzqFy5srrs+PHjqF+/Pvz9/XHu3DmsWrUKgwcPxpQpU/Dxxx8X+q4pU6bgk08+wYYNG9CnTx8kJCSgSpUqCA4Oxp49ewqtv2PHDoSEhGD8+PFYuHBhkfUrqkfPx8cHycnJalAsq1cX3CZukzls0+uLzLdHb8kb7NHjNnGbzGGbUlNT4e7u/kBj9EyuR0/f29a4cWODkAcA9erVQ7Vq1XDu3Dncvn1bXbe4Hjj9bVX9eg+7flFsbW1ha2tbqNza2hrW1oYnCEtLyyJvERf3gElx5fd+76OUW1hYwMKi8JDM4sqLqzu3idv0sOWlfZvMiaIoAMyznbhN3CZuU9FM7mGMWrVqAQDKlStX5HJ9eXZ29r+Oqbt3DJ+joyMqVaqEixcvGiTq4tYnIiIiKs1MLui1b98eAHDq1KlCy/Lz83Hu3Dk4OjrCw8MDAQEBqFy5Mvbu3YvMzEyDdTMzM7F37174+/urkysDQNu2bdVl99LPn3fvtCtEREREpZHJBb3q1asjJCQE586dw9KlSw2WzZkzB7dv30afPn1gZWUFRVEwbNgwZGRkYObMmQbrzpw5ExkZGRg+fLhB+YgRIwAAU6dORV5enlq+detWREREICQkBL6+vk9o64iIiIhKjsk9jAEA58+fR8uWLXHjxg306NEDgYGBOHLkCMLCwuDr64sDBw7Ay8sLwN2eu+DgYMTGxiIkJASNGjXC4cOHERoaiiZNmiAyMhL29vYG3z98+HD1FWg9evRAYmIi1qxZAycnJ+zfvx81a9Z84LpywmQi88IJk4nI1JXqCZOBu716//zzD4YMGYLo6Gh8+eWXiIuLw5gxYxAVFaWGPODuuLvIyEhMmDABp06dwrx583D69GlMnDgRu3btKhTyAOC7775Tn6pduHAhtmzZgj59+iAqKuqhQh4RERGRKTPJHr3ShD16ROaFPXpEZOpKfY8eEREREf13DHpEREREZopBj4iIiMhMMegRERERmSkGPSIiIiIzxaBHREREZKYY9IiIiIjMFIMeERERkZli0CMiIiIyUwx6RERERGaKQY+IiIjITDHoEREREZkpBj0iIiIiM8WgR0RERGSmGPSIiIiIzBSDHhEREZGZYtAjIiIiMlMMekRERERmikGPiIiIyEwx6BERERGZKQY9IiIiIjPFoEdERERkphj0iIiIiMwUgx4RERGRmWLQIyIiIjJTDHpEREREZopBj4iIiMhMMegRERERmSkGPSIiIiIzxaBHREREZKYY9IiIiIjMFIMeERERkZli0CMiIiIyUwx6RERERGaKQY+IiIjITDHoEREREZkpBj0iIiIiM8WgR0RERGSmGPSIiIiIzBSDHhEREZGZYtAjIiIiMlMMekRERERmikGPiIiIyEwx6BERERGZKQY9IiIiIjPFoEdERERkphj0iIiIiMwUgx4RERGRmXrkoLd7927Ex8ffd50rV65g9+7dj/oriIiI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iIiIHr+HunW7c+dOfPjhh3B3d79vj52NjQ3c3d0xZcoUgxmjiYiIiKjkPFTQW7FiBdzc3DB27Nh/XXfMmDEoX748fvrpp0euHBERERE9uocKevv27UOnTp2KfDPEvWxtbdGpUyfs3bv3kStHRERERI/uoYJeQkICqlWr9sDr+/v7IzEx8aErRURERET/3UMFvaJe9ns/+fn5Rb7TjYiIiIievIdKYZUrV8bx48cfeP3jx4+jSpUqD10pIiIiIvrvHirotW7dGmFhYbh06dK/rnvp0iWEhYXxvbFERERERvJQQW/MmDHIz8/H888/j+Tk5GLXS0lJQb9+/aDRaDB69Oj/XEkiIiIiengPNWFyo0aNMGHCBHzxxReoU6cORo0ahfbt28Pb2xsAcO3aNezatQtLlizBzZs38dZbb6FRo0ZPpOJEREREdH8P/WaMefPmwc7ODp9//jlmzZqFWbNmGSwXEVhaWmLy5Mn4+OOPH1tFiYiIiOjhPHTQUxQFn3zyCV577TX89NNP2LdvH5KSkgAAXl5eCA4OxpAhQ1C9evXHXlkiIiIienAPHfT0qlevzh47IiIiIhPGSe6IiIiIzBSDHhEREZGZYtAjIiIiMlMMekRERERmikGPiIiIyEwx6BERERGZKQY9IiIiIjPFoEdERERkphj0iIiIiMwUgx4RERGRmWLQIyIiIjJTDHpEREREZopBj4iIiMhMMegRERERmSkGPSIiIiIzxaBHREREZKYY9IiIiIjMFIMeERERkZli0CMiIiIyUwx6RERERGaKQY+IiIjITDHoEREREZkpBj0iIiIiM8WgR0RERGSmGPSIiIiIzBSDHhEREZGZYtAjIiIiMlMMekRERERmikGPiIiIyEwx6BERERGZKQY9IiIiIjPFoEdERERkphj0iIiIiMwUgx4RERGRmWLQIyIiIjJTDHpEREREZopBj4iIiMhMMegRERERmSkGPSIiIiIzxaBHREREZKYY9IiIiIjMFIMeERERkZli0CMiIiIyUwx6RERERGaKQY+IiIjITDHoEREREZkpBj0iIiIiM8WgR0RERGSmGPSIiIiIzBSDHhEREZGZYtAjIiIiMlMMekRERERmikGPiIiIyEwx6BERERGZKQY9IiIiIjPFoEdERERkphj0iIiIiMwUgx4RERGRmWLQIyIiIjJTDHpEREREZopB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", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "from qiskit_aer import AerSimulator\n", + "\n", + "qc = q_algo.export(\"qiskit\")\n", + "qc.measure_all()\n", + "simulator = AerSimulator()\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts, discard_lower=20)\n", + "\n", + "plot_histogram(counts_readable)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can exploit *matplotlib* for drawing the result sudoku matrix as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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gBICA0AJgQGghMAAUEJgACghMACUEBgASggMACUEBoASAgNACYEBoITAAFBCYAAoITAAlBAYAEoIDAAlBAaAEgIDQAmBAaCEwABQQmAAKCEwAJQQGABKCAwAJQQGgBICA0AJgQGghMAAUEJgACghMACUEBgASggMACUEBoASAgNACYEBoITAAFBCYAAoITAAlBAYAEoIDAAlBAaAEgIDQAmBAaCEwABQQmAAKCEwAJQQGABKCAwAJQQGgBICA0AJgQGghMAAUEJgACghMACUEBgASggMACUEBoASAgNACYEBoITAAFBCYAAoITAAlBAYAEoIDAAlBAaAEgIDQAmBAaCEwABQQmAAKCEwAJQQGABKCAwAJQQGgBICA0AJgQGghMAAUEJgACghMACUEBgASggMACUEBoASAgNACYEBoET7aD9h0zRJkqM5kjSj/ewwOnr3D471CFCi98Bz7+3nf5efzKgHZv/+/UmSb+Wro/3UMGpmLB7rCaDW/v3709XVddL7tJoXk6ERNDg4mK1bt2batGlptVqj+dTnpN7e3vT09OSJJ55IZ2fnWI8DI857fHQ1TZP9+/dn7ty5GTfu5EdZRn0LZty4cbnwwgtH+2nPeZ2dnX74OKt5j4+eU225PM9BfgBKCAwAJQTmLDdx4sTcfPPNmThx4liPAiW8x1+6Rv0gPwDnBlswAJQQGABKCAwAJQQGgBICA0AJgQGghMAAUEJgACjx/wB5YmxI2zr1KQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "def draw_matrix(matrix):\n", + " fig, ax = plt.subplots()\n", + " ax.matshow(matrix, cmap=\"viridis\")\n", + "\n", + " for i in range(len(matrix)):\n", + " for j in range(len(matrix[0])):\n", + " ax.text(\n", + " j,\n", + " i,\n", + " str(matrix[i][j]),\n", + " va=\"center\",\n", + " ha=\"center\",\n", + " fontsize=12,\n", + " color=\"black\",\n", + " )\n", + "\n", + " plt.show()\n", + "\n", + "\n", + "m_res = list(filter(lambda x: x[1] > 500, counts_readable.items()))[0][0]\n", + "draw_matrix(m_res)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can create a more realistic sudoku game using numbers instead of booleans, but the resources required will scale exponentially. In the following code snippets, we recreate `sudoku_check` using `Qint[2]` and a 4x4 matrix. The sum of each column and row must be equal to 6 (3+2+1+0). As we can see, the resulting circuit of the checker requires more than 100 qubits, way above our simulation capabilities." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "QCircuit(1309 gates, 178 qubits)\n" + ] + } + ], + "source": [ + "from qlasskit import Qint, Qint4\n", + "\n", + "\n", + "@qlassf\n", + "def sudoku_check(m: Qmatrix[Qint[2], 4, 4]) -> bool:\n", + " res = True\n", + "\n", + " # Constraints\n", + " res = (m[0][2] == 3) and (m[0][0] == 1)\n", + "\n", + " # Check every row and column\n", + " for i in range(4):\n", + " c = (Qint4(0) + m[i][0] + m[i][1] + m[i][2] + m[i][3]) == 6\n", + " r = (Qint4(0) + m[0][i] + m[1][i] + m[2][i] + m[3][i]) == 6\n", + " res = res and c and r\n", + "\n", + " return res\n", + "\n", + "\n", + "print(sudoku_check.circuit())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_simon.ipynb.txt b/_sources/example_simon.ipynb.txt new file mode 100644 index 00000000..96c7b26b --- /dev/null +++ b/_sources/example_simon.ipynb.txt @@ -0,0 +1,132 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Simon function periodicity" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint\n", + "\n", + "\n", + "@qlassf\n", + "def f(a: Qint[4]) -> Qint[4]:\n", + " return (a >> 3) + 1" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.export(\"qiskit\").draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import Simon\n", + "\n", + "q_algo = Simon(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = q_algo.export(\"qiskit\")\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "from qiskit_aer import AerSimulator\n", + "\n", + "qc.measure_all()\n", + "simulator = AerSimulator()\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_unitary_of_f.ipynb.txt b/_sources/example_unitary_of_f.ipynb.txt new file mode 100644 index 00000000..3675f37b --- /dev/null +++ b/_sources/example_unitary_of_f.ipynb.txt @@ -0,0 +1,120 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Unitary of qlasskit function\n", + "\n", + "In qlasskit, we can exploit external low-level frameworks to perform operations on the resulting quantum circuit. In this example, we use qiskit in order to obtain the unitary matrix of our `QlassF` function." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "QlassF(a:bool, b:bool) -> bool:\n", + "\t_ret = a ^ ~b\n", + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit, transpile\n", + "from qiskit_aer import AerSimulator\n", + "from qiskit.visualization import array_to_latex\n", + "from qlasskit import qlassf\n", + "\n", + "\n", + "@qlassf\n", + "def f(a: bool, b: bool) -> bool:\n", + " return a ^ (not b)\n", + "\n", + "\n", + "print(f\"\\n{f}\\n\")\n", + "\n", + "qc = QuantumCircuit(f.num_qubits, f.num_qubits)\n", + "qc.append(f.gate(), f.qubits)\n", + "\n", + "qc.save_state()\n", + "qc.decompose().draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\n", + "\n", + "\\begin{bmatrix}\n", + "0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\\\\n", + " 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + " 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\\\\n", + " 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n", + " 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + " 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\\\\n", + " 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\\\\n", + " 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\\\\n", + " \\end{bmatrix}\n", + "$$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulator = AerSimulator(method=\"unitary\")\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "array_to_latex(result.get_unitary(circ, 3), max_size=16)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/exporter.ipynb.txt b/_sources/exporter.ipynb.txt new file mode 100644 index 00000000..310a9390 --- /dev/null +++ b/_sources/exporter.ipynb.txt @@ -0,0 +1,245 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exporting to other frameworks" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qlasskit implements circuit / gate exporters for Qiskit, Cirq, Qasm, Sympy and Pennylane. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import Qint, qlassf\n", + "\n", + "\n", + "@qlassf\n", + "def hello_world(a: bool, b: Qint[2]) -> Qint[2]:\n", + " return b + (1 if a else 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Qiskit" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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/OAHdHd3U1payqxZs9i3bx9RUWZ9iensgcojsPcj+OSSA/lRDrjzOliSaYW5iF31nwP3h+CqgfZLj4E6ION6mJ0PsQmRqi44bHuw83L2798PDB1WAUhMTKSiooKNGzdy//33ExMTwx133METTzxhXIiDFdK3zoebr4W2Ltj2MnT0QPxfnhexu+hJMDsPrl4IvWfhrf8L587C5DgzT/7xRUHuwzXXXMPu3bvDWVLIRTlgehxE/+VvkcbDZaJxOGDKNIiy4WfAvF3MIBgpyEVETDIh98jPX4dFRMQOJuQeuYiInSjIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERw02IIPd4PJSWlpKVlUVsbCxpaWls3LiRzs5O1q1bh8PhYMeOHZEuUySkvF7o6YPOHugfiHQ1kTHQb/072E1MpAsItZqaGlauXInb7WbatGksWLCA48ePs337durr62lpaQFg0aJFkS1UJEQ6uuHtenjzMJzqsJ6LcsDCVLghG3Kc4HBEtsZQ8g6A5wi4auBUw8XnezuhsRpSciFmSqSqCw5bB7nH42H16tW43W42bdrEo48+SkJCAgCPP/44jzzyCDExMTgcDvLz8yNcrUjwvf8x/PJNONc/+PkBL/y50frJvgq+djPETY5MjaHU0wE1v4L2E0OXeb1wqALq90L+XZA0J/z1BYuth1Y2bNiAy+Vi/fr1bNu27UKIA5SWllJQUEBfXx/p6ekkJiZGsFKR4Hv/Y/jFnqEh/mkfnYCfVVjDLnbSexbeLfMd4pfq64H3nofWxvDUFQq2DfLa2lrKysqYOXMmW7Zs8bnO4sWLASgoKLjw3PngLyoqYsqUKTjs/J1TbKuzB/7jTRjtcPDHp+C3fw5pSWFX9zqcbR3dut5+2P+SNYZuItsG+a5duxgYGGDNmjXEx8f7XGfq1KnA4CA/fPgwzz//PE6nkyVLloSlVpFge+cI9PoZSm/XQ69N9sp7OuHEIf/a9J6Fkx+Fpp5Qs22QV1RUAFBSUjLsOi6XCxgc5DfffDPNzc28+OKLrFixIrRFioTImwEE0tleqPk4+LVEQvMH1kFOf7lqgl5KWNj2YOexY8cAmDt3rs/lfX197N27Fxgc5FFRwf/bVlhYiNvtDvp2A/G571QSd0UKze5mUlP1jcOOHFEx3LOlIaC2j275N/a/8sPgFhQBf/vZf2HZ/Hv8bvdxnYfPpy4KfkGj4HQ6qaqqCqitbYO8s7MTgK6uLp/Ly8rK8Hg8JCQkkJGREdJa3G43TU1NIe1jtPr7+y88jpeaJLhipsQF3PZsd68t3hfn/B1X+ovoqMlG/v62DXKn00lrayvV1dUUFxcPWtbc3MzmzZsByM/PD/kBTafTGdLt+yM6OvrC4+zZsyNcjYRK/7luoifF+t1ukqPXFu+LPnzvwI2ks7slYr//WHLCtkG+YsUKamtr2bp1K7fddhs5OTkAVFZWsnbtWjweDxCeE4EC/boUCo++AGe6IMWZcuEYgdjPL/dCVUMA7Z4sxXlFadDrCbeWj6H6Gf/bLbktHdf/NO9zYduDnaWlpSQnJ9PY2Ehubi55eXlkZ2dTVFREZmYmy5cvBwaPj4vYxY3z/G+TfRU4rwh+LZEwIw3ikvxvN9vQOLBtkKemprJnzx5WrVpFbGwsDQ0NJCUlsXPnTsrLy6mrqwMU5GJPc5OtU/BHKzoKVtro5GaHA7Ju8q/N7AKImx6SckLOtkMrAPPnz2f37t1Dnu/o6KChoYGoqCgWLlwYgcpEQsvhgLU3wNN/hMMjnNkYHQVrl0HmlWEpLWyuzIZ5fw2HXht53VnZMG956GsKFVsH+XAOHDiA1+slJyeHuLihR/ife+45AA4ePDjo/9PT0yksLAxfoSJjMCUGvl4Crx6w5pW3dQ9dZ14KfHah/UL8vLTrYOp0aHgLTvuYjBKbaK0zZzE4DB6fmJBBvn//fmD4YZX77rvP5/8/9NBD/OIXvwhpbSLBFBMNt+fDilz4oAl27bOuqRIbA5tWwqwJcImhmRnWT/tJ8By1Qr3/HMTEwg1/Y3aAn6cg98FrxwsWy4QWEw2L5sCvqqwgnzJpYoT4pRKutH5c71lBHh1jjxAHGx/svJyRglxExCQTco/8/HVYRETsYELukYuI2ImCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcBMiyD0eD6WlpWRlZREbG0taWhobN26ks7OTdevW4XA42LFjR6TLlBDxeqH+BDzzNvz7f8HP/wQvvgcn2yJdmUhwxES6gFCrqalh5cqVuN1upk2bxoIFCzh+/Djbt2+nvr6elpYWABYtWhTZQiUkao/Db6rBfWbosoqDMM8J9xbBrITw1yYSLLbeI/d4PKxevRq3282mTZtobm6muroat9vN1q1bKS8vp7KyEofDQX5+fqTLlSB7twGe/qPvED/vkBv+9+/geGu4qhIJPlsH+YYNG3C5XKxfv55t27aRkHBxt6u0tJSCggL6+vpIT08nMTExgpVKsB3zwH/ugwHvyOt29sBTf4Su3pCXJRIStg3y2tpaysrKmDlzJlu2bPG5zuLFiwEoKCi48Nxzzz3HPffcw9y5c4mLi+Paa6/lu9/9Lh0dHWGpW4Kjohb6B0a//umzUHk0dPWIhJJtg3zXrl0MDAywZs0a4uPjfa4zdepUYHCQb9u2jejoaH74wx/yyiuv8I1vfIOf/vSn3H777QwM+JEMEjFnzsL+Rv/bvVFnHRgVMY1tD3ZWVFQAUFJSMuw6LpcLGBzkL730ErNmzbrw/7fccguzZs1izZo1vPHGG9x8880hqliC5ZB7dEMqn3ayDVo6Idn3332Rccu2QX7s2DEA5s6d63N5X18fe/fuBQYH+aUhfl5hYSEATU1NAdVSWFiI2+0OqG2wfe47lcRdkUKzu5nU1CWRLickrln2Na67638E1Pbmks9wpvlgkCsaPybC6z+Sn6yrJCkhhebm8fVv4HQ6qaqqCqitbYO8s7MTgK6uLp/Ly8rK8Hg8JCQkkJGRcdltvf766wDMnz8/oFrcbnfAfwSCrb+/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", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = hello_world.export(\"qiskit\")\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## QASM" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OPENQASM 3.0;\n", + "\n", + "gate hello_world a b.0 b.1 _ret.0 _ret.1 {\n", + "\tcx a _ret.0\n", + "\tcx b.0 _ret.0\n", + "\tcx b.1 _ret.1\n", + "\tccx a b.0 _ret.1\n", + "}\n", + "\n", + "hello_world q[0],q[1],q[2],q[3],q[4];\n", + "\n" + ] + } + ], + "source": [ + "qc = hello_world.export(\"qasm\")\n", + "print(qc)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cirq" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
0: ───hello_world───\n",
+       "      │\n",
+       "1: ───hello_world───\n",
+       "      │\n",
+       "2: ───hello_world───\n",
+       "      │\n",
+       "3: ───hello_world───\n",
+       "      │\n",
+       "4: ───hello_world───
" + ], + "text/plain": [ + "0: ───hello_world───\n", + " │\n", + "1: ───hello_world───\n", + " │\n", + "2: ───hello_world───\n", + " │\n", + "3: ───hello_world───\n", + " │\n", + "4: ───hello_world───" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import cirq\n", + "\n", + "qc = hello_world.export(\"cirq\")\n", + "qc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pennylane" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pennylane as qml\n", + "\n", + "tape = hello_world.export(\"pennylane\")\n", + "tape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sympy" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle C_{0,1}{\\left(X_{4}\\right)} \\text{CNOT}_{2,4} \\text{CNOT}_{1,3} \\text{CNOT}_{0,3} {\\left|00000\\right\\rangle }$" + ], + "text/plain": [ + "C((0,1),X(4))*CNOT(2,4)*CNOT(1,3)*CNOT(0,3)*|00000>" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = hello_world.export(\"sympy\")\n", + "qc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Qutip" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Disabled on docs for a depencency problem\n", + "# qc = hello_world.export(\"qutip\")\n", + "# qc.gates" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa.rst.txt b/_sources/generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa.rst.txt new file mode 100644 index 00000000..7276e224 --- /dev/null +++ b/_sources/generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa.rst.txt @@ -0,0 +1,41 @@ +qlasskit.algorithms.deutschjozsa.DeutschJozsa +============================================= + +.. currentmodule:: qlasskit.algorithms.deutschjozsa + +.. autoclass:: DeutschJozsa + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DeutschJozsa.__init__ + ~DeutschJozsa.circuit + ~DeutschJozsa.decode_counts + ~DeutschJozsa.decode_output + ~DeutschJozsa.draw + ~DeutschJozsa.encode_input + ~DeutschJozsa.export + ~DeutschJozsa.gate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~DeutschJozsa.input_qubits + ~DeutschJozsa.input_size + ~DeutschJozsa.num_gates + ~DeutschJozsa.num_qubits + ~DeutschJozsa.output_qubits + ~DeutschJozsa.output_size + ~DeutschJozsa.qubits + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.algorithms.grover.Grover.rst.txt b/_sources/generated/qlasskit.algorithms.grover.Grover.rst.txt new file mode 100644 index 00000000..b1c92670 --- /dev/null +++ b/_sources/generated/qlasskit.algorithms.grover.Grover.rst.txt @@ -0,0 +1,41 @@ +qlasskit.algorithms.grover.Grover +================================= + +.. currentmodule:: qlasskit.algorithms.grover + +.. autoclass:: Grover + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Grover.__init__ + ~Grover.circuit + ~Grover.decode_counts + ~Grover.decode_output + ~Grover.draw + ~Grover.encode_input + ~Grover.export + ~Grover.gate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Grover.input_qubits + ~Grover.input_size + ~Grover.num_gates + ~Grover.num_qubits + ~Grover.output_qubits + ~Grover.output_size + ~Grover.qubits + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.algorithms.qalgorithm.rst.txt b/_sources/generated/qlasskit.algorithms.qalgorithm.rst.txt new file mode 100644 index 00000000..d819a261 --- /dev/null +++ b/_sources/generated/qlasskit.algorithms.qalgorithm.rst.txt @@ -0,0 +1,41 @@ +qlasskit.algorithms.qalgorithm +============================== + +.. automodule:: qlasskit.algorithms.qalgorithm + + + + + + + + .. rubric:: Functions + + .. autosummary:: + + oraclize + + + + + + .. rubric:: Classes + + .. autosummary:: + + QAlgorithm + + + + + + .. rubric:: Exceptions + + .. autosummary:: + + ConstantOracleException + + + + + diff --git a/_sources/generated/qlasskit.algorithms.simon.Simon.rst.txt b/_sources/generated/qlasskit.algorithms.simon.Simon.rst.txt new file mode 100644 index 00000000..4c79da06 --- /dev/null +++ b/_sources/generated/qlasskit.algorithms.simon.Simon.rst.txt @@ -0,0 +1,41 @@ +qlasskit.algorithms.simon.Simon +=============================== + +.. currentmodule:: qlasskit.algorithms.simon + +.. autoclass:: Simon + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Simon.__init__ + ~Simon.circuit + ~Simon.decode_counts + ~Simon.decode_output + ~Simon.draw + ~Simon.encode_input + ~Simon.export + ~Simon.gate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Simon.input_qubits + ~Simon.input_size + ~Simon.num_gates + ~Simon.num_qubits + ~Simon.output_qubits + ~Simon.output_size + ~Simon.qubits + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.bqm.decode_samples.rst.txt b/_sources/generated/qlasskit.bqm.decode_samples.rst.txt new file mode 100644 index 00000000..5ba0e806 --- /dev/null +++ b/_sources/generated/qlasskit.bqm.decode_samples.rst.txt @@ -0,0 +1,6 @@ +qlasskit.bqm.decode\_samples +============================ + +.. currentmodule:: qlasskit.bqm + +.. autofunction:: decode_samples \ No newline at end of file diff --git a/_sources/generated/qlasskit.decompiler.Decompiler.rst.txt b/_sources/generated/qlasskit.decompiler.Decompiler.rst.txt new file mode 100644 index 00000000..4da16935 --- /dev/null +++ b/_sources/generated/qlasskit.decompiler.Decompiler.rst.txt @@ -0,0 +1,23 @@ +qlasskit.decompiler.Decompiler +============================== + +.. currentmodule:: qlasskit.decompiler + +.. autoclass:: Decompiler + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Decompiler.__init__ + ~Decompiler.decompile + + + + + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.qcircuit.gates.rst.txt b/_sources/generated/qlasskit.qcircuit.gates.rst.txt new file mode 100644 index 00000000..f95b2ca8 --- /dev/null +++ b/_sources/generated/qlasskit.qcircuit.gates.rst.txt @@ -0,0 +1,53 @@ +qlasskit.qcircuit.gates +======================= + +.. automodule:: qlasskit.qcircuit.gates + + + + + + + + .. rubric:: Functions + + .. autosummary:: + + apply + + + + + + .. rubric:: Classes + + .. autosummary:: + + Barrier + CCX + CP + CX + H + I + MCX + MCtrl + NopGate + P + QControlledGate + QGate + S + Swap + T + Toffoli + X + Y + Z + + + + + + + + + diff --git a/_sources/generated/qlasskit.qcircuit.qcircuit.QCircuit.rst.txt b/_sources/generated/qlasskit.qcircuit.qcircuit.QCircuit.rst.txt new file mode 100644 index 00000000..9dd024df --- /dev/null +++ b/_sources/generated/qlasskit.qcircuit.qcircuit.QCircuit.rst.txt @@ -0,0 +1,53 @@ +qlasskit.qcircuit.qcircuit.QCircuit +=================================== + +.. currentmodule:: qlasskit.qcircuit.qcircuit + +.. autoclass:: QCircuit + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~QCircuit.__init__ + ~QCircuit.add_qubit + ~QCircuit.append + ~QCircuit.append_circuit + ~QCircuit.barrier + ~QCircuit.ccx + ~QCircuit.copy + ~QCircuit.cp + ~QCircuit.cx + ~QCircuit.draw + ~QCircuit.export + ~QCircuit.get_key_by_index + ~QCircuit.h + ~QCircuit.iqft + ~QCircuit.mctrl + ~QCircuit.mcx + ~QCircuit.qft + ~QCircuit.random + ~QCircuit.repeat + ~QCircuit.s + ~QCircuit.swap + ~QCircuit.t + ~QCircuit.x + ~QCircuit.y + ~QCircuit.z + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~QCircuit.num_gates + ~QCircuit.used_qubits + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.rst.txt b/_sources/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.rst.txt new file mode 100644 index 00000000..e1307587 --- /dev/null +++ b/_sources/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.rst.txt @@ -0,0 +1,41 @@ +qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper +================================================= + +.. currentmodule:: qlasskit.qcircuit.qcircuitwrapper + +.. autoclass:: QCircuitWrapper + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~QCircuitWrapper.__init__ + ~QCircuitWrapper.circuit + ~QCircuitWrapper.decode_counts + ~QCircuitWrapper.decode_output + ~QCircuitWrapper.draw + ~QCircuitWrapper.encode_input + ~QCircuitWrapper.export + ~QCircuitWrapper.gate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~QCircuitWrapper.input_qubits + ~QCircuitWrapper.input_size + ~QCircuitWrapper.num_gates + ~QCircuitWrapper.num_qubits + ~QCircuitWrapper.output_qubits + ~QCircuitWrapper.output_size + ~QCircuitWrapper.qubits + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.qlassfun.QlassF.rst.txt b/_sources/generated/qlasskit.qlassfun.QlassF.rst.txt new file mode 100644 index 00000000..82b07c08 --- /dev/null +++ b/_sources/generated/qlasskit.qlassfun.QlassF.rst.txt @@ -0,0 +1,54 @@ +qlasskit.qlassfun.QlassF +======================== + +.. currentmodule:: qlasskit.qlassfun + +.. autoclass:: QlassF + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~QlassF.__init__ + ~QlassF.bind + ~QlassF.circuit + ~QlassF.compile + ~QlassF.decode_counts + ~QlassF.decode_output + ~QlassF.draw + ~QlassF.encode_input + ~QlassF.export + ~QlassF.f + ~QlassF.from_function + ~QlassF.gate + ~QlassF.to_bqm + ~QlassF.to_logicfun + ~QlassF.truth_table + ~QlassF.truth_table_header + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~QlassF.input_qubits + ~QlassF.input_size + ~QlassF.num_gates + ~QlassF.num_qubits + ~QlassF.output_qubits + ~QlassF.output_size + ~QlassF.qubits + ~QlassF.name + ~QlassF.original_f + ~QlassF.args + ~QlassF.returns + ~QlassF.expressions + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.qlassfun.qlassf.rst.txt b/_sources/generated/qlasskit.qlassfun.qlassf.rst.txt new file mode 100644 index 00000000..51d99df6 --- /dev/null +++ b/_sources/generated/qlasskit.qlassfun.qlassf.rst.txt @@ -0,0 +1,6 @@ +qlasskit.qlassfun.qlassf +======================== + +.. currentmodule:: qlasskit.qlassfun + +.. autofunction:: qlassf \ No newline at end of file diff --git a/_sources/generated/qlasskit.qlassfun.qlassfa.rst.txt b/_sources/generated/qlasskit.qlassfun.qlassfa.rst.txt new file mode 100644 index 00000000..cb63d945 --- /dev/null +++ b/_sources/generated/qlasskit.qlassfun.qlassfa.rst.txt @@ -0,0 +1,6 @@ +qlasskit.qlassfun.qlassfa +========================= + +.. currentmodule:: qlasskit.qlassfun + +.. autofunction:: qlassfa \ No newline at end of file diff --git a/_sources/generated/qlasskit.types.parameter.rst.txt b/_sources/generated/qlasskit.types.parameter.rst.txt new file mode 100644 index 00000000..47b5904d --- /dev/null +++ b/_sources/generated/qlasskit.types.parameter.rst.txt @@ -0,0 +1,30 @@ +qlasskit.types.parameter +======================== + +.. automodule:: qlasskit.types.parameter + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + + Parameter + ParameterMeta + + + + + + + + + diff --git a/_sources/generated/qlasskit.types.qbool.rst.txt b/_sources/generated/qlasskit.types.qbool.rst.txt new file mode 100644 index 00000000..0262cb65 --- /dev/null +++ b/_sources/generated/qlasskit.types.qbool.rst.txt @@ -0,0 +1,29 @@ +qlasskit.types.qbool +==================== + +.. automodule:: qlasskit.types.qbool + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + + Qbool + + + + + + + + + diff --git a/_sources/generated/qlasskit.types.qchar.rst.txt b/_sources/generated/qlasskit.types.qchar.rst.txt new file mode 100644 index 00000000..e6132755 --- /dev/null +++ b/_sources/generated/qlasskit.types.qchar.rst.txt @@ -0,0 +1,29 @@ +qlasskit.types.qchar +==================== + +.. automodule:: qlasskit.types.qchar + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + + Qchar + + + + + + + + + diff --git a/_sources/generated/qlasskit.types.qfixed.rst.txt b/_sources/generated/qlasskit.types.qfixed.rst.txt new file mode 100644 index 00000000..d77f9470 --- /dev/null +++ b/_sources/generated/qlasskit.types.qfixed.rst.txt @@ -0,0 +1,44 @@ +qlasskit.types.qfixed +===================== + +.. automodule:: qlasskit.types.qfixed + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + + Qfixed + Qfixed1_2 + Qfixed1_3 + Qfixed1_4 + Qfixed1_6 + Qfixed2_2 + Qfixed2_3 + Qfixed2_4 + Qfixed2_6 + Qfixed3_3 + Qfixed3_4 + Qfixed3_6 + Qfixed4_4 + Qfixed4_6 + QfixedImp + QfixedMeta + + + + + + + + + diff --git a/_sources/generated/qlasskit.types.qint.rst.txt b/_sources/generated/qlasskit.types.qint.rst.txt new file mode 100644 index 00000000..f7ed60bc --- /dev/null +++ b/_sources/generated/qlasskit.types.qint.rst.txt @@ -0,0 +1,40 @@ +qlasskit.types.qint +=================== + +.. automodule:: qlasskit.types.qint + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + + Qint + Qint12 + Qint16 + Qint2 + Qint3 + Qint4 + Qint5 + Qint6 + Qint7 + Qint8 + QintImp + QintMeta + + + + + + + + + diff --git a/_sources/generated/qlasskit.types.qlist.rst.txt b/_sources/generated/qlasskit.types.qlist.rst.txt new file mode 100644 index 00000000..363bebaa --- /dev/null +++ b/_sources/generated/qlasskit.types.qlist.rst.txt @@ -0,0 +1,30 @@ +qlasskit.types.qlist +==================== + +.. automodule:: qlasskit.types.qlist + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + + Qlist + QlistMeta + + + + + + + + + diff --git a/_sources/generated/qlasskit.types.qmatrix.rst.txt b/_sources/generated/qlasskit.types.qmatrix.rst.txt new file mode 100644 index 00000000..24bf940c --- /dev/null +++ b/_sources/generated/qlasskit.types.qmatrix.rst.txt @@ -0,0 +1,30 @@ +qlasskit.types.qmatrix +====================== + +.. automodule:: qlasskit.types.qmatrix + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + + Qmatrix + QmatrixMeta + + + + + + + + + diff --git a/_sources/generated/qlasskit.types.qtype.rst.txt b/_sources/generated/qlasskit.types.qtype.rst.txt new file mode 100644 index 00000000..682e0556 --- /dev/null +++ b/_sources/generated/qlasskit.types.qtype.rst.txt @@ -0,0 +1,42 @@ +qlasskit.types.qtype +==================== + +.. automodule:: qlasskit.types.qtype + + + + + + + + .. rubric:: Functions + + .. autosummary:: + + bin_to_bool_list + bool_list_to_bin + + + + + + .. rubric:: Classes + + .. autosummary:: + + Qtype + + + + + + .. rubric:: Exceptions + + .. autosummary:: + + TypeErrorException + + + + + diff --git a/_sources/generated/qlasskit.types.rst.txt b/_sources/generated/qlasskit.types.rst.txt new file mode 100644 index 00000000..38f42f94 --- /dev/null +++ b/_sources/generated/qlasskit.types.rst.txt @@ -0,0 +1,47 @@ +qlasskit.types +============== + +.. automodule:: qlasskit.types + + + + + + + + .. rubric:: Functions + + .. autosummary:: + + const_to_qtype + format_outcome + interpret_as_qtype + type_repr + + + + + + + + + + + + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :recursive: + + qlasskit.types.parameter + qlasskit.types.qbool + qlasskit.types.qchar + qlasskit.types.qfixed + qlasskit.types.qint + qlasskit.types.qlist + qlasskit.types.qmatrix + qlasskit.types.qtype + diff --git a/_sources/how_it_works.ipynb.txt b/_sources/how_it_works.ipynb.txt new file mode 100644 index 00000000..f904bef9 --- /dev/null +++ b/_sources/how_it_works.ipynb.txt @@ -0,0 +1,254 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How it works\n", + "\n", + "To convert Python code into a quantum circuit, qlasskit implements a series of transformations:\n", + "\n", + "1. It begins with the Python *AST* (Abstract Syntax Tree), converting it into a more streamlined form using the `ast2ast` module. \n", + "2. Next, the streamlined AST is translated into *boolean expressions* as an intermediate step by the `ast2logic` module. \n", + "During this phase, boolean expressions are refined and optimized in preparation for the final transformation.\n", + "3. Finally, the `compiler` module takes these optimized boolean expressions and compiles them into a \n", + "*quantum circuit*.\n", + "\n", + "Unlike other libraries that translate individual operations into quantum circuits before combining them, \n", + "qlasskit constructs a single boolean expression for each output qubit of the entire function. \n", + "This unique approach facilitates advanced optimization leveraging boolean algebraic properties.\n", + "\n", + "![Transformations](_images/trasformations/qlasskit_transformations.png)\n", + "\n", + "\n", + "For instance, let assume we have the following function:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint\n", + "from qiskit import QuantumCircuit\n", + "\n", + "\n", + "@qlassf\n", + "def f_comp(b: bool, n: Qint[2]) -> Qint[2]:\n", + " for i in range(3):\n", + " n += 1 if b else 2\n", + " return n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we decompose the algorithm in 3 separate additions and we compile them separately, we obtain the following circuit:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operations: OrderedDict([('cx', 12), ('barrier', 3), ('x', 3), ('ccx', 3)])\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "@qlassf\n", + "def f1(b: bool, n: Qint[2]) -> Qint[2]:\n", + " return n + (1 if b else 2)\n", + "\n", + "\n", + "qc = QuantumCircuit(f_comp.num_qubits * 2 - 1)\n", + "\n", + "for i in range(3):\n", + " qc.barrier(label=f\"it_{i}\")\n", + " qc.append(f1.gate(), [0] + list(range(1 + i * 2, 5 + i * 2)))\n", + "\n", + "print(\"Operations:\", qc.decompose().count_ops())\n", + "qc.decompose().draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "While if we compile the whole function to a quantum circuit using qlasskit, we obtain the following quantum circuit:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operations: OrderedDict([('cx', 7), ('x', 1), ('ccx', 1)])\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(f_comp.num_qubits)\n", + "qc.append(f_comp.gate(), f_comp.qubits)\n", + "\n", + "print(\"Operations:\", qc.decompose().count_ops())\n", + "qc.decompose().draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see from the circuit drawings, qlasskit approach needs half the number of qubits and half the number of gates." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## AST Traslator\n", + "Given a python function, the `qlasskit.ast2logic` module walks its syntax tree translating all the statements / \n", + "expressions to boolean expressions.\n", + "\n", + "\n", + "For instance, the following function:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "@qlassf\n", + "def f(n: Qint[4]) -> bool:\n", + " return n == 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Is translated to this boolean expression:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(_ret, n.0 & n.1 & ~n.2 & ~n.3)]\n" + ] + } + ], + "source": [ + "print(f.expressions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Compiler\n", + "\n", + "The boolean expressions are then being fed to the `qlasskit.compiler`` which compiles boolean expressions\n", + "to invertible circuits, introducing auxiliary qubits. In this step, the compiler will automatically uncompute \n", + "auxiliary qubits in order to reduce the number of qubits needed and the circuit footprint. \n", + "\n", + "For the compilation, two backends are supported:\n", + "\n", + "- InternalCompiler\n", + "- Tweedledum.xag_synth\n", + "\n", + "\n", + "## Result \n", + "\n", + "The result of the compiler is a quantum circuit represented with qlasskit `QCircuit`. This circuit\n", + "can now be exported to one of the supported framework as a gate or as a standalone circuit.\n", + "\n", + "\n", + "The previous example function `f`, is translated to the following quantum circuit: the \n", + "result is available at qubit `q6`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.export().draw(\"mpl\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..9f7bc3a3 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,86 @@ +Qlasskit +==================================== + +.. image:: https://img.shields.io/badge/GitHub-Repository-blue?logo=github + :alt: GitHub Repository + :target: https://github.com/dakk/qlasskit +.. image:: https://img.shields.io/badge/supported_by-Unitary_Fund-ffff00.svg + :alt: Unitary Fund + :target: https://unitary.fund +.. image:: https://github.com/dakk/qlasskit/actions/workflows/ci.yaml/badge.svg + :alt: CI Status + :target: https://github.com/dakk/qlasskit/actions/workflows/ci.yaml +.. image:: https://img.shields.io/pypi/v/qlasskit + :alt: PyPI - Version + :target: https://pypi.org/project/qlasskit/ +.. image:: https://img.shields.io/badge/license-Apache_2.0-blue + :alt: License: Apache 2.0 + :target: https://opensource.org/licenses/Apache-2.0 +.. image:: https://img.shields.io/badge/qlasskit-Discord-yellow?logo=discord&logoColor=f5f5f5 + :alt: Discord + :target: https://discord.com/channels/764231928676089909/1210279373865754624 +.. image:: https://app.codacy.com/project/badge/Grade/05acc06af76848028183a66448217d91 + :alt: Codacy Badge + :target: https://app.codacy.com/gh/dakk/qlasskit/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade +.. image:: https://static.pepy.tech/badge/qlasskit + :alt: Downloads + :target: https://pepy.tech/project/qlasskit + +Qlasskit is a Python library that allows quantum developers to write classical algorithms in pure +Python and translate them into unitary operators (gates) for use in quantum circuits supporting a wide +range of quantum frameworks. + +Qlasskit also support exporting to Binary Quadratic Models (bqm, ising and qubo) ready to be used in +quantum annealers, ising machines, simulators, etc. + +.. toctree:: + :maxdepth: 2 + :caption: Qlasskit + + quickstart.ipynb + how_it_works.ipynb + supported + parameters.ipynb + algorithms.ipynb + exporter.ipynb + bqm.ipynb + decompiler_and_optimizer.ipynb + api + cli_tools + +.. toctree:: + :maxdepth: 2 + :caption: Examples + + example_grover.ipynb + example_grover_subset.ipynb + example_grover_hash.ipynb + example_grover_sudoku.ipynb + example_grover_factors.ipynb + example_simon.ipynb + example_deutsch_jozsa.ipynb + example_bernstein_vazirani.ipynb + example_unitary_of_f.ipynb + example_big_circuit.ipynb + example_bqm_tsp.ipynb + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + + +Cite +====== + +.. code-block:: latex + + @software{qlasskit2023, + author = {Davide Gessa}, + title = {qlasskit: a python-to-quantum circuit compiler}, + url = {https://github.com/dakk/qlasskit}, + year = {2023}, + } \ No newline at end of file diff --git a/_sources/parameters.ipynb.txt b/_sources/parameters.ipynb.txt new file mode 100644 index 00000000..0e3767b6 --- /dev/null +++ b/_sources/parameters.ipynb.txt @@ -0,0 +1,128 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Parameters\n", + "\n", + "Qlasskit allow to create `qlassf` function with parameters. Those parameters are not free variables of the final circuit, and need to be bound before compilation.\n", + "\n", + "In the next example we define `test` with a parameter `a`; after binding the parameter `a` to `True`, the final function expression will be `b`." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(_ret, b)]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qlasskit import qlassf, Parameter\n", + "\n", + "\n", + "@qlassf\n", + "def test(a: Parameter[bool], b: bool) -> bool:\n", + " return a and b\n", + "\n", + "\n", + "qf = test.bind(a=True)\n", + "qf.expressions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Parameterizable qlassf also supports custom types, and complex types like `Qlist` and `Qtuple`." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(_ret.0, b.0),\n", + " (_ret.1, ~b.1),\n", + " (_ret.2, ~(b.1 ^ b.2)),\n", + " (_ret.3, b.2 ^ b.3 ^ (b.1 & ~b.2))]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qlasskit import Qlist, Qint, Qint4\n", + "\n", + "\n", + "@qlassf\n", + "def test(a: Parameter[Qlist[Qint[2], 4]], b: Qint[4]) -> Qint[4]:\n", + " s = Qint4(0)\n", + " for n in a:\n", + " s += n\n", + " return s + b\n", + "\n", + "\n", + "qf = test.bind(a=[2, 1, 0, 3])\n", + "qf.expressions" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qf.circuit().export().draw(\"mpl\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/quickstart.ipynb.txt b/_sources/quickstart.ipynb.txt new file mode 100644 index 00000000..1aea4736 --- /dev/null +++ b/_sources/quickstart.ipynb.txt @@ -0,0 +1,154 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quickstart\n", + "\n", + "First install qlasskit using pip.\n", + "\n", + "```pip install qlasskit```\n", + "\n", + "We now define a qlassf function that sums two numbers:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint, Qint2\n", + "\n", + "\n", + "@qlassf\n", + "def sum_two_numbers(a: Qint[2], b: Qint[2]) -> Qint[2]:\n", + " return a + b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now export the resulting quantum circuit to any supported framework:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "circuit = sum_two_numbers.export(\"qiskit\")\n", + "circuit.draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The qlassf function can be also exported as a gate, if the destination framwork supports it. We can use `encode_input` and `decode_output` in order to convert from/to high level types of qlasskit without worrying about the binary representation." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit\n", + "\n", + "qc = QuantumCircuit(sum_two_numbers.num_qubits, len(sum_two_numbers.output_qubits))\n", + "\n", + "qc.initialize(\n", + " sum_two_numbers.encode_input(Qint2(1), Qint2(2)), sum_two_numbers.input_qubits\n", + ")\n", + "qc.append(sum_two_numbers.gate(\"qiskit\"), sum_two_numbers.qubits)\n", + "qc.measure(sum_two_numbers.output_qubits, range(len(sum_two_numbers.output_qubits)))\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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+Piod+/eOnLkiE6dOuUy1+l06h//+Id8fX11zz33GOOxsbGS9O+HN1wlJye7zAEAAGisqhSFPXr00IwZM3TgwAHdeeedmjdvnrZv3y6LxSKLxaK0tDTNnTtXd955p/bv368XX3xRPXr0qK21S5K+//57Xblyxe34rFmzJElPPPGEMT5lyhRJ1x4Auf4hjdWrV+vEiRP65S9/KR8fH2N80qRJ8vLy0sKFC10uI2dkZOj9999X586ddf/999f45wIAAKhLVf5FE6fTqZdffllLly41vhfvxu2enp763e9+p9dff93lC6JrwyuvvKI//vGPGjBggMLDw+Xr66ujR49qy5Ytstvtmj17thYtWmTMdzgceuCBB4yfuYuNjdWxY8f08ccfKyIiQvv27avwZ+4ef/xx42fuioqKqvwzd/yiCQAAuF5D+UWTKkdhqePHjyshIUG7d+827rdr27at+vXrp4kTJ7o8Kl2bduzYob/85S/65ptvdO7cOV25ckVBQUG699579eyzz7r90unCwkL94Q9/0IYNG5SVlaVWrVppxIgRev3119WmTRu3x3n33Xf11ltv6fDhw2revLn69eun1157rcpnQolCAABwvUYfhageohAAAFyvoURh7X+JIAAAABo8ohAAAABEIQAAAIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAqAlE4ZkzZ/TWW28pPj5e7du3V/PmzdW2bVs9/vjj2rdvX5n5r7zyikwmU7l/MjMz3R4nOTlZsbGx8vPzk7+/v+Li4pSamlrLnw4AAKBueNX3Am7VihUrtGTJEnXs2FHx8fEKDg6WxWJRUlKSkpKS9N5772nMmDFl3jdhwgRFRESUGQ8ICCgztnHjRo0fP17BwcGaOHGiJGnTpk0aOnSoPvjgA40cObKGPxUAAEDdMjmdTmd9L+JWfPzxxwoMDFRsbKzL+P/+7/9q8ODBatGihX744Qd5e3tLunamcMGCBdq+fbsGDhx40/1funRJHTp0kJeXl7755huFhoZKkrKzs9W9e3dJ0okTJ+Tn51ep9dpsNpnNZlmtVvn7+1fhk1bN5LdqbdcAAKAGrZlRu/uvbHs0+svH//mf/1kmCCWpf//+iouL06VLl3To0KFq7//DDz/U5cuX9fzzzxtBKEmhoaGaPn26cnNz9cknn1R7/wAAAA1Bo4/CijRr1kyS5OVV9ir5zp07tWTJEi1dulRJSUnKz893u4+0tDRJUnx8fJltw4YNkyTt2LGjhlYMAABQPxr9PYXlOX36tLZu3ap27dqpa9euZbbPnz/f5XVAQID+9Kc/6cknn3QZt1gskqSoqKgy+ygdK53jTmFhoQoLC43XNptNkmS322W32yVJHh4e8vT0VElJiRwOhzG3dLy4uFjXX+X39PSUh4dHuePX9tus3DUBAICGw+FwqKSkxHhtMpnk5eVV7nh5vVBRR1RGk4xCu92u8ePHq7CwUEuWLJGnp6ex7e6779a6des0cOBAtWvXTjk5Ofrss880b948TZw4UQEBAXr44YeN+VarVZJkNpvLHKf0unzpHHcWL16sBQsWlBlPSUnR7bffLklq3769unfvroMHD+r06dPGnE6dOik6Olrp6ek6f/68MR4TE6Pw8HDt3LlTeXl5xnifPn3UunVrpaSkSHrwZn9NAACgAcjNzdWePXuM135+fho0aJCysrKUkZFhjAcHB6tv376yWCw6cuSIMX6zjti/f3+l1tHoHzS5kcPh0Pjx4/Xee+9p8uTJevvttyv1vtTUVA0dOlRdunTRwYMHjfE77rhDFotFdru9zGVou92u5s2bq1u3bvr222/d7tfdmcKwsDDl5uYaUVkbZwqf/TNnCgEAaAxWv1C7ZwovXryowMDAmz5o0qTOFDocDj311FN67733NG7cOK1atarS7x08eLA6duyoQ4cOyWazGX9ppWcIrVarAgMDXd5TeinY3VnEUt7e3saTz9dr1qyZcc9jKU9PT5ezmqXc3RNZ0fiN+wUAAA2Xh4eHPDzKPuZR3nh5vVDVjihzvErNagQcDocmTZqkd955R2PHjlViYqLbv8iKBAUFSZKuXLlijFV032BF9xsCAAA0Jk0iCkuDcP369RozZow2bNjgtpQrUlBQoMOHD8vX19eIQ0nG191cu0/PVXJyssscAACAxqrRR2HpJeP169dr1KhR2rhxY7lBmJeXp6NHj5YZ//HHHzV58mTl5eVp9OjRLqdZR48eLbPZrBUrVig7O9sYz87O1sqVKxUUFKTHHnus5j8YAABAHWr09xS++uqreuedd9SiRQvdcccdev3118vMefTRRxUTE6MLFy4oOjpavXr1UufOndW2bVudO3dOW7duVXZ2trp27aqlS5e6vLdly5ZauXKlxo8frx49ehg/mbdp0yZduHBBmzZtqvSvmQAAADRUjT4KMzMzJUn5+flauHCh2zkRERGKiYlRq1at9Oyzzyo9PV1btmzRpUuX5OPjo86dO+uFF17Q9OnT5ePjU+b948aNU1BQkBYtWqSEhASZTCb17NlTc+bM0ZAhQ2rz4wEAANSJJveVNA0dv30MAACux28fAwAAoMEgCgEAAEAUAgAAgCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiMIq+eqrr/TAAw8oICBAvr6+uu+++/TBBx/U97IAAABumVd9L6Cx2L59u4YNG6bbbrtNv/jFL+Tn56e///3vGjNmjLKysvSb3/ymvpcIAABQbSan0+ms70U0dMXFxYqOjlZ2drb27t2rmJgYSZLValXv3r2VmZmpo0ePKjw8/Kb7stlsMpvNslqt8vf3r7U1T36r1nYNAABq0JoZtbv/yrYHl48rYdu2bTp+/LieeOIJIwglyWw26/e//72Kior0zjvv1N8CAQAAbhFRWAlpaWmSpPj4+DLbhg0bJknasWNHXS4JAACgRnFPYSVYLBZJUlRUVJltbdu2VYsWLYw5NyosLFRhYaHx2mq1SpIuXrwou90uSfLw8JCnp6dKSkrkcDiMuaXjxcXFuv4qv6enpzw8PModt9vtKrra7BY+MQAAqCuXLztUUlJivDaZTPLy8pLD4X68vF4ob/zixYuSpJvdMUgUVkJpyJnNZrfb/f39jTk3Wrx4sRYsWFBmPDIysuYWCAAAGq31s+vmOHl5eeW2jEQU1rrZs2dr5syZxmuHw6GLFy8qMDBQJpOpHlcGoLGx2WwKCwtTVlZWrT6oBqBpcTqdysvLU0hISIXziMJKKK3q8s4G2mw2tWzZ0u02b29veXt7u4wFBATU6PoA/LT4+/sThQCqpKIzhKV40KQSSu8ldHffYE5OjvLz893ebwgAANBYEIWVEBsbK0lKSUkpsy05OdllDgAAQGPEl1dXQnFxsTp16qQzZ86U++XVR44cUURERL2uE0DTVlhYqMWLF2v27NllbksBgFtFFFZSeT9zd+rUKS1btoyfuQMAAI0aUVgF6enpmj9/vnbv3i273a6uXbtq5syZGjNmTH0vDQAA4JYQhQAAAOBBEwAAABCFAAAAEFEIAAAAEYUAAAAQUQgADY7D4ajvJQD4CeLpYwBogIqKinTu3Dl5eXmpXbt2cjqdMplM9b0sAE0YZwoBoAEpLCzU+vXr1blzZw0dOlQvvviivv76a4IQQK0jCgGgAVm+fLl+/etf6+LFi/L399dHH32kCRMm6OzZs5Kks2fP6osvvlBWVlY9rxRAU8PlYwBoIE6dOqVevXopKipKmzdvVn5+vjZs2KD58+fr008/VXJyst5//31dvHhRrVu31tNPP62XXnpJAQEB9b10AE0AUQgADcTLL7+sdevWac2aNRoxYoQk6V//+pciIiLUrVs3ZWdna/z48frhhx+UlJQku92uZcuWadq0aXI4HPLw4OIPgOrzqu8FAACu+fTTT3XPPffo3nvvNcb+7//+T5Lk6+urzz//XF27dpUk7dmzR8OHD9ebb76pqVOnEoQAbhn/FQGABuDo0aMqKChQdHS0goODjfHDhw+rsLBQc+fONYLw6tWr6tOnjx555BEVFhbq8OHD9bVsAE0IUQgADcCpU6eUmZmpVq1aGWNWq1Wff/65vLy8NHDgQGP8tttukyR5e3vrypUrnCUEUCO4fAwADUC/fv20bNkyPfTQQ5KufYG12WzWqlWrdOLECUlScXGxvLyu/Wf78uXLslqt8vX11V133VVv6wbQdPCgCQA0IqUPlGzfvl3jxo3TiBEjtHr16vpeFoAmgGsOANCIlF4q/vjjj5WXl6dnn322nlcEoKkgCgGgkfnss8/0l7/8RQ899JDuvvvu+l4OgCaCewoBoBHJy8uTxWLRM888o+eee66+lwOgCeGeQgBoZJxOp4qKiuTt7V3fSwHQhBCFAAAA4J5CAAAAEIUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAABJ/w8CvV+WNEGoKAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "from qiskit_aer import AerSimulator\n", + "\n", + "simulator = AerSimulator()\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = sum_two_numbers.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/supported.rst.txt b/_sources/supported.rst.txt new file mode 100644 index 00000000..0acae255 --- /dev/null +++ b/_sources/supported.rst.txt @@ -0,0 +1,286 @@ +Supported python subset +==================================== + +Qlasskit supports a subset of python. This subset will be expanded, but it is +limited by the linearity of quantum circuits and by the number of qubits. + +The structure of a qlasskit function has the following pattern: + +.. code-block:: python + + @qlasskit + def f(param: type, [...param: type]) -> type: + statement + ... + statement + + +Types +----- + +All types has a static size. + +bool +^^^^ + +Boolean type. + + +Qint +^^^^ + +Unsigned integers; `Qint[2]` has 2 bits, and there other sizes are supported. +Single bit of the Qint are accessible by the subscript operator `[]`. +All the supported sizes have a constructor `Qintn()` defined in `qlasskit.types`. + +Qfixed +^^^^^^ + +Fixed point rational number; `Qfixed[2,3]` has 2 bits for the integer part and 3 bits for the fractional. +All the supported sizes have a constructor `Qfixedn_m()` defined in `qlasskit.types`. + +Qchar +^^^^^ + +A character. + +Tuple +^^^^^ + +Container type holding different types. + + +List +^^^^ + +Qlist[T, size] denotes a fixed-size list in qlasskit. +For example, the list `[1,2,3]` is typed as `Qlist[Qint[2],3]`. + + +Matrix +^^^^^^ + +Qmatrix[T, m, n] denotes a fixed-size list in qlasskit. +For example, the matrix `[[1,2],[3,4]]` is typed as `Qmatrix[Qint[2],2,2]`. + + + + + +Expressions +----------- + +Constants +^^^^^^^^^^^^^ + +.. code-block:: python + + True + +.. code-block:: python + + 42 + +.. code-block:: python + + 3.14 + +.. code-block:: python + + 'a' + + +Tuple +^^^^^ + +.. code-block:: python + + (a, b) + +List (fixed size) +^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + [a, b] + + +2D Matrix (fixed size) +^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + [[a, b], [c,d]] + + +Subscript +^^^^^^^^^ + +.. code-block:: python + + a[0] + +Boolean operators +^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + not a + +.. code-block:: python + + a and b + +.. code-block:: python + + a or b + + + +If expressions +^^^^^^^^^^^^^^ + +.. code-block:: python + + a if b else c + +Comparators +^^^^^^^^^^^ + +.. code-block:: python + + a > b or b <= c and c == d or c != a + + +Unary Op +^^^^^^^^^ + +.. code-block:: python + + ~a + + + +Bin Op +^^^^^^^^^ + +.. code-block:: python + + a << 1 + +.. code-block:: python + + a >> 2 + +.. code-block:: python + + a + b + +.. code-block:: python + + a - b + +.. code-block:: python + + a * b + +.. code-block:: python + + a ** b + +.. code-block:: python + + a % 2 + +.. note:: + Modulo operator only works with 2^n values. + + +Function call +^^^^^^^^^^^^^ + +Bultin functions: + +* `print()`: debug function, ignore by conversion +* `len(Tuple)`, `len(Qlist)``: returns the length of a tuple +* `max(a, b, ...)`, `max(Tuple)`, `max(Qlist)`: returns the max of a tuple +* `min(a, b, ...)`, `min(Tuple)`, `min(Qlist)`: returns the min of a tuple +* `sum(Tuple)`, `sum(Qlist)`: returns the sum of the elemnts of a tuple / list +* `all(Tuple)`, `all(Qlist)`: returns True if all of the elemnts are True +* `any(Tuple)`, `any(Qlist)`: returns True if any of the elemnts are True +* `ord(Qchar)`: returns the integer value of the given Qchar +* `chr(Qint)`: returns the char given its ascii code +* `int(Qfixed | Qint)`: returns the integer part of a Qfixed +* `float(Qint | Qfixed)`: returns a Qfixed representing the Qint + + +Statements +---------- + +Assign +^^^^^^ + +.. code-block:: python + + c = not a + +Return +^^^^^^ + +.. code-block:: python + + return b+1 + + +For loop +^^^^^^^^ + +.. code-block:: python + + for i in range(4): + a += i + + +.. note:: + Please note that in qlasskit, for loops are unrolled during compilation. Therefore, + it is essential that the number of iterations for each for loop is known at the + time of compilation. + +Function def +^^^^^^^^^^^^ + +.. code-block:: python + + def f(t: Qlist[Qint[4],2]) -> Qint[4]: + return t[0] + t[1] + + +If then else +^^^^^^^^^^^^ + +.. code-block:: python + + c = 0 + if cond: + c += 12 + else: + c += 13 + +.. note:: + At present, the if-then-else statement in qlasskit is designed to support branch bodies + that exclusively contain assignment statements. + + + +Quantum Hybrid +--------------- + +In a qlassf function, you have the option to utilize quantum gates through the Q module. It's +important to keep in mind that incorporating quantum gates within a qlasskit function leads +to a Python function that exhibits distinct behaviors compared to its quantum counterpart. + +.. code-block:: python + + def bell(a: bool, b: bool) -> bool: + return Q.CX(Q.H(a), b) + diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 00000000..81415803 --- /dev/null +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.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": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..f316efcb --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 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/_static/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 00000000..c718cee4 --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/_static/css/fonts/lato-bold.woff differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff2 differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/_static/css/fonts/lato-normal.woff differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff2 differ diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 00000000..19a446a0 --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/dark_mode_css/custom.css b/_static/dark_mode_css/custom.css new file mode 100644 index 00000000..989c2ada --- /dev/null +++ b/_static/dark_mode_css/custom.css @@ -0,0 +1,77 @@ +.wy-side-nav-search input[type='text'] { + border-radius: 3px; +} + +input[type='color'], +input[type='date'], +input[type='datetime-local'], +input[type='datetime'], +input[type='email'], +input[type='month'], +input[type='number'], +input[type='password'], +input[type='search'], +input[type='tel'], +input[type='text'], +input[type='time'], +input[type='url'], +input[type='week'] { + box-shadow: none; +} + +.theme-switcher { + border-radius: 50%; + position: fixed; + right: 1.6em; + bottom: 1.4em; + z-index: 3; + border: none; + height: 2.2em; + width: 2.2em; + background-color: #fcfcfc; + font-size: 20px; + -webkit-box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + color: #404040; + transition: all 0.3s ease-in-out; +} + +.wy-nav-content a, +.wy-nav-content a:visited { + color: #3091d1; +} + +body, +.wy-nav-content-wrap, +.wy-nav-content, +.section, +.highlight, +.rst-content div[class^='highlight'], +.wy-nav-content a, +.btn-neutral, +.btn, +footer, +.wy-nav-side, +.wy-menu-vertical li, +.wy-menu-vertical a, +.wy-side-nav-search .wy-dropdown, +.wy-side-nav-search a, +.wy-side-nav-search input, +html.writer-html4 .rst-content dl:not(.docutils) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + > dt, +.rst-content code, +.rst-content tt, +html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dl:not(.field-list) + > dt, +code, +.rst-content code.xref, +.rst-content tt.xref { + transition: all 0.2s ease-in-out; +} diff --git a/_static/dark_mode_css/dark.css b/_static/dark_mode_css/dark.css new file mode 100644 index 00000000..e863889c --- /dev/null +++ b/_static/dark_mode_css/dark.css @@ -0,0 +1,520 @@ +:root { + --dark-text-color: #c1c1c1; + --dark-link-color: #249ee8; +} + +html[data-theme="dark"] body { + color: #bfbfbf; +} + +html[data-theme="dark"] .wy-nav-content-wrap { + background-color: #101010; +} + +html[data-theme="dark"] .wy-nav-content { + background-color: #141414; +} + +html[data-theme="dark"] .section { + color: var(--dark-text-color); +} + +html[data-theme="dark"] .highlight { + background-color: #17181c; +} + +html[data-theme="dark"] .highlight .nn { + color: var(--dark-text-color); +} + +html[data-theme="dark"] .highlight .nb { + color: #8bb8df; +} + +html[data-theme="dark"] .highlight .nv { + color: #40ffff; +} + +html[data-theme="dark"] .highlight .kn, +html[data-theme="dark"] .highlight .kc, +html[data-theme="dark"] .highlight .k { + color: #41c2ea; +} + +html[data-theme="dark"] .highlight .s1, +html[data-theme="dark"] .highlight .s2 { + color: #b3e87f; +} + +html[data-theme="dark"] .highlight .nt { + color: #ccb350; +} + +html[data-theme="dark"] .highlight .c1 { + color: #686868; +} + +html[data-theme="dark"] .highlight .hll { + background-color: #002c4d; +} + +html[data-theme="dark"] .rst-content div[class^="highlight"] { + border-color: #1a1a1a; +} + +html[data-theme="dark"] .wy-nav-content a, +html[data-theme="dark"] .wy-nav-content a:visited { + color: var(--dark-link-color); +} + +html[data-theme="dark"] .btn-neutral { + background-color: #17181c !important; +} + +html[data-theme="dark"] .btn-neutral:hover { + background-color: #101114 !important; +} + +html[data-theme="dark"] .btn-neutral:visited { + color: #c1c1c1 !important; +} + +html[data-theme="dark"] .btn { + box-shadow: none; +} + +html[data-theme="dark"] footer { + color: #bdbdbd; +} + +html[data-theme="dark"] .wy-nav-side { + background-color: #0d0d0d; +} + +html[data-theme="dark"] .wy-menu-vertical li.current { + background-color: #141414; +} + +html[data-theme="dark"] .wy-menu-vertical li.current > a, +html[data-theme="dark"] .wy-menu-vertical li.on a { + background-color: #141415; + color: var(--dark-text-color); +} + +html[data-theme="dark"] .wy-menu-vertical li.toctree-l1.current > a, +html[data-theme="dark"] .wy-menu-vertical li.current a { + border-color: #0b0c0d; +} + +html[data-theme="dark"] .wy-menu-vertical li.current a { + color: #bbb; +} + +html[data-theme="dark"] .wy-menu-vertical li.current a:hover { + background-color: #222; +} + +html[data-theme="dark"] .wy-menu-vertical a:hover, +html[data-theme="dark"] .wy-menu-vertical li.current > a:hover, +html[data-theme="dark"] .wy-menu-vertical li.on a:hover { + background-color: #1e1e1e; +} + +html[data-theme="dark"] .wy-menu-vertical li.toctree-l2.current > a, +html[data-theme="dark"] + .wy-menu-vertical + li.toctree-l2.current + li.toctree-l3 + > a { + background-color: #18181a; +} + +html[data-theme="dark"] .wy-side-nav-search { + background-color: #0b152d; +} + +html[data-theme="dark"] .wy-side-nav-search .wy-dropdown > a, +html[data-theme="dark"] .wy-side-nav-search > a { + color: #ddd; +} + +html[data-theme="dark"] .wy-side-nav-search input[type="text"] { + border-color: #111; + background-color: #141414; + color: var(--dark-text-color); +} + +html[data-theme="dark"] .theme-switcher { + background-color: #0b0c0d; + color: var(--dark-text-color); +} + +html[data-theme="dark"].writer-html4 .rst-content dl:not(.docutils) > dt, +html[data-theme="dark"].writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not( + .glossary + ):not(.simple) + > dt { + background-color: #0b0b0b; + color: #007dce; + border-color: #282828; +} + +html[data-theme="dark"] .rst-content code, +html[data-theme="dark"] .rst-content tt { + color: var(--dark-text-color); +} + +html[data-theme="dark"].writer-html4 + .rst-content + dl:not(.docutils) + dl:not(.field-list) + > dt, +html[data-theme="dark"].writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not( + .glossary + ):not(.simple) + dl:not(.field-list) + > dt { + background-color: #0f0f0f; + color: #959595; + border-color: #2b2b2b; +} + +html[data-theme="dark"] .rst-content code, +html[data-theme="dark"] .rst-content tt, +html[data-theme="dark"] code { + background-color: #2d2d2d; + border-color: #1c1c1c; +} + +html[data-theme="dark"] .rst-content code.xref, +html[data-theme="dark"] .rst-content tt.xref, +html[data-theme="dark"] a .rst-content code, +html[data-theme="dark"] a .rst-content tt { + color: #cecece; +} + +html[data-theme="dark"] .rst-content .hint, +html[data-theme="dark"] .rst-content .important, +html[data-theme="dark"] .rst-content .tip, +html[data-theme="dark"] .rst-content .wy-alert-success.admonition, +html[data-theme="dark"] .rst-content .wy-alert-success.admonition-todo, +html[data-theme="dark"] .rst-content .wy-alert-success.attention, +html[data-theme="dark"] .rst-content .wy-alert-success.caution, +html[data-theme="dark"] .rst-content .wy-alert-success.danger, +html[data-theme="dark"] .rst-content .wy-alert-success.error, +html[data-theme="dark"] .rst-content .wy-alert-success.note, +html[data-theme="dark"] .rst-content .wy-alert-success.seealso, +html[data-theme="dark"] .rst-content .wy-alert-success.warning, +html[data-theme="dark"] .wy-alert.wy-alert-success { + background-color: #00392e; +} + +html[data-theme="dark"] .rst-content .hint .admonition-title, +html[data-theme="dark"] .rst-content .hint .wy-alert-title, +html[data-theme="dark"] .rst-content .important .admonition-title, +html[data-theme="dark"] .rst-content .important .wy-alert-title, +html[data-theme="dark"] .rst-content .tip .admonition-title, +html[data-theme="dark"] .rst-content .tip .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition-todo + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition-todo + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.attention + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.attention + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.caution + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.caution .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-success.danger .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.danger .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-success.error .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.error .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-success.note .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.note .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.seealso + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.seealso .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.warning + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.warning .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert.wy-alert-success + .admonition-title, +html[data-theme="dark"] + .wy-alert.wy-alert-success + .rst-content + .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-success .wy-alert-title { + background-color: #006a56; +} + +html[data-theme="dark"] .rst-content .admonition, +html[data-theme="dark"] .rst-content .note, +html[data-theme="dark"] .rst-content .seealso, +html[data-theme="dark"] .rst-content .wy-alert-info.admonition, +html[data-theme="dark"] .rst-content .wy-alert-info.admonition-todo, +html[data-theme="dark"] .rst-content .wy-alert-info.attention, +html[data-theme="dark"] .rst-content .wy-alert-info.caution, +html[data-theme="dark"] .rst-content .wy-alert-info.danger, +html[data-theme="dark"] .rst-content .wy-alert-info.error, +html[data-theme="dark"] .rst-content .wy-alert-info.hint, +html[data-theme="dark"] .rst-content .wy-alert-info.important, +html[data-theme="dark"] .rst-content .wy-alert-info.tip, +html[data-theme="dark"] .rst-content .wy-alert-info.warning, +html[data-theme="dark"] .wy-alert.wy-alert-info { + background-color: #002c4d; +} + +html[data-theme="dark"] .rst-content .admonition .admonition-title, +html[data-theme="dark"] .rst-content .note .admonition-title, +html[data-theme="dark"] .rst-content .note .wy-alert-title, +html[data-theme="dark"] .rst-content .seealso .admonition-title, +html[data-theme="dark"] .rst-content .seealso .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-info.admonition-todo + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-info.admonition-todo + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-info.admonition + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.admonition .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.attention .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.attention .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.caution .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.caution .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.danger .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.danger .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.error .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.error .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.hint .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.hint .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.important .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.important .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.tip .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.tip .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.warning .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.warning .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert.wy-alert-info .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-info .rst-content .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-info .wy-alert-title { + background-color: #004a7b; +} + +html[data-theme="dark"] .rst-content .admonition-todo, +html[data-theme="dark"] .rst-content .attention, +html[data-theme="dark"] .rst-content .caution, +html[data-theme="dark"] .rst-content .warning, +html[data-theme="dark"] .rst-content .wy-alert-warning.admonition, +html[data-theme="dark"] .rst-content .wy-alert-warning.danger, +html[data-theme="dark"] .rst-content .wy-alert-warning.error, +html[data-theme="dark"] .rst-content .wy-alert-warning.hint, +html[data-theme="dark"] .rst-content .wy-alert-warning.important, +html[data-theme="dark"] .rst-content .wy-alert-warning.note, +html[data-theme="dark"] .rst-content .wy-alert-warning.seealso, +html[data-theme="dark"] .rst-content .wy-alert-warning.tip, +html[data-theme="dark"] .wy-alert.wy-alert-warning { + background-color: #533500; +} + +html[data-theme="dark"] .rst-content .admonition-todo .admonition-title, +html[data-theme="dark"] .rst-content .admonition-todo .wy-alert-title, +html[data-theme="dark"] .rst-content .attention .admonition-title, +html[data-theme="dark"] .rst-content .attention .wy-alert-title, +html[data-theme="dark"] .rst-content .caution .admonition-title, +html[data-theme="dark"] .rst-content .caution .wy-alert-title, +html[data-theme="dark"] .rst-content .warning .admonition-title, +html[data-theme="dark"] .rst-content .warning .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.admonition + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.admonition + .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.danger .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.danger .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.error .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.error .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.hint .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.hint .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.important + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.important + .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.note .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.note .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.seealso + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.seealso .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.tip .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.tip .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert.wy-alert-warning + .admonition-title, +html[data-theme="dark"] + .wy-alert.wy-alert-warning + .rst-content + .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-warning .wy-alert-title { + background-color: #803b00; +} + +html[data-theme="dark"] .rst-content .danger, +html[data-theme="dark"] .rst-content .error, +html[data-theme="dark"] .rst-content .wy-alert-danger.admonition, +html[data-theme="dark"] .rst-content .wy-alert-danger.admonition-todo, +html[data-theme="dark"] .rst-content .wy-alert-danger.attention, +html[data-theme="dark"] .rst-content .wy-alert-danger.caution, +html[data-theme="dark"] .rst-content .wy-alert-danger.hint, +html[data-theme="dark"] .rst-content .wy-alert-danger.important, +html[data-theme="dark"] .rst-content .wy-alert-danger.note, +html[data-theme="dark"] .rst-content .wy-alert-danger.seealso, +html[data-theme="dark"] .rst-content .wy-alert-danger.tip, +html[data-theme="dark"] .rst-content .wy-alert-danger.warning, +html[data-theme="dark"] .wy-alert.wy-alert-danger { + background-color: #82231a; +} + +html[data-theme="dark"] .rst-content .danger .admonition-title, +html[data-theme="dark"] .rst-content .danger .wy-alert-title, +html[data-theme="dark"] .rst-content .error .admonition-title, +html[data-theme="dark"] .rst-content .error .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition-todo + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition-todo + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.attention + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.attention .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.caution .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.caution .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.hint .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.hint .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.important + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.important .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.note .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.note .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.seealso .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.seealso .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.tip .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.tip .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.warning .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.warning .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert.wy-alert-danger + .admonition-title, +html[data-theme="dark"] + .wy-alert.wy-alert-danger + .rst-content + .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-danger .wy-alert-title { + background-color: #b9372b; +} + +html[data-theme="dark"] .wy-nav-top { + background-color: #0b152d; +} + +html[data-theme="dark"] .rst-content table.docutils thead, +html[data-theme="dark"] .rst-content table.field-list thead, +html[data-theme="dark"] .wy-table thead { + color: var(--dark-text-color); +} + +html[data-theme="dark"] + .rst-content + table.docutils:not(.field-list) + tr:nth-child(2n-1) + td, +html[data-theme="dark"] .wy-table-backed, +html[data-theme="dark"] html[data-theme="dark"] .wy-table-odd td, +html[data-theme="dark"] .wy-table-striped tr:nth-child(2n-1) td { + background-color: #181818; +} + +html[data-theme="dark"] .rst-content table.docutils td, +html[data-theme="dark"] .wy-table-bordered-all td, +html[data-theme="dark"].writer-html5 .rst-content table.docutils th, +html[data-theme="dark"] .rst-content table.docutils, +html[data-theme="dark"] .wy-table-bordered-all { + border-color: #262626; +} + +html[data-theme="dark"] .rst-content table.docutils caption, +html[data-theme="dark"] .rst-content table.field-list caption, +html[data-theme="dark"] .wy-table caption { + color: var(--dark-text-color); +} + +html[data-theme="dark"] .wy-menu-vertical li.toctree-l3.current > a, +html[data-theme="dark"] + .wy-menu-vertical + li.toctree-l3.current + li.toctree-l4 + > a { + background-color: #18181a; +} + +html[data-theme="dark"] .guilabel { + background-color: #343434; + border-color: #4d4d4d; +} diff --git a/_static/dark_mode_css/general.css b/_static/dark_mode_css/general.css new file mode 100644 index 00000000..aa614f81 --- /dev/null +++ b/_static/dark_mode_css/general.css @@ -0,0 +1,68 @@ +input[type='color'], +input[type='date'], +input[type='datetime-local'], +input[type='datetime'], +input[type='email'], +input[type='month'], +input[type='number'], +input[type='password'], +input[type='search'], +input[type='tel'], +input[type='text'], +input[type='time'], +input[type='url'], +input[type='week'] { + box-shadow: none; +} + +.theme-switcher { + border-radius: 50%; + position: fixed; + right: 1.6em; + bottom: 1.4em; + z-index: 3; + border: none; + height: 2.2em; + width: 2.2em; + background-color: #fcfcfc; + font-size: 20px; + -webkit-box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + color: #404040; + transition: all 0.3s ease-in-out; +} + +body, +.wy-nav-content-wrap, +.wy-nav-content, +.section, +.highlight, +.rst-content div[class^='highlight'], +.wy-nav-content a, +.btn-neutral, +.btn, +footer, +.wy-nav-side, +.wy-menu-vertical li, +.wy-menu-vertical a, +.wy-side-nav-search .wy-dropdown, +.wy-side-nav-search a, +.wy-side-nav-search input, +html.writer-html4 .rst-content dl:not(.docutils) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + > dt, +.rst-content code, +.rst-content tt, +html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dl:not(.field-list) + > dt, +code, +.rst-content code.xref, +.rst-content tt.xref { + transition: all 0.2s ease-in-out; +} diff --git a/_static/dark_mode_js/default_dark.js b/_static/dark_mode_js/default_dark.js new file mode 100644 index 00000000..ea63e072 --- /dev/null +++ b/_static/dark_mode_js/default_dark.js @@ -0,0 +1,13 @@ +const loadTheme = () => { + let theme = localStorage.getItem('theme'); + + if (theme !== null) { + if (theme === 'dark') + document.documentElement.setAttribute('data-theme', 'dark'); + } else { + localStorage.setItem('theme', 'dark'); + document.documentElement.setAttribute('data-theme', 'dark'); + } +}; + +loadTheme(); diff --git a/_static/dark_mode_js/default_light.js b/_static/dark_mode_js/default_light.js new file mode 100644 index 00000000..2b19f92e --- /dev/null +++ b/_static/dark_mode_js/default_light.js @@ -0,0 +1,13 @@ +const loadTheme = () => { + let theme = localStorage.getItem('theme'); + + if (theme !== null) { + if (theme === 'dark') + document.documentElement.setAttribute('data-theme', 'dark'); + } else { + localStorage.setItem('theme', 'light'); + document.documentElement.setAttribute('data-theme', 'light'); + } +}; + +loadTheme(); diff --git a/_static/dark_mode_js/theme_switcher.js b/_static/dark_mode_js/theme_switcher.js new file mode 100644 index 00000000..8e260552 --- /dev/null +++ b/_static/dark_mode_js/theme_switcher.js @@ -0,0 +1,39 @@ +const createThemeSwitcher = () => { + let btn = document.createElement('BUTTON'); + btn.className = 'theme-switcher'; + btn.id = 'themeSwitcher'; + btn.innerHTML = + ''; + document.body.appendChild(btn); + + if (localStorage.getItem('theme') === 'dark') $('#themeMoon').hide(0); + else $('#themeSun').hide(0); +}; + +$(document).ready(() => { + createThemeSwitcher(); + $('#themeSwitcher').click(switchTheme); + + $('footer').html( + $('footer').html() + + 'Dark theme provided by MrDogeBro.' + ); +}); + +const switchTheme = () => { + if (localStorage.getItem('theme') === 'dark') { + localStorage.setItem('theme', 'light'); + document.documentElement.setAttribute('data-theme', 'light'); + + $('#themeSun').fadeOut(200, () => { + $('#themeMoon').fadeIn(200); + }); + } else { + localStorage.setItem('theme', 'dark'); + document.documentElement.setAttribute('data-theme', 'dark'); + + $('#themeMoon').fadeOut(200, () => { + $('#themeSun').fadeIn(200); + }); + } +}; diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..4d67807d --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 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/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..7e4c114f --- /dev/null +++ b/_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/_static/file.png b/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 00000000..c4c6022f --- /dev/null +++ b/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/html5shiv.min.js b/_static/js/html5shiv.min.js new file mode 100644 index 00000000..cd1c674f --- /dev/null +++ b/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/theme.js b/_static/js/theme.js new file mode 100644 index 00000000..1fddb6ee --- /dev/null +++ b/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + 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/_static/minus.png b/_static/minus.png new file mode 100644 index 00000000..d96755fd Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/mystnb.4510f1fc1dee50b3e5859aac5469c37c29e427902b24a333a5f9fcb2f0b3ac41.css b/_static/mystnb.4510f1fc1dee50b3e5859aac5469c37c29e427902b24a333a5f9fcb2f0b3ac41.css new file mode 100644 index 00000000..33566310 --- /dev/null +++ b/_static/mystnb.4510f1fc1dee50b3e5859aac5469c37c29e427902b24a333a5f9fcb2f0b3ac41.css @@ -0,0 +1,2342 @@ +/* Variables */ +:root { + --mystnb-source-bg-color: #f7f7f7; + --mystnb-stdout-bg-color: #fcfcfc; + --mystnb-stderr-bg-color: #fdd; + --mystnb-traceback-bg-color: #fcfcfc; + --mystnb-source-border-color: #ccc; + --mystnb-source-margin-color: green; + --mystnb-stdout-border-color: #f7f7f7; + --mystnb-stderr-border-color: #f7f7f7; + --mystnb-traceback-border-color: #ffd6d6; + --mystnb-hide-prompt-opacity: 70%; + --mystnb-source-border-radius: .4em; + --mystnb-source-border-width: 1px; +} + +/* Whole cell */ +div.container.cell { + padding-left: 0; + margin-bottom: 1em; +} + +/* Removing all background formatting so we can control at the div level */ +.cell_input div.highlight, +.cell_output pre, +.cell_input pre, +.cell_output .output { + border: none; + box-shadow: none; +} + +.cell_output .output pre, +.cell_input pre { + margin: 0px; +} + +/* Input cells */ +div.cell div.cell_input, +div.cell details.above-input>summary { + padding-left: 0em; + padding-right: 0em; + border: var(--mystnb-source-border-width) var(--mystnb-source-border-color) solid; + background-color: var(--mystnb-source-bg-color); + border-left-color: var(--mystnb-source-margin-color); + border-left-width: medium; + border-radius: var(--mystnb-source-border-radius); +} + +div.cell_input>div, +div.cell_output div.output>div.highlight { + margin: 0em !important; + border: none !important; +} + +/* All cell outputs */ +.cell_output { + padding-left: 1em; + padding-right: 0em; + margin-top: 1em; +} + +/* Text outputs from cells */ +.cell_output .output.text_plain, +.cell_output .output.traceback, +.cell_output .output.stream, +.cell_output .output.stderr { + margin-top: 1em; + margin-bottom: 0em; + box-shadow: none; +} + +.cell_output .output.text_plain, +.cell_output .output.stream { + background: var(--mystnb-stdout-bg-color); + border: 1px solid var(--mystnb-stdout-border-color); +} + +.cell_output .output.stderr { + background: var(--mystnb-stderr-bg-color); + border: 1px solid var(--mystnb-stderr-border-color); +} + +.cell_output .output.traceback { + background: var(--mystnb-traceback-bg-color); + border: 1px solid var(--mystnb-traceback-border-color); +} + +/* Collapsible cell content */ +div.cell details.above-input div.cell_input { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top: var(--mystnb-source-border-width) var(--mystnb-source-border-color) dashed; +} + +div.cell div.cell_input.above-output-prompt { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +div.cell details.above-input>summary { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom: var(--mystnb-source-border-width) var(--mystnb-source-border-color) dashed; + padding-left: 1em; + margin-bottom: 0; +} + +div.cell details.above-output>summary { + background-color: var(--mystnb-source-bg-color); + padding-left: 1em; + padding-right: 0em; + border: var(--mystnb-source-border-width) var(--mystnb-source-border-color) solid; + border-radius: var(--mystnb-source-border-radius); + border-left-color: var(--mystnb-source-margin-color); + border-left-width: medium; +} + +div.cell details.below-input>summary { + background-color: var(--mystnb-source-bg-color); + padding-left: 1em; + padding-right: 0em; + border: var(--mystnb-source-border-width) var(--mystnb-source-border-color) solid; + border-top: none; + border-bottom-left-radius: var(--mystnb-source-border-radius); + border-bottom-right-radius: var(--mystnb-source-border-radius); + border-left-color: var(--mystnb-source-margin-color); + border-left-width: medium; +} + +div.cell details.hide>summary>span { + opacity: var(--mystnb-hide-prompt-opacity); +} + +div.cell details.hide[open]>summary>span.collapsed { + display: none; +} + +div.cell details.hide:not([open])>summary>span.expanded { + display: none; +} + +@keyframes collapsed-fade-in { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} +div.cell details.hide[open]>summary~* { + -moz-animation: collapsed-fade-in 0.3s ease-in-out; + -webkit-animation: collapsed-fade-in 0.3s ease-in-out; + animation: collapsed-fade-in 0.3s ease-in-out; +} + +/* Math align to the left */ +.cell_output .MathJax_Display { + text-align: left !important; +} + +/* Pandas tables. Pulled from the Jupyter / nbsphinx CSS */ +div.cell_output table { + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 1em; + table-layout: fixed; +} + +div.cell_output thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} + +div.cell_output tr, +div.cell_output th, +div.cell_output td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} + +div.cell_output th { + font-weight: bold; +} + +div.cell_output tbody tr:nth-child(odd) { + background: #f5f5f5; +} + +div.cell_output tbody tr:hover { + background: rgba(66, 165, 245, 0.2); +} + +/** source code line numbers **/ +span.linenos { + opacity: 0.5; +} + +/* Inline text from `paste` operation */ + +span.pasted-text { + font-weight: bold; +} + +span.pasted-inline img { + max-height: 2em; +} + +tbody span.pasted-inline img { + max-height: none; +} + +/* Font colors for translated ANSI escape sequences +Color values are copied from Jupyter Notebook +https://github.com/jupyter/notebook/blob/52581f8eda9b319eb0390ac77fe5903c38f81e3e/notebook/static/notebook/less/ansicolors.less#L14-L21 +Background colors from +https://nbsphinx.readthedocs.io/en/latest/code-cells.html#ANSI-Colors +*/ +div.highlight .-Color-Bold { + font-weight: bold; +} + +div.highlight .-Color[class*=-Black] { + color: #3E424D +} + +div.highlight .-Color[class*=-Red] { + color: #E75C58 +} + +div.highlight .-Color[class*=-Green] { + color: #00A250 +} + +div.highlight .-Color[class*=-Yellow] { + color: #DDB62B +} + +div.highlight .-Color[class*=-Blue] { + color: #208FFB +} + +div.highlight .-Color[class*=-Magenta] { + color: #D160C4 +} + +div.highlight .-Color[class*=-Cyan] { + color: #60C6C8 +} + +div.highlight .-Color[class*=-White] { + color: #C5C1B4 +} + +div.highlight .-Color[class*=-BGBlack] { + background-color: #3E424D +} + +div.highlight .-Color[class*=-BGRed] { + background-color: #E75C58 +} + +div.highlight .-Color[class*=-BGGreen] { + background-color: #00A250 +} + +div.highlight .-Color[class*=-BGYellow] { + background-color: #DDB62B +} + +div.highlight .-Color[class*=-BGBlue] { + background-color: #208FFB +} + +div.highlight .-Color[class*=-BGMagenta] { + background-color: #D160C4 +} + +div.highlight .-Color[class*=-BGCyan] { + background-color: #60C6C8 +} + +div.highlight .-Color[class*=-BGWhite] { + background-color: #C5C1B4 +} + +/* Font colors for 8-bit ANSI */ + +div.highlight .-Color[class*=-C0] { + color: #000000 +} + +div.highlight .-Color[class*=-BGC0] { + background-color: #000000 +} + +div.highlight .-Color[class*=-C1] { + color: #800000 +} + +div.highlight .-Color[class*=-BGC1] { + background-color: #800000 +} + +div.highlight .-Color[class*=-C2] { + color: #008000 +} + +div.highlight .-Color[class*=-BGC2] { + background-color: #008000 +} + +div.highlight .-Color[class*=-C3] { + color: #808000 +} + +div.highlight .-Color[class*=-BGC3] { + background-color: #808000 +} + +div.highlight .-Color[class*=-C4] { + color: #000080 +} + +div.highlight .-Color[class*=-BGC4] { + background-color: #000080 +} + +div.highlight .-Color[class*=-C5] { + color: #800080 +} + +div.highlight .-Color[class*=-BGC5] { + background-color: #800080 +} + +div.highlight .-Color[class*=-C6] { + color: #008080 +} + +div.highlight .-Color[class*=-BGC6] { + background-color: #008080 +} + +div.highlight .-Color[class*=-C7] { + color: #C0C0C0 +} + +div.highlight .-Color[class*=-BGC7] { + background-color: #C0C0C0 +} + +div.highlight .-Color[class*=-C8] { + color: #808080 +} + +div.highlight .-Color[class*=-BGC8] { + background-color: #808080 +} + +div.highlight .-Color[class*=-C9] { + color: #FF0000 +} + +div.highlight .-Color[class*=-BGC9] { + background-color: #FF0000 +} + +div.highlight .-Color[class*=-C10] { + color: #00FF00 +} + +div.highlight .-Color[class*=-BGC10] { + background-color: #00FF00 +} + +div.highlight .-Color[class*=-C11] { + color: #FFFF00 +} + +div.highlight .-Color[class*=-BGC11] { + background-color: #FFFF00 +} + +div.highlight .-Color[class*=-C12] { + color: #0000FF +} + +div.highlight .-Color[class*=-BGC12] { + background-color: #0000FF +} + +div.highlight .-Color[class*=-C13] { + color: #FF00FF +} + +div.highlight .-Color[class*=-BGC13] { + background-color: #FF00FF +} + +div.highlight .-Color[class*=-C14] { + color: #00FFFF +} + +div.highlight .-Color[class*=-BGC14] { + background-color: #00FFFF +} + +div.highlight .-Color[class*=-C15] { + color: #FFFFFF +} + +div.highlight .-Color[class*=-BGC15] { + background-color: #FFFFFF +} + +div.highlight .-Color[class*=-C16] { + color: #000000 +} + +div.highlight .-Color[class*=-BGC16] { + background-color: #000000 +} + +div.highlight .-Color[class*=-C17] { + color: #00005F +} + +div.highlight .-Color[class*=-BGC17] { + background-color: #00005F +} + +div.highlight .-Color[class*=-C18] { + color: #000087 +} + +div.highlight .-Color[class*=-BGC18] { + background-color: #000087 +} + +div.highlight .-Color[class*=-C19] { + color: #0000AF +} + +div.highlight .-Color[class*=-BGC19] { + background-color: #0000AF +} + +div.highlight .-Color[class*=-C20] { + color: #0000D7 +} + +div.highlight .-Color[class*=-BGC20] { + background-color: #0000D7 +} + +div.highlight .-Color[class*=-C21] { + color: #0000FF +} + +div.highlight .-Color[class*=-BGC21] { + background-color: #0000FF +} + +div.highlight .-Color[class*=-C22] { + color: #005F00 +} + +div.highlight .-Color[class*=-BGC22] { + background-color: #005F00 +} + +div.highlight .-Color[class*=-C23] { + color: #005F5F +} + +div.highlight .-Color[class*=-BGC23] { + background-color: #005F5F +} + +div.highlight .-Color[class*=-C24] { + color: #005F87 +} + +div.highlight .-Color[class*=-BGC24] { + background-color: #005F87 +} + +div.highlight .-Color[class*=-C25] { + color: #005FAF +} + +div.highlight .-Color[class*=-BGC25] { + background-color: #005FAF +} + +div.highlight .-Color[class*=-C26] { + color: #005FD7 +} + +div.highlight .-Color[class*=-BGC26] { + background-color: #005FD7 +} + +div.highlight .-Color[class*=-C27] { + color: #005FFF +} + +div.highlight .-Color[class*=-BGC27] { + background-color: #005FFF +} + +div.highlight .-Color[class*=-C28] { + color: #008700 +} + +div.highlight .-Color[class*=-BGC28] { + background-color: #008700 +} + +div.highlight .-Color[class*=-C29] { + color: #00875F +} + +div.highlight .-Color[class*=-BGC29] { + background-color: #00875F +} + +div.highlight .-Color[class*=-C30] { + color: #008787 +} + +div.highlight .-Color[class*=-BGC30] { + background-color: #008787 +} + +div.highlight .-Color[class*=-C31] { + color: #0087AF +} + +div.highlight .-Color[class*=-BGC31] { + background-color: #0087AF +} + +div.highlight .-Color[class*=-C32] { + color: #0087D7 +} + +div.highlight .-Color[class*=-BGC32] { + background-color: #0087D7 +} + +div.highlight .-Color[class*=-C33] { + color: #0087FF +} + +div.highlight .-Color[class*=-BGC33] { + background-color: #0087FF +} + +div.highlight .-Color[class*=-C34] { + color: #00AF00 +} + +div.highlight .-Color[class*=-BGC34] { + background-color: #00AF00 +} + +div.highlight .-Color[class*=-C35] { + color: #00AF5F +} + +div.highlight .-Color[class*=-BGC35] { + background-color: #00AF5F +} + +div.highlight .-Color[class*=-C36] { + color: #00AF87 +} + +div.highlight .-Color[class*=-BGC36] { + background-color: #00AF87 +} + +div.highlight .-Color[class*=-C37] { + color: #00AFAF +} + +div.highlight .-Color[class*=-BGC37] { + background-color: #00AFAF +} + +div.highlight .-Color[class*=-C38] { + color: #00AFD7 +} + +div.highlight .-Color[class*=-BGC38] { + background-color: #00AFD7 +} + +div.highlight .-Color[class*=-C39] { + color: #00AFFF +} + +div.highlight .-Color[class*=-BGC39] { + background-color: #00AFFF +} + +div.highlight .-Color[class*=-C40] { + color: #00D700 +} + +div.highlight .-Color[class*=-BGC40] { + background-color: #00D700 +} + +div.highlight .-Color[class*=-C41] { + color: #00D75F +} + +div.highlight .-Color[class*=-BGC41] { + background-color: #00D75F +} + +div.highlight .-Color[class*=-C42] { + color: #00D787 +} + +div.highlight .-Color[class*=-BGC42] { + background-color: #00D787 +} + +div.highlight .-Color[class*=-C43] { + color: #00D7AF +} + +div.highlight .-Color[class*=-BGC43] { + background-color: #00D7AF +} + +div.highlight .-Color[class*=-C44] { + color: #00D7D7 +} + +div.highlight .-Color[class*=-BGC44] { + background-color: #00D7D7 +} + +div.highlight .-Color[class*=-C45] { + color: #00D7FF +} + +div.highlight .-Color[class*=-BGC45] { + background-color: #00D7FF +} + +div.highlight .-Color[class*=-C46] { + color: #00FF00 +} + +div.highlight .-Color[class*=-BGC46] { + background-color: #00FF00 +} + +div.highlight .-Color[class*=-C47] { + color: #00FF5F +} + +div.highlight .-Color[class*=-BGC47] { + background-color: #00FF5F +} + +div.highlight .-Color[class*=-C48] { + color: #00FF87 +} + +div.highlight .-Color[class*=-BGC48] { + background-color: #00FF87 +} + +div.highlight .-Color[class*=-C49] { + color: #00FFAF +} + +div.highlight .-Color[class*=-BGC49] { + background-color: #00FFAF +} + +div.highlight .-Color[class*=-C50] { + color: #00FFD7 +} + +div.highlight .-Color[class*=-BGC50] { + background-color: #00FFD7 +} + +div.highlight .-Color[class*=-C51] { + color: #00FFFF +} + +div.highlight .-Color[class*=-BGC51] { + background-color: #00FFFF +} + +div.highlight .-Color[class*=-C52] { + color: #5F0000 +} + +div.highlight .-Color[class*=-BGC52] { + background-color: #5F0000 +} + +div.highlight .-Color[class*=-C53] { + color: #5F005F +} + +div.highlight .-Color[class*=-BGC53] { + background-color: #5F005F +} + +div.highlight .-Color[class*=-C54] { + color: #5F0087 +} + +div.highlight .-Color[class*=-BGC54] { + background-color: #5F0087 +} + +div.highlight .-Color[class*=-C55] { + color: #5F00AF +} + +div.highlight .-Color[class*=-BGC55] { + background-color: #5F00AF +} + +div.highlight .-Color[class*=-C56] { + color: #5F00D7 +} + +div.highlight .-Color[class*=-BGC56] { + background-color: #5F00D7 +} + +div.highlight .-Color[class*=-C57] { + color: #5F00FF +} + +div.highlight .-Color[class*=-BGC57] { + background-color: #5F00FF +} + +div.highlight .-Color[class*=-C58] { + color: #5F5F00 +} + +div.highlight .-Color[class*=-BGC58] { + background-color: #5F5F00 +} + +div.highlight .-Color[class*=-C59] { + color: #5F5F5F +} + +div.highlight .-Color[class*=-BGC59] { + background-color: #5F5F5F +} + +div.highlight .-Color[class*=-C60] { + color: #5F5F87 +} + +div.highlight .-Color[class*=-BGC60] { + background-color: #5F5F87 +} + +div.highlight .-Color[class*=-C61] { + color: #5F5FAF +} + +div.highlight .-Color[class*=-BGC61] { + background-color: #5F5FAF +} + +div.highlight .-Color[class*=-C62] { + color: #5F5FD7 +} + +div.highlight .-Color[class*=-BGC62] { + background-color: #5F5FD7 +} + +div.highlight .-Color[class*=-C63] { + color: #5F5FFF +} + +div.highlight .-Color[class*=-BGC63] { + background-color: #5F5FFF +} + +div.highlight .-Color[class*=-C64] { + color: #5F8700 +} + +div.highlight .-Color[class*=-BGC64] { + background-color: #5F8700 +} + +div.highlight .-Color[class*=-C65] { + color: #5F875F +} + +div.highlight .-Color[class*=-BGC65] { + background-color: #5F875F +} + +div.highlight .-Color[class*=-C66] { + color: #5F8787 +} + +div.highlight .-Color[class*=-BGC66] { + background-color: #5F8787 +} + +div.highlight .-Color[class*=-C67] { + color: #5F87AF +} + +div.highlight .-Color[class*=-BGC67] { + background-color: #5F87AF +} + +div.highlight .-Color[class*=-C68] { + color: #5F87D7 +} + +div.highlight .-Color[class*=-BGC68] { + background-color: #5F87D7 +} + +div.highlight .-Color[class*=-C69] { + color: #5F87FF +} + +div.highlight .-Color[class*=-BGC69] { + background-color: #5F87FF +} + +div.highlight .-Color[class*=-C70] { + color: #5FAF00 +} + +div.highlight .-Color[class*=-BGC70] { + background-color: #5FAF00 +} + +div.highlight .-Color[class*=-C71] { + color: #5FAF5F +} + +div.highlight .-Color[class*=-BGC71] { + background-color: #5FAF5F +} + +div.highlight .-Color[class*=-C72] { + color: #5FAF87 +} + +div.highlight .-Color[class*=-BGC72] { + background-color: #5FAF87 +} + +div.highlight .-Color[class*=-C73] { + color: #5FAFAF +} + +div.highlight .-Color[class*=-BGC73] { + background-color: #5FAFAF +} + +div.highlight .-Color[class*=-C74] { + color: #5FAFD7 +} + +div.highlight .-Color[class*=-BGC74] { + background-color: #5FAFD7 +} + +div.highlight .-Color[class*=-C75] { + color: #5FAFFF +} + +div.highlight .-Color[class*=-BGC75] { + background-color: #5FAFFF +} + +div.highlight .-Color[class*=-C76] { + color: #5FD700 +} + +div.highlight .-Color[class*=-BGC76] { + background-color: #5FD700 +} + +div.highlight .-Color[class*=-C77] { + color: #5FD75F +} + +div.highlight .-Color[class*=-BGC77] { + background-color: #5FD75F +} + +div.highlight .-Color[class*=-C78] { + color: #5FD787 +} + +div.highlight .-Color[class*=-BGC78] { + background-color: #5FD787 +} + +div.highlight .-Color[class*=-C79] { + color: #5FD7AF +} + +div.highlight .-Color[class*=-BGC79] { + background-color: #5FD7AF +} + +div.highlight .-Color[class*=-C80] { + color: #5FD7D7 +} + +div.highlight .-Color[class*=-BGC80] { + background-color: #5FD7D7 +} + +div.highlight .-Color[class*=-C81] { + color: #5FD7FF +} + +div.highlight .-Color[class*=-BGC81] { + background-color: #5FD7FF +} + +div.highlight .-Color[class*=-C82] { + color: #5FFF00 +} + +div.highlight .-Color[class*=-BGC82] { + background-color: #5FFF00 +} + +div.highlight .-Color[class*=-C83] { + color: #5FFF5F +} + +div.highlight .-Color[class*=-BGC83] { + background-color: #5FFF5F +} + +div.highlight .-Color[class*=-C84] { + color: #5FFF87 +} + +div.highlight .-Color[class*=-BGC84] { + background-color: #5FFF87 +} + +div.highlight .-Color[class*=-C85] { + color: #5FFFAF +} + +div.highlight .-Color[class*=-BGC85] { + background-color: #5FFFAF +} + +div.highlight .-Color[class*=-C86] { + color: #5FFFD7 +} + +div.highlight .-Color[class*=-BGC86] { + background-color: #5FFFD7 +} + +div.highlight .-Color[class*=-C87] { + color: #5FFFFF +} + +div.highlight .-Color[class*=-BGC87] { + background-color: #5FFFFF +} + +div.highlight .-Color[class*=-C88] { + color: #870000 +} + +div.highlight .-Color[class*=-BGC88] { + background-color: #870000 +} + +div.highlight .-Color[class*=-C89] { + color: #87005F +} + +div.highlight .-Color[class*=-BGC89] { + background-color: #87005F +} + +div.highlight .-Color[class*=-C90] { + color: #870087 +} + +div.highlight .-Color[class*=-BGC90] { + background-color: #870087 +} + +div.highlight .-Color[class*=-C91] { + color: #8700AF +} + +div.highlight .-Color[class*=-BGC91] { + background-color: #8700AF +} + +div.highlight .-Color[class*=-C92] { + color: #8700D7 +} + +div.highlight .-Color[class*=-BGC92] { + background-color: #8700D7 +} + +div.highlight .-Color[class*=-C93] { + color: #8700FF +} + +div.highlight .-Color[class*=-BGC93] { + background-color: #8700FF +} + +div.highlight .-Color[class*=-C94] { + color: #875F00 +} + +div.highlight .-Color[class*=-BGC94] { + background-color: #875F00 +} + +div.highlight .-Color[class*=-C95] { + color: #875F5F +} + +div.highlight .-Color[class*=-BGC95] { + background-color: #875F5F +} + +div.highlight .-Color[class*=-C96] { + color: #875F87 +} + +div.highlight .-Color[class*=-BGC96] { + background-color: #875F87 +} + +div.highlight .-Color[class*=-C97] { + color: #875FAF +} + +div.highlight .-Color[class*=-BGC97] { + background-color: #875FAF +} + +div.highlight .-Color[class*=-C98] { + color: #875FD7 +} + +div.highlight .-Color[class*=-BGC98] { + background-color: #875FD7 +} + +div.highlight .-Color[class*=-C99] { + color: #875FFF +} + +div.highlight .-Color[class*=-BGC99] { + background-color: #875FFF +} + +div.highlight .-Color[class*=-C100] { + color: #878700 +} + +div.highlight .-Color[class*=-BGC100] { + background-color: #878700 +} + +div.highlight .-Color[class*=-C101] { + color: #87875F +} + +div.highlight .-Color[class*=-BGC101] { + background-color: #87875F +} + +div.highlight .-Color[class*=-C102] { + color: #878787 +} + +div.highlight .-Color[class*=-BGC102] { + background-color: #878787 +} + +div.highlight .-Color[class*=-C103] { + color: #8787AF +} + +div.highlight .-Color[class*=-BGC103] { + background-color: #8787AF +} + +div.highlight .-Color[class*=-C104] { + color: #8787D7 +} + +div.highlight .-Color[class*=-BGC104] { + background-color: #8787D7 +} + +div.highlight .-Color[class*=-C105] { + color: #8787FF +} + +div.highlight .-Color[class*=-BGC105] { + background-color: #8787FF +} + +div.highlight .-Color[class*=-C106] { + color: #87AF00 +} + +div.highlight .-Color[class*=-BGC106] { + background-color: #87AF00 +} + +div.highlight .-Color[class*=-C107] { + color: #87AF5F +} + +div.highlight .-Color[class*=-BGC107] { + background-color: #87AF5F +} + +div.highlight .-Color[class*=-C108] { + color: #87AF87 +} + +div.highlight .-Color[class*=-BGC108] { + background-color: #87AF87 +} + +div.highlight .-Color[class*=-C109] { + color: #87AFAF +} + +div.highlight .-Color[class*=-BGC109] { + background-color: #87AFAF +} + +div.highlight .-Color[class*=-C110] { + color: #87AFD7 +} + +div.highlight .-Color[class*=-BGC110] { + background-color: #87AFD7 +} + +div.highlight .-Color[class*=-C111] { + color: #87AFFF +} + +div.highlight .-Color[class*=-BGC111] { + background-color: #87AFFF +} + +div.highlight .-Color[class*=-C112] { + color: #87D700 +} + +div.highlight .-Color[class*=-BGC112] { + background-color: #87D700 +} + +div.highlight .-Color[class*=-C113] { + color: #87D75F +} + +div.highlight .-Color[class*=-BGC113] { + background-color: #87D75F +} + +div.highlight .-Color[class*=-C114] { + color: #87D787 +} + +div.highlight .-Color[class*=-BGC114] { + background-color: #87D787 +} + +div.highlight .-Color[class*=-C115] { + color: #87D7AF +} + +div.highlight .-Color[class*=-BGC115] { + background-color: #87D7AF +} + +div.highlight .-Color[class*=-C116] { + color: #87D7D7 +} + +div.highlight .-Color[class*=-BGC116] { + background-color: #87D7D7 +} + +div.highlight .-Color[class*=-C117] { + color: #87D7FF +} + +div.highlight .-Color[class*=-BGC117] { + background-color: #87D7FF +} + +div.highlight .-Color[class*=-C118] { + color: #87FF00 +} + +div.highlight .-Color[class*=-BGC118] { + background-color: #87FF00 +} + +div.highlight .-Color[class*=-C119] { + color: #87FF5F +} + +div.highlight .-Color[class*=-BGC119] { + background-color: #87FF5F +} + +div.highlight .-Color[class*=-C120] { + color: #87FF87 +} + +div.highlight .-Color[class*=-BGC120] { + background-color: #87FF87 +} + +div.highlight .-Color[class*=-C121] { + color: #87FFAF +} + +div.highlight .-Color[class*=-BGC121] { + background-color: #87FFAF +} + +div.highlight .-Color[class*=-C122] { + color: #87FFD7 +} + +div.highlight .-Color[class*=-BGC122] { + background-color: #87FFD7 +} + +div.highlight .-Color[class*=-C123] { + color: #87FFFF +} + +div.highlight .-Color[class*=-BGC123] { + background-color: #87FFFF +} + +div.highlight .-Color[class*=-C124] { + color: #AF0000 +} + +div.highlight .-Color[class*=-BGC124] { + background-color: #AF0000 +} + +div.highlight .-Color[class*=-C125] { + color: #AF005F +} + +div.highlight .-Color[class*=-BGC125] { + background-color: #AF005F +} + +div.highlight .-Color[class*=-C126] { + color: #AF0087 +} + +div.highlight .-Color[class*=-BGC126] { + background-color: #AF0087 +} + +div.highlight .-Color[class*=-C127] { + color: #AF00AF +} + +div.highlight .-Color[class*=-BGC127] { + background-color: #AF00AF +} + +div.highlight .-Color[class*=-C128] { + color: #AF00D7 +} + +div.highlight .-Color[class*=-BGC128] { + background-color: #AF00D7 +} + +div.highlight .-Color[class*=-C129] { + color: #AF00FF +} + +div.highlight .-Color[class*=-BGC129] { + background-color: #AF00FF +} + +div.highlight .-Color[class*=-C130] { + color: #AF5F00 +} + +div.highlight .-Color[class*=-BGC130] { + background-color: #AF5F00 +} + +div.highlight .-Color[class*=-C131] { + color: #AF5F5F +} + +div.highlight .-Color[class*=-BGC131] { + background-color: #AF5F5F +} + +div.highlight .-Color[class*=-C132] { + color: #AF5F87 +} + +div.highlight .-Color[class*=-BGC132] { + background-color: #AF5F87 +} + +div.highlight .-Color[class*=-C133] { + color: #AF5FAF +} + +div.highlight .-Color[class*=-BGC133] { + background-color: #AF5FAF +} + +div.highlight .-Color[class*=-C134] { + color: #AF5FD7 +} + +div.highlight .-Color[class*=-BGC134] { + background-color: #AF5FD7 +} + +div.highlight .-Color[class*=-C135] { + color: #AF5FFF +} + +div.highlight .-Color[class*=-BGC135] { + background-color: #AF5FFF +} + +div.highlight .-Color[class*=-C136] { + color: #AF8700 +} + +div.highlight .-Color[class*=-BGC136] { + background-color: #AF8700 +} + +div.highlight .-Color[class*=-C137] { + color: #AF875F +} + +div.highlight .-Color[class*=-BGC137] { + background-color: #AF875F +} + +div.highlight .-Color[class*=-C138] { + color: #AF8787 +} + +div.highlight .-Color[class*=-BGC138] { + background-color: #AF8787 +} + +div.highlight .-Color[class*=-C139] { + color: #AF87AF +} + +div.highlight .-Color[class*=-BGC139] { + background-color: #AF87AF +} + +div.highlight .-Color[class*=-C140] { + color: #AF87D7 +} + +div.highlight .-Color[class*=-BGC140] { + background-color: #AF87D7 +} + +div.highlight .-Color[class*=-C141] { + color: #AF87FF +} + +div.highlight .-Color[class*=-BGC141] { + background-color: #AF87FF +} + +div.highlight .-Color[class*=-C142] { + color: #AFAF00 +} + +div.highlight .-Color[class*=-BGC142] { + background-color: #AFAF00 +} + +div.highlight .-Color[class*=-C143] { + color: #AFAF5F +} + +div.highlight .-Color[class*=-BGC143] { + background-color: #AFAF5F +} + +div.highlight .-Color[class*=-C144] { + color: #AFAF87 +} + +div.highlight .-Color[class*=-BGC144] { + background-color: #AFAF87 +} + +div.highlight .-Color[class*=-C145] { + color: #AFAFAF +} + +div.highlight .-Color[class*=-BGC145] { + background-color: #AFAFAF +} + +div.highlight .-Color[class*=-C146] { + color: #AFAFD7 +} + +div.highlight .-Color[class*=-BGC146] { + background-color: #AFAFD7 +} + +div.highlight .-Color[class*=-C147] { + color: #AFAFFF +} + +div.highlight .-Color[class*=-BGC147] { + background-color: #AFAFFF +} + +div.highlight .-Color[class*=-C148] { + color: #AFD700 +} + +div.highlight .-Color[class*=-BGC148] { + background-color: #AFD700 +} + +div.highlight .-Color[class*=-C149] { + color: #AFD75F +} + +div.highlight .-Color[class*=-BGC149] { + background-color: #AFD75F +} + +div.highlight .-Color[class*=-C150] { + color: #AFD787 +} + +div.highlight .-Color[class*=-BGC150] { + background-color: #AFD787 +} + +div.highlight .-Color[class*=-C151] { + color: #AFD7AF +} + +div.highlight .-Color[class*=-BGC151] { + background-color: #AFD7AF +} + +div.highlight .-Color[class*=-C152] { + color: #AFD7D7 +} + +div.highlight .-Color[class*=-BGC152] { + background-color: #AFD7D7 +} + +div.highlight .-Color[class*=-C153] { + color: #AFD7FF +} + +div.highlight .-Color[class*=-BGC153] { + background-color: #AFD7FF +} + +div.highlight .-Color[class*=-C154] { + color: #AFFF00 +} + +div.highlight .-Color[class*=-BGC154] { + background-color: #AFFF00 +} + +div.highlight .-Color[class*=-C155] { + color: #AFFF5F +} + +div.highlight .-Color[class*=-BGC155] { + background-color: #AFFF5F +} + +div.highlight .-Color[class*=-C156] { + color: #AFFF87 +} + +div.highlight .-Color[class*=-BGC156] { + background-color: #AFFF87 +} + +div.highlight .-Color[class*=-C157] { + color: #AFFFAF +} + +div.highlight .-Color[class*=-BGC157] { + background-color: #AFFFAF +} + +div.highlight .-Color[class*=-C158] { + color: #AFFFD7 +} + +div.highlight .-Color[class*=-BGC158] { + background-color: #AFFFD7 +} + +div.highlight .-Color[class*=-C159] { + color: #AFFFFF +} + +div.highlight .-Color[class*=-BGC159] { + background-color: #AFFFFF +} + +div.highlight .-Color[class*=-C160] { + color: #D70000 +} + +div.highlight .-Color[class*=-BGC160] { + background-color: #D70000 +} + +div.highlight .-Color[class*=-C161] { + color: #D7005F +} + +div.highlight .-Color[class*=-BGC161] { + background-color: #D7005F +} + +div.highlight .-Color[class*=-C162] { + color: #D70087 +} + +div.highlight .-Color[class*=-BGC162] { + background-color: #D70087 +} + +div.highlight .-Color[class*=-C163] { + color: #D700AF +} + +div.highlight .-Color[class*=-BGC163] { + background-color: #D700AF +} + +div.highlight .-Color[class*=-C164] { + color: #D700D7 +} + +div.highlight .-Color[class*=-BGC164] { + background-color: #D700D7 +} + +div.highlight .-Color[class*=-C165] { + color: #D700FF +} + +div.highlight .-Color[class*=-BGC165] { + background-color: #D700FF +} + +div.highlight .-Color[class*=-C166] { + color: #D75F00 +} + +div.highlight .-Color[class*=-BGC166] { + background-color: #D75F00 +} + +div.highlight .-Color[class*=-C167] { + color: #D75F5F +} + +div.highlight .-Color[class*=-BGC167] { + background-color: #D75F5F +} + +div.highlight .-Color[class*=-C168] { + color: #D75F87 +} + +div.highlight .-Color[class*=-BGC168] { + background-color: #D75F87 +} + +div.highlight .-Color[class*=-C169] { + color: #D75FAF +} + +div.highlight .-Color[class*=-BGC169] { + background-color: #D75FAF +} + +div.highlight .-Color[class*=-C170] { + color: #D75FD7 +} + +div.highlight .-Color[class*=-BGC170] { + background-color: #D75FD7 +} + +div.highlight .-Color[class*=-C171] { + color: #D75FFF +} + +div.highlight .-Color[class*=-BGC171] { + background-color: #D75FFF +} + +div.highlight .-Color[class*=-C172] { + color: #D78700 +} + +div.highlight .-Color[class*=-BGC172] { + background-color: #D78700 +} + +div.highlight .-Color[class*=-C173] { + color: #D7875F +} + +div.highlight .-Color[class*=-BGC173] { + background-color: #D7875F +} + +div.highlight .-Color[class*=-C174] { + color: #D78787 +} + +div.highlight .-Color[class*=-BGC174] { + background-color: #D78787 +} + +div.highlight .-Color[class*=-C175] { + color: #D787AF +} + +div.highlight .-Color[class*=-BGC175] { + background-color: #D787AF +} + +div.highlight .-Color[class*=-C176] { + color: #D787D7 +} + +div.highlight .-Color[class*=-BGC176] { + background-color: #D787D7 +} + +div.highlight .-Color[class*=-C177] { + color: #D787FF +} + +div.highlight .-Color[class*=-BGC177] { + background-color: #D787FF +} + +div.highlight .-Color[class*=-C178] { + color: #D7AF00 +} + +div.highlight .-Color[class*=-BGC178] { + background-color: #D7AF00 +} + +div.highlight .-Color[class*=-C179] { + color: #D7AF5F +} + +div.highlight .-Color[class*=-BGC179] { + background-color: #D7AF5F +} + +div.highlight .-Color[class*=-C180] { + color: #D7AF87 +} + +div.highlight .-Color[class*=-BGC180] { + background-color: #D7AF87 +} + +div.highlight .-Color[class*=-C181] { + color: #D7AFAF +} + +div.highlight .-Color[class*=-BGC181] { + background-color: #D7AFAF +} + +div.highlight .-Color[class*=-C182] { + color: #D7AFD7 +} + +div.highlight .-Color[class*=-BGC182] { + background-color: #D7AFD7 +} + +div.highlight .-Color[class*=-C183] { + color: #D7AFFF +} + +div.highlight .-Color[class*=-BGC183] { + background-color: #D7AFFF +} + +div.highlight .-Color[class*=-C184] { + color: #D7D700 +} + +div.highlight .-Color[class*=-BGC184] { + background-color: #D7D700 +} + +div.highlight .-Color[class*=-C185] { + color: #D7D75F +} + +div.highlight .-Color[class*=-BGC185] { + background-color: #D7D75F +} + +div.highlight .-Color[class*=-C186] { + color: #D7D787 +} + +div.highlight .-Color[class*=-BGC186] { + background-color: #D7D787 +} + +div.highlight .-Color[class*=-C187] { + color: #D7D7AF +} + +div.highlight .-Color[class*=-BGC187] { + background-color: #D7D7AF +} + +div.highlight .-Color[class*=-C188] { + color: #D7D7D7 +} + +div.highlight .-Color[class*=-BGC188] { + background-color: #D7D7D7 +} + +div.highlight .-Color[class*=-C189] { + color: #D7D7FF +} + +div.highlight .-Color[class*=-BGC189] { + background-color: #D7D7FF +} + +div.highlight .-Color[class*=-C190] { + color: #D7FF00 +} + +div.highlight .-Color[class*=-BGC190] { + background-color: #D7FF00 +} + +div.highlight .-Color[class*=-C191] { + color: #D7FF5F +} + +div.highlight .-Color[class*=-BGC191] { + background-color: #D7FF5F +} + +div.highlight .-Color[class*=-C192] { + color: #D7FF87 +} + +div.highlight .-Color[class*=-BGC192] { + background-color: #D7FF87 +} + +div.highlight .-Color[class*=-C193] { + color: #D7FFAF +} + +div.highlight .-Color[class*=-BGC193] { + background-color: #D7FFAF +} + +div.highlight .-Color[class*=-C194] { + color: #D7FFD7 +} + +div.highlight .-Color[class*=-BGC194] { + background-color: #D7FFD7 +} + +div.highlight .-Color[class*=-C195] { + color: #D7FFFF +} + +div.highlight .-Color[class*=-BGC195] { + background-color: #D7FFFF +} + +div.highlight .-Color[class*=-C196] { + color: #FF0000 +} + +div.highlight .-Color[class*=-BGC196] { + background-color: #FF0000 +} + +div.highlight .-Color[class*=-C197] { + color: #FF005F +} + +div.highlight .-Color[class*=-BGC197] { + background-color: #FF005F +} + +div.highlight .-Color[class*=-C198] { + color: #FF0087 +} + +div.highlight .-Color[class*=-BGC198] { + background-color: #FF0087 +} + +div.highlight .-Color[class*=-C199] { + color: #FF00AF +} + +div.highlight .-Color[class*=-BGC199] { + background-color: #FF00AF +} + +div.highlight .-Color[class*=-C200] { + color: #FF00D7 +} + +div.highlight .-Color[class*=-BGC200] { + background-color: #FF00D7 +} + +div.highlight .-Color[class*=-C201] { + color: #FF00FF +} + +div.highlight .-Color[class*=-BGC201] { + background-color: #FF00FF +} + +div.highlight .-Color[class*=-C202] { + color: #FF5F00 +} + +div.highlight .-Color[class*=-BGC202] { + background-color: #FF5F00 +} + +div.highlight .-Color[class*=-C203] { + color: #FF5F5F +} + +div.highlight .-Color[class*=-BGC203] { + background-color: #FF5F5F +} + +div.highlight .-Color[class*=-C204] { + color: #FF5F87 +} + +div.highlight .-Color[class*=-BGC204] { + background-color: #FF5F87 +} + +div.highlight .-Color[class*=-C205] { + color: #FF5FAF +} + +div.highlight .-Color[class*=-BGC205] { + background-color: #FF5FAF +} + +div.highlight .-Color[class*=-C206] { + color: #FF5FD7 +} + +div.highlight .-Color[class*=-BGC206] { + background-color: #FF5FD7 +} + +div.highlight .-Color[class*=-C207] { + color: #FF5FFF +} + +div.highlight .-Color[class*=-BGC207] { + background-color: #FF5FFF +} + +div.highlight .-Color[class*=-C208] { + color: #FF8700 +} + +div.highlight .-Color[class*=-BGC208] { + background-color: #FF8700 +} + +div.highlight .-Color[class*=-C209] { + color: #FF875F +} + +div.highlight .-Color[class*=-BGC209] { + background-color: #FF875F +} + +div.highlight .-Color[class*=-C210] { + color: #FF8787 +} + +div.highlight .-Color[class*=-BGC210] { + background-color: #FF8787 +} + +div.highlight .-Color[class*=-C211] { + color: #FF87AF +} + +div.highlight .-Color[class*=-BGC211] { + background-color: #FF87AF +} + +div.highlight .-Color[class*=-C212] { + color: #FF87D7 +} + +div.highlight .-Color[class*=-BGC212] { + background-color: #FF87D7 +} + +div.highlight .-Color[class*=-C213] { + color: #FF87FF +} + +div.highlight .-Color[class*=-BGC213] { + background-color: #FF87FF +} + +div.highlight .-Color[class*=-C214] { + color: #FFAF00 +} + +div.highlight .-Color[class*=-BGC214] { + background-color: #FFAF00 +} + +div.highlight .-Color[class*=-C215] { + color: #FFAF5F +} + +div.highlight .-Color[class*=-BGC215] { + background-color: #FFAF5F +} + +div.highlight .-Color[class*=-C216] { + color: #FFAF87 +} + +div.highlight .-Color[class*=-BGC216] { + background-color: #FFAF87 +} + +div.highlight .-Color[class*=-C217] { + color: #FFAFAF +} + +div.highlight .-Color[class*=-BGC217] { + background-color: #FFAFAF +} + +div.highlight .-Color[class*=-C218] { + color: #FFAFD7 +} + +div.highlight .-Color[class*=-BGC218] { + background-color: #FFAFD7 +} + +div.highlight .-Color[class*=-C219] { + color: #FFAFFF +} + +div.highlight .-Color[class*=-BGC219] { + background-color: #FFAFFF +} + +div.highlight .-Color[class*=-C220] { + color: #FFD700 +} + +div.highlight .-Color[class*=-BGC220] { + background-color: #FFD700 +} + +div.highlight .-Color[class*=-C221] { + color: #FFD75F +} + +div.highlight .-Color[class*=-BGC221] { + background-color: #FFD75F +} + +div.highlight .-Color[class*=-C222] { + color: #FFD787 +} + +div.highlight .-Color[class*=-BGC222] { + background-color: #FFD787 +} + +div.highlight .-Color[class*=-C223] { + color: #FFD7AF +} + +div.highlight .-Color[class*=-BGC223] { + background-color: #FFD7AF +} + +div.highlight .-Color[class*=-C224] { + color: #FFD7D7 +} + +div.highlight .-Color[class*=-BGC224] { + background-color: #FFD7D7 +} + +div.highlight .-Color[class*=-C225] { + color: #FFD7FF +} + +div.highlight .-Color[class*=-BGC225] { + background-color: #FFD7FF +} + +div.highlight .-Color[class*=-C226] { + color: #FFFF00 +} + +div.highlight .-Color[class*=-BGC226] { + background-color: #FFFF00 +} + +div.highlight .-Color[class*=-C227] { + color: #FFFF5F +} + +div.highlight .-Color[class*=-BGC227] { + background-color: #FFFF5F +} + +div.highlight .-Color[class*=-C228] { + color: #FFFF87 +} + +div.highlight .-Color[class*=-BGC228] { + background-color: #FFFF87 +} + +div.highlight .-Color[class*=-C229] { + color: #FFFFAF +} + +div.highlight .-Color[class*=-BGC229] { + background-color: #FFFFAF +} + +div.highlight .-Color[class*=-C230] { + color: #FFFFD7 +} + +div.highlight .-Color[class*=-BGC230] { + background-color: #FFFFD7 +} + +div.highlight .-Color[class*=-C231] { + color: #FFFFFF +} + +div.highlight .-Color[class*=-BGC231] { + background-color: #FFFFFF +} + +div.highlight .-Color[class*=-C232] { + color: #080808 +} + +div.highlight .-Color[class*=-BGC232] { + background-color: #080808 +} + +div.highlight .-Color[class*=-C233] { + color: #121212 +} + +div.highlight .-Color[class*=-BGC233] { + background-color: #121212 +} + +div.highlight .-Color[class*=-C234] { + color: #1C1C1C +} + +div.highlight .-Color[class*=-BGC234] { + background-color: #1C1C1C +} + +div.highlight .-Color[class*=-C235] { + color: #262626 +} + +div.highlight .-Color[class*=-BGC235] { + background-color: #262626 +} + +div.highlight .-Color[class*=-C236] { + color: #303030 +} + +div.highlight .-Color[class*=-BGC236] { + background-color: #303030 +} + +div.highlight .-Color[class*=-C237] { + color: #3A3A3A +} + +div.highlight .-Color[class*=-BGC237] { + background-color: #3A3A3A +} + +div.highlight .-Color[class*=-C238] { + color: #444444 +} + +div.highlight .-Color[class*=-BGC238] { + background-color: #444444 +} + +div.highlight .-Color[class*=-C239] { + color: #4E4E4E +} + +div.highlight .-Color[class*=-BGC239] { + background-color: #4E4E4E +} + +div.highlight .-Color[class*=-C240] { + color: #585858 +} + +div.highlight .-Color[class*=-BGC240] { + background-color: #585858 +} + +div.highlight .-Color[class*=-C241] { + color: #626262 +} + +div.highlight .-Color[class*=-BGC241] { + background-color: #626262 +} + +div.highlight .-Color[class*=-C242] { + color: #6C6C6C +} + +div.highlight .-Color[class*=-BGC242] { + background-color: #6C6C6C +} + +div.highlight .-Color[class*=-C243] { + color: #767676 +} + +div.highlight .-Color[class*=-BGC243] { + background-color: #767676 +} + +div.highlight .-Color[class*=-C244] { + color: #808080 +} + +div.highlight .-Color[class*=-BGC244] { + background-color: #808080 +} + +div.highlight .-Color[class*=-C245] { + color: #8A8A8A +} + +div.highlight .-Color[class*=-BGC245] { + background-color: #8A8A8A +} + +div.highlight .-Color[class*=-C246] { + color: #949494 +} + +div.highlight .-Color[class*=-BGC246] { + background-color: #949494 +} + +div.highlight .-Color[class*=-C247] { + color: #9E9E9E +} + +div.highlight .-Color[class*=-BGC247] { + background-color: #9E9E9E +} + +div.highlight .-Color[class*=-C248] { + color: #A8A8A8 +} + +div.highlight .-Color[class*=-BGC248] { + background-color: #A8A8A8 +} + +div.highlight .-Color[class*=-C249] { + color: #B2B2B2 +} + +div.highlight .-Color[class*=-BGC249] { + background-color: #B2B2B2 +} + +div.highlight .-Color[class*=-C250] { + color: #BCBCBC +} + +div.highlight .-Color[class*=-BGC250] { + background-color: #BCBCBC +} + +div.highlight .-Color[class*=-C251] { + color: #C6C6C6 +} + +div.highlight .-Color[class*=-BGC251] { + background-color: #C6C6C6 +} + +div.highlight .-Color[class*=-C252] { + color: #D0D0D0 +} + +div.highlight .-Color[class*=-BGC252] { + background-color: #D0D0D0 +} + +div.highlight .-Color[class*=-C253] { + color: #DADADA +} + +div.highlight .-Color[class*=-BGC253] { + background-color: #DADADA +} + +div.highlight .-Color[class*=-C254] { + color: #E4E4E4 +} + +div.highlight .-Color[class*=-BGC254] { + background-color: #E4E4E4 +} + +div.highlight .-Color[class*=-C255] { + color: #EEEEEE +} + +div.highlight .-Color[class*=-BGC255] { + background-color: #EEEEEE +} diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 00000000..7107cec9 Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..22434fbf --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,86 @@ +pre { line-height: 125%; } +td.linenos .normal { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; } +span.linenos { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #6e7681 } +.highlight { background: #0d1117; color: #e6edf3 } +.highlight .c { color: #8b949e; font-style: italic } /* Comment */ +.highlight .err { color: #f85149 } /* Error */ +.highlight .esc { color: #e6edf3 } /* Escape */ +.highlight .g { color: #e6edf3 } /* Generic */ +.highlight .k { color: #ff7b72 } /* Keyword */ +.highlight .l { color: #a5d6ff } /* Literal */ +.highlight .n { color: #e6edf3 } /* Name */ +.highlight .o { color: #ff7b72; font-weight: bold } /* Operator */ +.highlight .x { color: #e6edf3 } /* Other */ +.highlight .p { color: #e6edf3 } /* Punctuation */ +.highlight .ch { color: #8b949e; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8b949e; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8b949e; font-weight: bold; font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: #8b949e; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8b949e; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8b949e; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #ffa198; background-color: #490202 } /* Generic.Deleted */ +.highlight .ge { color: #e6edf3; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #e6edf3; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #ffa198 } /* Generic.Error */ +.highlight .gh { color: #79c0ff; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #56d364; background-color: #0f5323 } /* Generic.Inserted */ +.highlight .go { color: #8b949e } /* Generic.Output */ +.highlight .gp { color: #8b949e } /* Generic.Prompt */ +.highlight .gs { color: #e6edf3; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #79c0ff } /* Generic.Subheading */ +.highlight .gt { color: #ff7b72 } /* Generic.Traceback */ +.highlight .g-Underline { color: #e6edf3; text-decoration: underline } /* Generic.Underline */ +.highlight .kc { color: #79c0ff } /* Keyword.Constant */ +.highlight .kd { color: #ff7b72 } /* Keyword.Declaration */ +.highlight .kn { color: #ff7b72 } /* Keyword.Namespace */ +.highlight .kp { color: #79c0ff } /* Keyword.Pseudo */ +.highlight .kr { color: #ff7b72 } /* Keyword.Reserved */ +.highlight .kt { color: #ff7b72 } /* Keyword.Type */ +.highlight .ld { color: #79c0ff } /* Literal.Date */ +.highlight .m { color: #a5d6ff } /* Literal.Number */ +.highlight .s { color: #a5d6ff } /* Literal.String */ +.highlight .na { color: #e6edf3 } /* Name.Attribute */ +.highlight .nb { color: #e6edf3 } /* Name.Builtin */ +.highlight .nc { color: #f0883e; font-weight: bold } /* Name.Class */ +.highlight .no { color: #79c0ff; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #d2a8ff; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #ffa657 } /* Name.Entity */ +.highlight .ne { color: #f0883e; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #d2a8ff; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #79c0ff; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #ff7b72 } /* Name.Namespace */ +.highlight .nx { color: #e6edf3 } /* Name.Other */ +.highlight .py { color: #79c0ff } /* Name.Property */ +.highlight .nt { color: #7ee787 } /* Name.Tag */ +.highlight .nv { color: #79c0ff } /* Name.Variable */ +.highlight .ow { color: #ff7b72; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #e6edf3 } /* Punctuation.Marker */ +.highlight .w { color: #6e7681 } /* Text.Whitespace */ +.highlight .mb { color: #a5d6ff } /* Literal.Number.Bin */ +.highlight .mf { color: #a5d6ff } /* Literal.Number.Float */ +.highlight .mh { color: #a5d6ff } /* Literal.Number.Hex */ +.highlight .mi { color: #a5d6ff } /* Literal.Number.Integer */ +.highlight .mo { color: #a5d6ff } /* Literal.Number.Oct */ +.highlight .sa { color: #79c0ff } /* Literal.String.Affix */ +.highlight .sb { color: #a5d6ff } /* Literal.String.Backtick */ +.highlight .sc { color: #a5d6ff } /* Literal.String.Char */ +.highlight .dl { color: #79c0ff } /* Literal.String.Delimiter */ +.highlight .sd { color: #a5d6ff } /* Literal.String.Doc */ +.highlight .s2 { color: #a5d6ff } /* Literal.String.Double */ +.highlight .se { color: #79c0ff } /* Literal.String.Escape */ +.highlight .sh { color: #79c0ff } /* Literal.String.Heredoc */ +.highlight .si { color: #a5d6ff } /* Literal.String.Interpol */ +.highlight .sx { color: #a5d6ff } /* Literal.String.Other */ +.highlight .sr { color: #79c0ff } /* Literal.String.Regex */ +.highlight .s1 { color: #a5d6ff } /* Literal.String.Single */ +.highlight .ss { color: #a5d6ff } /* Literal.String.Symbol */ +.highlight .bp { color: #e6edf3 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #d2a8ff; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #79c0ff } /* Name.Variable.Class */ +.highlight .vg { color: #79c0ff } /* Name.Variable.Global */ +.highlight .vi { color: #79c0ff } /* Name.Variable.Instance */ +.highlight .vm { color: #79c0ff } /* Name.Variable.Magic */ +.highlight .il { color: #a5d6ff } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..92da3f8b --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,619 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 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, anchor) + ); + // 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." + ).replace('${resultCount}', resultCount); +}; +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); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * 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, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlinks", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. 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); + }, + + _parseQuery: (query) => { + // 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]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + normalResults.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, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + 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; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // 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); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + 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.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(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, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + 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/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_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/algorithms.html b/algorithms.html new file mode 100644 index 00000000..276ad86e --- /dev/null +++ b/algorithms.html @@ -0,0 +1,280 @@ + + + + + + + Algorithms — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Algorithms

+

Qlasskit implements high level representation of quantum algorithms that relies on black boxes functions and oracles.

+
    +
  • Grover search

  • +
  • Simon periodicity

  • +
  • Deutsch Jozsa

  • +
  • Bernstein Vazirani

  • +
+
+

Abstraction tools

+

All algorithms share the same base class QAlgorithm which inherits from QCircuitWrapper. The QCircuitWrapper is also father of qlassf functions, and offers useful methods to handle high level types.

+

One of those tools is decode_counts, that translates the result dictionary from a quantum sampling in its binary form, to the high level representation of data types used in the qlasskit function; decode_output instead, translate a single bitstring.

+
+
+
from typing import Tuple
+from qlasskit import qlassf, Qint, Qint4
+
+
+@qlassf
+def test_tools(a: Qint[4]) -> Qint[4]:
+    return a + 1
+
+
+test_tools.decode_output("0100")
+
+
+
+
+
4
+
+
+
+
+

Another method called encode_input is able to do the reverse job, transforming high level types to binary form.

+
+
+
test_tools.encode_input(Qint4(4))
+
+
+
+
+
'0100'
+
+
+
+
+
+ +
+

Simon periodicity

+
+
+
from qlasskit.algorithms import Simon
+
+
+@qlassf
+def f(a: Qint[4]) -> Qint[4]:
+    return (a >> 3) + 1
+
+
+q_algo = Simon(f)
+
+
+
+
+

Further examples can be found on the following notebooks:

+ +
+
+

Deutsch Jozsa

+
+
+
from qlasskit.algorithms import DeutschJozsa
+
+
+@qlassf
+def f(b: Qint[4]) -> bool:
+    return b < 16
+
+
+q_algo = DeutschJozsa(f)
+
+
+
+
+

Further examples can be found on the following notebooks:

+ +
+
+

Bernstein Vazirani

+
+
+
from qlasskit.algorithms import BernsteinVazirani, secret_oracle
+
+oracle = secret_oracle(4, 14)
+
+q_algo = BernsteinVazirani(oracle)
+
+
+
+
+

Further examples can be found on the following notebooks:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/api.html b/api.html new file mode 100644 index 00000000..52a0c00f --- /dev/null +++ b/api.html @@ -0,0 +1,197 @@ + + + + + + + API — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

API

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

qlasskit.qlassfun.qlassf(f[, types, defs, ...])

Decorator / function creating a QlassF object

qlasskit.qlassfun.qlassfa([types, defs, ...])

Decorator with parameters for qlassf

qlasskit.qlassfun.QlassF(name, original_f, ...)

Class representing a qlassf function

qlasskit.algorithms.qalgorithm

qlasskit.algorithms.grover.Grover(oracle[, ...])

qlasskit.algorithms.simon.Simon(f)

qlasskit.algorithms.deutschjozsa.DeutschJozsa(f)

qlasskit.qcircuit.qcircuit.QCircuit([...])

qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper()

Wrapper interface for a class containing a qcircuit

qlasskit.qcircuit.gates

qlasskit.bqm.decode_samples(qf, sampleset)

Get dimod sampleset and return an high level decoded solution

qlasskit.decompiler.Decompiler()

qlasskit.types

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/bqm.html b/bqm.html new file mode 100644 index 00000000..85f58eba --- /dev/null +++ b/bqm.html @@ -0,0 +1,349 @@ + + + + + + + Binary Quadratic Model, Qubo & Ising — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Binary Quadratic Model, Qubo & Ising

+

Any qlassf function can be transformed to a binary quadratic model using the to_bqm function. In this example we create a generic function that factorize num, and we bind num with 15.

+
+
+
from qlasskit import qlassf, Qint, Parameter
+
+
+@qlassf
+def test_factor_generic(num: Parameter[Qint[4]], a: Qint[3], b: Qint[3]) -> Qint[4]:
+    return num - (a * b)
+
+
+test_factor = test_factor_generic.bind(num=15)
+bqm = test_factor.to_bqm()
+
+print("Vars:", bqm.num_variables, "\nInteractions:", bqm.num_interactions)
+
+
+
+
+
Vars: 14 
+Interactions: 41
+
+
+
+
+

A qlassf function can also be exported as a QUBO model using to_bqm('qubo') or as an Ising model using to_bqm('ising').

+
+

Running on simulated sampler annealer

+

Now we can run a simulated sampler annealer to minimize this function; qlasskit offer a decode_samples helper function that translates sample result to the high level types of qlasskit.

+
+
+
import neal
+from qlasskit.bqm import decode_samples
+
+sa = neal.SimulatedAnnealingSampler()
+sampleset = sa.sample(bqm, num_reads=10)
+decoded_samples = decode_samples(test_factor, sampleset)
+best_sample = min(decoded_samples, key=lambda x: x.energy)
+print(best_sample.sample)
+
+
+
+
+
{'a': 3, 'b': 5}
+
+
+
+
+

The result is 5 and 3 as expected (since 5 times 3 is equal to 15).

+
+
+

Running on DWave annealer

+

If we have a valid DWave account, we can run our problem on a real quantum annealer as follow:

+
+
+
from dwave.system import DWaveSampler, EmbeddingComposite
+
+sampler = EmbeddingComposite(DWaveSampler())
+sampleset = sampler.sample(bqm, num_reads=10)
+decoded_samples = decode_samples(test_factor, sampleset)
+best_sample = min(decoded_samples, key=lambda x: x.energy)
+print(best_sample.sample)
+
+
+
+
+
---------------------------------------------------------------------------
+SolverFailureError                        Traceback (most recent call last)
+Cell In[3], line 5
+      3 sampler = EmbeddingComposite(DWaveSampler())
+      4 sampleset = sampler.sample(bqm, num_reads=10)
+----> 5 decoded_samples = decode_samples(test_factor, sampleset)
+      6 best_sample = min(decoded_samples, key=lambda x: x.energy)
+      7 print(best_sample.sample)
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/qlasskit-0.1.18-py3.10.egg/qlasskit/bqm.py:142, in decode_samples(qf, sampleset)
+    140 """Get dimod sampleset and return an high level decoded solution"""
+    141 model = qf.to_bqm("pq_model")
+--> 142 decoded = model.decode_sampleset(sampleset)
+    144 new_dec = []
+    145 for el in decoded:
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dimod/sampleset.py:1121, in SampleSet.record(self)
+   1105 @property
+   1106 def record(self):
+   1107     """:obj:`numpy.recarray` containing the samples, energies, number of occurences, and other sample data.
+   1108 
+   1109     Examples:
+   (...)
+   1119 
+   1120     """
+-> 1121     self.resolve()
+   1122     return self._record
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dimod/sampleset.py:1485, in SampleSet.resolve(self)
+   1483 # if it doesn't have the attribute then it is already resolved
+   1484 if hasattr(self, '_future'):
+-> 1485     samples = self._result_hook(self._future)
+   1486     self.__init__(samples.record, samples.variables, samples.info, samples.vartype)
+   1487     del self._future
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/system/composites/embedding.py:284, in EmbeddingComposite.sample.<locals>.async_unembed(response)
+    279 def async_unembed(response):
+    280     # unembed the sampleset aysnchronously.
+    282     warninghandler.chain_break(response, embedding)
+--> 284     sampleset = unembed_sampleset(response, embedding, source_bqm=bqm,
+    285                                   chain_break_method=chain_break_method,
+    286                                   chain_break_fraction=chain_break_fraction,
+    287                                   return_embedding=return_embedding)
+    289     if return_embedding:
+    290         sampleset.info['embedding_context'].update(
+    291             embedding_parameters=embedding_parameters,
+    292             chain_strength=embedding.chain_strength)
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/embedding/transforms.py:606, in unembed_sampleset(target_sampleset, embedding, source_bqm, chain_break_method, chain_break_fraction, return_embedding)
+    603 except KeyError:
+    604     raise ValueError("given bqm does not match the embedding")
+--> 606 record = target_sampleset.record
+    608 unembedded, idxs = chain_break_method(target_sampleset, chains)
+    610 reserved = {'sample', 'energy'}
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dimod/sampleset.py:1121, in SampleSet.record(self)
+   1105 @property
+   1106 def record(self):
+   1107     """:obj:`numpy.recarray` containing the samples, energies, number of occurences, and other sample data.
+   1108 
+   1109     Examples:
+   (...)
+   1119 
+   1120     """
+-> 1121     self.resolve()
+   1122     return self._record
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dimod/sampleset.py:1485, in SampleSet.resolve(self)
+   1483 # if it doesn't have the attribute then it is already resolved
+   1484 if hasattr(self, '_future'):
+-> 1485     samples = self._result_hook(self._future)
+   1486     self.__init__(samples.record, samples.variables, samples.info, samples.vartype)
+   1487     del self._future
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/system/samplers/dwave_sampler.py:452, in DWaveSampler.sample.<locals>._hook(computation)
+    450 except (SolverError, InvalidAPIResponseError) as exc:
+    451     if not self.failover:
+--> 452         raise exc
+    453     if isinstance(exc, SolverAuthenticationError):
+    454         raise exc
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/system/samplers/dwave_sampler.py:439, in DWaveSampler.sample.<locals>._hook(computation)
+    436     return sampleset
+    438 try:
+--> 439     return resolve(computation)
+    441 except (ProblemUploadError, RequestTimeout, PollingTimeout) as exc:
+    442     if not self.failover:
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/system/samplers/dwave_sampler.py:429, in DWaveSampler.sample.<locals>._hook.<locals>.resolve(computation)
+    427 def resolve(computation):
+    428     sampleset = computation.sampleset
+--> 429     sampleset.resolve()
+    431     if warninghandler is not None:
+    432         warninghandler.too_few_samples(sampleset)
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dimod/sampleset.py:1485, in SampleSet.resolve(self)
+   1483 # if it doesn't have the attribute then it is already resolved
+   1484 if hasattr(self, '_future'):
+-> 1485     samples = self._result_hook(self._future)
+   1486     self.__init__(samples.record, samples.variables, samples.info, samples.vartype)
+   1487     del self._future
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/cloud/computation.py:823, in Future.sampleset.<locals>.<lambda>(f)
+    818 except ImportError:
+    819     raise RuntimeError("Can't construct SampleSet without dimod. "
+    820                        "Re-install the library with 'bqm' support.")
+    822 self._sampleset = sampleset = dimod.SampleSet.from_future(
+--> 823     self, lambda f: f.wait_sampleset())
+    825 # propagate id to sampleset as well
+    826 # note: this requires dimod>=0.8.21 (before that version SampleSet
+    827 # had slots set which prevented dynamic addition of attributes).
+    828 sampleset.wait_id = self.wait_id
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/cloud/computation.py:755, in Future.wait_sampleset(self)
+    752 """Blocking sampleset getter."""
+    754 # blocking result get
+--> 755 result = self._load_result()
+    757 # common problem info: id/label
+    758 problem_info = dict(problem_id=self.id)
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/cloud/computation.py:893, in Future._load_result(self)
+    891 # Check for other error conditions
+    892 if self._exception is not None:
+--> 893     raise self._exception
+    895 # If someone else took care of this while we were waiting
+    896 if self._result is not None:
+
+File ~/.pyenv/versions/3.10.13/envs/qlasskit_310-env/lib/python3.10/site-packages/dwave/cloud/client/base.py:1309, in Client._handle_problem_status(self, message, future)
+   1307 if 'error_code' in message and 'error_msg' in message:
+   1308     logger.debug("Error response received: %r", message)
+-> 1309     raise SolverFailureError(message['error_msg'])
+   1311 if 'status' not in message:
+   1312     raise InvalidAPIResponseError("'status' missing in problem description response")
+
+SolverFailureError: Problem not accepted because user has insufficient remaining solver access time in project DEV.
+
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/cli_tools.html b/cli_tools.html new file mode 100644 index 00000000..d1c7dadd --- /dev/null +++ b/cli_tools.html @@ -0,0 +1,195 @@ + + + + + + + CLI Tools — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

CLI Tools

+

Qlasskit also offer two cli tools: +- py2bexp: translate python code to boolean expressions +- py2qasm: translate python code to quantum circuits in qasm format

+
+

py2bexp

+

Receives a python script (file or stdin) in input and outputs bool expressions. The python script should +contain at least one qlassf function.

+
usage: py2bexp [-h] [-i INPUT_FILE] [-e ENTRYPOINT] [-o OUTPUT] [-f {anf,cnf,dnf,nnf}] [-t {sympy,dimacs}] [-v]
+
+Convert qlassf functions in a Python script to boolean expressions.
+
+options:
+-h, --help            show this help message and exit
+-i INPUT_FILE, --input-file INPUT_FILE
+                        Input file (default: stdin)
+-e ENTRYPOINT, --entrypoint ENTRYPOINT
+                        Entrypoint function name
+-o OUTPUT, --output OUTPUT
+                        Output file (default: stdout)
+-f {anf,cnf,dnf,nnf}, --form {anf,cnf,dnf,nnf}
+                        Expression form (default: sympy)
+-t {sympy,dimacs}, --format {sympy,dimacs}
+                        Output format (default: sympy)
+-v, --version         show program's version number and exit
+
+
+
+
+

py2qasm

+

Receives a python script (file or stdin) in input and outputs qasm code. The python script should +contain at least one qlassf function.

+
usage: py2qasm [-h] [-i INPUT_FILE] [-e ENTRYPOINT] [-o OUTPUT] [-c {internal,tweedledum,recompiler}] [-q {2.0,3.0}]
+            [-v]
+
+Convert qlassf functions in a Python script to qasm code expressions.
+
+options:
+-h, --help            show this help message and exit
+-i INPUT_FILE, --input-file INPUT_FILE
+                        Input file (default: stdin)
+-e ENTRYPOINT, --entrypoint ENTRYPOINT
+                        Entrypoint function name
+-o OUTPUT, --output OUTPUT
+                        Output file (default: stdout)
+-c {internal,tweedledum,recompiler}, --compiler {internal,tweedledum,recompiler}
+                        QASM compiler (default: internal)
+-q {2.0,3.0}, --qasm-version {2.0,3.0}
+                        QASM version (default: 3.0)
+-v, --version         show program's version number and exit
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/decompiler_and_optimizer.html b/decompiler_and_optimizer.html new file mode 100644 index 00000000..8d071d44 --- /dev/null +++ b/decompiler_and_optimizer.html @@ -0,0 +1,212 @@ + + + + + + + Decompiler and Circuit Optimizer — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Decompiler and Circuit Optimizer

+

Qlasskit offers two useful tool for circuit analysis and optimization.

+
    +
  • Decompiler: given a quantum circuit is able to detect section that can be represented as boolean expressions

  • +
  • circuit_boolean_optimizer: a pipeline that given a quantum circuit, decompose it in boolean expressions form and optimize it using boolean algebra

  • +
+

We first write a qlasskit function that perform an And between the elements of a Qlist; we use the fastOptimizer in order to obtain an unoptimized circuit.

+
+
+
from qlasskit import qlassfa, qlassf, boolopt, Qlist
+from qlasskit.decompiler import Decompiler, circuit_boolean_optimizer
+
+
+@qlassfa(bool_optimizer=boolopt.fastOptimizer)
+def qf(a: Qlist[bool, 2]) -> bool:
+    s = True
+    for i in a:
+        s = s and i
+    return s
+
+
+qf.circuit()
+
+
+
+
+
QCircuit<qf>(7 gates, 6 qubits)
+
+
+
+
+

As we can see from the circuit, this is not the best solution.

+
+
+
qf.export().draw("mpl")
+
+
+
+
+_images/68ebd5e59484021eb207a14eb3a4a3219a6ecd8b1971abfe71fe0b3484f576f0.png +
+
+

Using the decompiler we are able to translate a quantum circuit to its boolean representation (if applicable):

+
+
+
dc = Decompiler().decompile(qf.circuit())
+dc
+
+
+
+
+
DecompiledResults[
+	(
+		(0, 7)
+		(X, [2], None), (CCX, [0, 2, 3], None), (CCX, [1, 3, 4], None), (CX, [4, 5], None), (CCX, [1, 3, 4], None), (CCX, [0, 2, 3], None), (X, [2], None)
+		(q5, q4 ^ q5 ^ (q1 & (q3 ^ (q0 & ~q2))))
+	)
+]
+
+
+
+
+

The circuit_boolean_optimizer allows us to perform boolean optimizations in a quantum circuit; from the previous unoptimized example, we get the following optimized circuit:

+
+
+
qc = circuit_boolean_optimizer(qf.circuit(), preserve=[0, 1])
+qc.export().draw("mpl")
+
+
+
+
+_images/975f9c766c4ab546bee9118a765d044bdce43b9ce3694cef8b60e97c42ddb931.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_bernstein_vazirani.html b/example_bernstein_vazirani.html new file mode 100644 index 00000000..120ecd23 --- /dev/null +++ b/example_bernstein_vazirani.html @@ -0,0 +1,211 @@ + + + + + + + Bernstein Vazirani algorithm — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Bernstein Vazirani algorithm

+

We first create an oracle embedding the secret number 14; we can do this in two equivalent ways:

+
    +
  • using secret_oracle() function

  • +
  • writing the oracle from scratch in python

  • +
+
+
+
from qlasskit import qlassf, Qint
+
+
+@qlassf
+def oracle(x: Qint[4]) -> bool:
+    s = Qint4(14)
+    return (x[0] & s[0]) ^ (x[1] & s[1]) ^ (x[2] & s[2]) ^ (x[3] & s[3])
+
+
+oracle.export("qiskit").draw("mpl")
+
+
+
+
+_images/e017f3e106e1cd0f02b1307f42b531383710dab1353d524ef5e4ddbf761ef27a.png +
+
+
+
+
from qlasskit.algorithms import secret_oracle
+
+oracle = secret_oracle(4, 14)
+oracle.export("qiskit").draw("mpl")
+
+
+
+
+_images/e017f3e106e1cd0f02b1307f42b531383710dab1353d524ef5e4ddbf761ef27a.png +
+
+

Now we can use BernsteinVazirani to discover the secret embedded in the oracle.

+
+
+
from qlasskit.algorithms import BernsteinVazirani
+
+q_algo = BernsteinVazirani(oracle)
+qc = q_algo.export("qiskit")
+qc.draw("mpl")
+
+
+
+
+_images/a8917ace04cb0420613da4cfd474deb06536a17cf19a713c5f187839fee6a0e4.png +
+
+
+
+
from qiskit import QuantumCircuit
+from qiskit.visualization import plot_histogram
+from qiskit_aer import AerSimulator
+
+qc.measure_all()
+simulator = AerSimulator()
+result = simulator.run(qc).result()
+counts = result.get_counts(qc)
+
+counts_readable = q_algo.decode_counts(counts)
+plot_histogram(counts_readable)
+
+
+
+
+_images/38de6c110ed81ea81303c7d605b59843cce73ba51cc6f4e85a6ff5669271c5a2.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_big_circuit.html b/example_big_circuit.html new file mode 100644 index 00000000..f409acf6 --- /dev/null +++ b/example_big_circuit.html @@ -0,0 +1,168 @@ + + + + + + + Working with big circuits — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Working with big circuits

+

Qlasskit is capable of producing large circuit without any issue. The only thing that you have to do, is to use the fastOptimizer, since running CSE is too slow on large expressions lists.

+

In the next example we are going to create a quantum circuit with 64 Qint8 in input, and one Qint8 in output, resulting on a circuit of ~21984 qubits and ~1044 gates in around 5 seconds.

+
+
+
from qlasskit import Qint8, Qlist, boolopt, qlassfa
+
+
+@qlassfa(bool_optimizer=boolopt.fastOptimizer)
+def test(a_list: Qlist[Qint8, 64]) -> Qint8:
+    h_val = Qint8(0)
+    for c in a_list:
+        h_val = h_val + c
+    return h_val
+
+
+
+
+
+
+
print(test.circuit())
+
+
+
+
+
QCircuit<test>(21831 gates, 1036 qubits)
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_bqm_polynomial.html b/example_bqm_polynomial.html new file mode 100644 index 00000000..ad2bd0c2 --- /dev/null +++ b/example_bqm_polynomial.html @@ -0,0 +1,208 @@ + + + + + + + BQM Polynomial solver — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

BQM Polynomial solver

+
+
+
from qlasskit import qlassf, Qfixed
+
+
+@qlassf
+def poly(x: Qfixed[3, 3], y: Qfixed[3, 3]) -> Qfixed[3, 3]:
+    return x * 3 - y * 2 + 1.0
+
+
+poly.expressions
+
+
+
+
+
[(x0, ~(x.3 ^ x.4 ^ (x.4 & x.5))),
+ (x1, x0 & y.4),
+ (x2, x.3 & x.4),
+ (x3, x.4 & x.5 & (x.3 ^ x.4)),
+ (x4, ~(x.0 ^ x.3 ^ x2 ^ x3)),
+ (x5, ~(x.4 ^ x.5)),
+ (x6, x5 & y.5 & (x0 ^ y.4)),
+ (x7, x1 ^ x4 ^ x6 ^ y.3),
+ (x8, ~x7),
+ (x9, x4 & y.3),
+ (x10, x.0 & x.3),
+ (x11, (x.0 ^ x.3) & (x2 ^ x3)),
+ (x12, ~(x.0 ^ x.1 ^ x10 ^ x11)),
+ (x13, (x1 ^ x6) & (x4 ^ y.3)),
+ (x14, ~(x12 ^ x13 ^ x9 ^ y.0)),
+ (_ret.0, x7),
+ (_ret.1, x14 ^ x8),
+ (_ret.2,
+  (x14 & x8) ^ ~(y.1 ^ (x12 & y.0) ^ ((x12 ^ y.0) & (x13 ^ x9)) ^ ~(x.1 ^ x.2 ^ (x.0 & x.1) ^ ((x.0 ^ x.1) & (x10 ^ x11))))),
+ (_ret.3, ~(x0 ^ y.4 ^ (x5 & y.5))),
+ (_ret.4, ~(x5 ^ y.5)),
+ (_ret.5, x.5)]
+
+
+
+
+
+
+
bqm = poly.to_bqm()
+print("Vars:", bqm.num_variables, "\nInteractions:", bqm.num_interactions)
+
+
+
+
+
Vars: 127 
+Interactions: 1951
+
+
+
+
+
+
+
import neal
+from qlasskit.bqm import decode_samples
+
+sa = neal.SimulatedAnnealingSampler()
+sampleset = sa.sample(bqm, num_reads=10)
+decoded_samples = decode_samples(poly, sampleset)
+best_sample = min(decoded_samples, key=lambda x: x.energy)
+print(best_sample.sample)
+
+
+
+
+
{'x': 7.875, 'y': 7.375}
+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2023-2024, Davide Gessa (dakk).

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/example_bqm_tsp.html b/example_bqm_tsp.html new file mode 100644 index 00000000..7a72c63e --- /dev/null +++ b/example_bqm_tsp.html @@ -0,0 +1,205 @@ + + + + + + + TSP — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

TSP

+
+
+
# Encode the TSP using qlasskit and parameters
+
+from qlasskit import qlassf, Parameter, Qlist, Qmatrix, Qint
+
+
+@qlassf
+def tsp(
+    dst_matrix: Parameter[Qmatrix[Qint[4], 3, 3]], order: Qlist[Qint[2], 3]
+) -> Qint[6]:
+    dst_sum = Qint4(0)
+    assertion = False
+    
+    if sum(order) != 3:
+        assertion = True
+
+    for i in range(2):
+        oim = order[i]
+        oi = order[i + 1]
+        dst_sum += dst_matrix[oim][oi] if not assertion else 0xF
+    return dst_sum
+
+
+dst_matrix=[
+    [0xF, 1, 4], 
+    [1, 0xF, 1], 
+    [1, 1, 0xF]
+]
+tsp_f = tsp.bind(dst_matrix=dst_matrix)
+# tsp_f.expressions
+
+
+
+
+
+
+
bqm = tsp_f.to_bqm()
+print("Vars:", bqm.num_variables, "\nInteractions:", bqm.num_interactions)
+
+
+
+
+
Vars: 18 
+Interactions: 81
+
+
+
+
+
+
+
import neal
+from qlasskit.bqm import decode_samples
+
+sa = neal.SimulatedAnnealingSampler()
+sampleset = sa.sample(bqm, num_reads=10)
+decoded_samples = decode_samples(tsp_f, sampleset)
+best_sample = min(decoded_samples, key=lambda x: x.energy)
+print(best_sample.sample)
+
+
+
+
+
{'order': (2, 1, 0)}
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_deutsch_jozsa.html b/example_deutsch_jozsa.html new file mode 100644 index 00000000..438c61e2 --- /dev/null +++ b/example_deutsch_jozsa.html @@ -0,0 +1,202 @@ + + + + + + + Deutsch Jozsa algorithm — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Deutsch Jozsa algorithm

+
+
+
from qlasskit import qlassf, Qint
+
+
+@qlassf
+def f(a: Qint[4]) -> bool:
+    return a > 7
+
+
+
+
+
+
+
f.export("qiskit").draw("mpl")
+
+
+
+
+_images/e701c8c7d288b7c8b31d67bfd74640291b3169f82970a1c5a96fbc03e0bfef59.png +
+
+
+
+
from qlasskit.algorithms import DeutschJozsa
+
+q_algo = DeutschJozsa(f)
+
+
+
+
+
+
+
qc = q_algo.export("qiskit")
+qc.draw("mpl")
+
+
+
+
+_images/317b4a8fac0c5bc2bcd5ab20dd179c2a9240473def08b3ba93eb3b0d553781ea.png +
+
+
+
+
from qiskit import QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+from qiskit_aer import AerSimulator
+
+qc.measure_all()
+simulator = AerSimulator()
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts)
+plot_histogram(counts_readable)
+
+
+
+
+_images/5c37e1641175e805bd069b05b0507bee333663522ca9e04c1584a329607d7490.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover.html b/example_grover.html new file mode 100644 index 00000000..7458cc48 --- /dev/null +++ b/example_grover.html @@ -0,0 +1,212 @@ + + + + + + + Grover search — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ + + + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover_factors.html b/example_grover_factors.html new file mode 100644 index 00000000..7d7dd7ea --- /dev/null +++ b/example_grover_factors.html @@ -0,0 +1,188 @@ + + + + + + + Grover: factorize number — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Grover: factorize number

+
+
+
from typing import Tuple
+from qlasskit import qlassf, Qint
+from qlasskit.algorithms import Grover
+
+
+@qlassf
+def factorize(a: Tuple[Qint[2], Qint[2]]) -> bool:
+    return a[0] * a[1] == 9
+
+
+q_algo = Grover(factorize)
+
+
+
+
+
+
+
from qiskit import QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+from qiskit_aer import AerSimulator
+
+qc = q_algo.export("qiskit")
+qc.measure_all()
+simulator = AerSimulator()
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts, discard_lower=5)
+plot_histogram(counts_readable)
+
+
+
+
+_images/a056b3021724ac94b5d8671bfd9097e73add05704cfb48363ea95e2e450eadb5.png +
+
+
+
+
qc.draw("mpl")
+
+
+
+
+_images/a1154c255c589e0e4d1936fc4b97b314aad8947cab4b38c090c94fd12164d179.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover_hash.html b/example_grover_hash.html new file mode 100644 index 00000000..d85aab92 --- /dev/null +++ b/example_grover_hash.html @@ -0,0 +1,231 @@ + + + + + + + Grover search: hash function preimage attack — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Grover search: hash function preimage attack

+

In the ever-evolving landscape of cybersecurity, the advent of quantum computing presents both an extraordinary opportunity and an unprecedented challenge. In this notebook we exploit a Grover Search to perform a preimage attack on a toy hash function.

+

A preimage attack on a cryptographic hash function h(m) tries to find a message m that has a specific hash value. Using qlasskit it is easy to write an hash function like the following hash_simp:

+
+
+
from qlasskit import qlassf, Qint, Qint8, Qlist
+
+
+@qlassf
+def hash_simp(m: Qlist[Qint[4], 2]) -> Qint[8]:
+    hv = 0
+    for i in m:
+        hv = ((hv << 4) ^ (hv >> 1) ^ i) & 0xFF
+
+    return hv
+
+
+
+
+

Thanks to the fact that qlasskit function are standard python functions, we can call the original_f to perform some kind of analysis on the hash function. Since the input space is tiny (it is a toy hash function), we can detect if the hash function is uniform (if it maps equally to the output space).

+
+
+
from collections import Counter
+
+d = Counter(hex(hash_simp.original_f((x, y))) for x in range(2**4) for y in range(2**4))
+
+print("Hash function output space:", len(d))
+
+
+
+
+
Hash function output space: 256
+
+
+
+
+

We got that hash_simp is following an uniform distribution.

+
+
+
hash_simp.export("qiskit").draw("mpl")
+
+
+
+
+_images/e74cc1e022296f53ce2cd1099f078f7715eebe81e2ffa3bbedb069c9a35398dd.png +
+
+

Now we use our quantum function as an oracle for a Grover search, in order to find which input maps to the value 0xca.

+
+
+
from qlasskit.algorithms import Grover
+
+q_algo = Grover(hash_simp, Qint8(0xCA))
+
+
+
+
+

Then we use our prefered framework and simulator for sampling the result; this is an example using qiskit with aer_simulator.

+
+
+
from qiskit import QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+from qiskit_aer import AerSimulator
+
+qc = q_algo.export("qiskit")
+qc.measure_all()
+simulator = AerSimulator()
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts, discard_lower=5)
+plot_histogram(counts_readable)
+
+
+
+
+_images/f136ea25a6a1c5e568142875d165f98fbe43f5c4323eadeafad237a185d8ca93.png +
+
+

Using QlassF.original_f we can double check the result without invoking a quantum simulator; calling it with the tuple (12,12) must result in the hash value 0xca.

+
+
+
print(hex(hash_simp.original_f((12, 12))))
+
+
+
+
+
0xca
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover_subset.html b/example_grover_subset.html new file mode 100644 index 00000000..84efd89b --- /dev/null +++ b/example_grover_subset.html @@ -0,0 +1,189 @@ + + + + + + + Grover search: subset problem — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Grover search: subset problem

+

We define a function named subset_sum(i,j) that returns the sum of the elements i and j of a list set_. We want to use a Grover search to find which i j combination led to a given value.

+
+
+
from qlasskit import qlassf, Qint, Qint3, Qlist, Parameter
+from typing import Tuple
+
+
+@qlassf
+def subset_sum(
+    ii: Tuple[Qint[2], Qint[2]], set_: Parameter[Qlist[Qint3, 4]]
+) -> Qint[3]:
+    return set_[ii[0]] + set_[ii[1]] if ii[0] != ii[1] else 0
+
+
+
+
+

Our quantum function subset_sum will be used as an oracle for a Grover search. For instance, here we want to find the input value that produce the value 7. Since we know that there are at least two result ((i,j) and (j,i)), we set n_matching=2. We also bind the parameter set_ with the set of numbers where we want to search the solution.

+
+
+
from qlasskit.algorithms import Grover
+
+q_algo = Grover(subset_sum.bind(set_=[0, 5, 2, 3]), Qint3(7), n_matching=2)
+
+
+
+
+

Then we use our prefered framework and simulator for sampling the result; this is an example using qiskit with aer_simulator.

+

In the output histogram, it’s now evident that the input leading to a value of 7 are the tuples (1,2) and (2,1) (5+2 and 2+5), aligning with our expectations.

+
+
+
from qiskit import QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+from qiskit_aer import AerSimulator
+
+qc = q_algo.export("qiskit")
+qc.measure_all()
+simulator = AerSimulator()
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts)
+plot_histogram(counts_readable)
+
+
+
+
+_images/ad35bf91a8374681d3e8c22fb6a31f69e9e6518f1478a6054e776c29ee27b211.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover_sudoku.html b/example_grover_sudoku.html new file mode 100644 index 00000000..6b20f9db --- /dev/null +++ b/example_grover_sudoku.html @@ -0,0 +1,254 @@ + + + + + + + Grover search: sudoku solver — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Grover search: sudoku solver

+

In this example we are going to solve a sudoku puzzle. Since we have few qubits, we cannot solve a real 9x9 sudoku puzzle; our toy examples uses a 2x2 matrix where a valid solution is when in every row and every column there are no repeated values (0 or 1). We encode these xor-ing the values for each row and column. +Since we want a specific solution, we add a constraint constr: we want the [0][0] element to be True.

+

sudoku_check is already an oracle so we can instantiate the Grover algorithm without value.

+
+
+
from qlasskit import qlassf, Qmatrix
+from qlasskit.algorithms import Grover
+
+
+@qlassf
+def sudoku_check(m: Qmatrix[bool, 2, 2]) -> bool:
+    constr = m[0][0]
+    sub0 = m[0][0] ^ m[0][1]
+    sub1 = m[1][0] ^ m[1][1]
+    sub2 = m[0][0] ^ m[1][0]
+    sub3 = m[0][1] ^ m[1][1]
+    return sub0 and sub1 and sub2 and sub3 and constr
+
+
+q_algo = Grover(sudoku_check)
+
+
+
+
+

Then we use our prefered framework and simulator for sampling the result; this is an example using qiskit with aer_simulator.

+

We obtain that the solution for this puzzle is the matrix [[True, False], [False, True]].

+
+
+
from qiskit import QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+from qiskit_aer import AerSimulator
+
+qc = q_algo.export("qiskit")
+qc.measure_all()
+simulator = AerSimulator()
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts, discard_lower=20)
+
+plot_histogram(counts_readable)
+
+
+
+
+_images/cf4aae3eb9d9826b4e5fe76c28059345d7d992a93d8d58ea268d206cb1d8f981.png +
+
+

We can exploit matplotlib for drawing the result sudoku matrix as follows:

+
+
+
import matplotlib.pyplot as plt
+
+
+def draw_matrix(matrix):
+    fig, ax = plt.subplots()
+    ax.matshow(matrix, cmap="viridis")
+
+    for i in range(len(matrix)):
+        for j in range(len(matrix[0])):
+            ax.text(
+                j,
+                i,
+                str(matrix[i][j]),
+                va="center",
+                ha="center",
+                fontsize=12,
+                color="black",
+            )
+
+    plt.show()
+
+
+m_res = list(filter(lambda x: x[1] > 500, counts_readable.items()))[0][0]
+draw_matrix(m_res)
+
+
+
+
+_images/23765ce2dceda23c652d4690e559278bbbcbf48bed62ae08c66b1d06767614c4.png +
+
+

We can create a more realistic sudoku game using numbers instead of booleans, but the resources required will scale exponentially. In the following code snippets, we recreate sudoku_check using Qint[2] and a 4x4 matrix. The sum of each column and row must be equal to 6 (3+2+1+0). As we can see, the resulting circuit of the checker requires more than 100 qubits, way above our simulation capabilities.

+
+
+
from qlasskit import Qint, Qint4
+
+
+@qlassf
+def sudoku_check(m: Qmatrix[Qint[2], 4, 4]) -> bool:
+    res = True
+
+    # Constraints
+    res = (m[0][2] == 3) and (m[0][0] == 1)
+
+    # Check every row and column
+    for i in range(4):
+        c = (Qint4(0) + m[i][0] + m[i][1] + m[i][2] + m[i][3]) == 6
+        r = (Qint4(0) + m[0][i] + m[1][i] + m[2][i] + m[3][i]) == 6
+        res = res and c and r
+
+    return res
+
+
+print(sudoku_check.circuit())
+
+
+
+
+
QCircuit<sudoku_check>(1309 gates, 178 qubits)
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_simon.html b/example_simon.html new file mode 100644 index 00000000..300ad690 --- /dev/null +++ b/example_simon.html @@ -0,0 +1,202 @@ + + + + + + + Simon function periodicity — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Simon function periodicity

+
+
+
from qlasskit import qlassf, Qint
+
+
+@qlassf
+def f(a: Qint[4]) -> Qint[4]:
+    return (a >> 3) + 1
+
+
+
+
+
+
+
f.export("qiskit").draw("mpl")
+
+
+
+
+_images/4502fb99b0b62a89285bf5856a32dbf7264a0322771aaf5ee33a084aaa9e9167.png +
+
+
+
+
from qlasskit.algorithms import Simon
+
+q_algo = Simon(f)
+
+
+
+
+
+
+
qc = q_algo.export("qiskit")
+qc.draw("mpl")
+
+
+
+
+_images/fb5ffd2c19f4003e4c45d4b0d46226c60255334a56fc579013eeac5c4c9a29a8.png +
+
+
+
+
from qiskit import QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+from qiskit_aer import AerSimulator
+
+qc.measure_all()
+simulator = AerSimulator()
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts)
+plot_histogram(counts_readable)
+
+
+
+
+_images/eea1152a92a8945a7719dd6b12beb892cf9e185f4f75aadc434c540509580588.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_unitary_of_f.html b/example_unitary_of_f.html new file mode 100644 index 00000000..f2d1f8fa --- /dev/null +++ b/example_unitary_of_f.html @@ -0,0 +1,196 @@ + + + + + + + Unitary of qlasskit function — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Unitary of qlasskit function

+

In qlasskit, we can exploit external low-level frameworks to perform operations on the resulting quantum circuit. In this example, we use qiskit in order to obtain the unitary matrix of our QlassF function.

+
+
+
from qiskit import QuantumCircuit, transpile
+from qiskit_aer import AerSimulator
+from qiskit.visualization import array_to_latex
+from qlasskit import qlassf
+
+
+@qlassf
+def f(a: bool, b: bool) -> bool:
+    return a ^ (not b)
+
+
+print(f"\n{f}\n")
+
+qc = QuantumCircuit(f.num_qubits, f.num_qubits)
+qc.append(f.gate(), f.qubits)
+
+qc.save_state()
+qc.decompose().draw("mpl")
+
+
+
+
+
QlassF<f>(a:bool, b:bool) -> bool:
+	_ret = a ^ ~b
+
+
+_images/c7d04b10d56938794e94628eaa66357bee167db80983c3bb53291d7d04661f70.png +
+
+
+
+
simulator = AerSimulator(method="unitary")
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+array_to_latex(result.get_unitary(circ, 3), max_size=16)
+
+
+
+
+
+\[\begin{split}\begin{bmatrix} +0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ + 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ + 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ + 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ + \end{bmatrix} +\end{split}\]
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/exporter.html b/exporter.html new file mode 100644 index 00000000..4a95d4f4 --- /dev/null +++ b/exporter.html @@ -0,0 +1,268 @@ + + + + + + + Exporting to other frameworks — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Exporting to other frameworks

+

Qlasskit implements circuit / gate exporters for Qiskit, Cirq, Qasm, Sympy and Pennylane.

+
+
+
from qlasskit import Qint, qlassf
+
+
+@qlassf
+def hello_world(a: bool, b: Qint[2]) -> Qint[2]:
+    return b + (1 if a else 0)
+
+
+
+
+
+

Qiskit

+
+
+
qc = hello_world.export("qiskit")
+qc.draw("mpl")
+
+
+
+
+_images/da85ccdadfc65e79823ec5a7fc70b3b6b00b858a049aa91045f7704195a4891b.png +
+
+
+
+

QASM

+
+
+
qc = hello_world.export("qasm")
+print(qc)
+
+
+
+
+
OPENQASM 3.0;
+
+gate hello_world a b.0 b.1 _ret.0 _ret.1 {
+	cx a _ret.0
+	cx b.0 _ret.0
+	cx b.1 _ret.1
+	ccx a b.0 _ret.1
+}
+
+hello_world q[0],q[1],q[2],q[3],q[4];
+
+
+
+
+
+
+

Cirq

+
+
+
import cirq
+
+qc = hello_world.export("cirq")
+qc
+
+
+
+
+
0: ───hello_world───
+      │
+1: ───hello_world───
+      │
+2: ───hello_world───
+      │
+3: ───hello_world───
+      │
+4: ───hello_world───
+
+
+
+

Pennylane

+
+
+
import pennylane as qml
+
+tape = hello_world.export("pennylane")
+tape
+
+
+
+
+
<QuantumTape: wires=[0, 3, 1, 2, 4], params=0>
+
+
+
+
+
+
+

Sympy

+
+
+
qc = hello_world.export("sympy")
+qc
+
+
+
+
+
+\[\displaystyle C_{0,1}{\left(X_{4}\right)} \text{CNOT}_{2,4} \text{CNOT}_{1,3} \text{CNOT}_{0,3} {\left|00000\right\rangle }\]
+
+
+
+
+

Qutip

+
+
+
# Disabled on docs for a depencency problem
+# qc = hello_world.export("qutip")
+# qc.gates
+
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa.html b/generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa.html new file mode 100644 index 00000000..65a844b5 --- /dev/null +++ b/generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa.html @@ -0,0 +1,236 @@ + + + + + + + qlasskit.algorithms.deutschjozsa.DeutschJozsa — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.algorithms.deutschjozsa.DeutschJozsa

+
+
+class qlasskit.algorithms.deutschjozsa.DeutschJozsa(f: QlassF)
+
+
+__init__(f: QlassF)
+
+
Parameters:
+

f (QlassF) – our f(x) -> bool

+
+
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(f)

+
param f:
+

our f(x) -> bool

+
+
+

circuit()

decode_counts(counts[, discard_lower])

Decode data from a circuit counts dict

decode_output(istr)

draw()

encode_input(*qvals)

export([framework])

Export the circuit to a supported framework

gate([framework])

Returns the gate for a specific framework

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + +

input_qubits

Returns the list of input qubits

input_size

num_gates

num_qubits

output_qubits

Returns the list of output qubits

output_size

qubits

Returns all the qubits of the circuit

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.algorithms.grover.Grover.html b/generated/qlasskit.algorithms.grover.Grover.html new file mode 100644 index 00000000..9f7af1ad --- /dev/null +++ b/generated/qlasskit.algorithms.grover.Grover.html @@ -0,0 +1,243 @@ + + + + + + + qlasskit.algorithms.grover.Grover — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.algorithms.grover.Grover

+
+
+class qlasskit.algorithms.grover.Grover(oracle: QlassF, element_to_search: Qtype | None = None, n_iterations: int | None = None, n_matching: int = 1)
+
+
+__init__(oracle: QlassF, element_to_search: Qtype | None = None, n_iterations: int | None = None, n_matching: int = 1)
+
+
Parameters:
+
    +
  • oracle (QlassF) – our f(x) -> bool that returns True if x satisfies the function or +a generic function f(x) = y that we want to compare with element_to_search

  • +
  • element_to_search (Qtype, optional) – the element we want to search

  • +
  • n_iterations (int, optional) – force a number of iterations +(otherwise, pi/4*sqrt(N/n_matching))

  • +
  • n_matching (int) – the number of expected matching values (default: 1)

  • +
+
+
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(oracle[, element_to_search, ...])

+
param oracle:
+

our f(x) -> bool that returns True if x satisfies the function or

+
+
+

circuit()

decode_counts(counts[, discard_lower])

Decode data from a circuit counts dict

decode_output(istr)

draw()

encode_input(*qvals)

export([framework])

Export the circuit to a supported framework

gate([framework])

Returns the gate for a specific framework

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + +

input_qubits

Returns the list of input qubits

input_size

num_gates

num_qubits

output_qubits

Returns the list of output qubits

output_size

qubits

Returns all the qubits of the circuit

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.algorithms.qalgorithm.html b/generated/qlasskit.algorithms.qalgorithm.html new file mode 100644 index 00000000..ce396476 --- /dev/null +++ b/generated/qlasskit.algorithms.qalgorithm.html @@ -0,0 +1,179 @@ + + + + + + + qlasskit.algorithms.qalgorithm — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.algorithms.qalgorithm

+

Functions

+ + + + + + +

oraclize(qf, element[, name])

Transform a QlassF qf and an element to an oracle {f(x) = x == element}

+

Classes

+ + + + + + +

QAlgorithm()

+

Exceptions

+ + + + + + +

ConstantOracleException

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.algorithms.simon.Simon.html b/generated/qlasskit.algorithms.simon.Simon.html new file mode 100644 index 00000000..0be8996d --- /dev/null +++ b/generated/qlasskit.algorithms.simon.Simon.html @@ -0,0 +1,236 @@ + + + + + + + qlasskit.algorithms.simon.Simon — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.algorithms.simon.Simon

+
+
+class qlasskit.algorithms.simon.Simon(f: QlassF)
+
+
+__init__(f: QlassF)
+
+
Parameters:
+

f (QlassF) – our f(x)

+
+
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(f)

+
param f:
+

our f(x)

+
+
+

circuit()

decode_counts(counts[, discard_lower])

Decode data from a circuit counts dict

decode_output(istr)

draw()

encode_input(*qvals)

export([framework])

Export the circuit to a supported framework

gate([framework])

Returns the gate for a specific framework

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + +

input_qubits

Returns the list of input qubits

input_size

num_gates

num_qubits

output_qubits

Returns the list of output qubits

output_size

qubits

Returns all the qubits of the circuit

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.bqm.decode_samples.html b/generated/qlasskit.bqm.decode_samples.html new file mode 100644 index 00000000..22d17fff --- /dev/null +++ b/generated/qlasskit.bqm.decode_samples.html @@ -0,0 +1,164 @@ + + + + + + + qlasskit.bqm.decode_samples — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/generated/qlasskit.decompiler.Decompiler.html b/generated/qlasskit.decompiler.Decompiler.html new file mode 100644 index 00000000..a9af5452 --- /dev/null +++ b/generated/qlasskit.decompiler.Decompiler.html @@ -0,0 +1,182 @@ + + + + + + + qlasskit.decompiler.Decompiler — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.decompiler.Decompiler

+
+
+class qlasskit.decompiler.Decompiler
+
+
+__init__()
+
+ +

Methods

+ + + + + + + + + +

__init__()

decompile(qc)

Decompile a quantum circuit, searching for circuit sections that apply transformations on the z-basis on the same qubits, and return boolean expressions representing them

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qcircuit.gates.html b/generated/qlasskit.qcircuit.gates.html new file mode 100644 index 00000000..e20e1f09 --- /dev/null +++ b/generated/qlasskit.qcircuit.gates.html @@ -0,0 +1,225 @@ + + + + + + + qlasskit.qcircuit.gates — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qcircuit.gates

+

Functions

+ + + + + + +

apply(gate, qubits[, param])

+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Barrier()

CCX()

CP()

CX()

H()

I()

MCX(n_controls)

MCtrl(gate, n_controls)

NopGate([name])

P()

QControlledGate(gate, n_controls)

QGate(name[, n_qubits])

S()

Swap()

T()

Toffoli

alias of CCX

X()

Y()

Z()

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qcircuit.qcircuit.QCircuit.html b/generated/qlasskit.qcircuit.qcircuit.QCircuit.html new file mode 100644 index 00000000..0e616188 --- /dev/null +++ b/generated/qlasskit.qcircuit.qcircuit.QCircuit.html @@ -0,0 +1,268 @@ + + + + + + + qlasskit.qcircuit.qcircuit.QCircuit — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qcircuit.qcircuit.QCircuit

+
+
+class qlasskit.qcircuit.qcircuit.QCircuit(num_qubits=0, name='qc', native=None)
+
+
+__init__(num_qubits=0, name='qc', native=None)
+

Initialize a quantum circuit.

+
+
Parameters:
+

num_qubits (int, optional) – The number of qubits in the circuit. Defaults to 0.

+
+
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__([num_qubits, name, native])

Initialize a quantum circuit.

add_qubit([name])

Add a qubit to the circuit.

append(gate, qubits[, param])

Append a gate operation to the circuit.

append_circuit(other[, qubits])

Add a qcircuit, remapping to qubits

barrier([label])

Add a barrier to the circuit

ccx(w1, w2, w3)

CCX gate

copy([vanilla])

Create a copy of the quantum circuit; if vanilla is True, reset all mapping info

cp(phase, w1, w2)

CP gate

cx(w1, w2)

CX gate

draw()

Draw the circuit

export([mode, framework])

Exports the circuit to another framework.

get_key_by_index(i)

Return the qubit name given its index

h(w)

H gate

iqft(wl)

Apply the inverse quantum fourier transform

mctrl(g, wl, target[, param])

Multi controlled gate

mcx(wl, target)

Multi CX gate

qft(wl)

Apply the quantum fourier transform

random(qubits_n, depth[, gate_list])

repeat(n)

Return a copy of the QCircuit repeated n times

s(w)

S gate

swap(w1, w2)

t(w)

T gate

x(w)

X gate

y(w)

Y gate

z(w)

Z gate

+

Attributes

+ + + + + + + + + +

num_gates

used_qubits

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.html b/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.html new file mode 100644 index 00000000..cc2623bc --- /dev/null +++ b/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.html @@ -0,0 +1,227 @@ + + + + + + + qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper

+
+
+class qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper
+

Wrapper interface for a class containing a qcircuit

+
+
+__init__()
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__()

circuit()

decode_counts(counts[, discard_lower])

Decode data from a circuit counts dict

decode_output(istr)

draw()

encode_input(*qvals)

export([framework])

Export the circuit to a supported framework

gate([framework])

Returns the gate for a specific framework

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + +

input_qubits

Returns the list of input qubits

input_size

num_gates

num_qubits

output_qubits

Returns the list of output qubits

output_size

qubits

Returns all the qubits of the circuit

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qlassfun.QlassF.html b/generated/qlasskit.qlassfun.QlassF.html new file mode 100644 index 00000000..ee016b0e --- /dev/null +++ b/generated/qlasskit.qlassfun.QlassF.html @@ -0,0 +1,266 @@ + + + + + + + qlasskit.qlassfun.QlassF — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qlassfun.QlassF

+
+
+class qlasskit.qlassfun.QlassF(name: str, original_f: Callable, args: List[Arg], returns: Arg, exps: List[Tuple[Symbol, Boolean]])
+

Class representing a qlassf function

+
+
+__init__(name: str, original_f: Callable, args: List[Arg], returns: Arg, exps: List[Tuple[Symbol, Boolean]])
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(name, original_f, args, returns, exps)

bind(**kwargs)

Returns a new QlassF with defined params

circuit()

compile([compiler, uncompute])

decode_counts(counts[, discard_lower])

Decode data from a circuit counts dict

decode_output(istr)

draw()

encode_input(*qvals)

export([framework])

Export the circuit to a supported framework

f()

Returns the classical python function

from_function(f[, types, defs, to_compile, ...])

Create a QlassF from a function or a string containing a function

gate([framework])

Returns the gate for a specific framework

to_bqm([fmt])

to_logicfun()

truth_table([max])

Returns the truth table for the function using the sympy boolean for computing

truth_table_header()

Returns the list of string containing the truth table header

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

input_qubits

Returns the list of input qubits

input_size

num_gates

num_qubits

output_qubits

Returns the list of output qubits

output_size

Return the size of the return type (in bits)

qubits

Returns all the qubits of the circuit

name

original_f

args

returns

expressions

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qlassfun.qlassf.html b/generated/qlasskit.qlassfun.qlassf.html new file mode 100644 index 00000000..05d474b2 --- /dev/null +++ b/generated/qlasskit.qlassfun.qlassf.html @@ -0,0 +1,179 @@ + + + + + + + qlasskit.qlassfun.qlassf — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qlassfun.qlassf

+
+
+qlasskit.qlassfun.qlassf(f: str | ~typing.Callable, types: ~typing.List[~qlasskit.types.qtype.Qtype] = [], defs: ~typing.List[~qlasskit.qlassfun.QlassF] = [], to_compile: bool = True, compiler: ~typing.Literal['internal', 'recompiler', 'tweedledum'] = 'internal', bool_optimizer: ~qlasskit.boolopt.bool_optimizer.BoolOptimizerProfile = <qlasskit.boolopt.bool_optimizer.BoolOptimizerProfile object>, uncompute: bool = True) QlassF | UnboundQlassf
+

Decorator / function creating a QlassF object

+
+
Parameters:
+
    +
  • f (Union[str, Callable]) – the function to be parsed, as a str code or callable

  • +
  • types (List[Qtype]) – list of qtypes to inject

  • +
  • defs (List[Qlassf]) – list of qlassf to inject

  • +
  • to_compile (boolean, optional) – if True, compile to quantum circuit (default: True)

  • +
  • compiler (SupportedCompiler, optional) – override default compiler (default: internal)

  • +
  • bool_optimizer (BoolOptimizerProfile, optional) – override default optimizer +(default: defaultOptimizer)

  • +
  • uncompute (bool, optional) – whenever uncompute input qubits during compilation +(default: True)

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qlassfun.qlassfa.html b/generated/qlasskit.qlassfun.qlassfa.html new file mode 100644 index 00000000..413a122f --- /dev/null +++ b/generated/qlasskit.qlassfun.qlassfa.html @@ -0,0 +1,164 @@ + + + + + + + qlasskit.qlassfun.qlassfa — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qlassfun.qlassfa

+
+
+qlasskit.qlassfun.qlassfa(types: ~typing.List[~qlasskit.types.qtype.Qtype] = [], defs: ~typing.List[~qlasskit.qlassfun.QlassF] = [], to_compile: bool = True, compiler: ~typing.Literal['internal', 'recompiler', 'tweedledum'] = 'internal', bool_optimizer: ~qlasskit.boolopt.bool_optimizer.BoolOptimizerProfile = <qlasskit.boolopt.bool_optimizer.BoolOptimizerProfile object>, uncompute: bool = True)
+

Decorator with parameters for qlassf

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.types.html b/generated/qlasskit.types.html new file mode 100644 index 00000000..0182a1e8 --- /dev/null +++ b/generated/qlasskit.types.html @@ -0,0 +1,211 @@ + + + + + + + qlasskit.types — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.types

+

Functions

+ + + + + + + + + + + + + + + +

const_to_qtype(value)

format_outcome(out[, out_len])

interpret_as_qtype(out, qtype[, out_len])

type_repr(typ)

+

Modules

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

qlasskit.types.parameter

qlasskit.types.qbool

qlasskit.types.qchar

qlasskit.types.qfixed

qlasskit.types.qint

qlasskit.types.qlist

qlasskit.types.qmatrix

qlasskit.types.qtype

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.types.parameter.html b/generated/qlasskit.types.parameter.html new file mode 100644 index 00000000..5e380553 --- /dev/null +++ b/generated/qlasskit.types.parameter.html @@ -0,0 +1,177 @@ + + + + + + + qlasskit.types.parameter — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.types.parameter

+

Classes

+ + + + + + + + + +

Parameter()

ParameterMeta

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.types.qbool.html b/generated/qlasskit.types.qbool.html new file mode 100644 index 00000000..fb984690 --- /dev/null +++ b/generated/qlasskit.types.qbool.html @@ -0,0 +1,174 @@ + + + + + + + qlasskit.types.qbool — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.types.qbool

+

Classes

+ + + + + + +

Qbool()

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.types.qchar.html b/generated/qlasskit.types.qchar.html new file mode 100644 index 00000000..157428f2 --- /dev/null +++ b/generated/qlasskit.types.qchar.html @@ -0,0 +1,174 @@ + + + + + + + qlasskit.types.qchar — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.types.qchar

+

Classes

+ + + + + + +

Qchar(value)

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.types.qfixed.html b/generated/qlasskit.types.qfixed.html new file mode 100644 index 00000000..620bea3c --- /dev/null +++ b/generated/qlasskit.types.qfixed.html @@ -0,0 +1,219 @@ + + + + + + + qlasskit.types.qfixed — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.types.qfixed

+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Qfixed()

Qfixed1_2(value)

Qfixed1_3(value)

Qfixed1_4(value)

Qfixed1_6(value)

Qfixed2_2(value)

Qfixed2_3(value)

Qfixed2_4(value)

Qfixed2_6(value)

Qfixed3_3(value)

Qfixed3_4(value)

Qfixed3_6(value)

Qfixed4_4(value)

Qfixed4_6(value)

QfixedImp(value)

Implementation of the Qfixed type A number i.f is encoded in a Qfixed2_4 as iiffff.

QfixedMeta

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.types.qint.html b/generated/qlasskit.types.qint.html new file mode 100644 index 00000000..08311e92 --- /dev/null +++ b/generated/qlasskit.types.qint.html @@ -0,0 +1,207 @@ + + + + + + + qlasskit.types.qint — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.types.qint

+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Qint()

Qint12(value)

Qint16(value)

Qint2(value)

Qint3(value)

Qint4(value)

Qint5(value)

Qint6(value)

Qint7(value)

Qint8(value)

QintImp(value)

QintMeta

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.types.qlist.html b/generated/qlasskit.types.qlist.html new file mode 100644 index 00000000..94f06be6 --- /dev/null +++ b/generated/qlasskit.types.qlist.html @@ -0,0 +1,177 @@ + + + + + + + qlasskit.types.qlist — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.types.qlist

+

Classes

+ + + + + + + + + +

Qlist()

QlistMeta

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.types.qmatrix.html b/generated/qlasskit.types.qmatrix.html new file mode 100644 index 00000000..35a8565c --- /dev/null +++ b/generated/qlasskit.types.qmatrix.html @@ -0,0 +1,177 @@ + + + + + + + qlasskit.types.qmatrix — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.types.qmatrix

+

Classes

+ + + + + + + + + +

Qmatrix()

QmatrixMeta

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.types.qtype.html b/generated/qlasskit.types.qtype.html new file mode 100644 index 00000000..35da81e5 --- /dev/null +++ b/generated/qlasskit.types.qtype.html @@ -0,0 +1,193 @@ + + + + + + + qlasskit.types.qtype — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.types.qtype

+

Functions

+ + + + + + + + + +

bin_to_bool_list(b[, bit_size])

bool_list_to_bin(b_lst)

+

Classes

+ + + + + + +

Qtype()

+

Exceptions

+ + + + + + +

TypeErrorException(got, excepted)

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 00000000..95a23ca6 --- /dev/null +++ b/genindex.html @@ -0,0 +1,321 @@ + + + + + + Index — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ _ + | D + | G + | M + | Q + | S + +
+

_

+ + +
+ +

D

+ + + +
+ +

G

+ + +
+ +

M

+ + +
+ +

Q

+ + + +
    +
  • + qlasskit.types.qbool + +
  • +
  • + qlasskit.types.qchar + +
  • +
  • + qlasskit.types.qfixed + +
  • +
  • + qlasskit.types.qint + +
  • +
  • + qlasskit.types.qlist + +
  • +
  • + qlasskit.types.qmatrix + +
  • +
  • + qlasskit.types.qtype + +
  • +
+ +

S

+ + +
+ + + +
+
+
+ +
+ +
+

© Copyright 2023-2024, Davide Gessa (dakk).

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/how_it_works.html b/how_it_works.html new file mode 100644 index 00000000..ec97df9f --- /dev/null +++ b/how_it_works.html @@ -0,0 +1,273 @@ + + + + + + + How it works — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

How it works

+

To convert Python code into a quantum circuit, qlasskit implements a series of transformations:

+
    +
  1. It begins with the Python AST (Abstract Syntax Tree), converting it into a more streamlined form using the ast2ast module.

  2. +
  3. Next, the streamlined AST is translated into boolean expressions as an intermediate step by the ast2logic module. +During this phase, boolean expressions are refined and optimized in preparation for the final transformation.

  4. +
  5. Finally, the compiler module takes these optimized boolean expressions and compiles them into a +quantum circuit.

  6. +
+

Unlike other libraries that translate individual operations into quantum circuits before combining them, +qlasskit constructs a single boolean expression for each output qubit of the entire function. +This unique approach facilitates advanced optimization leveraging boolean algebraic properties.

+

Transformations

+

For instance, let assume we have the following function:

+
+
+
from qlasskit import qlassf, Qint
+from qiskit import QuantumCircuit
+
+
+@qlassf
+def f_comp(b: bool, n: Qint[2]) -> Qint[2]:
+    for i in range(3):
+        n += 1 if b else 2
+    return n
+
+
+
+
+

If we decompose the algorithm in 3 separate additions and we compile them separately, we obtain the following circuit:

+
+
+
@qlassf
+def f1(b: bool, n: Qint[2]) -> Qint[2]:
+    return n + (1 if b else 2)
+
+
+qc = QuantumCircuit(f_comp.num_qubits * 2 - 1)
+
+for i in range(3):
+    qc.barrier(label=f"it_{i}")
+    qc.append(f1.gate(), [0] + list(range(1 + i * 2, 5 + i * 2)))
+
+print("Operations:", qc.decompose().count_ops())
+qc.decompose().draw("mpl")
+
+
+
+
+
Operations: OrderedDict([('cx', 12), ('barrier', 3), ('x', 3), ('ccx', 3)])
+
+
+_images/5b50037dd2c0a981ffc361d45ac7e20ede9efca0e92c747457be1727c64ae36b.png +
+
+

While if we compile the whole function to a quantum circuit using qlasskit, we obtain the following quantum circuit:

+
+
+
qc = QuantumCircuit(f_comp.num_qubits)
+qc.append(f_comp.gate(), f_comp.qubits)
+
+print("Operations:", qc.decompose().count_ops())
+qc.decompose().draw("mpl")
+
+
+
+
+
Operations: OrderedDict([('cx', 4), ('x', 1), ('ccx', 1)])
+
+
+_images/f3e9cd6f4bfc037a2c61c72684f180e5ae89c4a01198673478cc56fb746c1be7.png +
+
+

As we can see from the circuit drawings, qlasskit approach needs half the number of qubits and half the number of gates.

+
+

AST Traslator

+

Given a python function, the qlasskit.ast2logic module walks its syntax tree translating all the statements / +expressions to boolean expressions.

+

For instance, the following function:

+
+
+
@qlassf
+def f(n: Qint[4]) -> bool:
+    return n == 3
+
+
+
+
+

Is translated to this boolean expression:

+
+
+
print(f.expressions)
+
+
+
+
+
[(_ret, n.0 & n.1 & ~n.2 & ~n.3)]
+
+
+
+
+
+
+

Compiler

+

The boolean expressions are then being fed to the `qlasskit.compiler`` which compiles boolean expressions +to invertible circuits, introducing auxiliary qubits. In this step, the compiler will automatically uncompute +auxiliary qubits in order to reduce the number of qubits needed and the circuit footprint.

+

For the compilation, two backends are supported:

+
    +
  • InternalCompiler

  • +
  • Tweedledum.xag_synth

  • +
+
+
+

Result

+

The result of the compiler is a quantum circuit represented with qlasskit QCircuit. This circuit +can now be exported to one of the supported framework as a gate or as a standalone circuit.

+

The previous example function f, is translated to the following quantum circuit: the +result is available at qubit q6.

+
+
+
f.export().draw("mpl")
+
+
+
+
+_images/816fddadcdd0ee15c32e424045ea5f4d76f6b0add32f18cce0949ecf40028a30.png +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..936c15a6 --- /dev/null +++ b/index.html @@ -0,0 +1,250 @@ + + + + + + + Qlasskit — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Qlasskit

+GitHub Repository +Unitary Fund +CI Status +PyPI - Version +License: Apache 2.0 +Discord +Codacy Badge +Downloads +

Qlasskit is a Python library that allows quantum developers to write classical algorithms in pure +Python and translate them into unitary operators (gates) for use in quantum circuits supporting a wide +range of quantum frameworks.

+

Qlasskit also support exporting to Binary Quadratic Models (bqm, ising and qubo) ready to be used in +quantum annealers, ising machines, simulators, etc.

+ + +
+
+

Indices and tables

+ +
+
+

Cite

+
@software{qlasskit2023,
+  author = {Davide Gessa},
+  title = {qlasskit: a python-to-quantum circuit compiler},
+  url = {https://github.com/dakk/qlasskit},
+  year = {2023},
+}
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 00000000..1a537311 Binary files /dev/null and b/objects.inv differ diff --git a/parameters.html b/parameters.html new file mode 100644 index 00000000..f2d15a5e --- /dev/null +++ b/parameters.html @@ -0,0 +1,200 @@ + + + + + + + Parameters — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Parameters

+

Qlasskit allow to create qlassf function with parameters. Those parameters are not free variables of the final circuit, and need to be bound before compilation.

+

In the next example we define test with a parameter a; after binding the parameter a to True, the final function expression will be b.

+
+
+
from qlasskit import qlassf, Parameter
+
+
+@qlassf
+def test(a: Parameter[bool], b: bool) -> bool:
+    return a and b
+
+
+qf = test.bind(a=True)
+qf.expressions
+
+
+
+
+
[(_ret, b)]
+
+
+
+
+

Parameterizable qlassf also supports custom types, and complex types like Qlist and Qtuple.

+
+
+
from qlasskit import Qlist, Qint, Qint4
+
+
+@qlassf
+def test(a: Parameter[Qlist[Qint[2], 4]], b: Qint[4]) -> Qint[4]:
+    s = Qint4(0)
+    for n in a:
+        s += n
+    return s + b
+
+
+qf = test.bind(a=[2, 1, 0, 3])
+qf.expressions
+
+
+
+
+
[(_ret.0, b.0),
+ (_ret.1, ~b.1),
+ (_ret.2, ~(b.1 ^ b.2)),
+ (_ret.3, b.2 ^ b.3 ^ (b.1 & ~b.2))]
+
+
+
+
+
+
+
qf.circuit().export().draw("mpl")
+
+
+
+
+_images/d104916566a99e2da51900e9162fefb55e749ecadff8c23ba5799ed5707897f0.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/py-modindex.html b/py-modindex.html new file mode 100644 index 00000000..ec2b7db5 --- /dev/null +++ b/py-modindex.html @@ -0,0 +1,205 @@ + + + + + + Python Module Index — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ q +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ q
+ qlasskit +
    + qlasskit.algorithms.qalgorithm +
    + qlasskit.qcircuit.gates +
    + qlasskit.types +
    + qlasskit.types.parameter +
    + qlasskit.types.qbool +
    + qlasskit.types.qchar +
    + qlasskit.types.qfixed +
    + qlasskit.types.qint +
    + qlasskit.types.qlist +
    + qlasskit.types.qmatrix +
    + qlasskit.types.qtype +
+ + +
+
+
+ +
+ +
+

© Copyright 2023-2024, Davide Gessa (dakk).

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/quickstart.html b/quickstart.html new file mode 100644 index 00000000..eaf1a396 --- /dev/null +++ b/quickstart.html @@ -0,0 +1,206 @@ + + + + + + + Quickstart — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Quickstart

+

First install qlasskit using pip.

+

pip install qlasskit

+

We now define a qlassf function that sums two numbers:

+
+
+
from qlasskit import qlassf, Qint, Qint2
+
+
+@qlassf
+def sum_two_numbers(a: Qint[2], b: Qint[2]) -> Qint[2]:
+    return a + b
+
+
+
+
+

We can now export the resulting quantum circuit to any supported framework:

+
+
+
circuit = sum_two_numbers.export("qiskit")
+circuit.draw("mpl")
+
+
+
+
+_images/134555be2b0ec8b6542fa4c9920ed78256557fd3823098fae0e5b794a7d039f7.png +
+
+

The qlassf function can be also exported as a gate, if the destination framwork supports it. We can use encode_input and decode_output in order to convert from/to high level types of qlasskit without worrying about the binary representation.

+
+
+
from qiskit import QuantumCircuit
+
+qc = QuantumCircuit(sum_two_numbers.num_qubits, len(sum_two_numbers.output_qubits))
+
+qc.initialize(
+    sum_two_numbers.encode_input(Qint2(1), Qint2(2)), sum_two_numbers.input_qubits
+)
+qc.append(sum_two_numbers.gate("qiskit"), sum_two_numbers.qubits)
+qc.measure(sum_two_numbers.output_qubits, range(len(sum_two_numbers.output_qubits)))
+qc.draw("mpl")
+
+
+
+
+_images/47b6cd81bccaa913335a53e27b39ebaa13a3e237adc57d32abf8f74664f5531b.png +
+
+
+
+
from qiskit import QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+from qiskit_aer import AerSimulator
+
+simulator = AerSimulator()
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = sum_two_numbers.decode_counts(counts)
+plot_histogram(counts_readable)
+
+
+
+
+_images/e55818cf800a54a7925e4b1baed5679302c1ce0167ab0196e4a51a1b8b528332.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 00000000..f6195916 --- /dev/null +++ b/search.html @@ -0,0 +1,150 @@ + + + + + + Search — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2023-2024, Davide Gessa (dakk).

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..3832abd5 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"2D Matrix (fixed size)": [[43, "d-matrix-fixed-size"]], "API": [[1, "api"]], "AST Traslator": [[39, "ast-traslator"]], "Abstraction tools": [[0, "abstraction-tools"]], "Algorithms": [[0, "algorithms"]], "Assign": [[43, "assign"]], "BQM Polynomial solver": [[7, "bqm-polynomial-solver"]], "Bernstein Vazirani": [[0, "bernstein-vazirani"]], "Bernstein Vazirani algorithm": [[5, "bernstein-vazirani-algorithm"]], "Bin Op": [[43, "bin-op"]], "Binary Quadratic Model, Qubo & Ising": [[2, "binary-quadratic-model-qubo-ising"]], "Boolean operators": [[43, "boolean-operators"]], "CLI Tools": [[3, "cli-tools"]], "Cirq": [[17, "cirq"]], "Cite": [[40, "cite"]], "Comparators": [[43, "comparators"]], "Compiler": [[39, "compiler"]], "Constants": [[43, "constants"]], "Decompiler and Circuit Optimizer": [[4, "decompiler-and-circuit-optimizer"]], "Deutsch Jozsa": [[0, "deutsch-jozsa"]], "Deutsch Jozsa algorithm": [[9, "deutsch-jozsa-algorithm"]], "Examples": [[40, null]], "Exporting to other frameworks": [[17, "exporting-to-other-frameworks"]], "Expressions": [[43, "expressions"]], "For loop": [[43, "for-loop"]], "Function call": [[43, "function-call"]], "Function def": [[43, "function-def"]], "Grover search": [[0, "grover-search"], [10, "grover-search"]], "Grover search: hash function preimage attack": [[12, "grover-search-hash-function-preimage-attack"]], "Grover search: subset problem": [[13, "grover-search-subset-problem"]], "Grover search: sudoku solver": [[14, "grover-search-sudoku-solver"]], "Grover: factorize number": [[11, "grover-factorize-number"]], "How it works": [[39, "how-it-works"]], "If expressions": [[43, "if-expressions"]], "If then else": [[43, "if-then-else"]], "Indices and tables": [[40, "indices-and-tables"]], "List": [[43, "list"]], "List (fixed size)": [[43, "list-fixed-size"]], "Matrix": [[43, "matrix"]], "Parameters": [[41, "parameters"]], "Pennylane": [[17, "pennylane"]], "QASM": [[17, "qasm"]], "Qchar": [[43, "qchar"]], "Qfixed": [[43, "qfixed"]], "Qint": [[43, "qint"]], "Qiskit": [[17, "qiskit"]], "Qlasskit": [[40, "qlasskit"], [40, null]], "Quantum Hybrid": [[43, "quantum-hybrid"]], "Quickstart": [[42, "quickstart"]], "Qutip": [[17, "qutip"]], "Result": [[39, "result"]], "Return": [[43, "return"]], "Running on DWave annealer": [[2, "running-on-dwave-annealer"]], "Running on simulated sampler annealer": [[2, "running-on-simulated-sampler-annealer"]], "Simon function periodicity": [[15, "simon-function-periodicity"]], "Simon periodicity": [[0, "simon-periodicity"]], "Statements": [[43, "statements"]], "Subscript": [[43, "subscript"]], "Supported python subset": [[43, "supported-python-subset"]], "Sympy": [[17, "sympy"]], "TSP": [[8, "tsp"]], "Tuple": [[43, "tuple"], [43, "id1"]], "Types": [[43, "types"]], "Unary Op": [[43, "unary-op"]], "Unitary of qlasskit function": [[16, "unitary-of-qlasskit-function"]], "Working with big circuits": [[6, "working-with-big-circuits"]], "bool": [[43, "bool"]], "py2bexp": [[3, "py2bexp"]], "py2qasm": [[3, "py2qasm"]], "qlasskit.algorithms.deutschjozsa.DeutschJozsa": [[18, "qlasskit-algorithms-deutschjozsa-deutschjozsa"]], "qlasskit.algorithms.grover.Grover": [[19, "qlasskit-algorithms-grover-grover"]], "qlasskit.algorithms.qalgorithm": [[20, "module-qlasskit.algorithms.qalgorithm"]], "qlasskit.algorithms.simon.Simon": [[21, "qlasskit-algorithms-simon-simon"]], "qlasskit.bqm.decode_samples": [[22, "qlasskit-bqm-decode-samples"]], "qlasskit.decompiler.Decompiler": [[23, "qlasskit-decompiler-decompiler"]], "qlasskit.qcircuit.gates": [[24, "module-qlasskit.qcircuit.gates"]], "qlasskit.qcircuit.qcircuit.QCircuit": [[25, "qlasskit-qcircuit-qcircuit-qcircuit"]], "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper": [[26, "qlasskit-qcircuit-qcircuitwrapper-qcircuitwrapper"]], "qlasskit.qlassfun.QlassF": [[27, "qlasskit-qlassfun-qlassf"]], "qlasskit.qlassfun.qlassf": [[28, "qlasskit-qlassfun-qlassf"]], "qlasskit.qlassfun.qlassfa": [[29, "qlasskit-qlassfun-qlassfa"]], "qlasskit.types": [[30, "module-qlasskit.types"]], "qlasskit.types.parameter": [[31, "module-qlasskit.types.parameter"]], "qlasskit.types.qbool": [[32, "module-qlasskit.types.qbool"]], "qlasskit.types.qchar": [[33, "module-qlasskit.types.qchar"]], "qlasskit.types.qfixed": [[34, "module-qlasskit.types.qfixed"]], "qlasskit.types.qint": [[35, "module-qlasskit.types.qint"]], "qlasskit.types.qlist": [[36, "module-qlasskit.types.qlist"]], "qlasskit.types.qmatrix": [[37, "module-qlasskit.types.qmatrix"]], "qlasskit.types.qtype": [[38, "module-qlasskit.types.qtype"]]}, "docnames": ["algorithms", "api", "bqm", "cli_tools", "decompiler_and_optimizer", "example_bernstein_vazirani", "example_big_circuit", "example_bqm_polynomial", "example_bqm_tsp", "example_deutsch_jozsa", "example_grover", "example_grover_factors", "example_grover_hash", "example_grover_subset", "example_grover_sudoku", "example_simon", "example_unitary_of_f", "exporter", "generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa", "generated/qlasskit.algorithms.grover.Grover", "generated/qlasskit.algorithms.qalgorithm", "generated/qlasskit.algorithms.simon.Simon", "generated/qlasskit.bqm.decode_samples", "generated/qlasskit.decompiler.Decompiler", "generated/qlasskit.qcircuit.gates", "generated/qlasskit.qcircuit.qcircuit.QCircuit", "generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper", "generated/qlasskit.qlassfun.QlassF", "generated/qlasskit.qlassfun.qlassf", "generated/qlasskit.qlassfun.qlassfa", "generated/qlasskit.types", "generated/qlasskit.types.parameter", "generated/qlasskit.types.qbool", "generated/qlasskit.types.qchar", "generated/qlasskit.types.qfixed", "generated/qlasskit.types.qint", "generated/qlasskit.types.qlist", "generated/qlasskit.types.qmatrix", "generated/qlasskit.types.qtype", "how_it_works", "index", "parameters", "quickstart", "supported"], "envversion": {"sphinx": 61, "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}, "filenames": ["algorithms.ipynb", "api.rst", "bqm.ipynb", "cli_tools.rst", "decompiler_and_optimizer.ipynb", "example_bernstein_vazirani.ipynb", "example_big_circuit.ipynb", "example_bqm_polynomial.ipynb", "example_bqm_tsp.ipynb", "example_deutsch_jozsa.ipynb", "example_grover.ipynb", "example_grover_factors.ipynb", "example_grover_hash.ipynb", "example_grover_subset.ipynb", "example_grover_sudoku.ipynb", "example_simon.ipynb", "example_unitary_of_f.ipynb", "exporter.ipynb", "generated/qlasskit.algorithms.deutschjozsa.DeutschJozsa.rst", "generated/qlasskit.algorithms.grover.Grover.rst", "generated/qlasskit.algorithms.qalgorithm.rst", "generated/qlasskit.algorithms.simon.Simon.rst", "generated/qlasskit.bqm.decode_samples.rst", "generated/qlasskit.decompiler.Decompiler.rst", "generated/qlasskit.qcircuit.gates.rst", "generated/qlasskit.qcircuit.qcircuit.QCircuit.rst", "generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.rst", "generated/qlasskit.qlassfun.QlassF.rst", "generated/qlasskit.qlassfun.qlassf.rst", "generated/qlasskit.qlassfun.qlassfa.rst", "generated/qlasskit.types.rst", "generated/qlasskit.types.parameter.rst", "generated/qlasskit.types.qbool.rst", "generated/qlasskit.types.qchar.rst", "generated/qlasskit.types.qfixed.rst", "generated/qlasskit.types.qint.rst", "generated/qlasskit.types.qlist.rst", "generated/qlasskit.types.qmatrix.rst", "generated/qlasskit.types.qtype.rst", "how_it_works.ipynb", "index.rst", "parameters.ipynb", "quickstart.ipynb", "supported.rst"], "indexentries": {"__init__() (qlasskit.algorithms.deutschjozsa.deutschjozsa method)": [[18, "qlasskit.algorithms.deutschjozsa.DeutschJozsa.__init__", false]], "__init__() (qlasskit.algorithms.grover.grover method)": [[19, "qlasskit.algorithms.grover.Grover.__init__", false]], "__init__() (qlasskit.algorithms.simon.simon method)": [[21, "qlasskit.algorithms.simon.Simon.__init__", false]], "__init__() (qlasskit.decompiler.decompiler method)": [[23, "qlasskit.decompiler.Decompiler.__init__", false]], "__init__() (qlasskit.qcircuit.qcircuit.qcircuit method)": [[25, "qlasskit.qcircuit.qcircuit.QCircuit.__init__", false]], "__init__() (qlasskit.qcircuit.qcircuitwrapper.qcircuitwrapper method)": [[26, "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.__init__", false]], "__init__() (qlasskit.qlassfun.qlassf method)": [[27, "qlasskit.qlassfun.QlassF.__init__", false]], "decode_samples() (in module qlasskit.bqm)": [[22, "qlasskit.bqm.decode_samples", false]], "decompiler (class in qlasskit.decompiler)": [[23, "qlasskit.decompiler.Decompiler", false]], "deutschjozsa (class in qlasskit.algorithms.deutschjozsa)": [[18, "qlasskit.algorithms.deutschjozsa.DeutschJozsa", false]], "grover (class in qlasskit.algorithms.grover)": [[19, "qlasskit.algorithms.grover.Grover", false]], "module": [[20, "module-qlasskit.algorithms.qalgorithm", false], [24, "module-qlasskit.qcircuit.gates", false], [30, "module-qlasskit.types", false], [31, "module-qlasskit.types.parameter", false], [32, "module-qlasskit.types.qbool", false], [33, "module-qlasskit.types.qchar", false], [34, "module-qlasskit.types.qfixed", false], [35, "module-qlasskit.types.qint", false], [36, "module-qlasskit.types.qlist", false], [37, "module-qlasskit.types.qmatrix", false], [38, "module-qlasskit.types.qtype", false]], "qcircuit (class in qlasskit.qcircuit.qcircuit)": [[25, "qlasskit.qcircuit.qcircuit.QCircuit", false]], "qcircuitwrapper (class in qlasskit.qcircuit.qcircuitwrapper)": [[26, "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper", false]], "qlassf (class in qlasskit.qlassfun)": [[27, "qlasskit.qlassfun.QlassF", false]], "qlassf() (in module qlasskit.qlassfun)": [[28, "qlasskit.qlassfun.qlassf", false]], "qlassfa() (in module qlasskit.qlassfun)": [[29, "qlasskit.qlassfun.qlassfa", false]], "qlasskit.algorithms.qalgorithm": [[20, "module-qlasskit.algorithms.qalgorithm", false]], "qlasskit.qcircuit.gates": [[24, "module-qlasskit.qcircuit.gates", false]], "qlasskit.types": [[30, "module-qlasskit.types", false]], "qlasskit.types.parameter": [[31, "module-qlasskit.types.parameter", false]], "qlasskit.types.qbool": [[32, "module-qlasskit.types.qbool", false]], "qlasskit.types.qchar": [[33, "module-qlasskit.types.qchar", false]], "qlasskit.types.qfixed": [[34, "module-qlasskit.types.qfixed", false]], "qlasskit.types.qint": [[35, "module-qlasskit.types.qint", false]], "qlasskit.types.qlist": [[36, "module-qlasskit.types.qlist", false]], "qlasskit.types.qmatrix": [[37, "module-qlasskit.types.qmatrix", false]], "qlasskit.types.qtype": [[38, "module-qlasskit.types.qtype", false]], "simon (class in qlasskit.algorithms.simon)": [[21, "qlasskit.algorithms.simon.Simon", false]]}, "objects": {"qlasskit": [[30, 2, 0, "-", "types"]], "qlasskit.algorithms": [[20, 2, 0, "-", "qalgorithm"]], "qlasskit.algorithms.deutschjozsa": [[18, 0, 1, "", "DeutschJozsa"]], "qlasskit.algorithms.deutschjozsa.DeutschJozsa": [[18, 1, 1, "", "__init__"]], "qlasskit.algorithms.grover": [[19, 0, 1, "", "Grover"]], "qlasskit.algorithms.grover.Grover": [[19, 1, 1, "", "__init__"]], "qlasskit.algorithms.simon": [[21, 0, 1, "", "Simon"]], "qlasskit.algorithms.simon.Simon": [[21, 1, 1, "", "__init__"]], "qlasskit.bqm": [[22, 3, 1, "", "decode_samples"]], "qlasskit.decompiler": [[23, 0, 1, "", "Decompiler"]], "qlasskit.decompiler.Decompiler": [[23, 1, 1, "", "__init__"]], "qlasskit.qcircuit": [[24, 2, 0, "-", "gates"]], "qlasskit.qcircuit.qcircuit": [[25, 0, 1, "", "QCircuit"]], "qlasskit.qcircuit.qcircuit.QCircuit": [[25, 1, 1, "", "__init__"]], "qlasskit.qcircuit.qcircuitwrapper": [[26, 0, 1, "", "QCircuitWrapper"]], "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper": [[26, 1, 1, "", "__init__"]], "qlasskit.qlassfun": [[27, 0, 1, "", "QlassF"], [28, 3, 1, "", "qlassf"], [29, 3, 1, "", "qlassfa"]], "qlasskit.qlassfun.QlassF": [[27, 1, 1, "", "__init__"]], "qlasskit.types": [[31, 2, 0, "-", "parameter"], [32, 2, 0, "-", "qbool"], [33, 2, 0, "-", "qchar"], [34, 2, 0, "-", "qfixed"], [35, 2, 0, "-", "qint"], [36, 2, 0, "-", "qlist"], [37, 2, 0, "-", "qmatrix"], [38, 2, 0, "-", "qtype"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "module", "Python module"], "3": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:module", "3": "py:function"}, "terms": {"": [3, 4, 5, 10, 13, 41, 43], "0": [0, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 17, 25, 39, 41, 43], "00000": 17, "0100": 0, "0xca": 12, "0xf": 8, "0xff": 12, "1": [0, 2, 4, 5, 7, 8, 11, 12, 13, 14, 15, 16, 17, 19, 39, 41, 42, 43], "10": [2, 7, 8], "100": 14, "1036": 6, "1044": 6, "1105": 2, "1106": 2, "1107": 2, "1108": 2, "1109": 2, "1119": 2, "1120": 2, "1121": 2, "1122": 2, "12": [12, 14, 39, 43], "127": 7, "13": [2, 43], "1307": 2, "1308": 2, "1309": [2, 14], "1311": 2, "1312": 2, "14": [0, 2, 5, 43], "140": 2, "141": 2, "142": 2, "144": 2, "145": 2, "1483": 2, "1484": 2, "1485": 2, "1486": 2, "1487": 2, "15": 2, "16": [0, 16], "178": 14, "18": [2, 8], "1951": 7, "2": [3, 4, 5, 7, 8, 11, 12, 13, 14, 17, 39, 41, 42, 43], "20": 14, "2023": 40, "21": 2, "21831": 6, "21984": 6, "256": 12, "279": 2, "280": 2, "282": 2, "284": 2, "285": 2, "286": 2, "287": 2, "289": 2, "290": 2, "291": 2, "292": 2, "2x2": 14, "3": [0, 2, 3, 4, 5, 7, 8, 13, 14, 15, 16, 17, 39, 41, 43], "375": 7, "4": [0, 2, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 17, 19, 39, 41, 43], "41": 2, "42": 43, "427": 2, "428": 2, "429": 2, "431": 2, "432": 2, "436": 2, "438": 2, "439": 2, "441": 2, "442": 2, "450": 2, "451": 2, "452": 2, "453": 2, "454": 2, "4x4": 14, "5": [2, 4, 6, 7, 11, 12, 13, 39], "500": 14, "6": [2, 4, 8, 14], "603": 2, "604": 2, "606": 2, "608": 2, "610": 2, "64": 6, "7": [2, 4, 7, 9, 13], "752": 2, "754": 2, "755": 2, "757": 2, "758": 2, "8": [2, 12], "81": 8, "818": 2, "819": 2, "820": 2, "822": 2, "823": 2, "825": 2, "826": 2, "827": 2, "828": 2, "875": 7, "891": 2, "892": 2, "893": 2, "895": 2, "896": 2, "9": 11, "9x9": 14, "A": [2, 12, 43], "And": 4, "As": [4, 14, 39], "At": 43, "For": [10, 13, 39], "If": [2, 39], "In": [2, 6, 10, 12, 13, 14, 16, 39, 41, 43], "Ising": 40, "It": [39, 43], "One": 0, "The": [0, 2, 3, 4, 6, 10, 14, 25, 39, 42, 43], "Then": [10, 12, 13, 14], "To": 39, "_": 17, "__init__": [2, 18, 19, 21, 23, 25, 26, 27], "_except": 2, "_futur": 2, "_handle_problem_statu": 2, "_hook": 2, "_load_result": 2, "_record": 2, "_result": 2, "_result_hook": 2, "_ret": [7, 16, 17, 39, 41], "_sampleset": 2, "a_list": [6, 10], "abl": [0, 4], "about": 42, "abov": 14, "abstract": [39, 40], "accept": 2, "access": [2, 43], "account": 2, "add": 14, "addit": [2, 39], "advanc": 39, "advent": 12, "aer_simul": [10, 12, 13, 14], "aersimul": [5, 9, 10, 11, 12, 13, 14, 15, 16, 42], "after": 41, "algebra": [4, 39], "algorithm": [10, 11, 12, 13, 14, 15, 39, 40], "align": [10, 13], "all": [0, 10, 39, 43], "allow": [4, 40, 41], "along": 10, "alreadi": [2, 14], "also": [0, 2, 3, 13, 40, 41, 42], "an": [2, 4, 5, 10, 12, 13, 14, 22, 39], "analysi": [4, 12], "and_al": 10, "anf": 3, "ani": [2, 6, 42, 43], "anneal": 40, "anoth": 0, "api": 40, "append": [16, 39, 42], "applic": 4, "approach": 39, "ar": [4, 6, 10, 12, 13, 14, 39, 41, 43], "arg": 27, "around": 6, "array_to_latex": 16, "ascii": 43, "assert": 8, "assum": 39, "ast": 40, "ast2ast": 39, "ast2log": 39, "async_unemb": 2, "attack": 40, "attribut": [2, 18, 19, 21, 25, 26, 27], "author": 40, "automat": 39, "auxiliari": 39, "avail": 39, "ax": 14, "aysnchron": 2, "b": [0, 2, 16, 17, 39, 41, 42, 43], "backend": 39, "barrier": 39, "base": [0, 2], "becaus": 2, "befor": [2, 39, 41], "begin": [16, 39], "behavior": 43, "being": 39, "bell": 43, "bernstein": 40, "bernsteinvazirani": [0, 5], "best": 4, "best_sampl": [2, 7, 8], "between": 4, "big": 40, "binari": [0, 40, 42], "bind": [2, 8, 13, 41], "bit": 43, "bitstr": 0, "black": [0, 14], "block": 2, "bmatrix": 16, "bodi": 43, "bool": [0, 3, 4, 5, 9, 10, 11, 14, 16, 17, 18, 19, 28, 29, 39, 41], "bool_optim": [4, 6, 28, 29], "boolean": [3, 4, 14, 27, 28, 39], "boolopt": [4, 6, 28, 29], "booloptimizerprofil": [28, 29], "both": 12, "bound": 41, "box": 0, "bqm": [2, 8, 40], "branch": 43, "bultin": 43, "c": [3, 6, 14, 43], "c_": 17, "call": [0, 2, 12], "callabl": [27, 28], "can": [0, 2, 4, 5, 10, 12, 14, 16, 39, 42], "cannot": 14, "capabl": [6, 14], "care": 2, "ccx": [4, 17, 39], "cell": 2, "center": 14, "chain": 2, "chain_break": 2, "chain_break_fract": 2, "chain_break_method": 2, "chain_strength": 2, "challeng": 12, "char": 43, "charact": 43, "check": [2, 12, 14], "checker": 14, "chr": 43, "circ": [9, 10, 11, 12, 13, 14, 15, 16, 42], "circuit": [3, 10, 14, 16, 17, 25, 28, 39, 40, 41, 42, 43], "circuit_boolean_optim": 4, "cirq": 40, "class": [0, 10, 18, 19, 20, 21, 23, 24, 25, 26, 27, 31, 32, 33, 34, 35, 36, 37, 38], "classic": 40, "cli": 40, "client": 2, "cloud": 2, "cmap": 14, "cnf": 3, "cnot": 17, "code": [3, 14, 28, 39, 43], "collect": 12, "color": 14, "column": 14, "com": 40, "combin": [13, 39], "common": 2, "compar": 19, "compil": [3, 10, 28, 29, 40, 41, 43], "complex": 41, "composit": 2, "comput": [2, 12], "cond": 43, "condit": 2, "constr": 14, "constraint": 14, "construct": [2, 39], "constructor": 43, "contain": [2, 3, 26, 43], "convers": 43, "convert": [3, 39, 42], "count": [5, 9, 10, 11, 12, 13, 14, 15, 42], "count_op": 39, "counter": 12, "counterpart": 43, "counts_read": [5, 9, 10, 11, 12, 13, 14, 15, 42], "creat": [2, 5, 6, 14, 28, 41], "cryptograph": 12, "cse": 6, "custom": 41, "cx": [4, 17, 39, 43], "cybersecur": 12, "d": [12, 43], "dakk": 40, "data": [0, 2], "david": 40, "dc": 4, "debug": [2, 43], "decod": [2, 10, 22], "decode_count": [0, 5, 9, 10, 11, 12, 13, 14, 15, 42], "decode_output": [0, 42], "decode_sampl": [2, 7, 8, 40], "decode_sampleset": 2, "decoded_sampl": [2, 7, 8], "decompil": 40, "decompiledresult": 4, "decompos": [4, 16, 39], "decor": [28, 29], "def": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 28, 29, 39, 41, 42], "default": [3, 19, 25, 28], "defaultoptim": 28, "defin": [10, 13, 41, 42, 43], "definit": 10, "del": 2, "denot": 43, "depenc": 17, "descript": 2, "design": 43, "destin": 42, "detect": [4, 12], "deutsch": 40, "deutschjozsa": [0, 9, 40], "dev": 2, "develop": 40, "dict": 2, "dictionari": 0, "differ": 43, "dimac": 3, "dimod": [2, 22], "disabl": 17, "discard_low": [11, 12, 14], "discov": 5, "displaystyl": 17, "distinct": 43, "distribut": 12, "dnf": 3, "do": [0, 5, 6], "doc": 17, "doe": 2, "doesn": 2, "doubl": 12, "draw": [4, 5, 9, 10, 11, 12, 14, 15, 16, 17, 39, 41, 42], "draw_matrix": 14, "dst_matrix": 8, "dst_sum": 8, "dure": [28, 39, 43], "dwave": 40, "dwave_sampl": 2, "dwavesampl": 2, "dynam": 2, "e": 3, "each": [14, 39, 43], "easi": 12, "easili": 10, "egg": 2, "el": 2, "element": [4, 10, 13, 14, 19], "element_to_search": 19, "elemnt": 43, "els": [2, 8, 13, 17, 39], "embed": [2, 5], "embedding_context": 2, "embedding_paramet": 2, "embeddingcomposit": 2, "encod": [8, 10, 14], "encode_input": [0, 42], "end": 16, "energi": [2, 7, 8], "entir": 39, "entrypoint": 3, "env": 2, "equal": [2, 12, 14], "equival": 5, "error": 2, "error_cod": 2, "error_msg": 2, "essenti": 43, "etc": 40, "ever": 12, "everi": 14, "evid": [10, 13], "evolv": 12, "exampl": [0, 2, 4, 6, 10, 12, 13, 14, 16, 39, 41, 43], "example_bernstein_vazirani": 0, "example_deutsch_jozsa": 0, "example_grov": 0, "example_grover_factor": 0, "example_grover_hash": 0, "example_grover_subset": 0, "example_grover_sudoku": 0, "example_simon": 0, "exc": 2, "except": [2, 20, 38], "exclus": 43, "exhibit": 43, "exit": 3, "exp": 27, "expand": 43, "expect": [2, 10, 13, 19], "exploit": [12, 14, 16], "exponenti": 14, "export": [2, 4, 5, 9, 10, 11, 12, 13, 14, 15, 39, 40, 41, 42], "express": [3, 4, 6, 7, 8, 39, 40, 41], "extern": 16, "extraordinari": 12, "f": [0, 2, 3, 9, 15, 16, 18, 19, 21, 28, 39, 43], "f1": 39, "f_comp": 39, "facilit": 39, "fact": 12, "factor": [2, 40], "failov": 2, "fals": [8, 14], "fastoptim": [4, 6], "father": 0, "fed": 39, "few": 14, "fig": 14, "file": [2, 3], "filter": 14, "final": [39, 41], "find": [10, 12, 13], "first": [4, 5, 10, 42], "float": 43, "follow": [0, 2, 4, 12, 14, 39, 43], "fontsiz": 14, "footprint": 39, "forc": 19, "form": [0, 3, 4, 39], "format": 3, "found": 0, "fraction": 43, "framework": [10, 12, 13, 14, 16, 39, 40, 42], "framwork": 42, "free": 41, "from": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 39, 41, 42], "from_futur": 2, "function": [0, 2, 3, 4, 5, 10, 13, 19, 20, 24, 27, 28, 30, 38, 39, 40, 41, 42], "further": 0, "futur": 2, "g_orac": 0, "game": 14, "gate": [4, 6, 14, 16, 17, 39, 40, 42, 43], "gener": [2, 19], "gessa": 40, "get": [2, 4, 22], "get_count": [5, 9, 10, 11, 12, 13, 14, 15, 42], "get_unitari": 16, "getter": 2, "github": 40, "given": [2, 4, 10, 13, 39, 43], "go": [6, 14], "got": 12, "grover": 40, "h": [3, 12, 43], "h_val": 6, "ha": [2, 12, 14, 43], "had": 2, "half": 39, "handl": 0, "hasattr": 2, "hash": 40, "hash_simp": 12, "have": [2, 6, 14, 39, 43], "hello_world": 17, "help": 3, "helper": 2, "here": 13, "hex": 12, "high": [0, 2, 10, 22, 42], "histogram": [10, 13], "hold": 43, "how": 40, "http": 40, "hv": 12, "hybrid": 40, "i": [0, 2, 3, 4, 6, 8, 10, 12, 13, 14, 39, 40, 43], "id": 2, "idx": 2, "iff": 10, "ignor": 43, "ii": 13, "implement": [0, 17, 39], "import": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 39, 41, 42, 43], "importerror": 2, "incorpor": 43, "index": 40, "individu": 39, "info": 2, "ing": 14, "inherit": 0, "initi": [25, 42], "inject": 28, "input": [3, 6, 10, 12, 13, 28], "input_fil": 3, "input_qubit": 42, "instal": [2, 42], "instanc": [10, 13, 39], "instanti": 14, "instead": [0, 14], "insuffici": 2, "int": [19, 25, 43], "integ": 43, "interact": [2, 7, 8], "interfac": 26, "intermedi": 39, "intern": [3, 28, 29], "internalcompil": 39, "introduc": 39, "invalidapiresponseerror": 2, "invert": 39, "invok": 12, "ipynb": 0, "ising": [2, 40], "isinst": 2, "issu": 6, "it_": 39, "item": 14, "iter": [19, 43], "its": [0, 4, 39, 43], "j": [13, 14], "job": 0, "jozsa": 40, "keep": 43, "kei": [2, 7, 8], "keyerror": 2, "kind": 12, "know": 13, "known": 43, "label": [2, 39], "lambda": [2, 7, 8, 14], "landscap": 12, "larg": 6, "last": 2, "lead": [10, 13, 43], "least": [3, 13], "led": [10, 13], "left": 17, "len": [12, 14, 42, 43], "length": 43, "let": 39, "level": [0, 2, 10, 16, 22, 42], "leverag": 39, "lib": 2, "librari": [2, 39, 40], "like": [12, 41], "limit": 43, "line": 2, "linear": 43, "list": [6, 10, 13, 14, 27, 28, 29, 39], "liter": [28, 29], "local": 2, "logger": 2, "low": 16, "m": [12, 14, 43], "m_re": 14, "machin": 40, "map": 12, "match": [2, 19], "matplotlib": 14, "matrix": [14, 16], "matshow": 14, "max": 43, "max_siz": 16, "measur": 42, "measure_al": [5, 9, 10, 11, 12, 13, 14, 15], "messag": [2, 3, 12], "method": [0, 16, 18, 19, 21, 23, 25, 26, 27], "min": [2, 7, 8, 43], "mind": 43, "minim": 2, "miss": 2, "model": 40, "modul": [30, 39, 40, 43], "modulo": 43, "more": [14, 39], "most": 2, "mpl": [4, 5, 9, 10, 11, 12, 15, 16, 17, 39, 41, 42], "must": [12, 14], "n": [16, 19, 39, 41, 43], "n_iter": 19, "n_match": [13, 19], "name": [3, 10, 13, 25, 27], "nativ": 25, "neal": [2, 7, 8], "need": [39, 41], "new_dec": 2, "next": [6, 39, 41], "ninteract": [2, 7, 8], "nnf": 3, "none": [2, 4, 19, 25], "note": [2, 43], "notebook": [0, 12], "now": [2, 5, 10, 12, 13, 39, 42], "num": 2, "num_interact": [2, 7, 8], "num_qubit": [16, 25, 39, 42], "num_read": [2, 7, 8], "num_vari": [2, 7, 8], "number": [2, 3, 5, 13, 14, 19, 25, 39, 40, 42, 43], "numpi": 2, "o": 3, "obj": 2, "object": [28, 29], "obtain": [4, 14, 16, 39], "occur": 2, "offer": [0, 2, 3, 4, 10], "oi": 8, "oim": 8, "one": [3, 6, 39], "onli": [6, 43], "openqasm": 17, "oper": [16, 39, 40], "opportun": 12, "optim": [10, 28, 39, 40], "option": [3, 19, 25, 28, 43], "oracl": [0, 5, 10, 12, 13, 14, 19], "ord": 43, "order": [4, 8, 12, 16, 39, 42], "ordereddict": 39, "original_f": [12, 27], "other": [2, 39, 40, 43], "otherwis": 19, "our": [2, 10, 12, 13, 14, 16, 18, 19, 21], "output": [3, 6, 10, 12, 13, 39], "output_qubit": 42, "over": 10, "overrid": 28, "packag": 2, "page": 40, "param": [17, 43], "paramet": [2, 8, 13, 18, 19, 21, 25, 28, 29, 40], "parameteriz": 41, "pars": 28, "part": 43, "pattern": 43, "pennylan": 40, "perform": [4, 10, 12, 16], "period": 40, "phase": 39, "pi": 19, "pip": 42, "pipelin": 4, "pleas": 43, "plot_histogram": [5, 9, 10, 11, 12, 13, 14, 15, 42], "plt": 14, "point": 43, "poli": 7, "pollingtimeout": 2, "pq_model": 2, "prefer": [10, 12, 13, 14], "preimag": 40, "prepar": [10, 39], "present": [12, 43], "preserv": 4, "prevent": 2, "previou": [4, 39], "print": [2, 6, 7, 8, 12, 14, 16, 17, 39, 43], "problem": [2, 17, 40], "problem_id": 2, "problem_info": 2, "problemuploaderror": 2, "produc": [6, 10, 13], "program": 3, "project": 2, "propag": 2, "properti": [2, 39], "provid": 10, "pure": 40, "puzzl": 14, "py": 2, "py2bexp": 40, "py2qasm": 40, "py3": 2, "pyenv": 2, "pyplot": 14, "python": [3, 5, 12, 39, 40], "python3": 2, "q": [3, 17, 43], "q0": 4, "q1": 4, "q2": 4, "q3": 4, "q4": 4, "q5": 4, "q6": 39, "q_algo": [0, 5, 9, 10, 11, 12, 13, 14, 15], "qalgorithm": [0, 40], "qasm": [3, 40], "qc": [4, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 25, 39, 42], "qcircuit": [4, 6, 14, 39, 40], "qcircuitwrapp": [0, 40], "qf": [2, 4, 22, 41], "qfix": 7, "qfixedn_m": 43, "qint": [0, 2, 5, 8, 9, 11, 12, 13, 14, 15, 17, 39, 41, 42], "qint2": 42, "qint3": 13, "qint4": [0, 5, 8, 14, 41], "qint8": [6, 12], "qintn": 43, "qiskit": [5, 9, 10, 11, 12, 13, 14, 15, 16, 39, 40, 42], "qiskit_a": [5, 9, 10, 11, 12, 13, 14, 15, 16, 42], "qlassf": [0, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 29, 39, 40, 41, 42, 43], "qlassfa": [4, 6, 40], "qlassfun": 40, "qlasskit": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 39, 41, 42, 43], "qlasskit2023": 40, "qlasskit_310": 2, "qlist": [4, 6, 8, 10, 12, 13, 41, 43], "qmatrix": [8, 14, 43], "qml": 17, "qtupl": 41, "qtype": [19, 28, 29], "quadrat": 40, "quantum": [0, 2, 3, 4, 6, 10, 12, 13, 16, 25, 28, 39, 40, 42], "quantumcircuit": [5, 9, 10, 11, 12, 13, 14, 15, 16, 39, 42], "quantumtap": 17, "qubit": [4, 6, 14, 16, 25, 28, 39, 42, 43], "qubo": 40, "quickstart": 40, "qutip": 40, "r": [2, 10, 14], "rais": 2, "rang": [8, 12, 14, 39, 40, 42, 43], "rangl": 17, "ration": 43, "re": [2, 14], "readi": 40, "real": [2, 14], "realist": 14, "recarrai": 2, "receiv": [2, 3], "recent": 2, "recompil": [3, 28, 29], "record": 2, "recreat": 14, "reduc": 39, "refin": 39, "reli": 0, "remain": 2, "repeat": 14, "repres": [4, 27, 39, 43], "represent": [0, 4, 42], "requesttimeout": 2, "requir": [2, 14], "reserv": 2, "resolv": 2, "resourc": 14, "respons": 2, "result": [0, 2, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 40, 42], "return": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 22, 27, 39, 41, 42], "return_embed": 2, "revers": 0, "right": 17, "row": 14, "run": [5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 40, 42], "runtimeerror": 2, "sa": [2, 7, 8], "same": 0, "sampl": [0, 2, 7, 8, 10, 12, 13, 14], "sampler": 40, "sampleset": [2, 7, 8, 22], "satisfi": 19, "save_st": 16, "scale": 14, "scratch": 5, "script": 3, "search": [19, 40], "second": 6, "secret": 5, "secret_oracl": [0, 5], "section": 4, "see": [4, 14, 39], "self": 2, "separ": 39, "seri": 39, "set": [2, 10, 13], "set_": 13, "share": 0, "should": 3, "show": [3, 14], "simon": 40, "simul": [5, 9, 10, 11, 12, 13, 14, 15, 16, 40, 42], "simulatedannealingsampl": [2, 7, 8], "sinc": [2, 6, 12, 13, 14], "singl": [0, 39, 43], "site": 2, "slot": 2, "slow": 6, "snippet": 14, "so": 14, "softwar": 40, "solut": [2, 4, 13, 14, 22], "solv": 14, "solver": [2, 40], "solverauthenticationerror": 2, "solvererror": 2, "solverfailureerror": 2, "some": 12, "someon": 2, "source_bqm": 2, "space": 12, "specif": [12, 14], "sqrt": 19, "standalon": 39, "standard": 12, "statement": [39, 40], "static": 43, "statu": 2, "stdin": 3, "stdout": 3, "step": 39, "str": [14, 27, 28], "streamlin": 39, "structur": 43, "sub0": 14, "sub1": 14, "sub2": 14, "sub3": 14, "subplot": 14, "subset": 40, "subset_sum": 13, "sudoku": 40, "sudoku_check": 14, "sum": [8, 13, 14, 42, 43], "sum_two_numb": 42, "support": [2, 39, 40, 41, 42], "supportedcompil": 28, "symbol": 27, "sympi": [3, 40], "syntax": 39, "system": 2, "t": [2, 3, 43], "take": 39, "tape": 17, "target_sampleset": 2, "test": [6, 41], "test_factor": 2, "test_factor_gener": 2, "test_tool": 0, "text": [14, 17], "than": 14, "thank": 12, "them": [39, 40], "therefor": 43, "thi": [2, 3, 4, 5, 10, 12, 13, 14, 16, 39, 43], "thing": 6, "those": [0, 41], "through": 43, "time": [2, 43], "tini": 12, "titl": 40, "to_bqm": [2, 7, 8], "to_compil": [28, 29], "toi": [12, 14], "too": 6, "too_few_sampl": 2, "took": 2, "tool": [4, 40], "traceback": 2, "transform": [0, 2, 39], "translat": [0, 2, 3, 4, 39, 40], "transpil": [9, 10, 11, 12, 13, 14, 15, 16, 42], "traslat": 40, "tree": 39, "tri": 12, "true": [0, 4, 8, 10, 14, 19, 28, 29, 41, 43], "try": 2, "tsp": 40, "tsp_f": 8, "tupl": [0, 11, 12, 13, 27], "tweedledum": [3, 28, 29, 39], "two": [3, 4, 5, 13, 39, 42], "type": [0, 2, 10, 11, 13, 28, 29, 40, 41, 42], "u": 4, "unboundqlassf": 28, "uncomput": [28, 29, 39], "unemb": 2, "unembed": 2, "unembed_sampleset": 2, "uniform": 12, "union": 28, "uniqu": 39, "unitari": 40, "unlik": 39, "unoptim": 4, "unpreced": 12, "unrol": 43, "unsign": 43, "updat": 2, "url": 40, "us": [0, 2, 4, 5, 6, 8, 10, 12, 13, 14, 16, 39, 40, 42], "usag": 3, "user": 2, "util": [10, 43], "v": 3, "va": 14, "valid": [2, 14], "valu": [10, 12, 13, 14, 19, 43], "valueerror": 2, "var": [2, 7, 8], "variabl": [2, 41], "vartyp": 2, "vazirani": 40, "version": [2, 3], "viridi": 14, "visual": [5, 9, 10, 11, 12, 13, 14, 15, 16, 42], "wai": [5, 14], "wait": 2, "wait_id": 2, "wait_sampleset": 2, "walk": 39, "want": [10, 13, 14, 19], "warninghandl": 2, "we": [2, 4, 5, 6, 10, 12, 13, 14, 16, 19, 39, 41, 42], "well": 2, "were": 2, "when": 14, "whenev": 28, "where": [10, 13, 14], "which": [0, 2, 12, 13, 39], "while": [2, 39], "whole": 39, "wide": 40, "wire": 17, "within": 43, "without": [2, 6, 12, 14, 42], "work": [40, 43], "worri": 42, "wrapper": [10, 26], "write": [4, 5, 12, 40], "x": [2, 4, 5, 7, 8, 12, 14, 18, 19, 21, 39], "x0": 7, "x1": 7, "x10": 7, "x11": 7, "x12": 7, "x13": 7, "x14": 7, "x2": 7, "x3": 7, "x4": 7, "x5": 7, "x6": 7, "x7": 7, "x8": 7, "x9": 7, "x_": 17, "xag_synth": 39, "xor": 14, "y": [7, 12, 19], "year": 40, "yeld": 10, "you": [6, 43]}, "titles": ["Algorithms", "API", "Binary Quadratic Model, Qubo & Ising", "CLI Tools", "Decompiler and Circuit Optimizer", "Bernstein Vazirani algorithm", "Working with big circuits", "BQM Polynomial solver", "TSP", "Deutsch Jozsa algorithm", "Grover search", "Grover: factorize number", "Grover search: hash function preimage attack", "Grover search: subset problem", "Grover search: sudoku solver", "Simon function periodicity", "Unitary of qlasskit function", "Exporting to other frameworks", "qlasskit.algorithms.deutschjozsa.DeutschJozsa", "qlasskit.algorithms.grover.Grover", "qlasskit.algorithms.qalgorithm", "qlasskit.algorithms.simon.Simon", "qlasskit.bqm.decode_samples", "qlasskit.decompiler.Decompiler", "qlasskit.qcircuit.gates", "qlasskit.qcircuit.qcircuit.QCircuit", "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper", "qlasskit.qlassfun.QlassF", "qlasskit.qlassfun.qlassf", "qlasskit.qlassfun.qlassfa", "qlasskit.types", "qlasskit.types.parameter", "qlasskit.types.qbool", "qlasskit.types.qchar", "qlasskit.types.qfixed", "qlasskit.types.qint", "qlasskit.types.qlist", "qlasskit.types.qmatrix", "qlasskit.types.qtype", "How it works", "Qlasskit", "Parameters", "Quickstart", "Supported python subset"], "titleterms": {"2d": 43, "For": 43, "If": 43, "Ising": 2, "abstract": 0, "algorithm": [0, 5, 9, 18, 19, 20, 21], "anneal": 2, "api": 1, "assign": 43, "ast": 39, "attack": 12, "bernstein": [0, 5], "big": 6, "bin": 43, "binari": 2, "bool": 43, "boolean": 43, "bqm": [7, 22], "call": 43, "circuit": [4, 6], "cirq": 17, "cite": 40, "cli": 3, "compar": 43, "compil": 39, "constant": 43, "decode_sampl": 22, "decompil": [4, 23], "def": 43, "deutsch": [0, 9], "deutschjozsa": 18, "dwave": 2, "els": 43, "exampl": 40, "export": 17, "express": 43, "factor": 11, "fix": 43, "framework": 17, "function": [12, 15, 16, 43], "gate": 24, "grover": [0, 10, 11, 12, 13, 14, 19], "hash": 12, "how": 39, "hybrid": 43, "indic": 40, "jozsa": [0, 9], "list": 43, "loop": 43, "matrix": 43, "model": 2, "number": 11, "op": 43, "oper": 43, "optim": 4, "other": 17, "paramet": [31, 41], "pennylan": 17, "period": [0, 15], "polynomi": 7, "preimag": 12, "problem": 13, "py2bexp": 3, "py2qasm": 3, "python": 43, "qalgorithm": 20, "qasm": 17, "qbool": 32, "qchar": [33, 43], "qcircuit": [24, 25, 26], "qcircuitwrapp": 26, "qfix": [34, 43], "qint": [35, 43], "qiskit": 17, "qlassf": [27, 28], "qlassfa": 29, "qlassfun": [27, 28, 29], "qlasskit": [16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40], "qlist": 36, "qmatrix": 37, "qtype": 38, "quadrat": 2, "quantum": 43, "qubo": 2, "quickstart": 42, "qutip": 17, "result": 39, "return": 43, "run": 2, "sampler": 2, "search": [0, 10, 12, 13, 14], "simon": [0, 15, 21], "simul": 2, "size": 43, "solver": [7, 14], "statement": 43, "subscript": 43, "subset": [13, 43], "sudoku": 14, "support": 43, "sympi": 17, "tabl": 40, "tool": [0, 3], "traslat": 39, "tsp": 8, "tupl": 43, "type": [30, 31, 32, 33, 34, 35, 36, 37, 38, 43], "unari": 43, "unitari": 16, "vazirani": [0, 5], "work": [6, 39]}}) \ No newline at end of file diff --git a/supported.html b/supported.html new file mode 100644 index 00000000..49bdd4ef --- /dev/null +++ b/supported.html @@ -0,0 +1,398 @@ + + + + + + + Supported python subset — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Supported python subset

+

Qlasskit supports a subset of python. This subset will be expanded, but it is +limited by the linearity of quantum circuits and by the number of qubits.

+

The structure of a qlasskit function has the following pattern:

+
@qlasskit
+def f(param: type, [...param: type]) -> type:
+   statement
+   ...
+   statement
+
+
+
+

Types

+

All types has a static size.

+
+

bool

+

Boolean type.

+
+
+

Qint

+

Unsigned integers; Qint[2] has 2 bits, and there other sizes are supported. +Single bit of the Qint are accessible by the subscript operator []. +All the supported sizes have a constructor Qintn() defined in qlasskit.types.

+
+
+

Qfixed

+

Fixed point rational number; Qfixed[2,3] has 2 bits for the integer part and 3 bits for the fractional. +All the supported sizes have a constructor Qfixedn_m() defined in qlasskit.types.

+
+
+

Qchar

+

A character.

+
+
+

Tuple

+

Container type holding different types.

+
+
+

List

+

Qlist[T, size] denotes a fixed-size list in qlasskit. +For example, the list [1,2,3] is typed as Qlist[Qint[2],3].

+
+
+

Matrix

+

Qmatrix[T, m, n] denotes a fixed-size list in qlasskit. +For example, the matrix [[1,2],[3,4]] is typed as Qmatrix[Qint[2],2,2].

+
+
+
+

Expressions

+
+

Constants

+
True
+
+
+
42
+
+
+
3.14
+
+
+
'a'
+
+
+
+
+

Tuple

+
(a, b)
+
+
+
+
+

List (fixed size)

+
[a, b]
+
+
+
+
+

2D Matrix (fixed size)

+
[[a, b], [c,d]]
+
+
+
+
+

Subscript

+
a[0]
+
+
+
+
+

Boolean operators

+
not a
+
+
+
a and b
+
+
+
a or b
+
+
+
+
+

If expressions

+
a if b else c
+
+
+
+
+

Comparators

+
a > b or b <= c and c == d or c != a
+
+
+
+
+

Unary Op

+
~a
+
+
+
+
+

Bin Op

+
a << 1
+
+
+
a >> 2
+
+
+
a + b
+
+
+
a - b
+
+
+
a * b
+
+
+
a ** b
+
+
+
a % 2
+
+
+
+

Note

+

Modulo operator only works with 2^n values.

+
+
+
+

Function call

+

Bultin functions:

+
    +
  • print(): debug function, ignore by conversion

  • +
  • len(Tuple), len(Qlist)`: returns the length of a tuple

  • +
  • max(a, b, …), max(Tuple), max(Qlist): returns the max of a tuple

  • +
  • min(a, b, …), min(Tuple), min(Qlist): returns the min of a tuple

  • +
  • sum(Tuple), sum(Qlist): returns the sum of the elemnts of a tuple / list

  • +
  • all(Tuple), all(Qlist): returns True if all of the elemnts are True

  • +
  • any(Tuple), any(Qlist): returns True if any of the elemnts are True

  • +
  • ord(Qchar): returns the integer value of the given Qchar

  • +
  • chr(Qint): returns the char given its ascii code

  • +
  • int(Qfixed | Qint): returns the integer part of a Qfixed

  • +
  • float(Qint | Qfixed): returns a Qfixed representing the Qint

  • +
+
+
+
+

Statements

+
+

Assign

+
c = not a
+
+
+
+
+

Return

+
return b+1
+
+
+
+
+

For loop

+
for i in range(4):
+   a += i
+
+
+
+

Note

+

Please note that in qlasskit, for loops are unrolled during compilation. Therefore, +it is essential that the number of iterations for each for loop is known at the +time of compilation.

+
+
+
+

Function def

+
def f(t: Qlist[Qint[4],2]) -> Qint[4]:
+   return t[0] + t[1]
+
+
+
+
+

If then else

+
c = 0
+if cond:
+   c += 12
+else:
+   c += 13
+
+
+
+

Note

+

At present, the if-then-else statement in qlasskit is designed to support branch bodies +that exclusively contain assignment statements.

+
+
+
+
+

Quantum Hybrid

+

In a qlassf function, you have the option to utilize quantum gates through the Q module. It’s +important to keep in mind that incorporating quantum gates within a qlasskit function leads +to a Python function that exhibits distinct behaviors compared to its quantum counterpart.

+
def bell(a: bool, b: bool) -> bool:
+   return Q.CX(Q.H(a), b)
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file