{ "cells": [ { "cell_type": "markdown", "id": "fa67b0ba", "metadata": {}, "source": [ "# Huffman Ternary Tree" ] }, { "cell_type": "markdown", "id": "af358b8b", "metadata": {}, "source": [ "This notebook shows how to generate a Huffman-code Ternary Tree as described by: \n", "\n", "[Li, Q. S., Liu, H. Y., Wang, Q., Wu, Y. C., & Guo, G. P. (2025). Huffman-Code-based Ternary Tree Transformation. Chinese Physics Letters.](http://iopscience.iop.org/article/10.1088/0256-307X/42/10/100001)" ] }, { "cell_type": "code", "execution_count": 1, "id": "c4e61ec8", "metadata": {}, "outputs": [], "source": [ "import ferrmion as fr\n", "from ferrmion.encode.ternary_tree_node import TTNode\n", "import json\n", "import numpy as np\n", "from pathlib import Path\n", "import matplotlib.pyplot as plt\n", "\n", "folder = Path.cwd().joinpath(Path(\"../../../python/tests/\"))\n", "with open(folder.joinpath(\"./data/h2o_sto-3g.json\"), \"rb\") as file:\n", " data = json.load(file)\n", "ones = np.array(data[\"ones\"])\n", "twos = np.array(data[\"twos\"])" ] }, { "cell_type": "markdown", "id": "90cac5e7", "metadata": {}, "source": [ "## Majorana Frequency\n", "\n", "First we need to find the weighting of majorana operators, \"frequency\" in the language of huffman codes.\n", "\n", "For some hamiltonian $H= \\sum_l h_l$, such as the Molecular Structure Hamiltonian:\n", "$$H = \\sum_{i,j} h_{ij}a^{\\dagger}_i a_j + \\sum_{i,j,k,l} h_{ijkl}a^{\\dagger}_i a^{\\dagger}_j a_k a_l $$\n", "\n", "We define the frequency of a majorana operator as:\n", "\n", "$$F_j = \\sum_l I_l(j)|h_l|$$\n", "\n", "$I_l(j)=1$ iff $m_j \\in H_l$" ] }, { "cell_type": "code", "execution_count": 2, "id": "47b365cc", "metadata": {}, "outputs": [], "source": [ "n_modes = ones.shape[0]\n", "majorana_freq = np.zeros(n_modes)\n", "\n", "for i in range(n_modes):\n", " for j in range(n_modes):\n", " val = np.abs(ones[i, j])\n", " positions = {i, j}\n", " for p in positions:\n", " majorana_freq[p] += val\n", "\n", "for i in range(n_modes):\n", " for j in range(n_modes):\n", " for k in range(n_modes):\n", " for l in range(n_modes):\n", " val = np.abs(twos[i, j, k, l])\n", " positions = {i, j, k, l}\n", " for p in positions:\n", " majorana_freq[p] += val\n", "majorana_freq = majorana_freq.repeat(2)" ] }, { "cell_type": "markdown", "id": "524a5f4f", "metadata": {}, "source": [ "## Build the Tree\n", "\n", "Now we can build the tree, using the huffman compression algorithm." ] }, { "cell_type": "code", "execution_count": 3, "id": "d76864ef", "metadata": {}, "outputs": [], "source": [ "nodes = {i: None for i in range(len(majorana_freq))}\n", "weights = {i: j for i, j in enumerate(majorana_freq)}\n", "n_ops = len(majorana_freq)\n", "for i in range(n_ops // 2):\n", " parent_index = 2 * n_ops - 1 - i\n", " mins = sorted(weights.items(), key=lambda kv: (kv[1], kv[0]))[:3]\n", "\n", " parent = nodes.get(parent_index, TTNode(parent=None, qubit_label=i))\n", "\n", " for min, child_string in zip(mins, [\"x\", \"y\", \"z\"][: len(mins)]):\n", " possible_child = nodes[min[0]]\n", " if isinstance(possible_child, TTNode):\n", " parent.add_child(which_child=child_string, child_node=possible_child)\n", "\n", " new_weight = 0\n", " for index, weight in mins:\n", " new_weight += weight\n", " weights.pop(index)\n", " nodes.pop(index)\n", "\n", " nodes[parent_index] = parent\n", " weights[parent_index] = new_weight\n", "\n", "assert len(nodes) == 1\n", "root_node = [*nodes.values()][0]" ] }, { "cell_type": "code", "execution_count": 4, "id": "24f8a0b7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'': ('xzz', 'yzzz'),\n", " 'x': ('xxz', 'xyz'),\n", " 'y': ('yyzz', 'yxz'),\n", " 'xx': ('xxx', 'xxy'),\n", " 'xy': ('xyy', 'xyx'),\n", " 'xz': ('xzx', 'xzy'),\n", " 'yx': ('yxy', 'yxx'),\n", " 'yy': ('yyx', 'yyyz'),\n", " 'yz': ('yzyz', 'yzxz'),\n", " 'yyy': ('yyyy', 'yyyx'),\n", " 'yyz': ('yyzx', 'yyzy'),\n", " 'yzx': ('yzxy', 'yzxx'),\n", " 'yzy': ('yzyx', 'yzyy'),\n", " 'yzz': ('yzzy', 'yzzx')}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "huffman_tree = fr.TernaryTree(n_modes=n_modes, root_node=root_node)\n", "huffman_tree.enumeration_scheme = huffman_tree.default_enumeration_scheme()\n", "huffman_tree.string_pairs" ] }, { "cell_type": "code", "execution_count": 5, "id": "86ef7da3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'': (0, 13),\n", " 'x': (1, 11),\n", " 'y': (2, 12),\n", " 'xx': (3, 5),\n", " 'xy': (4, 6),\n", " 'xz': (5, 7),\n", " 'yx': (6, 8),\n", " 'yy': (7, 9),\n", " 'yz': (8, 10),\n", " 'yyy': (9, 0),\n", " 'yyz': (10, 1),\n", " 'yzx': (11, 2),\n", " 'yzy': (12, 3),\n", " 'yzz': (13, 4)}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "huffman_tree.enumeration_scheme" ] }, { "cell_type": "code", "execution_count": 6, "id": "385df9b3", "metadata": {}, "outputs": [ { "data": { "image/png": "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v5eSPTz/+te/TAD2+uuv45577nFko86gkb2oTJ7O35+rtRlMli5d+rpV5/ydmVhdwaS969P/wsMeO/ac07XXJv/uxOv1Wgym/D2wvG652IbD9+SG3+9GoqOjzVQa7jbF3zN+28T2iivaJWEKKEUkpBg4soHmQpO5c+eaRpqNNueaMb2PaYji9crx827YMpBB49tvv42//vrL/J+/73fffWd25SFlbHOGY8eO4f7770ebNm1MrySDf74k5cyZE24WPzDmtco5y8ymwByobsYFRpyeMmjQIIwePdq0TQwkad26dSY9kiRMAaWIhBQbZA4BcicX7lDDhzH3xGUP5F133eXqs1+5cuXL8yAXLFhggpBChQqZXg839/K4CVfX9+3b1yxK8ffU8YWHWQXc+lLw6aefmp50Tj3hvEleq3wR4j3LDAtuxqk2TGLOKTmvvvoqPvnkE/MSQQw0jx8/bnURbUsBpYiEHBtk9lBylxrOJ2RPB3ef8E/yT2hhjlv4eze433b+/PmRPXt2DW07DPObMtMAp22kT5/e9FTx79wf3s9N13CxYsXMBzMNsGeSGRby5ctnXgwZULq5l5JBM+9T1jl/fw7zc+cfYn27/SU4EAooRSQo9u7da97q2ehe+3BlTw63QBw+fLiZS8gVo+y543C4aYhcshDlRqt+GVQyHVCzZs3Mv505c8acqw8//NCCUkpK6pX1yIT5rEP22K1du9bMkWU9/vnnn665hom9sAyi+LtVrVrVJNVv2rSpycxw7tw5HD582HVBdPz8oaVKlTJ/5ojKM888Y16CWd9s24oXL251EW3LPXeAiITdzp07TbobzpFk7sTu3btj+fLl132df3iXQ8CvvfYaVq1aZRJ3+xMhO3nokGVnrkwOi95oGJvnicP8efPmNb08/D8f1gULFgx7eSVx3P89sfmEDCyYwuqzzz5Dt27dzOINXte//vqr605ttWrVzMgCe2O5Z/yGDRvMvTtkyBDzeTcF0X582fO3S/z92F7xxeHll182c8DLlStndRHti3t5i4gk1f/+9z/foEGDfPfddx+jQF9kZKSvYcOGvkmTJvmOHz+e6PdeunTJ/P+9997z3Xrrrb6PPvroqn93Epb5yy+/9N1///3mPJQtW9b8/rGxsdd97XfffeeLiIgwH/fcc49v7ty5lpRZbuynn37yNWrUyNTlggUL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qjZw8Nur3nbu7RvXEA1pBtx1TYJq7p7AvISNyiW82OazFXH56coWBD7pcJOaiEgN5H0UyHSz1krsWt/Jovq2vK5vVt9Bo7p2dF0v3wo89AZwZxTwRZebfLHqOrx0b9tKhM/HKcZi7JsHLHnMupNRfS6Q/0ZjZhJ0qm/vUF17h+raW1TftqEh7/jy1Y3rJYwIc8ctj8e3ah5fwkf17R2qa+9QXXuL6ts2FFBeu2qs0nggdZgTlKZOB1Qcl4yEVxIUqm/vUF17h+raW1TftqGA8loZbgPKjw5vLZQfFXdcCT/Vt3eorr1Dde0tqm9bUECZkCKtgNL9w1MDpQfEHU+so/r2DtW1d6iuvUX1bTkFlDdy98C4YC+U+PPvfjW0x5CkUX17h+raO1TX3qL6tpRWed/Mjo+BtZ2ASzGA72IQzniauDmaHFZXz6T9qL69Q3XtHaprb1F9W0IBZVKc2QusbAccXBCXZyyRrPw3PtN/fx9XkXPhj+ZM2pfq2ztU196huvYW1XfYKaBMKqbr3P81sHUUcGB+3HZLZkeGxNJ4Rlz5uqg6wJ0vxaU40Gpu+1N9e4fq2jtU196i+g4rBZQpEb0T2DkZOLYSOLYaiDl6/ddE5ozbMJ57jXI7Re2A41yqb+9QXXuH6tpbVN8hp4AyGM4eAGKOAbExQKpIIDIHkD4qKD9abEj17R2qa+9QXXuL6jvoFFCKiIiISECUNkhEREREAqKAUkREREQCooBSRERERAKigFJEREREAqKAUkREREQCooBSRERERAKigFJEREREAqKAUkREREQCooBSRERERAKigFJEREREAqKAUkREREQCooBSRERERAKigFJEREREAqKAUkREREQCooBSRERERAKigFJEREREAqKAUkREREQCooBSRERERAKigFJEREREAqKAUkREREQCooBSRERERAKigFJEREREAqKAUkREREQCooBSRERERAKigFJEREREAqKAUkREREQCooBSRERERAKigFJEREREAqKAUkREREQCooBSRERERAKigFJEREREAqKAUkREREQQiP8HsW6p4bRX2LkAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ferrmion.visualise import draw_tt\n", "\n", "draw_tt(root_node)" ] }, { "cell_type": "markdown", "id": "1d5b78b2", "metadata": {}, "source": [ "## Redefining 2e frequency\n", "\n", "Now that we have a tree structure, we need to assign fermionic modes to pairs of Pauli-strings derived from the structure of the tree.\n", "\n", "We should account for how the operators interact, since we're aiming to find the minimal coefficient Pauli-weight.\n", "\n", "To do this, we redefine the two-electron term frequency." ] }, { "cell_type": "markdown", "id": "d3effcb4", "metadata": {}, "source": [ "With a two electron term in the form $h_l = m_i m_j m_k m_l$\n", "\n", "$$F_{ij}=\\sum_l I_l(ij)|h_l|$$\n", "\n", "$I_l(ij) = 1$ if $m_i$ and $m_j$ are in positons $(0,1)$ or $(2,3)$.\n", "\n", "To simplify, we take the terms with $i" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.matshow(two_e_freq)" ] }, { "cell_type": "markdown", "id": "ffd6fe41", "metadata": {}, "source": [ "## Pairing Majorana operators to Pauli-strings" ] }, { "cell_type": "markdown", "id": "b7808c6e", "metadata": {}, "source": [ "If we want to enforce vaccum state preservation (we do!), we require that we map majorana operators to paired strings.\n", "\n", "This means we only need to use the freqencies of $i\\in 0,2,4,6...N-1$ and let $j=i+1$" ] }, { "cell_type": "markdown", "id": "70681360", "metadata": {}, "source": [ "### Sorting Modes" ] }, { "cell_type": "code", "execution_count": 9, "id": "51418cb7", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "vaccum_frequencies = np.diag(two_e_freq, k=1)\n", "plt.matshow([vaccum_frequencies])\n", "sorted_pairs = [(i, i + 1) for i in np.argsort(vaccum_frequencies)[::-1] if i % 2 == 0]\n", "sorted_modes = [i[0] // 2 for i in sorted_pairs]" ] }, { "cell_type": "markdown", "id": "c72a50d2", "metadata": {}, "source": [ "### Sorting Operators" ] }, { "cell_type": "code", "execution_count": 10, "id": "9b57452f", "metadata": {}, "outputs": [], "source": [ "from ferrmion.utils import pauli_to_symplectic, symplectic_product, find_pauli_weight" ] }, { "cell_type": "code", "execution_count": 11, "id": "57b06d91", "metadata": {}, "outputs": [], "source": [ "weights = {}\n", "for index, pair in enumerate(huffman_tree.string_pairs.values()):\n", " left, right = pair\n", " left = huffman_tree.branch_pauli_map[left]\n", " right = huffman_tree.branch_pauli_map[right]\n", "\n", " weights[index] = {}\n", " left, _ = pauli_to_symplectic(left, 0)\n", " right, _ = pauli_to_symplectic(right, 0)\n", " pair_weight = find_pauli_weight(np.array([left])) + find_pauli_weight(\n", " np.array([right])\n", " )\n", " _, product = symplectic_product(left, right)\n", " product_weight = find_pauli_weight(np.array([product]))\n", "\n", " weights[index][\"pair_weight\"] = pair_weight\n", " weights[index][\"prod_weight\"] = product_weight\n", "\n", " operator_order = sorted(\n", " weights.items(), key=lambda kv: (kv[1][\"prod_weight\"], kv[1][\"pair_weight\"])\n", " )\n", "\n", " operator_order = [index for index, _ in operator_order]" ] }, { "cell_type": "code", "execution_count": 12, "id": "f58fdc2b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'': ('xzz', 'yzzz'),\n", " 'x': ('xxz', 'xyz'),\n", " 'y': ('yyzz', 'yxz'),\n", " 'xx': ('xxx', 'xxy'),\n", " 'xy': ('xyy', 'xyx'),\n", " 'xz': ('xzx', 'xzy'),\n", " 'yx': ('yxy', 'yxx'),\n", " 'yy': ('yyx', 'yyyz'),\n", " 'yz': ('yzyz', 'yzxz'),\n", " 'yyy': ('yyyy', 'yyyx'),\n", " 'yyz': ('yyzx', 'yyzy'),\n", " 'yzx': ('yzxy', 'yzxx'),\n", " 'yzy': ('yzyx', 'yzyy'),\n", " 'yzz': ('yzzy', 'yzzx')}" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "huffman_tree.string_pairs" ] }, { "cell_type": "code", "execution_count": 13, "id": "9780891e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'': (0, 13),\n", " 'x': (1, 11),\n", " 'y': (2, 12),\n", " 'xx': (3, 5),\n", " 'xy': (4, 6),\n", " 'xz': (5, 7),\n", " 'yx': (6, 8),\n", " 'yy': (7, 9),\n", " 'yz': (8, 10),\n", " 'yyy': (9, 0),\n", " 'yyz': (10, 1),\n", " 'yzx': (11, 2),\n", " 'yzy': (12, 3),\n", " 'yzz': (13, 4)}" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "huffman_tree.enumeration_scheme" ] }, { "cell_type": "code", "execution_count": 14, "id": "0a8626bf", "metadata": {}, "outputs": [], "source": [ "operator_order = sorted(\n", " weights.items(), key=lambda kv: (kv[1][\"prod_weight\"], kv[1][\"pair_weight\"])\n", ")\n", "operator_order = [index for index, _ in operator_order]" ] }, { "cell_type": "markdown", "id": "8356b796", "metadata": {}, "source": [ "### Assigning a mode-operator map" ] }, { "cell_type": "code", "execution_count": 15, "id": "f5c8f51a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'': (0, 13), 'x': (1, 11), 'y': (2, 12), 'xx': (3, 5), 'xy': (4, 6), 'xz': (5, 7), 'yx': (6, 8), 'yy': (7, 9), 'yz': (8, 10), 'yyy': (9, 0), 'yyz': (10, 1), 'yzx': (11, 2), 'yzy': (12, 3), 'yzz': (13, 4)}\n", "{'': (0, 13), 'x': (1, 11), 'y': (2, 12), 'xx': (3, 5), 'xy': (4, 6), 'xz': (5, 7), 'yx': (6, 8), 'yy': (7, 9), 'yz': (8, 10), 'yyy': (9, 0), 'yyz': (10, 1), 'yzx': (11, 2), 'yzy': (12, 3), 'yzz': (13, 4)}\n" ] } ], "source": [ "mode_op_map = [0] * len(sorted_modes)\n", "for operator_index, mode_index in enumerate(sorted_modes):\n", " mode_op_map[mode_index] = operator_order[operator_index]\n", "huffman_tree.default_mode_op_map = mode_op_map\n", "print(huffman_tree.enumeration_scheme)\n", "huffman_tree.enumeration_scheme = huffman_tree.default_enumeration_scheme()\n", "print(huffman_tree.enumeration_scheme)" ] }, { "cell_type": "code", "execution_count": 16, "id": "15bebe4d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'': (0, 13),\n", " 'x': (1, 11),\n", " 'y': (2, 12),\n", " 'xx': (3, 5),\n", " 'xy': (4, 6),\n", " 'xz': (5, 7),\n", " 'yx': (6, 8),\n", " 'yy': (7, 9),\n", " 'yz': (8, 10),\n", " 'yyy': (9, 0),\n", " 'yyz': (10, 1),\n", " 'yzx': (11, 2),\n", " 'yzy': (12, 3),\n", " 'yzz': (13, 4)}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "huffman_tree.default_enumeration_scheme()" ] }, { "cell_type": "markdown", "id": "21178068", "metadata": {}, "source": [ "## Coefficient Pauli Weight\n", "\n", "The _coefficient Puali-weight_ of an operator is the sum of each terms Pauli-weight times the norm of that terms coefficient:\n", "\n", "$$H=\\sum_i c_i h_i$$\n", "\n", "$$W_{CP} = \\sum_i |c_i| W_{P}(h_i)$$\n", "\n", "This weight can be important for quantum algorithms which rely on samplying hamiltonian terms or measurement results.\n", "\n", "Now we can find out how well the Huffman-tree reduces the coefficient Pauli-weight. " ] }, { "cell_type": "code", "execution_count": 17, "id": "8d5de0a9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[np.float64(301.7202300406311)]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ferrmion.optimize import coefficient_pauli_weight\n", "\n", "fham = fr.molecular_hamiltonian(ones, twos, constant_energy=0, physicist_notation=True)\n", "qham = huffman_tree.encode(fham)\n", "coefficient_pauli_weight(qham)" ] }, { "cell_type": "code", "execution_count": 18, "id": "3293a3c3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "JordanWigner [np.float64(191.34214293107775)]\n", "ParityEncoding [np.float64(256.8019697995479)]\n", "BravyiKitaev [np.float64(292.03224577227707)]\n", "JKMN [np.float64(277.8229667626987)]\n" ] } ], "source": [ "encoding_funcs = [fr.JordanWigner, fr.ParityEncoding, fr.BravyiKitaev, fr.JKMN]\n", "for encoding in encoding_funcs:\n", " fham = fr.molecular_hamiltonian(ones, twos, constant_energy=0, physicist_notation=True)\n", " qham = encoding(fham.n_modes).encode(fham)\n", " pw = coefficient_pauli_weight(qham)\n", " print(encoding.__name__, pw)" ] }, { "cell_type": "markdown", "id": "b78f6220", "metadata": {}, "source": [ "# Inbuilt Function\n", "\n", "`ferrmion` provides a method to generate vaccum-preserving Huffman-code trees by providing one and two electron coefficents." ] }, { "cell_type": "code", "execution_count": 20, "id": "59763c91", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[np.float64(205.52406742880444)]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAHzCAYAAACe1o1DAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhyxJREFUeJzt3QmYT2X/BvB7jH3firFkCdkpQmWNskSkVP6RpIVkqax5KSpSkSyvypIib7xt1qRee7KWrRRl3yVkBmP7/a/7+RkGM2NmfsvZ7s91qTFm5pw5z3me8z3P8n0ifD6fDyIiIiIiqZQmtd8oIiIiIqKAUkREREQCph5KEREREQmIAkoRERERCYgCShEREREJiAJKEREREQmIAkoRERERCYgCShEREREJiAJKEREREQmIAkoRERERCYgCShEREREJiAJKEREREQmIAkoRERERCYgCShEREREJiAJKEREREQmIAkoRERERCYgCShEREREJiAJKEREREQmIAkoRERERCYgCShEREREJiAJKEREREQmIAkoRERERCYgCShEREREJiAJKEREREQmIAkoRERERCYgCShEREREJiAJKEREREQmIAkoRERERCYgCShEREREJiAJKEREREQmIAkoRERERCYgCShEREREJSNrAvl1ExKV8PuD0ASD2L+DCGSBNeiBDXiBTlNVnJiJiOwooRUTiRG8Dtn8KHFkBHFnlDyavxqAyTzUgTw2gWBsgazFdPxHxvAifj6/hIiIexSZw3zfAllHA/m+BiDSA7wL/IYlvirj8dVENgVJdgAKNgYiIMJ64iIh9KKAUEe86uQdY0QE4MB+IiAR851P+M+K+L/+9QI0JQOZCoThTERFbU0ApIt607WNgTWfgfCzgOxf4z4tIC0RmAKqOAYq3C8YZiog4hgJKEfHeEPfGV4BNr4XuGOX7AxUGaghcRDxDaYNExFtCHUwSf/7GV0N7DBERG1EPpYh4a5h7xRPhO16NSRr+FhFPUEApIt4QsxuYUwY4FxO+Y6bNAjT9TQt1RMT1NOQtIt6YN7nyKf8CnHDi8biKXNnZRMTlFFCKiPsxzyRTAwVjNXdK8Hg8Lo8vIuJiCihFxP2YtJz5Iq3A424Zbc2xRUTCRAGliLh/O0XugHMxafmob4EiXYG0bYEen4bh+Dzu/nlA9PYwHExExBray1tE3I17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UXlbTgFlYioM9Ad7ocSfX+HV0B5Dkkfl7R0qa+9QWXuLyttSWuV9Pds+BtZ0Bs7HAr5zQbjiaf1zNDmsrp5J+1F5e4fK2jtU1t6i8raEAsrkOLkHWNEBODDfn2csNfnN4r6Pq8i58EdzJu1L5e0dKmvvUFl7i8o77BRQJhfzv+/7BtgyGtg/z7+VGjPkm5z7iV7ey18X1Qgo9bw/xYFWc9ufyts7VNbeobL2FpV3WCmgTI3o7cD2KcCRFcCRVUDsX9d+TYa8/g3jubcst1PMmpw9nMSWVN7eobL2DpW1t6i8Q04BZTCc2g/EHgEuxAJpMgAZ8gCZooLyo8WGVN7eobL2DpW1t6i8g04BpYiIiIgERGmDRERERCQgCihFREREJCAKKEVEREQkIAooRURERCQgCihFREREJCAKKEVEREQkIAooRURERCQgCihFREREJCAKKEVEREQkIAooRURERCQgCihFREREJCAKKEVEREQkIAooRURERCQgCihFREREJCAKKEVEREQkIAooRURERCQgCihFREREJCAKKEVEREQkIAooRURERCQgCihFREREJCAKKEVEREQkIAooRURERCQgCihFREREJCAKKEVEREQkIAooRURERCQgCihFREREJCAKKEVEREQkIAooRURERCQgCihFREREJCAKKEVEREQkIAooRURERCQgCihFREREBIH4f0wdL3RHyivVAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ferrmion.optimize import huffman_ternary_tree\n", "\n", "inbuilt_huffman = huffman_ternary_tree(ones, twos)\n", "draw_tt(\n", " inbuilt_huffman,\n", " enumeration_scheme=inbuilt_huffman.enumeration_scheme,\n", " type=\"spaced\",\n", ")\n", "\n", "inbuilt_ham = fr.molecular_hamiltonian(\n", " ones, twos, constant_energy=0, physicist_notation=True\n", ")\n", "coefficient_pauli_weight(inbuilt_huffman.encode(inbuilt_ham))" ] }, { "cell_type": "code", "execution_count": 21, "id": "d6f1f9e4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'': (0, 13),\n", " 'x': (1, 11),\n", " 'y': (2, 12),\n", " 'xx': (3, 5),\n", " 'xy': (4, 6),\n", " 'xz': (5, 7),\n", " 'yx': (6, 8),\n", " 'yy': (7, 9),\n", " 'yz': (8, 10),\n", " 'yyy': (9, 0),\n", " 'yyz': (10, 1),\n", " 'yzx': (11, 2),\n", " 'yzy': (12, 3),\n", " 'yzz': (13, 4)}" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inbuilt_huffman.default_enumeration_scheme()" ] }, { "cell_type": "code", "execution_count": 22, "id": "75112e88", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inbuilt_huffman.as_dict() == huffman_tree.as_dict()" ] } ], "metadata": { "kernelspec": { "display_name": "ferrmion (3.13.1)", "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.13.1" } }, "nbformat": 4, "nbformat_minor": 5 }