diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..8512acc9 --- /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: cbf6df29f12337eb3376d34f7921693f +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/algorithms.doctree b/.doctrees/algorithms.doctree new file mode 100644 index 00000000..7b00aefe 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..d91c67df Binary files /dev/null and b/.doctrees/api.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 00000000..69dd9585 Binary files /dev/null and b/.doctrees/environment.pickle differ diff --git a/.doctrees/example_grover_1.doctree b/.doctrees/example_grover_1.doctree new file mode 100644 index 00000000..f57582ee Binary files /dev/null and b/.doctrees/example_grover_1.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..96442b7f 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..d5d6f6f6 Binary files /dev/null and b/.doctrees/generated/qlasskit.algorithms.qalgorithm.doctree differ diff --git a/.doctrees/generated/qlasskit.qcircuit.gates.doctree b/.doctrees/generated/qlasskit.qcircuit.gates.doctree new file mode 100644 index 00000000..93dfad5a 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..1174fe46 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..b1d35963 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..beabeb09 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..85fca1b6 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..715e7c56 Binary files /dev/null and b/.doctrees/generated/qlasskit.qlassfun.qlassfa.doctree differ diff --git a/.doctrees/howitworks.doctree b/.doctrees/howitworks.doctree new file mode 100644 index 00000000..cd6b6342 Binary files /dev/null and b/.doctrees/howitworks.doctree differ diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 00000000..48c313b6 Binary files /dev/null and b/.doctrees/index.doctree differ diff --git a/.doctrees/quickstart.doctree b/.doctrees/quickstart.doctree new file mode 100644 index 00000000..745af8dc 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..25a787f5 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/59d88e0803f09af0af9e3f8632df63d5caaae926ec794f5d0f7889d15d18c795.png b/_images/59d88e0803f09af0af9e3f8632df63d5caaae926ec794f5d0f7889d15d18c795.png new file mode 100644 index 00000000..534a680e Binary files /dev/null and b/_images/59d88e0803f09af0af9e3f8632df63d5caaae926ec794f5d0f7889d15d18c795.png differ diff --git a/_images/6a5c9f70167fa721588b49f6481be896f1ec8ff94cbe865241ef10e7f211f1da.png b/_images/6a5c9f70167fa721588b49f6481be896f1ec8ff94cbe865241ef10e7f211f1da.png new file mode 100644 index 00000000..e1849a91 Binary files /dev/null and b/_images/6a5c9f70167fa721588b49f6481be896f1ec8ff94cbe865241ef10e7f211f1da.png differ diff --git a/_images/745705f5337e01d402d07cf68ba7a45937f40f988c0ae6531da5409106dcd6f4.png b/_images/745705f5337e01d402d07cf68ba7a45937f40f988c0ae6531da5409106dcd6f4.png new file mode 100644 index 00000000..f0abf168 Binary files /dev/null and b/_images/745705f5337e01d402d07cf68ba7a45937f40f988c0ae6531da5409106dcd6f4.png differ diff --git a/_images/7bfdb65fc46867bb8f032c54ee68761f01a740b1e8dd524cb306ee7d2c2b8646.png b/_images/7bfdb65fc46867bb8f032c54ee68761f01a740b1e8dd524cb306ee7d2c2b8646.png new file mode 100644 index 00000000..e03b1238 Binary files /dev/null and b/_images/7bfdb65fc46867bb8f032c54ee68761f01a740b1e8dd524cb306ee7d2c2b8646.png differ diff --git a/_images/866bfc1bbfb900bf4963ef3ce7ae6d36c3f598459ac3da0b654550aeeb4cf9d2.png b/_images/866bfc1bbfb900bf4963ef3ce7ae6d36c3f598459ac3da0b654550aeeb4cf9d2.png new file mode 100644 index 00000000..165e2e5a Binary files /dev/null and b/_images/866bfc1bbfb900bf4963ef3ce7ae6d36c3f598459ac3da0b654550aeeb4cf9d2.png differ diff --git a/_images/867ed7db5e6da008fc2d54c87dde0f273e643e6ccfcaa8c5436bbe96926cc514.png b/_images/867ed7db5e6da008fc2d54c87dde0f273e643e6ccfcaa8c5436bbe96926cc514.png new file mode 100644 index 00000000..b73996dd Binary files /dev/null and b/_images/867ed7db5e6da008fc2d54c87dde0f273e643e6ccfcaa8c5436bbe96926cc514.png differ diff --git a/_sources/algorithms.rst.txt b/_sources/algorithms.rst.txt new file mode 100644 index 00000000..ef033dc2 --- /dev/null +++ b/_sources/algorithms.rst.txt @@ -0,0 +1,2 @@ +Algorithms +==================================== \ No newline at end of file diff --git a/_sources/api.rst.txt b/_sources/api.rst.txt new file mode 100644 index 00000000..9a31913d --- /dev/null +++ b/_sources/api.rst.txt @@ -0,0 +1,15 @@ +API +=== + +.. autosummary:: + :toctree: generated + :recursive: + + qlasskit.qlassfun.qlassf + qlasskit.qlassfun.qlassfa + qlasskit.qlassfun.QlassF + qlasskit.algorithms.qalgorithm + qlasskit.algorithms.grover.Grover + qlasskit.qcircuit.qcircuit.QCircuit + qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper + qlasskit.qcircuit.gates \ No newline at end of file diff --git a/_sources/example_grover_1.ipynb.txt b/_sources/example_grover_1.ipynb.txt new file mode 100644 index 00000000..e4bb4b2b --- /dev/null +++ b/_sources/example_grover_1.ipynb.txt @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover search\n", + "\n", + "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, Qint2\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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zzp16iRJamxsPOl5GhoaWmwD+ElhYaGKiopUWFhoOhQAQIxFshYCbMZ6CAD8qz3roWO3sOjfv7+WLl16/IvQgN+wFvInGl2WuOaaa7Rz50797ne/02WXXabXX39d1157rS699FIdPXrUdHhIsP79+0tq/fKEx37GDdoBAAAAAAD8b926dZo6daq6deum5cuX85kQgJRDo8siPXv21KxZs/Tkk0/q448/1ty5c7VixQq98MILpkNDDOTl5WnHjh0nnaW3b98+VVdXt/jZhAkTJElvv/32Sc/zzjvvyHEcnXfeeXGLFTCluLhYM2bMUHFxselQAAAxFslaCLAZ6yEA8K9o1kPr1q3T5Zdfri5dumj58uUaNGhQAiIFzGEt5E80uiwQCoVOKmaO4+icc86RJFVVVRmICrE2bdo0lZeX69lnn23x8/nz55+07bBhwzR+/Hj96U9/0p49e47/fM+ePfrTn/6kyy67TH379o17zECi1dXVaePGjdyDDgB8KJK1EGAz1kMA4F+RrofWr1+vqVOnqnPnzlq+fLkGDx6ciDABo1gL+VOa6QAQfzU1NerXr5+mT5+uc845R2eddZaKi4v13//93+rRo4emTZtmOkTEwEMPPaRnnnlGt99+u959910NHz5cK1as0FtvvaXs7Gw5jtNi+5/97GeaMmWKPve5z+kb3/iGJOkXv/iFwuGwfvSjH5n4FQAAAKIW6Vro/fff14svvihJWrVqlSTpd7/7nVauXClJ+sY3vqFu3bol9pcAAABoh0jWQ7t27dLUqVN18OBB3XvvvXrrrbf01ltvtXi+6667TllZWYn+NQAgYjS6LNCpUyd985vf1Ouvv67/+7//05EjR443vr797W8fv18TUlt2drZWrlypBx98UAsWLJDjOJoyZYqWL1+uCRMmqGPHji22v/DCC/XGG2/o4Ycf1sMPPyzHcXThhRfqT3/6k8aOHWvotwAAAIhOpGuhdevW6Tvf+U6Lny1YsOD4f8+aNYtGFwAASCmRrIeKi4t14MABSdL3vve9Vp+vuLiYRheAlECjywIZGRl69NFHTYeBBBg8eLCWLFnS4mcHDhzQgQMHNHDgwJO2nzRpkl5//fVEhQcAABBXkayFZs+erdmzZycwOgAAgPhr63ro0ksvleu6iQ4PAOKCe3QBPlJfX3/Sz37wgx9IkqZOnZrocICk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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": [ + "Now we can 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 definition. 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": "iVBORw0KGgoAAAANSUhEUgAAAocAAAKOCAYAAADUG7MqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADc9ElEQVR4nOzdd3gUVdsG8Hs2vQdCQgiEECD0LkWKhGYIoEgRlSKCFFERKYIUEemg8CoignQQKa8KCIgQWoL0GnoJPZCETkICpD7fH/n2vFmSUJLdbGDv33VxXWRmds555szOPDtz5owmIgIiIiIiIgA6c1eAiIiIiPIPJodEREREpDA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRYm3uCrzo0tLSEBUVBRcXF2iaZu7qEBER0UtORHD//n34+PhApzP+dT4mh7kUFRUFX19fc1eDiIiILExkZCSKFStm9PUyOcwlFxcXAOkN5OrqaubaEBER0csuLi4Ovr6+KgcxNiaHuaS/lezq6srkkIiIiPKMqbqz8YEUIiIiIlKYHBIREZFFK1GiBDRNy/Tv008/BQA0atQo07w+ffqozx85cgQdO3aEr68vHBwcUL58eUybNs1c4eQabysTERGRRdu/fz9SU1PV38ePH8frr7+ODh06qGm9evXCmDFj1N+Ojo7q/wcPHoSXlxeWLFkCX19f7Nq1C71794aVlRX69u2bN0EYUb68cigiWLlyJRo3bowiRYrA0dERZcuWxUcffYQLFy5kWj4uLg4DBw6En58f7OzsUKJECQwePBjx8fFZrj8tLQ3Tp09H5cqV4eDgAE9PT3Ts2DHLdRMREdHLzdPTE97e3urfunXrUKpUKQQGBqplHB0dDZbJ+JzBhx9+iGnTpiEwMBAlS5ZEly5d0L17d6xcudIc4eRavkwOv/jiC7Rv3x5nzpxBmzZt8Nlnn8Hf3x9z5sxBtWrVcPz4cbVsQkICAgMD8f3336NcuXIYMGAAypYtiylTpqBJkyZ49OhRpvV/9NFH6NevH0QE/fr1Q3BwMFauXIlatWohIiIiL0MlIiKifCQpKQlLlizBhx9+aPDAx2+//YZChQqhUqVKGDZsGB48ePDE9cTGxqJgwYKmrq5pSD4THR0tOp1O/Pz85N69ewbz/vOf/wgA6d69u5r29ddfCwD58ssvDZb98ssvBYBMmDDBYPrWrVsFgDRs2FASExPV9PXr1wsACQoKeq76xsbGCgCJjY19rs8RERFR/rNixQqxsrKSa9euqWm//PKLbNiwQY4ePSpLliyRokWLStu2bbNdx86dO8Xa2lo2btxokjqaOvfId8nh7t27BYB06tQp07yzZ88KAHnjjTdERCQtLU18fHzE2dlZ4uPjDZaNj48XZ2dnKVmypMH0jh07CgAJCwvLtP5GjRoJALl8+fIz15fJIRER0csjKChI5RnZ2bJliwCQc+fOZZp37NgxKVSokIwdO9ZUVTR57pHvbisHBATA1tYWO3fuRFxcnMG8devWAQCaNm0KAIiIiEBUVBTq168PJycng2WdnJxQv359XLhwAZGRkWp6aGiomve45s2bAwDCwsKMGhMRERHlf5cvX8bmzZvRs2fPJy5Xp04dAMC5c+cMpp88eRJNmzZF79698dVXX5msnqaW755W9vDwwKRJkzBo0CCUK1cOb731FlxdXXHkyBFs3boVn3zyiXryR98/MCAgIMt1BQQEYOPGjYiIiICvry8SEhIQHR2NSpUqwcrKKsvlM643K4mJiUhMTFR/6xPY5ORkJCcnAwB0Oh2srKyQmpqKtLQ0tax+ekpKCkRETbeysoJOp8t2un69etbW6c2WkpLyTNNtbGyQlpZm8CSWpmmwtrbOdnp2dWdMjIkxMSbGxJhe1pgWLFgALy8vBAUFqdiyqvuBAwcAAN7e3mq5EydOoHnz5vjggw8wduxYg21jiphMKd8lhwAwYMAAFC1aFD179sSsWbPU9AYNGqBTp06qoWJjYwEAbm5uWa5H/ySRfrnnXT4rEydOxOjRozNNDwkJUY+1Fy9eHNWrV8fRo0dx5coVtUzZsmVRrlw57Nu3Dzdv3lTTq1WrBj8/P2zfvh33799X0+vWrQsvLy+EhIQY7AiNGzeGg4MD1q9fb1CHli1b4uHDh9i2bZuaZm1tjVatWuHWrVvYvXu3mu7i4oImTZogMjIS4eHharqnpyfq1auHiIgInDlzRk1nTIyJMTEmxsSYXuaY6tSpgwULFqBBgwYICQlR0/38/LB69Wq4uLjAxcUFly9fxrx58/Daa6/B398f69evx+XLl/H111+jRo0aGDhwIE6ePIkDBw5Ap9PBzc3N6DEdPHgQpqRJxrQ5nxgzZgzGjRuHMWPGoEuXLnB3d0d4eDgGDBiA8PBw/Pnnn2jdujWWLl2Kzp07Y8SIERg3blym9YwYMQITJkzAypUr0bZtW0RFRaFo0aKoX78+duzYkWn5TZs2ISgoCP369ct28Mqsrhz6+vri1q1bKrnkLzPGxJgYE2NiTIzpxYppy5YtaNGiBY4fP44yZcqo6dHR0Xj//fdx/PhxJCQkwNfXF61bt8bXX38NV1dXpKSkqLzlcX5+foiIiDB6THfu3IGHhwdiY2NN8+pek/RkzIVNmzYJABkwYECmedHR0eLg4CClS5cWEZF169YJAOnbt2+W6+rbt68AkC1btohI+kMqAKRSpUpZLv/HH38IABk5cuQz15cPpBAREVFesrgHUv755x8A6ZemH+ft7Y1y5crh3LlziI+Pf2ofwcf7JDo5OaFIkSK4ePGiQeae3fJERERElibfJYdJSUkAYNA/IKObN29Cp9PBxsYGAQEB8PHxwc6dO5GQkGCwXEJCAnbu3Al/f3/4+vqq6YGBgWre4zZu3AgAaNiwobHCISIiInqh5LvkUD/EzH/+859MD4bMmjULV69eRd26dWFnZwdN09CzZ0/Ex8dj7NixBsuOHTsW8fHx6NWrl8H03r17AwBGjhypElEg/YplaGgogoKC4OfnZ4rQiIiIiPK9fPdASmpqKpo0aYLt27fDy8sLrVu3hru7Ow4dOoStW7fCwcEBoaGhqF27NoD0K4T169fHkSNHEBQUhBo1auDQoUMICQlBrVq1EBYWBgcHB4MyevXqhblz56JixYpo1aoVoqOjsWLFCjg7O2P37t0GHVGfJi4uDm5ubqbrFEpERESUgalzj3yXHALpTwR///33+O9//4szZ84gKSkJhQsXRuPGjTF8+HCUL1/eYPnY2Fh88803+PPPPxETE4MiRYqgQ4cOGDVqFFxcXDKtPy0tDT/99BNmz56Nc+fOwdnZGc2aNcP48eNRqlSp56ork0MiIiLKSxaZHL5ImBwSERFRXjJ17pHv+hwSERERkfkwOSQiIiIihckhERERESlMDomIiIhIYXJIRERERAqTQyIiIiJSmBwSERERkcLkkIiIiIgUJodEREREpDA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKszV0BIiIiovyk1w+5+/yc/saohfnwyiERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRwuSQiIiIiBQmh0RERESkMDkkIiIiIoXJIREREREpTA6JiIiISGFySEREREQKk0MiIiIiUpgcEhEREZHC5JCIiIiIFCaHRERERKQwOSQiIiIihckhERERESlMDomIiIhIYXJIRERERAqTQyIiIiJSmBwSERERkcLkkIiIiIgUJodEREREpDA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRwuSQiIiIiBQmh0RERESkMDkkIiIiIoXJIREREREpTA6JiIiISGFySEREREQKk0MiIiIiUpgcEhEREZHC5JCIiIiIFCaHRERERKQwOSQiIiIihckhERERESlMDomIiIhIYXJIRERERAqTQyIiIiJSmBwSERERkcLkkIiIiIgUJodEREREpDA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRwuSQiIiIiBQmh0RERESkMDkkIiIiIoXJIREREREpTA6JiIiISGFySEREREQKk0MiIiIiUpgcEhEREZHC5JCIiIiIFCaHRERERKTk6+Rw1apVeP311+Hh4QF7e3v4+/ujY8eOiIyMNFguLi4OAwcOhJ+fH+zs7FCiRAkMHjwY8fHxWa43LS0N06dPR+XKleHg4ABPT0907NgRFy5cyIuwiIiIiPIta3NXICsigj59+mD27NkoVaoU3nvvPbi4uCAqKgphYWG4fPkyfH19AQAJCQkIDAxEeHg4goKC0LFjRxw+fBhTpkxBWFgYtm/fDnt7e4P1f/TRR5g7dy4qVqyIfv36ISoqCv/9738REhKCPXv2ICAgwBxhExEREZldvkwOf/zxR8yePRuffPIJfvzxR1hZWRnMT0lJUf//9ttvER4eji+//BKTJk1S04cOHYrJkyfj+++/x7Bhw9T0bdu2Ye7cuWjYsCE2bdoEW1tbAECnTp3QsmVL9O3bFxs3bjRxhERERET5kyYiYu5KZPTw4UMULVoUBQoUwJkzZ2BtnX3+KiIoVqwY4uLiEBMTAycnJzUvISEB3t7e8PLywvnz59X0Tp06YdmyZQgLC0PDhg0N1te4cWOEhobi8uXLKF68+DPVNy4uDm5uboiNjYWrq+tzRktERET5Ta8fcvf5Of2NUYvsmTr3yHd9DkNCQnD37l20adMGqampWLlyJSZNmoRZs2bh3LlzBstGREQgKioK9evXN0gMAcDJyQn169fHhQsXDPoohoaGqnmPa968OQAgLCzMBJERERER5X/57rbywYMHAQBWVlaoUqUKzp49q+bpdDoMGDAAU6ZMAZCeHALIto9gQEAANm7ciIiICPj6+iIhIQHR0dGoVKlSplvVGdejX29WEhMTkZiYqP6Oi4sDACQnJyM5OVnV08rKCqmpqUhLSzOov5WVFVJSUpDxgq2VlRV0Ol220/Xr1dNfTc14e/1J021sbJCWlobU1FQ1TdM0WFtbZzs9u7ozJsbEmBgTY2JML39MNsiNvIjJlPJdcnjjxg0AwH/+8x/UqFED+/btQ/ny5XH48GH07t0bU6dORalSpfDxxx8jNjYWAODm5pbluvSXWvXLPe/yWZk4cSJGjx6daXpISAgcHR0BAMWLF0f16tVx9OhRXLlyRS1TtmxZlCtXDvv27cPNmzfV9GrVqsHPzw/bt2/H/fv31fS6devCy8sLISEhBjtC48aN4eDggPXr1xvUoWXLlnj48CG2bdumpllbW6NVq1a4desWdu/eraa7uLigSZMmiIyMRHh4uJru6emJevXqISIiAmfOnFHTGRNjYkyMiTExJkuJCWiF3DB1TPoLaaaS7/oc9u7dG3PmzIGDgwPOnTsHHx8fNe/48eOoWrUq/P39ce7cOSxduhSdO3fGiBEjMG7cuEzrGjFiBCZMmICVK1eibdu2iIqKQtGiRVG/fn3s2LEj0/KbNm1CUFAQ+vXrh2nTpmVZv6yuHPr6+uLWrVsqueQvM8bEmBgTY2JMjOnFjemTGbm7cvhLP9PGdOfOHXh4eJisz2G+u3Kov6pXs2ZNg8QQACpVqoSSJUvi3LlzuHfvnlo2uyt9+lu++uWed/ms2NnZwc7OLtN0Gxsb2NgY7kxWVlZZ3r7O7iGb7KY/vt6cTNfpdNDpMncxzW56dnVnTIzpeaczJsYEMKbs6vi80xmT+WJ6HuaKyVjy3QMpZcuWBQC4u7tnOV8//eHDh0/tI/h4n0QnJycUKVIEFy9eNMjcs1ueiIiIyNLku+SwcePGAIBTp05lmpecnIxz587ByckJnp6eCAgIgI+PD3bu3ImEhASDZRMSErBz5074+/urAbMBIDAwUM17nH58w8eHuCEiIiKyFPkuOSxVqhSCgoJw7tw5zJ0712DepEmTcO/ePbRt2xbW1tbQNA09e/ZEfHw8xo4da7Ds2LFjER8fj169ehlM7927NwBg5MiRSEpKUtP/+ecfhIaGIigoCH5+fiaKjoiIiCh/y3cPpADA+fPnUa9ePdy4cQOtWrVCuXLlcPjwYWzduhV+fn7Ys2cPvL29AaRfIaxfvz6OHDmCoKAg1KhRA4cOHUJISAhq1aqFsLAwODg4GKy/V69e6vV5rVq1QnR0NFasWAFnZ2fs3r0bZcqUeea6chBsIiKilwsHwc6HSpUqhQMHDqBbt244ePAgfvzxR0RERODTTz/Fvn37VGIIpPcjDAsLQ//+/XHq1ClMnToVp0+fxqBBg7Bly5ZMiSEA/PLLL+pp5GnTpmH9+vVo27Yt9u3b91yJIREREdHLJl9eOXyR8MohERHRy4VXDomIiIiI/h+TQyIiIiJSmBwSERERkcLkkIiIiIgUJodEREREpDA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRwuSQiIiIiBQmh0RERESkMDkkIiIiIoXJIREREREpTA6JiIiISGFySEREREQKk0MiIiIiUpgcEhEREZHC5JCIiIiIFCaHRERERKQwOSQiIiIihckhERERESlMDomIiIhIYXJIRERERAqTQyIiIiJSmBwSERERkcLkkIiIiIgUJodEREREpDA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRwuSQiIiIiBQmh0RERESkMDkkIiIiIoXJIREREREpTA6JiIiISGFySEREREQKk0MiIiIiUpgcEhEREZHC5JCIiIiIFCaHRERERKQwOSQiIiIihckhERERESlMDomIiIhIYXJIRERERAqTQyIiIiJSmBwSERERkcLkkIiIiIiUHCeH27dvx5UrV564TGRkJLZv357TIoiIiIgoj+U4OWzcuDEWLlz4xGUWL16Mxo0b57QIIiIiIspjOU4OReSpy6SlpUHTtJwWQURERER5zKR9DiMiIuDm5mbKIoiIiIjIiKyfZ+EPP/zQ4O/Vq1fj0qVLmZZLTU1V/Q1btGiRqwoSERERUd55ruQwYx9DTdMQHh6O8PDwLJfVNA21atXC999/n5v6EREREVEeeq7k8OLFiwDS+xuWLFkS/fv3x+ef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jx9H0aJFn7tSRERERGQez5Ucvvbaa9i6dSsuXbr01GUvXbqErVu3omHDhjmtGxERERHlsedKDj/99FMkJyfj7bffxq1bt7Jd7vbt2+jQoQNSUlLw8ccf57qSRERERJQ3nmsQ7Bo1aqB///744YcfUKFCBfTp0weNGzdGsWLFAADXrl3Dli1bMHv2bNy8eRMDBw5EjRo1TFJxIiIiIjK+535DytSpU2Fvb4/vvvsO48ePx/jx4w3miwisrKwwbNgwjBs3zmgVJSIiIiLTe+7kUNM0TJgwAT169MCCBQuwa9cuxMTEAAC8vb1Rv359dOvWDaVKlTJ6ZYmIiIjItJ47OdQrVaoUrwwSERERvWQ4CCERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRwuSQiIiIiBQmh0RERESkMDkkIiIiIoXJIREREREpTA6JiIiISGFySEREREQKk0MiIiIiUpgcEhEREZHC5JCIiIiIFCaHRERERKQwOSQiIiIihckhERERESlMDomIiIhIYXJIRERERAqTQyIiIiJSmBwSERERkcLkkIiIiIgUJodEREREpDA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRwuSQiIiIiBQmh0RERESkMDkkIiIiIoXJIREREREpTA6JiIiISGFySEREREQKk0MiIiIiUpgcEhEREZHC5JCIiIiIFCaHRERERKQwOSQiIiIihckhERERESlMDomIiIhIYXJIRERERAqTQyIiIiJSmBwSERERkcLkkIiIiIgUJodEREREpDA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRwuSQiIiIiBQmh0RERESkMDkkIiIiIoXJIREREREpTA6JiIiISGFySEREREQKk0MiIiIiUpgcEhEREZHC5JCIiIiIlHyXHF67dg0//PADgoKCULx4cdja2sLb2xvt27fH3r17s/xMXFwcBg4cCD8/P9jZ2aFEiRIYPHgw4uPjs1w+LS0N06dPR+XKleHg4ABPT0907NgRFy5cMGVoRERERPlevksOp0+fjgEDBuDChQsICgrCoEGD0KBBA/z111+oV68eVqxYYbB8QkICAgMD8f3336NcuXIYMGAAypYtiylTpqBJkyZ49OhRpjI++ugj9OvXDyKCfv36ITg4GCtXrkStWrUQERGRV6ESERER5TvW5q7A42rXro3Q0FAEBgYaTP/333/RtGlTfPzxx2jTpg3s7OwAAN9++y3Cw8Px5ZdfYtKkSWr5oUOHYvLkyfj+++8xbNgwNX3btm2YO3cuGjZsiE2bNsHW1hYA0KlTJ7Rs2RJ9+/bFxo0b8yBSIiIiovxHExExdyWeVfPmzRESEoL9+/ejZs2aEBEUK1YMcXFxiImJgZOTk1o2ISEB3t7e8PLywvnz59X0Tp06YdmyZQgLC0PDhg0N1t+4cWOEhobi8uXLKF68+DPVKS4uDm5uboiNjYWrq6txAiUiIiKz6fVD7j4/p78xapE9U+ce+e628pPY2NgAAKyt0y94RkREICoqCvXr1zdIDAHAyckJ9evXx4ULFxAZGammh4aGqnmPa968OQAgLCzMVCEQERER5Wv57rZydq5cuYLNmzejSJEiqFy5MgCo/oEBAQFZfiYgIAAbN25EREQEfH19kZCQgOjoaFSqVAlWVlZZLp9xvVlJTExEYmKi+jsuLg4AkJycjOTkZACATqeDlZUVUlNTkZaWppbVT09JSUHGC7ZWVlbQ6XTZTtevV0+fHKekpDzTdBsbG6SlpSE1NVVN0zQN1tbW2U7Pru6MiTExJsbEmBjTyx+TDXIjL2IypRciOUxOTsb777+PxMRETJ48WSV2sbGxAAA3N7csP6e/1Kpf7nmXz8rEiRMxevToTNNDQkLg6OgIAChevDiqV6+Oo0eP4sqVK2qZsmXLoly5cti3bx9u3rypplerVg1+fn7Yvn077t+/r6bXrVsXXl5eCAkJMdgRGjduDAcHB6xfv96gDi1btsTDhw+xbds2Nc3a2hqtWrXCrVu3sHv3bjXdxcUFTZo0QWRkJMLDw9V0T09P1KtXDxEREThz5oyazpgYE2NiTIyJMVlKTEAr5IapYzp48GCu6vc0+b7PYVpaGt5//30sXboUvXr1wuzZs9W8pUuXonPnzhgxYgTGjRuX6bMjRozAhAkTsHLlSrRt2xZRUVEoWrQo6tevjx07dmRaftOmTQgKCkK/fv0wbdq0LOuT1ZVDX19f3Lp1SyWX/GXGmBgTY2JMjIkxvbgxfTIjd1cOf+ln2pju3LkDDw8Pk/U5zNdXDtPS0vDhhx9i6dKl6NKlC2bNmmUwX38FMLsrffpbvvrlnnf5rNjZ2aknpTOysbFRfSL1rKyssrx9rf+SPOv0x9ebk+k6nQ46XeYuptlNz67ujIkxPe90xsSYAMaUXR2fdzpjMl9Mz8NcMRlLvn0gJS0tDd27d8eiRYvQsWNHLFy4MNMGfVofwcf7JDo5OaFIkSK4ePGiQeae3fJEREREliZfJof6xHDx4sV499138euvv2b7AImPjw927tyJhIQEg3kJCQnYuXMn/P394evrq6YHBgaqeY/Tj2/4+BA3RERERJYi3yWH+lvJixcvRocOHbBkyZIsE0Mg/V59z549ER8fj7FjxxrMGzt2LOLj49GrVy+D6b179wYAjBw5EklJSWr6P//8g9DQUAQFBcHPz8/IURERERG9GPLdAynffPMNRo8eDWdnZ3z++edZ3ldv06YNqlWrBiD9CmH9+vVx5MgRBAUFoUaNGjh06BBCQkJQq1YthIWFwcHBweDzvXr1wty5c1GxYkW0atUK0dHRWLFiBZydnbF7926UKVPmmevLQbCJiIheLpY+CHa+eyDl0qVLAID4+HiMHz8+y2VKlCihkkMnJyeEhYXhm2++wZ9//olt27ahSJEiGDRoEEaNGpUpMQSAX375BZUrV8bs2bMxbdo0ODs7o23bthg/fjxKlSplqtCIiIiI8r18d+XwRcMrh0RERC8XS79ymO/6HBIRERGR+TA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRwuSQiIiIiBQmh0RERESkMDkkIiIiIoXJIREREREpTA6JiIiISGFySEREREQKk0MiIiIiUpgcEhEREZHC5JCIiIiIFCaHRERERKQwOSQiIiIihckhERERESlMDomIiIhIYXJIRERERAqTQyIiIiJSmBwSERERkcLkkIiIiIgUJodEREREpDA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERECpNDIiIiIlKYHBIRERGRwuSQiIiIiBQmh0RERESkMDkkIiIiIoXJIREREREpTA6JiIiISGFySEREREQKk0MiIiIiUpgcEhEREZHC5JCIiIiIFCaHRERERKQwOSQiIiIihckhERERESlMDomIiIhIYXJIRERERAqTQyIiIiJSmBwSERERkcLkkIiIiIgUJodEREREpDA5JCIiIiKFySERERERKUwOiYiIiEhhckhERERE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50GTlpaGCxcuwMfHB59++in/cWZlZcVfZesKYWVSvK1MlBy7IejnJOd99erVKwQFBWHp0qX47LPP4OzsDGNjY1haWsLMzAy2trZwc3ODp6dnngligsIjksNCIKxMiq+VidJil1M/ICAAxsbGGglpzuPKfS4TEhJw/PhxzJ49GzVr1sSIESP4cWkDYWWiLCsTJccut/77kJGRwX84hoWF4dy5c3jx4gXu3r0rag51iEgOtYSwMimeViZKil0O/f9iZZFfMvrw4UOtvdYSVibKtTJRYuxy62uDonCMRRWRHP5HhJVJ8bcyUVrscusD/93KQpfm18LKRL/6gHxWJkqO3VD0BYaJSA7/BWFloj99QD4rEyXHbij6BbGykEY6CouwMlGmlYmSYzckfYHhIZLD90RYmRRvKxMlx24I+nJbWQgrE+VamSg5dkPQFxgmDABIkC9qtZqMjIwoKCiI2rVrR4MGDaLff/+diIhKlChBHTt2JEtLS9qxYwcRETHGqEyZMuTn50eNGjUqkGZmZiZZWlrSmDFj6KeffqISJUoQEdHJkydp7dq1NHfuXHJzc6P4+Hj6+eefac+ePZSamko1a9akKVOmULt27QoVs9z6ublz5w4FBQVRYGAgBQcH08OHD8nExIRatmxJn332GbVv354qVqxIFhYWhdZScuyGpn/jxg367bffaP/+/fTs2TNydHSkChUqkIODA9WsWZPKlClDT58+pfT0dHr9+jV98skn1KtXr0JpqtVqsrCwoF69etHKlSvJ2to63+0iIiLo7NmzFBAQQMHBwXTv3j0qW7YsRUVFFVj74cOHtH//furUqRNVr16dABBj7J37AKC4uDgyMTEhe3t7ysrKIpVKVST1c6PP9ldy7IaoLzAQ5MtLDR9hZaI/fTmtTJQcuyHo50QOKwthZaJcKxMlx25o+gLDQiSHb0FYmehPX24rEyXHLrf++6BrKwthZaJMKxMlx15U9AXyIZLDf0FYmSjDykSJscutrw20NYtSWJkoy8pEybEXF32BbhHJYT4IKxPlWJkoOXZD0ZcTYWUiv76cKDl2geBdiOTwb4SVifz6clqZKDl2Q9CXC2FlYhj6cqLk2AWCtyGSw78RViby6huCnYJSY5dbX26ElYly21/JsQsE70JY2eRAWJkYjr7cdgpKjl1ufX0jrEwMS19OlBy7QKCBvLmpYSCsTJRrZaLk2A1NXw6ElYnh6MuJkmMXCPJDjBwS8V/9zZs3JyKiHTt2kKurKxER3b9/n/r160fGxsYUHBxMarWajypoY6Tg1KlT1KFDB/L19SVPT888x8UY0xjFSExMpL/++ouCgoLojz/+oBYtWtC6deu4YXdR038fMjMzCQCZmJhQeHg4xcfHU/Xq1Sk+Pp4qVapUYF0lx15U9HXJqVOnqH379rRjxw7q2bOn3IeTL3Kff7n15UTJsQsEYuTwb4SVibKsTJQce3HRLwzCyqTo68uJkmMXKAPFJ4fCykR+fTlRcuwCYWUiEAgE+aH45FBCWJko08oEUHbsAmFlIhAIBLkRNYc5iIqKopCQEAoICKDAwECKiIig9PR0cnFxodGjR9OHH35IderUoZIlS2pVV6pZi46Opl9++YWWLl1KREStWrWizp07U/369alGjRpUrly5PPump6eTmZlZkdaXEyXHLhDtLxAIBPkhksO3IKxMlGnnoOTYBaL9BQKBgEgkh+Tj40MTJ04kExMTyszMJJVKpTELOT09na5fv06BgYEUEBBAISEh9OLFC7K0tKRu3brRtm3btHYsyH7NTyqVipKSkujatWt08eJFCgoKonPnztHz58/JzMyMMjMzycLCgpycnKhWrVq0ZMkSPru6KOvLiZJjF4j2FwgEgpwoOjkUViaGry8nSo5dINpfIBAoF8Umh1lZWaRWq2nEiBG0d+9emjNnDh9BzJ0Y5rf6waNHj8jS0lLrqyP8F/AeKzkUZ305UXLsAtH+AoGgeKPY5FAiOjqaBgwYQOfOnaNJkyaRl5eXxoQT6fS8K1EUCAQCgUAgKC4oPjkkyp6x+NVXX9GaNWuoWrVqNGXKFOrQoQNVrlxZY7vMzEwyNjYmIqKMjAwyMTGR43AFAoFAIBAIdIbik0NhZSEQCAQCgUDwD4pPDnMjrCwEAoFAIBAoGZEc/o2wshAIBAKBQCAQyeE7EVYWAoFAIBAIlIZIDguIsLIQCAQCgUBQHBGeLAVEJIYCgUAgEAiKIyI5FAgEAoFAIBBwRHIoEAgEAoFAIOCI5FAgEAgEAoFAwBHJoUAgEAgEAoGAI5JDgUAgEAgEAgFHJIcCgUAgEAgEAo5IDgUCgUAgEAgEHJEcCgQCgUAgEAg4IjkUCAQCgUAgEHBEcigQCAQCgUAg4Pw/AjF/JunijiEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import Aer, QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "qc.measure_all()\n", + "simulator = Aer.get_backend(\"aer_simulator\")\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/generated/qlasskit.algorithms.grover.Grover.rst.txt b/_sources/generated/qlasskit.algorithms.grover.Grover.rst.txt new file mode 100644 index 00000000..c5426915 --- /dev/null +++ b/_sources/generated/qlasskit.algorithms.grover.Grover.rst.txt @@ -0,0 +1,40 @@ +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_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.qcircuit.gates.rst.txt b/_sources/generated/qlasskit.qcircuit.gates.rst.txt new file mode 100644 index 00000000..35c21029 --- /dev/null +++ b/_sources/generated/qlasskit.qcircuit.gates.rst.txt @@ -0,0 +1,49 @@ +qlasskit.qcircuit.gates +======================= + +.. automodule:: qlasskit.qcircuit.gates + + + + + + + + .. rubric:: Functions + + .. autosummary:: + + apply + + + + + + .. rubric:: Classes + + .. autosummary:: + + Barrier + CCX + CX + H + MCX + MCtrl + NopGate + QControlledGate + QGate + S + 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..88d70e89 --- /dev/null +++ b/_sources/generated/qlasskit.qcircuit.qcircuit.QCircuit.rst.txt @@ -0,0 +1,45 @@ +qlasskit.qcircuit.qcircuit.QCircuit +=================================== + +.. currentmodule:: qlasskit.qcircuit.qcircuit + +.. autoclass:: QCircuit + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~QCircuit.__init__ + ~QCircuit.add_qubit + ~QCircuit.append + ~QCircuit.barrier + ~QCircuit.ccx + ~QCircuit.copy + ~QCircuit.cx + ~QCircuit.draw + ~QCircuit.export + ~QCircuit.get_key_by_index + ~QCircuit.h + ~QCircuit.mctrl + ~QCircuit.mcx + ~QCircuit.s + ~QCircuit.t + ~QCircuit.x + ~QCircuit.y + ~QCircuit.z + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~QCircuit.num_gates + + \ 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..fc0e682b --- /dev/null +++ b/_sources/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.rst.txt @@ -0,0 +1,40 @@ +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_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..148773ed --- /dev/null +++ b/_sources/generated/qlasskit.qlassfun.QlassF.rst.txt @@ -0,0 +1,52 @@ +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_logicfun + ~QlassF.truth_table + ~QlassF.truth_table_header + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~QlassF.input_qubits + ~QlassF.input_size + ~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/howitworks.rst.txt b/_sources/howitworks.rst.txt new file mode 100644 index 00000000..479fcd51 --- /dev/null +++ b/_sources/howitworks.rst.txt @@ -0,0 +1,131 @@ +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. 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. +3. Finally, the _compiler_ module takes these optimized boolean expressions and compiles them into a +*quantum circuit*. + +Unlike other libraries that translate individual operations into quantum circuits before combining them, +qlasskit constructs a singular boolean expression for each output qubit of the entire function. +This unique approach facilitates advanced optimization leveraging boolean algebraic properties. + + +For instance, let assume we have the following function: + +.. code-block:: python + + def f_comp(b: bool, n: Qint2) -> Qint2: + 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 something like the +following circuit: + +.. code-block:: text + + q_0: ────■────■────■──────────────────░───■────■────■──────────────────░───■────■────■───────────────── + │ │ │ ░ │ │ │ ░ │ │ │ + q_1: ────■────┼────┼────■─────────────░───┼────┼────┼──────────────────░───┼────┼────┼───────────────── + │ │ │ │ ░ │ │ │ ░ │ │ │ + q_2: ────┼────┼────┼────┼────■────────░───┼────┼────┼──────────────────░───┼────┼────┼───────────────── + │ ┌─┴─┐ │ ┌─┴─┐ │ ░ │ │ │ ░ │ │ │ + q_3: ────┼──┤ X ├──┼──┤ X ├──┼────────░───■────┼────┼────■─────────────░───┼────┼────┼───────────────── + ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐┌───┐ ░ │ │ │ │ ░ │ │ │ + q_4: ──┤ X ├─────┤ X ├─────┤ X ├┤ X ├─░───┼────┼────┼────┼────■────────░───┼────┼────┼───────────────── + └───┘ └───┘ └───┘└───┘ ░ │ ┌─┴─┐ │ ┌─┴─┐ │ ░ │ │ │ + q_5: ─────────────────────────────────░───┼──┤ X ├──┼──┤ X ├──┼────────░───■────┼────┼────■──────────── + ░ ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐┌───┐ ░ │ │ │ │ + q_6: ─────────────────────────────────░─┤ X ├─────┤ X ├─────┤ X ├┤ X ├─░───┼────┼────┼────┼────■─────── + ░ └───┘ └───┘ └───┘└───┘ ░ │ ┌─┴─┐ │ ┌─┴─┐ │ + q_7: ─────────────────────────────────░────────────────────────────────░───┼──┤ X ├──┼──┤ X ├──┼─────── + ░ ░ ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐┌───┐ + q_8: ─────────────────────────────────░────────────────────────────────░─┤ X ├─────┤ X ├─────┤ X ├┤ X ├ + ░ ░ └───┘ └───┘ └───┘└───┘ + + + + +While if we compile the whole function to a quantum circuit using qlasskit, we obtain the following quantum circuit: + +.. code-block:: text + + q_0: ────■────■────■────■────■────■────■───────────────── + │ ┌─┴─┐ │ ┌─┴─┐ │ │ │ + q_1: ────■──┤ X ├──■──┤ X ├──■────┼────┼────■──────────── + │ └───┘ │ └───┘ │ │ │ │ + q_2: ────┼─────────┼─────────┼────┼────┼────┼────■─────── + │ │ │ ┌─┴─┐ │ ┌─┴─┐ │ + q_3: ────┼─────────┼─────────┼──┤ X ├──┼──┤ X ├──┼─────── + ┌─┴─┐ ┌─┴─┐ ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐┌───┐ + q_4: ──┤ X ├─────┤ X ├─────┤ X ├─────┤ X ├─────┤ X ├┤ X ├ + └───┘ └───┘ └───┘ └───┘ └───┘└───┘ + + +As we can see from the circuit drawings, qlasskit approach needs half the number of qubits and approximately 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: + +.. code-block:: python + + def f(n: Qint4) -> bool: + return n == 3 + +Is translated to this boolean expression: + +.. code-block:: python + + _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 `_re`. + + +.. code-block:: text + + n.0: ─────■─────────────────────────────■─────── + │ │ + n.1: ─────■─────────────────────────────■─────── + │ ┌───┐ ┌───┐┌───┐ │ ┌───┐ + n.2: ─────┼──┤ X ├──■──┤ X ├┤ X ├──■────┼──┤ X ├ + │ ├───┤ │ └───┘├───┤ │ │ └───┘ + n.3: ─────┼──┤ X ├──┼────■──┤ X ├──┼────┼─────── + │ └───┘ │ ┌─┴─┐└───┘ │ │ + _re: ─────┼─────────┼──┤ X ├───────┼────┼─────── + ┌─┴─┐ │ └─┬─┘ │ ┌─┴─┐ + a_4: ───┤ X ├───────■────┼─────────■──┤ X ├───── + └───┘ ┌─┴─┐ │ ┌─┴─┐└───┘ + a_5: ─────────────┤ X ├──■───────┤ X ├────────── + └───┘ └───┘ + diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..fca8ed0e --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,29 @@ +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. + +.. toctree:: + :maxdepth: 2 + :caption: Qlasskit + + quickstart.ipynb + howitworks + supported + algorithms + api + +.. toctree:: + :maxdepth: 2 + :caption: Examples + + example_grover_1.ipynb + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/_sources/quickstart.ipynb.txt b/_sources/quickstart.ipynb.txt new file mode 100644 index 00000000..c78f106f --- /dev/null +++ b/_sources/quickstart.ipynb.txt @@ -0,0 +1,136 @@ +{ + "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, Qint2\n", + "\n", + "@qlassf \n", + "def sum_two_numbers(a: Qint2, b: Qint2) -> Qint2:\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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7GIwzZgxgwMHDvSbdu7cOebOnUt6ejo//OEP6e7uprKykkmTJrF7925iYsw5iD3fCy+8A38+Cn0D3MsdGwNl0+DeeQoxEbtqa4L6V+HjQZ70Ez8BZi6EtJxwVhVco3LztXevNRLi06cVAVJSUti+fTurVq3iK1/5CnFxcdx999385Cc/MSrEwAqnB26CzxfBngbr6fdHPrRCbVwc/K8vQLKB58NFZPgmZkP5N61AO/mBddOzz2uddiz+AqTmgMPPa+rRRkE2gOnTp7N169ZwlhRSyfGwaA4sAtY+D2e7rAcEK8RERgeHA1KnWD9tJ6wn4Y9xQpqf19KjlVmHGEEyVJCJiIg5RuUR2cXnMIqIiPlG5RGZiIjYh4JMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMdqoCDKPx0NlZSV5eXk4nU6ys7NZtWoVnZ2dLF++HIfDwaZNmyJdpoiIBCAu0gWEWl1dHRUVFbjdbhITEyksLOTkyZNs3LiRhoYGWltbASgpKYlsoRJS3RdgnwvOdUOMA9KTYWYmxI6KXTkRe7N1kHk8HpYsWYLb7Wb16tWsXbuW5ORkAJ588kkeeeQR4uLicDgcFBUVRbhaCYW2Tnh1H7xzDHp6+08bHw/z82HBLBhr6/8TROzN1vujK1euxOVysWLFCjZs2HApxAAqKyspLi6mt7eXnJwcUlJSIliphIKrFX78e3jr8JUhBnC2C15+H376GnT2hL8+EQkO2wZZfX09VVVVpKens27dugHnmTdvHgDFxcWXXrsYfGVlZYwbNw6HwxGWeiW42jrh6R3Q3j30vMdPwy/+CH3e0NclIsFn2yDbsmULXq+XpUuXkpSUNOA88fHxQP8gO3LkCM899xwZGRnceOONYalVgm97vXU9bLiOfgR7XaGrR0RCx7ZBtn37dgAWLFgw6Dwul7XlujzIbrvtNlpaWnjxxRdZuHBhaIuUkOi5ANVH/W+361DwaxGR0LNtkB0/fhyAqVOnDji9t7eXXbt2Af2DLCbGtn+SUaO+xRql6K/DH8K5ruDXIyKhZduxWp2dnQB0dQ28ZaqqqsLj8ZCcnExubm5IayktLcXtdoe0j+H6/GPVJIzPpMXdQlaWPU+dTi9/iOu/+H8Calv+mUWcddcHuSKR6PHj5dWkJmfS0hJd24CMjAxqamoCamvbIMvIyKCtrY3a2lrKy8v7TWtpaWHNmjUAFBUVhXxAh9vtprm5OaR9DFdfX9+l39FSU7BNPP1RwG1bTjbR1mLPv4sI2HMbYNsgW7hwIfX19axfv55FixZRUFAAQHV1NcuWLcPj8QDhuRE6IyMj5H0MV2xs7KXfkydPjnA1oRHXewYAn8/n105K34VuUpw+Emz6dxGB6N0GjGQ7adsgq6ys5D/+4z9oampi9uzZzJw5k+7ubo4cOUJFRQU5OTm88sor/a6PhUqgh8uhsPZ56/6pzIzMS4Nd7Mbrgx+9BJ52/460y2c4eerowRBVJRIddv4cejogM9M+2wDbjmzIyspi586dLF68GKfTSWNjI6mpqWzevJlt27Zx6JA1RC0cQSbhFeOAW/L9b3drQfBrEZHQs+0RGcCsWbPYunXrFa93dHTQ2NhITEwMc+bMiUBlEmqfKYD9zdZIxOFYNBumpIW2JhEJDVsH2WD27duHz+ejoKCAhISEK6Y/++yzAOzfv7/fv3NycigtLQ1foRKwuFj4q9vhl29C/cmrz7toNnxeB+YixhqVQbZ3715g8NOK999//4D/fuihh/jlL38Z0tokeMaNgW/dAQdOwq7D1hGa77Lp5XnWKcis1EhVKCLBoCAbgM/nG/B1MU+MAwonWz8fn4cfvQgdPZDihAduinR1IhIMth3scTVDBZnYU8LYT75/TM+CFrGPUXlEdvE5jCIiYr5ReUQmIiL2oSATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERo42KIPN4PFRWVpKXl4fT6SQ7O5tVq1bR2dnJ8uXLcTgcbNq0KdJlioSUzwc9vdDZA33eSFcjkeDzWT8X/9su4iJdQKjV1dVRUVGB2+0mMTGRwsJCTp48ycaNG2loaKC1tRWAkpKSyBYqEiId3fB2A7x1BE53WK/FOGBOFtySDwUZ4HBEtkYJrc5WcNVByz7o7bFeO98JB16DrBJISo9kdSNn6yDzeDwsWbIEt9vN6tWrWbt2LcnJyQA8+eSTPPLII8TFxeFwOCgqKopwtSLB994J+Pe34EJf/9e9Pni/yfrJvxa+eRskjI1MjRI6Ph80vAmNbw883VVn/UyZB/l3mLtDY+tTiytXrsTlcrFixQo2bNhwKcQAKisrKS4upre3l5ycHFJSUiJYqUjwvXcCfrnzyhD7tMMfws+3W6cdxV4O/3HwELvciXesozNTTzfaNsjq6+upqqoiPT2ddevWDTjPvHnzACguLr702rPPPst9993H1KlTSUhIYObMmXz/+9+no6MjLHWLBENnD/zqLRjudunEafj9+yEtScLs9HE4UTP8+Zvfg48aQldPKNk2yLZs2YLX62Xp0qUkJSUNOE98fDzQP8g2bNhAbGwsP/rRj3j55Zf5zne+w89+9jPuuusuvF5dIRcz/PkonB/iSOzT3m6A8zoqsw3Xu+FpEw1se41s+/btACxYsGDQeVwuF9A/yF566SUmTZp06d+33347kyZNYunSpbz55pvcdtttIapYJHjeOux/m4/PQ90JKJsW/HokvHo6Aju6aj0OH5+BhAnBrii0bBtkx48fB2Dq1KkDTu/t7WXXrl1A/yC7PMQuKi0tBaC5uTmgWkpLS3G73QG1DbbPP1ZNwvhMWtwtZGXdGOlywm40vH9HTBz3rWsMqO3adf/E3pd/FNyCJOxmZs3ne1/6dUBt71/yEO8dez3IFQ0tIyODmho/zoVexrZB1tnZCUBXV9eA06uqqvB4PCQnJ5Obm3vVZe3YsQOAWbNmBVSL2+0OOASDra+v79LvaKkpnEbD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kRlqQgLcO8//due64MzH/j14+N554d/7l6EVToayaf61CeTzj42Br5Xr26Eleo26I7KLz2G0g7JpcPQjeLth+G2G+/X2F9003f+NpYTPX5bCyTPWNzgPh7+fP1hHfhnj/W8nEi7axzKYw2FtZOblhGb583LggTKNVIxmzjHw7QVw3cTQLP++UmtnRiSaKcgMFxsDS+fDXxQGL3AcDmt5S+fra+1NkOSEFQthdhCfNuQcA1+/BT4zI3jLFAmVUXdq0Y5iHLDkepiTBVv2wKnBnys8pGtS4Ks3W/cpiTkSxsJf3W59i/cL70DX+cCXNTMTvnKzrouKORRkNpI7Cf5nBdQcgzcPWddOhuu6ida9SaW5MFZrhZEcDut65qxM2HUYdh8Z/jd6O7DuEbs13xpEotPJYhJtsmxmbJx1w3R5HjR64GCL9fX0rlZrpJoPa6OVEm89sy87FWZkQk66Nl52kRwPdxXBojmwv9kaEORqBVfbJ0dqMQ7rfsTsVMhOg7lZ1hNDREykILMph8M6Qrv8FKHPB16ftRFTaNlfbAzMzbZ+LvL6rPVAQ+nFThRko4jDAbEKsFEtxoF1SC5iI9ovExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRocZEuQCSUPu4BVxs0nYZT7fDxeev1rvPw5iHISoXrJsBY/Z9gSz4fnO2yPv+mVmjr7L8OVB+11oFrUyDGprv1veeh4xSc+xA6T8OFbuv1C91wvAZSroXkayFubGTrHAmHz+fzRboIkWDyeqG+xQqqAydhqBV8TCzMy4FbCiA7NRwVSqj19EJto7UONLcNPX+yE8rzrJ+JiSEvL+R8PjjbDE11cOoQ+LxXn9/hgEn5kFUCE7Otf5tEQSa2crAFfvNn8HQE1j7/WvjyTTApObh1SXh4fbDrEGx7D7ov+N/e4YCbp8M910O8oUco7aeg/hXrCCwQSZNg1mdhfGZw6wolBZnYQvcFeLEW3joy8mWNiYW7S+AzMyDGsD3T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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 conver from/to high level types of qlasskit without worrying about the binary representation." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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yWezOjonVylqktEpzMfJ1egEAABUHGXOAVkskrOb0SkAAEBN4DArAACAiVHmAAAATIwyBwAAYGKUOQAAABOjzAEAAJgYZQ4AAMDEKHMAAAAmRpkDAAAwMcocAACAiVHmAAAATIwyBwAAYGKUOQAAABOjzAEAAJgYZQ4AAMDEKHMAAAAmRpkDAAAwMcocAACAiVHmAAAATMzF6AAAAKCkoqIinT171ugYFeLl5SWLxWJ0jDqHMgcAQC109uxZ+fj4GB2jQrKysuTt7W10jDqHw6wAAAAmRpkDAAAwMcocAACAiVHmAAAATIwyBwAAYGKUOQAAABOjzAEAAJgYZQ4AAMDEKHMAAAAmRpkDAAAwMcocAAB1gJOTk5o2bao2bdooJCRE9erVq9D6Xl5emjp1qpycqA61Dc9mBQDAQfXt21e33nqrunfvri5dupR41uuRI0e0c+dObdmyRUuWLJHNZit1O15eXlq7dq0GDBigzp07a/z48SosLKyJHwHlYCkqKioyOgSA6lWQJ22Yb3QKoHaJmiQ5uxmdomzZ2dklyld5ODs76+6779aDDz6oyMjIcq937tw5vffee5o3b5727Nljn35pkZOkkydPqkePHjp48GCJbWRlZcnb27vCmXF1HH6s1GazKT4+XqGhofLw8FDz5s01efJkZWdna8KECbJYLFqwYIHRMYFaJzfvrMbNbK2YOIte+ijW6DgAyqFjx4769ttvtWjRohJF7vDhw1q5cqWWLl2q5cuX66uvvtKZM2fs893d3TVu3DglJibq2WeflZubW6lFLjo6utQiB+M49GHWpKQkDRkyRFarVd7e3goPD9exY8c0f/58HTp0SJmZmZKkLl26GBsUqIXe/uwpncr+zegYAMopNjZWc+fOlbu7u33aN998o1dffVVr1661/867lJOTkzp06KDx48drwoQJatiwoVxcXPT4449r1KhRysrKUq9evST9r8jt3Lmzxn4mlI/DjszZbDYNHz5cVqtVU6ZMUUZGhnbt2iWr1apZs2ZpzZo12rFjhywWiyIiIoyOC9QqKWm79OHXL2h8zDNGRwFQDk899ZReeukle5Hbv3+/+vTpo759+2rp0qWlFjlJKiws1L59+zR16lQFBwfrySefVF5enqQLo3wUOXNw2DI3adIkpaWl2f9S8fX1tc+Lj49XZGSk8vPzFRISIj8/PwOTArVLQWGBnn9/onq0G6zrOt9idBwAVzB58mQ988z//vCaN2+errnmGm3durVC28nNzdWzzz6rfv36KTs72z69sLBQY8eOpcjVYg5Z5pKTk7VixQoFBARo5syZpS7TrVs3SbrsyaFDhgyRxWLR008/XR0xgVrpw6+e19Fff1DsKM4lBWq7rl27au7cufbXDz/8sB555BGdO3euUtvz8vLS7Nmzi13E4OTkpIcfflgWi+Wq86J6OGSZW758uQoLCzVmzJgyrwTy9PSUVHaZe++995SUlFRdEYFaKSPzsJasn64xMU8psEGI0XEAXIarq6sWL14sF5cLp7/PnDlTL7zwQqW39/uLHU6dOiWr1SpJuv7663XPPfdcdWZUD4cscwkJCZKkqKioMpdJS0uTVHqZO336tB566KFif+0AdcGLH9ynwIatdWv/vxodBcAVTJo0yX7Od1JSkqZPn17pbZV21er111+vcePG2ZeZM2eO/P39ry40qoVDXs165MgRSVLLli1LnZ+fn68tW7ZIKr3MPf744woLC9OYMWM0duzYq87TvXt3+183gBHcXDy1KDblsst8sXOpdqV8rn/e/5VcnF1rKBlgnLZhbZWXn2N0jDJd7qa8Tk5OevDBB+2v//SnP+n8+fOVep+ybj9y8Ry5N998UxMmTJCvr6/uvPPOy47+tW3blidEVFJgYKASExMrta5DlrmLJ27m5JT+JV2xYoVsNpt8fX3VqlWrYvMSExP1+uuvV+mJnlarVenp6VW2PaCiPFy9Ljs/L/+cFn7yV/VsP1T+voFKt124h5Tt1IX9Njv3lNJtB1XPO0A+nvWrOy5QIzKOHVPu+bNGx6iUwYMH239/ffrpp5U+LehKRU6SZs+erQkTJkiSHnjgAb344osq63kDGRkZlcqBq+OQZS4wMFAnTpzQrl271Lt372LzMjIyFBcXJ0mKiIgodkJnQUGB7r33XsXGxqpjx45VmgcwkpuL52Xn553P0cns37QteY22Ja8pMf/LXUv15a6luuemObpt4CPVFROoUUFNm9b6kbmyytEf//hH+3+/8sorldp+eYqcJB04cEBffPGFoqOj1bZtW3Xr1q3MEaSgoCBG5irparqCQ5a56OhoJScna9asWYqJiVFYWJgkaceOHRo3bpz92XO/v1nwggUL9Msvv1T51auVHTYFqsqVHufl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", + "text/plain": [ + "
" + ] + }, + "execution_count": 9, + "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(sum_two_numbers.encode_input(Qint2(1), Qint2(2)), sum_two_numbers.input_qubits)\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": 10, + "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/vjj2rdvX5n5r7zy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", + "text/plain": [ + "
" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import Aer, QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "simulator = Aer.get_backend(\"aer_simulator\")\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": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/supported.rst.txt b/_sources/supported.rst.txt new file mode 100644 index 00000000..3fb89e2b --- /dev/null +++ b/_sources/supported.rst.txt @@ -0,0 +1,236 @@ +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; this type has subtypes for different Qint sizes (Qint2, Qint4, Qint8, Qint12, Qint16). +Single bit of the Qint are accessible by the subscript operator `[]`. + + +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[Qint2,3]`. + + + +Expressions +----------- + +Constants +^^^^^^^^^^^^^ + +.. code-block:: python + + True + +.. code-block:: python + + 42 + + +Tuple +^^^^^ + +.. code-block:: python + + (a, b) + +List (fixed size) +^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + [a, b] + + +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 + + + +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 + + + +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[Qint4,2]) -> Qint4: + 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..30fee9d0 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_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/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..d06a71d7 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_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..84ab3030 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* 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..7918c3fa --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_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..c684129a --- /dev/null +++ b/algorithms.html @@ -0,0 +1,118 @@ + + + + + + + Algorithms — qlasskit documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Algorithms

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/api.html b/api.html new file mode 100644 index 00000000..c101c667 --- /dev/null +++ b/api.html @@ -0,0 +1,156 @@ + + + + + + + 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.qcircuit.qcircuit.QCircuit([...])

qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper()

Wrapper interface for a class containing a qcircuit

qlasskit.qcircuit.gates

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover_1.html b/example_grover_1.html new file mode 100644 index 00000000..a6c5f7d0 --- /dev/null +++ b/example_grover_1.html @@ -0,0 +1,199 @@ + + + + + + + Grover search — qlasskit documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ + + + +
+
+ +
+
+
+
+ + + + \ 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..96567b13 --- /dev/null +++ b/generated/qlasskit.algorithms.grover.Grover.html @@ -0,0 +1,212 @@ + + + + + + + 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)
+
+
+__init__(oracle: QlassF, element_to_search: Qtype | None = None, n_iterations: int | None = None)
+
+
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))

  • +
+
+
+
+ +

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)

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_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..74bab24b --- /dev/null +++ b/generated/qlasskit.algorithms.qalgorithm.html @@ -0,0 +1,153 @@ + + + + + + + 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.qcircuit.gates.html b/generated/qlasskit.qcircuit.gates.html new file mode 100644 index 00000000..2015c0e3 --- /dev/null +++ b/generated/qlasskit.qcircuit.gates.html @@ -0,0 +1,187 @@ + + + + + + + qlasskit.qcircuit.gates — qlasskit documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qcircuit.gates

+

Functions

+ + + + + + +

apply(gate, qubits[, param])

+

Classes

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

Barrier()

CCX()

CX()

H()

MCX(n_controls)

MCtrl(gate, n_controls)

NopGate([name])

QControlledGate(gate, n_controls)

QGate(name[, n_qubits])

S()

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..5481be8d --- /dev/null +++ b/generated/qlasskit.qcircuit.qcircuit.QCircuit.html @@ -0,0 +1,218 @@ + + + + + + + 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.

barrier([label])

Add a barrier to the circuit

ccx(w1, w2, w3)

CCX gate

copy()

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

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

Multi controlled gate

mcx(wl, target)

Multi CX gate

s(w)

S gate

t(w)

T gate

x(w)

X gate

y(w)

Y gate

z(w)

Z gate

+

Attributes

+ + + + + + +

num_gates

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ 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..b681c4e3 --- /dev/null +++ b/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.html @@ -0,0 +1,198 @@ + + + + + + + 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)

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_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..3cfb0baa --- /dev/null +++ b/generated/qlasskit.qlassfun.QlassF.html @@ -0,0 +1,234 @@ + + + + + + + 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)

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_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_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..9bcf000e --- /dev/null +++ b/generated/qlasskit.qlassfun.qlassf.html @@ -0,0 +1,153 @@ + + + + + + + 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', 'poc3', 'tweedledum'] = 'internal', bool_optimizer: ~qlasskit.boolopt.bool_optimizer.BoolOptimizerProfile = <qlasskit.boolopt.bool_optimizer.BoolOptimizerProfile object>, uncompute: bool = True) QlassF
+

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: bestWorkingOptimizer)

  • +
  • 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..a214cc5c --- /dev/null +++ b/generated/qlasskit.qlassfun.qlassfa.html @@ -0,0 +1,138 @@ + + + + + + + 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', 'poc3', '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/genindex.html b/genindex.html new file mode 100644 index 00000000..1c5e7fe6 --- /dev/null +++ b/genindex.html @@ -0,0 +1,189 @@ + + + + + + Index — qlasskit documentation + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+ +
+ +
+ +
+

© Copyright 2023, Davide Gessa (dakk).

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/howitworks.html b/howitworks.html new file mode 100644 index 00000000..e1da202b --- /dev/null +++ b/howitworks.html @@ -0,0 +1,225 @@ + + + + + + + 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. +
+

2. 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. +3. Finally, the _compiler_ module takes these optimized boolean expressions and compiles them into a +quantum circuit.

+

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

+

For instance, let assume we have the following function:

+
def f_comp(b: bool, n: Qint2) -> Qint2:
+      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 something like the +following circuit:

+
q_0: ────■────■────■──────────────────░───■────■────■──────────────────░───■────■────■─────────────────
+         │    │    │                  ░   │    │    │                  ░   │    │    │
+q_1: ────■────┼────┼────■─────────────░───┼────┼────┼──────────────────░───┼────┼────┼─────────────────
+         │    │    │    │             ░   │    │    │                  ░   │    │    │
+q_2: ────┼────┼────┼────┼────■────────░───┼────┼────┼──────────────────░───┼────┼────┼─────────────────
+         │  ┌─┴─┐  │  ┌─┴─┐  │        ░   │    │    │                  ░   │    │    │
+q_3: ────┼──┤ X ├──┼──┤ X ├──┼────────░───■────┼────┼────■─────────────░───┼────┼────┼─────────────────
+       ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐┌───┐ ░   │    │    │    │             ░   │    │    │
+q_4: ──┤ X ├─────┤ X ├─────┤ X ├┤ X ├─░───┼────┼────┼────┼────■────────░───┼────┼────┼─────────────────
+       └───┘     └───┘     └───┘└───┘ ░   │  ┌─┴─┐  │  ┌─┴─┐  │        ░   │    │    │
+q_5: ─────────────────────────────────░───┼──┤ X ├──┼──┤ X ├──┼────────░───■────┼────┼────■────────────
+                                      ░ ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐┌───┐ ░   │    │    │    │
+q_6: ─────────────────────────────────░─┤ X ├─────┤ X ├─────┤ X ├┤ X ├─░───┼────┼────┼────┼────■───────
+                                      ░ └───┘     └───┘     └───┘└───┘ ░   │  ┌─┴─┐  │  ┌─┴─┐  │
+q_7: ─────────────────────────────────░────────────────────────────────░───┼──┤ X ├──┼──┤ X ├──┼───────
+                                      ░                                ░ ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐┌───┐
+q_8: ─────────────────────────────────░────────────────────────────────░─┤ X ├─────┤ X ├─────┤ X ├┤ X ├
+                                      ░                                ░ └───┘     └───┘     └───┘└───┘
+
+
+

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

+
q_0: ────■────■────■────■────■────■────■─────────────────
+         │  ┌─┴─┐  │  ┌─┴─┐  │    │    │
+q_1: ────■──┤ X ├──■──┤ X ├──■────┼────┼────■────────────
+         │  └───┘  │  └───┘  │    │    │    │
+q_2: ────┼─────────┼─────────┼────┼────┼────┼────■───────
+         │         │         │  ┌─┴─┐  │  ┌─┴─┐  │
+q_3: ────┼─────────┼─────────┼──┤ X ├──┼──┤ X ├──┼───────
+       ┌─┴─┐     ┌─┴─┐     ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐┌───┐
+q_4: ──┤ X ├─────┤ X ├─────┤ X ├─────┤ X ├─────┤ X ├┤ X ├
+       └───┘     └───┘     └───┘     └───┘     └───┘└───┘
+
+
+

As we can see from the circuit drawings, qlasskit approach needs half the number of qubits and approximately 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:

+
def f(n: Qint4) -> bool:
+    return n == 3
+
+
+

Is translated to this boolean expression:

+
_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 _re.

+
n.0: ─────■─────────────────────────────■───────
+          │                             │
+n.1: ─────■─────────────────────────────■───────
+          │  ┌───┐     ┌───┐┌───┐       │  ┌───┐
+n.2: ─────┼──┤ X ├──■──┤ X ├┤ X ├──■────┼──┤ X ├
+          │  ├───┤  │  └───┘├───┤  │    │  └───┘
+n.3: ─────┼──┤ X ├──┼────■──┤ X ├──┼────┼───────
+          │  └───┘  │  ┌─┴─┐└───┘  │    │
+_re: ─────┼─────────┼──┤ X ├───────┼────┼───────
+        ┌─┴─┐       │  └─┬─┘       │  ┌─┴─┐
+a_4: ───┤ X ├───────■────┼─────────■──┤ X ├─────
+        └───┘     ┌─┴─┐  │       ┌─┴─┐└───┘
+a_5: ─────────────┤ X ├──■───────┤ X ├──────────
+                  └───┘          └───┘
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..286a7528 --- /dev/null +++ b/index.html @@ -0,0 +1,163 @@ + + + + + + + Qlasskit — qlasskit documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

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.

+ +
+

Examples

+ +
+
+
+

Indices and tables

+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 00000000..3870b209 Binary files /dev/null and b/objects.inv differ diff --git a/py-modindex.html b/py-modindex.html new file mode 100644 index 00000000..d0ffc5fb --- /dev/null +++ b/py-modindex.html @@ -0,0 +1,139 @@ + + + + + + Python Module Index — qlasskit documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ q +
+ + + + + + + + + + + + + +
 
+ q
+ qlasskit +
    + qlasskit.algorithms.qalgorithm +
    + qlasskit.qcircuit.gates +
+ + +
+
+
+ +
+ +
+

© Copyright 2023, 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..3999112b --- /dev/null +++ b/quickstart.html @@ -0,0 +1,194 @@ + + + + + + + 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, Qint2
+
+@qlassf 
+def sum_two_numbers(a: Qint2, b: Qint2) -> Qint2:
+    return a + b
+
+
+
+
+
---------------------------------------------------------------------------
+ModuleNotFoundError                       Traceback (most recent call last)
+Cell In[1], line 1
+----> 1 from qlasskit import qlassf, Qint2
+      3 @qlassf 
+      4 def sum_two_numbers(a: Qint2, b: Qint2) -> Qint2:
+      5     return a + b
+
+ModuleNotFoundError: No module named 'qlasskit'
+
+
+
+
+

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

+
+
+
circuit = sum_two_numbers.export('qiskit')
+circuit.draw('mpl')
+
+
+
+
+_images/867ed7db5e6da008fc2d54c87dde0f273e643e6ccfcaa8c5436bbe96926cc514.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 conver 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/6a5c9f70167fa721588b49f6481be896f1ec8ff94cbe865241ef10e7f211f1da.png +
+
+
+
+
from qiskit import Aer, QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+
+simulator = Aer.get_backend("aer_simulator")
+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/745705f5337e01d402d07cf68ba7a45937f40f988c0ae6531da5409106dcd6f4.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/reports/example_grover_1.err.log b/reports/example_grover_1.err.log new file mode 100644 index 00000000..73704ea8 --- /dev/null +++ b/reports/example_grover_1.err.log @@ -0,0 +1,41 @@ +Traceback (most recent call last): + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/jupyter_cache/executors/utils.py", line 58, in single_nb_execution + executenb( + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/nbclient/client.py", line 1314, in execute + return NotebookClient(nb=nb, resources=resources, km=km, **kwargs).execute() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/jupyter_core/utils/__init__.py", line 173, in wrapped + return loop.run_until_complete(inner) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/asyncio/base_events.py", line 664, in run_until_complete + return future.result() + ^^^^^^^^^^^^^^^ + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/nbclient/client.py", line 709, in async_execute + await self.async_execute_cell( + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/nbclient/client.py", line 1062, in async_execute_cell + await self._check_raise_for_error(cell, cell_index, exec_reply) + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/nbclient/client.py", line 918, in _check_raise_for_error + raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content) +nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: +------------------ +from qlasskit import qlassf, Qlist, Qint2 + +@qlassf +def and_all(a_list: Qlist[bool, 4]) -> bool: + r = True + for i in a_list: + r = r and i + return r +------------------ + + +--------------------------------------------------------------------------- +ModuleNotFoundError Traceback (most recent call last) +Cell In[1], line 1 +----> 1 from qlasskit import qlassf, Qlist, Qint2 + 3 @qlassf + 4 def and_all(a_list: Qlist[bool, 4]) -> bool: + 5 r = True + +ModuleNotFoundError: No module named 'qlasskit' + diff --git a/reports/quickstart.err.log b/reports/quickstart.err.log new file mode 100644 index 00000000..a2b9ba40 --- /dev/null +++ b/reports/quickstart.err.log @@ -0,0 +1,38 @@ +Traceback (most recent call last): + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/jupyter_cache/executors/utils.py", line 58, in single_nb_execution + executenb( + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/nbclient/client.py", line 1314, in execute + return NotebookClient(nb=nb, resources=resources, km=km, **kwargs).execute() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/jupyter_core/utils/__init__.py", line 173, in wrapped + return loop.run_until_complete(inner) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/asyncio/base_events.py", line 664, in run_until_complete + return future.result() + ^^^^^^^^^^^^^^^ + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/nbclient/client.py", line 709, in async_execute + await self.async_execute_cell( + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/nbclient/client.py", line 1062, in async_execute_cell + await self._check_raise_for_error(cell, cell_index, exec_reply) + File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/nbclient/client.py", line 918, in _check_raise_for_error + raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content) +nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: +------------------ +from qlasskit import qlassf, Qint2 + +@qlassf +def sum_two_numbers(a: Qint2, b: Qint2) -> Qint2: + return a + b +------------------ + + +--------------------------------------------------------------------------- +ModuleNotFoundError Traceback (most recent call last) +Cell In[1], line 1 +----> 1 from qlasskit import qlassf, Qint2 + 3 @qlassf + 4 def sum_two_numbers(a: Qint2, b: Qint2) -> Qint2: + 5 return a + b + +ModuleNotFoundError: No module named 'qlasskit' + diff --git a/search.html b/search.html new file mode 100644 index 00000000..8091fdf7 --- /dev/null +++ b/search.html @@ -0,0 +1,129 @@ + + + + + + Search — qlasskit documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2023, 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..ad462bd9 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["algorithms", "api", "example_grover_1", "generated/qlasskit.algorithms.grover.Grover", "generated/qlasskit.algorithms.qalgorithm", "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", "howitworks", "index", "quickstart", "supported"], "filenames": ["algorithms.rst", "api.rst", "example_grover_1.ipynb", "generated/qlasskit.algorithms.grover.Grover.rst", "generated/qlasskit.algorithms.qalgorithm.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", "howitworks.rst", "index.rst", "quickstart.ipynb", "supported.rst"], "titles": ["Algorithms", "API", "Grover search", "qlasskit.algorithms.grover.Grover", "qlasskit.algorithms.qalgorithm", "qlasskit.qcircuit.gates", "qlasskit.qcircuit.qcircuit.QCircuit", "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper", "qlasskit.qlassfun.QlassF", "qlasskit.qlassfun.qlassf", "qlasskit.qlassfun.qlassfa", "How it works", "Qlasskit", "Quickstart", "Supported python subset"], "terms": {"we": [2, 3, 11, 13], "defin": [2, 13], "function": [2, 3, 4, 5, 8, 9, 11, 13], "name": [2, 6, 8, 13], "and_al": 2, "return": [2, 3, 8, 11, 13], "true": [2, 3, 9, 10, 14], "iff": 2, "all": [2, 11, 14], "element": [2, 3], "an": [2, 11], "input": [2, 9], "list": [2, 8, 9, 10], "a_list": 2, "ar": [2, 11, 14], "want": [2, 3], "us": [2, 11, 12, 13], "find": 2, "valu": 2, "led": 2, "result": [2, 12, 13], "from": [2, 11, 13], "qlasskit": [2, 11, 13, 14], "import": [2, 13, 14], "qlassf": [2, 3, 10, 12, 13, 14], "qlist": [2, 14], "qint2": [2, 11, 13, 14], "def": [2, 9, 10, 11, 13], "bool": [2, 3, 9, 10, 11], "4": [2, 3, 13, 14], "r": 2, "i": [2, 11, 12, 14], "modulenotfounderror": [2, 13], "traceback": [2, 13], "most": [2, 13], "recent": [2, 13], "call": [2, 13], "last": [2, 13], "cell": [2, 13], "In": [2, 11, 13, 14], "1": [2, 11, 13, 14], "line": [2, 13], "3": [2, 11, 13, 14], "5": [2, 13], "No": [2, 13], "modul": [2, 11, 12, 13, 14], "The": [2, 6, 11, 13, 14], "compil": [2, 9, 10, 12, 14], "produc": 2, "optim": [2, 9, 11], "quantum": [2, 6, 9, 11, 12, 13], "circuit": [2, 6, 9, 11, 12, 13, 14], "perform": 2, "given": [2, 11], "export": [2, 11, 13], "qiskit": [2, 13], "draw": [2, 11, 13], "mpl": [2, 13], "now": [2, 11, 13], "can": [2, 11, 13], "our": [2, 3], "oracl": [2, 3], "For": [2, 11], "instanc": [2, 11], "yeld": 2, "algorithm": [2, 11, 12], "q_algo": 2, "prepar": [2, 11], "qc": [2, 6, 13], "prefer": 2, "framework": [2, 11, 13], "simul": [2, 13], "sampl": 2, "thi": [2, 11, 14], "exampl": [2, 11, 14], "aer_simul": [2, 13], "class": [2, 3, 4, 5, 6, 7, 8], "along": 2, "wrapper": [2, 7], "provid": 2, "util": [2, 14], "encod": 2, "decod": 2, "output": [2, 11], "high": [2, 13], "level": [2, 13], "type": [2, 9, 10, 12, 13], "definit": 2, "histogram": 2, "": [2, 14], "evid": 2, "lead": [2, 14], "where": 2, "set": 2, "align": 2, "expect": 2, "aer": [2, 13], "quantumcircuit": [2, 13], "transpil": [2, 13], "visual": [2, 13], "plot_histogram": [2, 13], "measure_al": 2, "get_backend": [2, 13], "circ": [2, 13], "run": [2, 13], "count": [2, 13], "get_count": [2, 13], "counts_read": [2, 13], "decode_count": [2, 13], "element_to_search": 3, "qtype": [3, 9, 10], "none": [3, 6], "n_iter": 3, "int": [3, 6], "__init__": [3, 6, 7, 8], "paramet": [3, 6, 9, 10], "f": [3, 9, 11, 14], "x": [3, 11], "satisfi": 3, "gener": 3, "y": 3, "compar": 3, "option": [3, 6, 9, 14], "search": [3, 12], "forc": 3, "number": [3, 6, 11, 13, 14], "iter": [3, 14], "otherwis": 3, "pi": 3, "sqrt": 3, "n": [3, 11], "method": [3, 6, 7, 8], "attribut": [3, 6, 7, 8], "except": 4, "num_qubit": [6, 13], "0": [6, 11, 14], "nativ": 6, "initi": [6, 13], "qubit": [6, 9, 11, 13, 14], "default": [6, 9], "interfac": 7, "contain": [7, 14], "str": [8, 9], "original_f": 8, "callabl": [8, 9], "arg": 8, "exp": 8, "tupl": 8, "symbol": 8, "boolean": [8, 9, 11], "repres": [8, 11], "to_compil": [9, 10], "liter": [9, 10], "intern": [9, 10], "poc3": [9, 10], "tweedledum": [9, 10, 11], "bool_optim": [9, 10], "boolopt": [9, 10], "booloptimizerprofil": [9, 10], "object": [9, 10], "uncomput": [9, 10, 11], "decor": [9, 10], "creat": 9, "union": 9, "pars": 9, "code": [9, 11], "inject": 9, "supportedcompil": 9, "overrid": 9, "bestworkingoptim": 9, "whenev": 9, "dure": [9, 11, 14], "To": 11, "convert": 11, "python": [11, 12], "implement": 11, "seri": 11, "transform": 11, "It": [11, 14], "begin": 11, "abstract": 11, "syntax": 11, "tree": 11, "more": 11, "streamlin": 11, "form": 11, "_ast2ast_": 11, "2": [11, 13, 14], "next": 11, "translat": [11, 12], "express": [11, 12], "intermedi": 11, "step": 11, "_ast2logic_": 11, "phase": 11, "refin": 11, "final": 11, "_compiler_": 11, "take": 11, "them": [11, 12], "unlik": 11, "other": 11, "librari": [11, 12], "individu": 11, "oper": [11, 12], "befor": 11, "combin": 11, "construct": 11, "singular": 11, "each": [11, 14], "entir": 11, "uniqu": 11, "approach": 11, "facilit": 11, "advanc": 11, "leverag": 11, "algebra": 11, "properti": 11, "let": 11, "assum": 11, "have": [11, 14], "follow": [11, 14], "f_comp": 11, "b": [11, 13, 14], "rang": [11, 13, 14], "els": 11, "If": 11, "decompos": 11, "separ": 11, "addit": 11, "obtain": 11, "someth": 11, "like": 11, "q_0": 11, "q_1": 11, "q_2": 11, "q_3": 11, "q_4": 11, "q_5": 11, "q_6": 11, "q_7": 11, "q_8": 11, "while": 11, "whole": 11, "As": 11, "see": 11, "need": 11, "half": 11, "approxim": 11, "gate": [11, 12, 13, 14], "ast2log": 11, "walk": 11, "its": [11, 14], "statement": [11, 12], "qint4": [11, 14], "_ret": 11, "being": 11, "fed": 11, "which": 11, "invert": 11, "introduc": 11, "auxiliari": 11, "automat": 11, "order": [11, 13], "reduc": 11, "footprint": 11, "two": [11, 13], "backend": 11, "support": [11, 12, 13], "internalcompil": 11, "xag_synth": 11, "qcircuit": [11, 12], "one": 11, "standalon": 11, "previou": 11, "avail": 11, "_re": 11, "a_4": 11, "a_5": 11, "allow": 12, "develop": 12, "write": 12, "classic": 12, "pure": 12, "unitari": 12, "quickstart": 12, "how": 12, "work": 12, "ast": 12, "traslat": 12, "subset": 12, "hybrid": 12, "api": 12, "qlassfun": 12, "qlassfa": 12, "qalgorithm": 12, "grover": 12, "qcircuitwrapp": 12, "index": 12, "page": 12, "first": 13, "instal": 13, "pip": 13, "sum": [13, 14], "sum_two_numb": 13, "ani": [13, 14], "also": 13, "destin": 13, "framwork": 13, "encode_input": 13, "decode_output": 13, "conver": 13, "without": 13, "worri": 13, "about": 13, "binari": 13, "represent": 13, "len": [13, 14], "output_qubit": 13, "input_qubit": 13, "append": 13, "measur": 13, "expand": 14, "limit": 14, "linear": 14, "structur": 14, "ha": 14, "pattern": 14, "param": 14, "static": 14, "unsign": 14, "integ": 14, "subtyp": 14, "differ": 14, "qint8": 14, "qint12": 14, "qint16": 14, "singl": 14, "bit": 14, "access": 14, "hold": 14, "t": 14, "denot": 14, "42": 14, "c": 14, "d": 14, "bultin": 14, "print": 14, "debug": 14, "ignor": 14, "convers": 14, "length": 14, "max": 14, "min": 14, "elemnt": 14, "pleas": 14, "note": 14, "unrol": 14, "therefor": 14, "essenti": 14, "known": 14, "time": 14, "cond": 14, "12": 14, "13": 14, "At": 14, "present": 14, "design": 14, "branch": 14, "bodi": 14, "exclus": 14, "you": 14, "through": 14, "q": 14, "keep": 14, "mind": 14, "incorpor": 14, "within": 14, "exhibit": 14, "distinct": 14, "behavior": 14, "counterpart": 14, "bell": 14, "cx": 14, "h": 14}, "objects": {"qlasskit.algorithms.grover": [[3, 0, 1, "", "Grover"]], "qlasskit.algorithms.grover.Grover": [[3, 1, 1, "", "__init__"]], "qlasskit.algorithms": [[4, 2, 0, "-", "qalgorithm"]], "qlasskit.qcircuit": [[5, 2, 0, "-", "gates"]], "qlasskit.qcircuit.qcircuit": [[6, 0, 1, "", "QCircuit"]], "qlasskit.qcircuit.qcircuit.QCircuit": [[6, 1, 1, "", "__init__"]], "qlasskit.qcircuit.qcircuitwrapper": [[7, 0, 1, "", "QCircuitWrapper"]], "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper": [[7, 1, 1, "", "__init__"]], "qlasskit.qlassfun": [[8, 0, 1, "", "QlassF"], [9, 3, 1, "", "qlassf"], [10, 3, 1, "", "qlassfa"]], "qlasskit.qlassfun.QlassF": [[8, 1, 1, "", "__init__"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:module", "3": "py:function"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "module", "Python module"], "3": ["py", "function", "Python function"]}, "titleterms": {"algorithm": [0, 3, 4], "api": 1, "grover": [2, 3], "search": 2, "qlasskit": [3, 4, 5, 6, 7, 8, 9, 10, 12], "qalgorithm": 4, "qcircuit": [5, 6, 7], "gate": 5, "qcircuitwrapp": 7, "qlassfun": [8, 9, 10], "qlassf": [8, 9], "qlassfa": 10, "how": 11, "work": 11, "ast": 11, "traslat": 11, "compil": 11, "result": 11, "exampl": 12, "indic": 12, "tabl": 12, "quickstart": 13, "support": 14, "python": 14, "subset": 14, "type": 14, "bool": 14, "qint": 14, "tupl": 14, "list": 14, "express": 14, "constant": 14, "fix": 14, "size": 14, "subscript": 14, "boolean": 14, "oper": 14, "If": 14, "compar": 14, "unari": 14, "op": 14, "bin": 14, "function": 14, "call": 14, "statement": 14, "assign": 14, "return": 14, "For": 14, "loop": 14, "def": 14, "els": 14, "quantum": 14, "hybrid": 14}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Algorithms": [[0, "algorithms"]], "API": [[1, "api"]], "Grover search": [[2, "grover-search"]], "qlasskit.algorithms.grover.Grover": [[3, "qlasskit-algorithms-grover-grover"]], "qlasskit.algorithms.qalgorithm": [[4, "module-qlasskit.algorithms.qalgorithm"]], "qlasskit.qcircuit.gates": [[5, "module-qlasskit.qcircuit.gates"]], "qlasskit.qcircuit.qcircuit.QCircuit": [[6, "qlasskit-qcircuit-qcircuit-qcircuit"]], "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper": [[7, "qlasskit-qcircuit-qcircuitwrapper-qcircuitwrapper"]], "qlasskit.qlassfun.QlassF": [[8, "qlasskit-qlassfun-qlassf"]], "qlasskit.qlassfun.qlassf": [[9, "qlasskit-qlassfun-qlassf"]], "qlasskit.qlassfun.qlassfa": [[10, "qlasskit-qlassfun-qlassfa"]], "How it works": [[11, "how-it-works"]], "AST Traslator": [[11, "ast-traslator"]], "Compiler": [[11, "compiler"]], "Result": [[11, "result"]], "Qlasskit": [[12, "qlasskit"], [12, null]], "Examples": [[12, null]], "Indices and tables": [[12, "indices-and-tables"]], "Quickstart": [[13, "quickstart"]], "Supported python subset": [[14, "supported-python-subset"]], "Types": [[14, "types"]], "bool": [[14, "bool"]], "Qint": [[14, "qint"]], "Tuple": [[14, "tuple"], [14, "id1"]], "List": [[14, "list"]], "Expressions": [[14, "expressions"]], "Constants": [[14, "constants"]], "List (fixed size)": [[14, "list-fixed-size"]], "Subscript": [[14, "subscript"]], "Boolean operators": [[14, "boolean-operators"]], "If expressions": [[14, "if-expressions"]], "Comparators": [[14, "comparators"]], "Unary Op": [[14, "unary-op"]], "Bin Op": [[14, "bin-op"]], "Function call": [[14, "function-call"]], "Statements": [[14, "statements"]], "Assign": [[14, "assign"]], "Return": [[14, "return"]], "For loop": [[14, "for-loop"]], "Function def": [[14, "function-def"]], "If then else": [[14, "if-then-else"]], "Quantum Hybrid": [[14, "quantum-hybrid"]]}, "indexentries": {"grover (class in qlasskit.algorithms.grover)": [[3, "qlasskit.algorithms.grover.Grover"]], "__init__() (qlasskit.algorithms.grover.grover method)": [[3, "qlasskit.algorithms.grover.Grover.__init__"]], "module": [[4, "module-qlasskit.algorithms.qalgorithm"], [5, "module-qlasskit.qcircuit.gates"]], "qlasskit.algorithms.qalgorithm": [[4, "module-qlasskit.algorithms.qalgorithm"]], "qlasskit.qcircuit.gates": [[5, "module-qlasskit.qcircuit.gates"]], "qcircuit (class in qlasskit.qcircuit.qcircuit)": [[6, "qlasskit.qcircuit.qcircuit.QCircuit"]], "__init__() (qlasskit.qcircuit.qcircuit.qcircuit method)": [[6, "qlasskit.qcircuit.qcircuit.QCircuit.__init__"]], "qcircuitwrapper (class in qlasskit.qcircuit.qcircuitwrapper)": [[7, "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper"]], "__init__() (qlasskit.qcircuit.qcircuitwrapper.qcircuitwrapper method)": [[7, "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.__init__"]], "qlassf (class in qlasskit.qlassfun)": [[8, "qlasskit.qlassfun.QlassF"]], "__init__() (qlasskit.qlassfun.qlassf method)": [[8, "qlasskit.qlassfun.QlassF.__init__"]], "qlassf() (in module qlasskit.qlassfun)": [[9, "qlasskit.qlassfun.qlassf"]], "qlassfa() (in module qlasskit.qlassfun)": [[10, "qlasskit.qlassfun.qlassfa"]]}}) \ No newline at end of file diff --git a/supported.html b/supported.html new file mode 100644 index 00000000..3df89815 --- /dev/null +++ b/supported.html @@ -0,0 +1,330 @@ + + + + + + + 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; this type has subtypes for different Qint sizes (Qint2, Qint4, Qint8, Qint12, Qint16). +Single bit of the Qint are accessible by the subscript operator [].

+
+
+

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[Qint2,3].

+
+
+
+

Expressions

+
+

Constants

+
True
+
+
+
42
+
+
+
+
+

Tuple

+
(a, b)
+
+
+
+
+

List (fixed size)

+
[a, b]
+
+
+
+
+

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

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

+
+
+
+

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[Qint4,2]) -> Qint4:
+   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