{ "cells": [ { "cell_type": "markdown", "id": "9e40af77-7f0f-4dd6-ab0a-420cf396050e", "metadata": {}, "source": [ "# Bound the subspace dimension\n", "\n", "In this tutorial, we will show the effect of the subspace dimension in the [self-consistent configuration recovery technique](https://arxiv.org/abs/2405.05068).\n", "\n", "***A priori***, we do not know what is the correct subspace dimension to obtain a target level of accuracy. However, we do know that increasing the subspace dimension increases the accuracy of the method. Therefore, we can study the accuracy of the predictions as a function of the subspace dimension." ] }, { "cell_type": "markdown", "id": "a6755afb-ca1e-4473-974b-ba89acc8abce", "metadata": {}, "source": [ "Specify the molecule and its properties." ] }, { "cell_type": "code", "execution_count": 1, "id": "677f54ac-b4ed-47e3-b5ba-5366d3a520f9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parsing ../molecules/n2_fci.txt\n" ] } ], "source": [ "from pyscf import ao2mo, tools\n", "\n", "# Specify molecule properties\n", "num_orbitals = 16\n", "num_elec_a = num_elec_b = 5\n", "open_shell = False\n", "spin_sq = 0\n", "\n", "# Read in molecule from disk\n", "mf_as = tools.fcidump.to_scf(\"../molecules/n2_fci.txt\")\n", "hcore = mf_as.get_hcore()\n", "eri = ao2mo.restore(1, mf_as._eri, num_orbitals)\n", "nuclear_repulsion_energy = mf_as.mol.energy_nuc()" ] }, { "cell_type": "markdown", "id": "c58e988c-a109-44cd-a975-9df43250c318", "metadata": {}, "source": [ "Generate some dummy counts to proxy QPU samples." ] }, { "cell_type": "code", "execution_count": 2, "id": "e9506e0b-ed64-48bb-a97a-ef851b604af1", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_sqd.counts import generate_counts_uniform\n", "\n", "# Create a seed to control randomness throughout this workflow\n", "rand_seed = 42\n", "\n", "# Generate random samples\n", "counts_dict = generate_counts_uniform(10_000, num_orbitals * 2, rand_seed=rand_seed)" ] }, { "cell_type": "markdown", "id": "851bc98e-9c08-4e78-9472-36301abc11d8", "metadata": {}, "source": [ "Convert the counts to a bitstring matrix" ] }, { "cell_type": "code", "execution_count": 3, "id": "7a102a7f-aae6-4583-ab82-ae40fcb5496a", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from qiskit_addon_sqd.counts import counts_to_arrays\n", "\n", "# Convert counts into bitstring and probability arrays\n", "bitstring_matrix_full, probs_arr_full = counts_to_arrays(counts_dict)" ] }, { "cell_type": "markdown", "id": "eb704101-0fe8-4d12-b572-b1d844e35a90", "metadata": {}, "source": [ "Define an SQD function, which we will call in a loop with increasing batch sizes." ] }, { "cell_type": "code", "execution_count": 4, "id": "b72c048e-fe8e-4fc2-b28b-03138249074e", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_sqd.configuration_recovery import recover_configurations\n", "from qiskit_addon_sqd.fermion import (\n", " bitstring_matrix_to_ci_strs,\n", " flip_orbital_occupancies,\n", " solve_fermion,\n", ")\n", "from qiskit_addon_sqd.subsampling import postselect_and_subsample\n", "\n", "\n", "def configuration_recovery_loop(\n", " hcore: np.ndarray,\n", " eri: np.ndarray,\n", " num_elec_a: int,\n", " num_elec_b: int,\n", " spin_sq: float,\n", " iterations: int,\n", " n_batches: int,\n", " samples_per_batch: int,\n", " max_davidson_cycles: int,\n", ") -> tuple[np.ndarray, np.ndarray]:\n", " \"\"\"Perform SQD.\"\"\"\n", " # Self-consistent configuration recovery loop\n", " e_hist = np.zeros((iterations, n_batches)) # energy history\n", " s_hist = np.zeros((iterations, n_batches)) # spin history\n", " d_hist = np.zeros((iterations, n_batches)) # subspace dimension history\n", " occupancy_hist = np.zeros((iterations, 2 * num_orbitals))\n", " occupancies_bitwise = None # orbital i corresponds to column i in bitstring matrix\n", " for i in range(iterations):\n", " print(f\"Starting configuration recovery iteration {i}\")\n", " # On the first iteration, we have no orbital occupancy information from the\n", " # solver, so we just post-select from the full bitstring set based on hamming weight.\n", " if occupancies_bitwise is None:\n", " bs_mat_tmp = bitstring_matrix_full\n", " probs_arr_tmp = probs_arr_full\n", "\n", " # In following iterations, we use both the occupancy info and the target hamming\n", " # weight to correct bitstrings.\n", " else:\n", " bs_mat_tmp, probs_arr_tmp = recover_configurations(\n", " bitstring_matrix_full,\n", " probs_arr_full,\n", " occupancies_bitwise,\n", " num_elec_a,\n", " num_elec_b,\n", " rand_seed=rand_seed,\n", " )\n", "\n", " # Throw out samples with incorrect hamming weight and create batches of subsamples.\n", " batches = postselect_and_subsample(\n", " bs_mat_tmp,\n", " probs_arr_tmp,\n", " hamming_right=num_elec_a,\n", " hamming_left=num_elec_b,\n", " samples_per_batch=samples_per_batch,\n", " num_batches=n_batches,\n", " rand_seed=rand_seed,\n", " )\n", "\n", " # Run eigenstate solvers in a loop. This loop should be parallelized for larger problems.\n", " int_e = np.zeros(n_batches)\n", " int_s = np.zeros(n_batches)\n", " int_d = np.zeros(n_batches)\n", " int_occs = np.zeros((n_batches, 2 * num_orbitals))\n", " cs = []\n", " for j in range(n_batches):\n", " ci_strs = bitstring_matrix_to_ci_strs(batches[j], open_shell=open_shell)\n", " int_d[j] = len(ci_strs[0]) * len(ci_strs[1])\n", " energy_sci, coeffs_sci, avg_occs, spin = solve_fermion(\n", " batches[j],\n", " hcore,\n", " eri,\n", " open_shell=open_shell,\n", " spin_sq=spin_sq,\n", " max_davidson=max_davidson_cycles,\n", " )\n", " energy_sci += nuclear_repulsion_energy\n", " int_e[j] = energy_sci\n", " int_s[j] = spin\n", " int_occs[j, :num_orbitals] = avg_occs[0]\n", " int_occs[j, num_orbitals:] = avg_occs[1]\n", " cs.append(coeffs_sci)\n", "\n", " # Combine batch results\n", " avg_occupancy = np.mean(int_occs, axis=0)\n", " # The occupancies from the solver should be flipped to match the bits in the bitstring matrix.\n", " occupancies_bitwise = flip_orbital_occupancies(avg_occupancy)\n", "\n", " # Track optimization history\n", " e_hist[i, :] = int_e\n", " s_hist[i, :] = int_s\n", " d_hist[i, :] = int_d\n", " occupancy_hist[i, :] = avg_occupancy\n", "\n", " return e_hist.flatten(), d_hist.flatten()" ] }, { "cell_type": "markdown", "id": "82b062a3-d4ca-41e2-9b00-4a394f83cbdd", "metadata": {}, "source": [ "Call SQD with increasing batch sizes." ] }, { "cell_type": "code", "execution_count": 5, "id": "e0847f28", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting configuration recovery iteration 0\n", "Starting configuration recovery iteration 1\n", "Starting configuration recovery iteration 2\n", "Starting configuration recovery iteration 3\n", "Starting configuration recovery iteration 4\n", "Starting configuration recovery iteration 0\n", "Starting configuration recovery iteration 1\n", "Starting configuration recovery iteration 2\n", "Starting configuration recovery iteration 3\n", "Starting configuration recovery iteration 4\n", "Starting configuration recovery iteration 0\n", "Starting configuration recovery iteration 1\n", "Starting configuration recovery iteration 2\n", "Starting configuration recovery iteration 3\n", "Starting configuration recovery iteration 4\n", "Starting configuration recovery iteration 0\n", "Starting configuration recovery iteration 1\n", "Starting configuration recovery iteration 2\n", "Starting configuration recovery iteration 3\n", "Starting configuration recovery iteration 4\n" ] } ], "source": [ "list_samples_per_batch = [50, 200, 400, 600]\n", "\n", "# SQD options\n", "iterations = 5\n", "\n", "# Eigenstate solver options\n", "n_batches = 10\n", "max_davidson_cycles = 200\n", "\n", "energies = []\n", "subspace_dimensions = []\n", "\n", "for samples_per_batch in list_samples_per_batch:\n", " e_hist, d_hist = configuration_recovery_loop(\n", " hcore,\n", " eri,\n", " num_elec_a,\n", " num_elec_b,\n", " spin_sq,\n", " iterations,\n", " n_batches,\n", " samples_per_batch,\n", " max_davidson_cycles,\n", " )\n", " energies.append(np.min(e_hist))\n", "\n", " index_min = np.argmin(e_hist)\n", " subspace_dimensions.append(d_hist[index_min])" ] }, { "cell_type": "markdown", "id": "9d78906b-4759-4506-9c69-85d4e67766b3", "metadata": {}, "source": [ "### Visualize the results\n", "\n", "This plot shows that increasing the subspace dimension leads to more accurate results." ] }, { "cell_type": "code", "execution_count": 6, "id": "caffd888-e89c-4aa9-8bae-4d1bb723b35e", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAP3RFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMS5wb3N0MSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8kixA/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACzuklEQVR4nOzdd3gUVd/G8Xuz6W1DICGEFjokoasYEBFB6YIVeUSKHbtgAV+kCgiIYgUUBRUexYKICCggNkARJEhCrwFCQmgppG/m/SNkH5YkkEDCpnw/1zWX7OyZM7+dbBb29pwzJsMwDAEAAAAAAABXkZOjCwAAAAAAAEDlQygFAAAAAACAq45QCgAAAAAAAFcdoRQAAAAAAACuOkIpAAAAAAAAXHWEUgAAAAAAALjqCKUAAAAAAABw1RFKAQAAAAAA4KojlAIAAAAAAMBVRygFAEAhTCaTxo0b5+gyStT8+fNlMpl08OBBR5fiUAcPHpTJZNL8+fMdXQpgc9NNNyk8PNzRZZQ5v/zyi0wmk3755RfbviFDhigkJMRhNZWUgl4bAFQmhFIAgMv2/vvvy2QyqV27do4upUJJTU3VuHHjysSXlH///VdDhw5VvXr15O7uLm9vb7Vq1Uovvvii9u/f7+jyroqDBw9q6NChatCggdzd3RUUFKQbb7xRY8eOtWv3/vvvX1HIFRsbq3HjxikyMvLKCr5AXgBX2Pbaa6+V6PkAAACKytnRBQAAyq+FCxcqJCREGzdu1N69e9WwYUNHl1Si0tLS5Ox89f+qTE1N1fjx4yXljpxwlA8//FDDhg1TtWrVdN9996lp06bKzs5WVFSUPv30U82cOVNpaWkym80Oq7G07d27V9dee608PDz0wAMPKCQkRMeOHdM///yjqVOn2n5OUm4oVa1aNQ0ZMuSyzhUbG6vx48crJCRErVq1KpkXcJ4BAwaoZ8+e+fa3bt26xM8FlLYPP/xQOTk5ji7jit14441KS0uTq6uro0sBAIcglAIAXJYDBw5o/fr1Wrx4sR599FEtXLgw38iRqyU7O1s5OTkl/o96d3f3Eu2vPFm/fr2GDRumDh06aNmyZfLx8bF7fsaMGZo0adIl+0lNTZWnp2dplVnq3nzzTaWkpCgyMlJ169a1e+748eMOqurytGnTRgMHDnR0GaX2+4rKxcXFxdEllAgnJ6dK/XcNADB9DwBwWRYuXKgqVaqoV69euuuuu7Rw4cJ8bfKmDb3++ut68803VbduXXl4eKhTp06KioqyaztkyBB5e3tr//796tatm7y8vBQcHKwJEybIMIwC+5w5c6YaNGggNzc3bd++XZL0888/q2PHjvLy8pKfn5/69u2rHTt22I6fN2+eTCaTPv74Y7vzT548WSaTScuXL7ftu3BNqXHjxslkMmn37t0aOHCgLBaLAgIC9Morr8gwDB0+fFh9+/aVr6+vgoKCNGPGDLtzZGZmasyYMWrbtq0sFou8vLzUsWNHrV271u71BQQESJLGjx9vm2J1fh07d+7UXXfdJX9/f7m7u+uaa67R0qVL813/6Oho3XzzzfLw8FCtWrX06quvFnlkQd65Fy5cmC+QknIDu4kTJ9qNkspbD2fz5s268cYb5enpqZdffllSboDz4IMPqnr16nJ3d1fLli31ySef2PVZ2NoqBa3/lPd+OXr0qPr16ydvb28FBATo+eefl9VqtTv+zJkzGjJkiCwWi/z8/DR48GCdOXOmSNdh3759qlWrVr5ASpICAwNtfw4JCVF0dLR+/fVX288sb5TbqVOn9Pzzz6t58+by9vaWr6+vevTooa1bt9q99muvvVaSNHToUFsf57/mv/76S927d5fFYpGnp6c6deqkdevWFel1FFVISIh69+6tP/74Q9ddd53c3d1Vv359ffrpp/nanjlzRs8++6xq164tNzc3NWzYUFOnTrV7j13q9/WXX37RNddcI3d3dzVo0EBz5syx/Z7l6dSpk1q2bFlgvU2aNFG3bt0KfT29e/dW/fr1C3wuIiJC11xzje3xqlWrdMMNN8jPz0/e3t5q0qSJ7f17MZc6rrB13C62ltDmzZvVvn17eXh4qF69epo9e3a+Nu+8847CwsLk6empKlWq6JprrtF///tf2/N513Hnzp2655575Ovrq6pVq+qZZ55Renq6XV/z5s3TzTffrMDAQLm5uSk0NFSzZs0q8PWuWLFCnTp1ko+Pj3x9fXXttdfanVe6svfqkSNH1K9fP3l5eSkwMFDPPfecMjIy8rW7cE2p899r7733nurXry9PT0/deuutOnz4sAzD0MSJE1WrVi15eHiob9++OnXqVIGvL+/vEB8fH/Xq1UvR0dH5zl3Uz58vvvhCbdu2tV2v5s2b66233rI9X9j74KuvvlLbtm3l4eGhatWqaeDAgTp69Ohl1wEAZRUjpQAAl2XhwoW644475OrqqgEDBmjWrFn6+++/bV+sz/fpp58qOTlZTzzxhNLT0/XWW2/p5ptv1rZt21S9enVbO6vVqu7du+v666/XtGnTtHLlSo0dO1bZ2dmaMGGCXZ/z5s1Tenq6HnnkEbm5ucnf31+rV69Wjx49VL9+fY0bN05paWl655131KFDB/3zzz8KCQnR0KFDtXjxYg0fPly33HKLateurW3btmn8+PF68MEHC5zedKH+/furWbNmeu211/TDDz/o1Vdflb+/v+bMmaObb75ZU6dO1cKFC/X888/r2muv1Y033ihJSkpK0ty5czVgwAA9/PDDSk5O1kcffaRu3bpp48aNatWqlQICAjRr1iwNGzZMt99+u+644w5JUosWLSTlBk0dOnRQzZo1NXLkSHl5eenLL79Uv3799M033+j222+XJMXFxalz587Kzs62tfvggw/k4eFxydeXmpqqn3/+WTfddJNq1ap1yfbnO3nypHr06KF7771XAwcOVPXq1ZWWlqabbrpJe/fu1ZNPPql69erpq6++0pAhQ3TmzBk988wzxTpHHqvVqm7duqldu3Z6/fXXtXr1as2YMUMNGjTQsGHDJEmGYahv3776448/9Nhjj6lZs2b69ttvNXjw4CKdo27dulq9erV+/vln3XzzzYW2mzlzpp566il5e3vr//7v/yTJ9t7ev3+/lixZorvvvlv16tVTfHy85syZo06dOmn79u0KDg5Ws2bNNGHCBI0ZM0aPPPKIOnbsKElq3769pNywtUePHmrbtq3Gjh0rJycnW5Dw+++/67rrrrvka0lNTdWJEyfy7ffz87Obprp3717dddddevDBBzV48GB9/PHHGjJkiNq2bauwsDBbX506ddLRo0f16KOPqk6dOlq/fr1GjRqlY8eOaebMmXbnKOj3dcuWLerevbtq1Kih8ePHy2q1asKECbZQNs/999+vhx9+WFFRUXaLgP/999/avXu3Ro8eXehr7t+/vwYNGpTvs+nQoUP6888/NX36dEm5v1e9e/dWixYtNGHCBLm5uWnv3r2XDFIu97iLOX36tHr27Kl77rlHAwYM0Jdffqlhw4bJ1dVVDzzwgKTcqWtPP/207rrrLlvI9O+//+qvv/7Sf/7zH7v+7rnnHoWEhGjKlCn6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nDlzNGTIEG3evFkhISH6+uuvtW7dOs2cOdO2hpXFYtHdd9+td955RyaTSQ0aNNCyZcvyreVSHH369FGHDh00cuRIHTx4UKGhoVq8eHGR1mCSpKlTp2rz5s264447bF8m//nnH3366afy9/fXs88+a2vbtm1bzZo1S6+++qoaNmyowMBA3Xzzzerdu7cmTJigoUOHqn379tq2bZsWLlyYb/20Bg0ayM/PT7Nnz5aPj4+8vLzUrl071atXT3PnzlWPHj0UFhamoUOHqmbNmjp69KjWrl0rX19fff/995d8Lf/8848WLFiQb3+DBg0UERFRpOuR54UXXtDSpUvVu3dvDRkyRG3bttXZs2e1bds2ff311zp48GC+NdYuNG7cOP3000/q0KGDhg0bJqvVqnfffVfh4eGKjIzM175169YKDw/XV199pWbNmqlNmzZFrrdnz57y8fHR888/L7PZrDvvvNPu+QkTJui3335Tr169VLduXR0/flzvv/++atWqpRtuuKHQfotyXFhYmK6//nqNGjVKp06dkr+/v7744otCg7vg4GBNnTpVBw8eVOPGjbVo0SJFRkbqgw8+kIuLi6TcgCgoKEgdOnRQ9erVtWPHDr377rvq1auX7fcpz4EDB3Tbbbepe/fu2rBhgxYsWKD//Oc/atmypa2vvNE8eYHfhx9+qMDAQLvw29fXV2+++aYeeughXXvttfrPf/6jKlWqaOvWrUpNTdUnn3wiJyenK3qvPvzww3r33Xc1aNAgbd68WTVq1NBnn31mC+pLk6+vr2bNmqX7779fbdq00b333quAgADFxMTohx9+UIcOHez+p0lRPPTQQzp16pRuvvlm1apVS4cOHdI777yjVq1a2dbUu5CLi4umTp2qoUOHqlOnThowYIDi4+P11ltvKSQkRM8991xJvFwAKDsccMc/AEA51adPH8Pd3d04e/ZsoW2GDBliuLi4GCdOnLDdonv69OnGjBkzjNq1axtubm5Gx44d7W5Hbhi5t7b28vIy9u3bZ9x6662Gp6enUb16dWPs2LGG1Wq1tTu/z4KsXr3a6NChg+Hh4WH4+voaffr0MbZv3257/o477jB8fHyMgwcP2h333XffGZKMqVOn2vZJMsaOHWt7nHeL9Qtv/55X+4U6depkd9v2nJwcY/LkyUbdunUNNzc3o3Xr1sayZcvy3drcMAxj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rVq10scff6w6derI29tbjz/+uKxWq6ZNm6agoCAFBgZq0qRJdjW98cYbat68uby8vFS7dm09/vjjSklJkST98ssvGjp0qBITE23nHjdunCQpIyNDzz//vGrWrCkvLy+1a9dOv/zyi13f8+fPV506deTp6anbb79dJ0+eLPFreiFGSqFU/bo7QcMWbFZapjXfc3nzgF//aZdmDWyrTo0DHFAhAAAAAOBqMAxDaVn5vxue//y89Qcuq++P1x3QPdfUKnQ2joeLucRm6nzzzTd688039cUXXygsLExxcXHaunWrJGnx4sVq2bKlHnnkET388MMX7Wffvn1asWKFVq5cqX379umuu+7S/v371bhxY/36669av369HnjgAXXt2lXt2rWTJDk5Oentt99WvXr1tH//fj3++ON68cUX9f7776t9+/aaOXOmxowZo127dkmSvL29JUlPPvmktm/fri+++ELBwcH69ttv1b17d23btk2NGjXSX3/9pQcffFBTpkxRv379tHLlSo0dO7ZErtfFEEqh1OTNAy5oDrDO25c3D3je0OsIpgAAAACggkrLsip0zI8l3q8h6fCpNIWN/anQNtsndJOna/EikGXLltlCnTwvv/yy3N3dFRQUpK5du8rFxUV16tTRddddJ0ny9/eX2WyWj4+PgoKCLtp/Tk6OPv74Y/n4+Cg0NFSdO3fWrl27tHz5cjk5OalJkyaaOnWq1q5dawulnn32WdvxISEhevXVV/XYY4/p/fffl6urqywWi0wmk925Y2JiNG/ePMXExCg4OFiS9Pzzz2vlypWaN2+eJk+erLfeekvdu3fXiy++KElq3Lix1q9fr5UrVxbrmhUXoRRKRVmaBwwAAAAAQHF17txZs2bNstvn7++vs2fPaubMmapfv766d++unj17qk+fPnJ2Ll7EEhISIh8fH9vj6tWry2w2y8nJyW7f8ePHbY9Xr16tKVOmaOfOnUpKSlJ2drbS09OVmpoqT0/PAs+zbds2Wa1WNW7c2G5/RkaGqlatKknasWOHbr/9drvnIyIiCKVQPtnmARex/fnzgId2qFeqtQEAAAAArj4PF7O2T+hW6POnz2aqw9S1l93/+pGd5efpWui5i8vLy0sNGzbMt9/f31+7du3S6tWrtWrVKj3++OOaPn26fv31V7m4FH2QxYVtTSZTgftycnIkSQcPHlTv3r01bNgwTZo0Sf7+/vrjjz/04IMPKjMzs9BQKiUlRWazWZs3b5bZbH8dLhwJdrURSqHEGYahT9YfvKxj5687qCHtQ7grHwAAAABUMCaT6aJT6DxczKrr76mYU6lFHuAgSSZJdfw9VcPicdW+S3p4eKhPnz7q06ePnnjiCTVt2lTbtm1TmzZt5OrqKqu18LWzLtfmzZuVk5OjGTNm2EZTffnll3ZtCjp369atZbVadfz4cXXs2LHAvps1a6a//vrLbt+ff/5ZgtUXjFAKJe50apYOnUot9nGGpEOnUnUmNUtVvApOtwEAAAAAFZPJZNLg9iGauGx7sY8d0qHkBzdkZGQoLi7Obp+zs7OWLVsmq9Wqdu3aydPTUwsWLJCHh4fq1q0rKXda3m+//aZ7771Xbm5uqlatWonU07BhQ2VlZemdd95Rnz59tG7dOs2ePduuTUhIiFJSUrRmzRq1bNlSnp6eaty4se677z4NGjRIM2bMUOvWrZWQkKA1a9aoRYsW6tWrl55++ml16NBBr7/+uvr27asff/yx1KfuSZLTpZsAxXM2I/uKjk+5wuMBAAAAAOXTnW1rycPVrKLmS04mycPVrDva1CrxWlauXKkaNWrYbTfccIP8/Pz04YcfqkOHDmrRooVWr16t77//3rY+04QJE3Tw4EE1aNBAAQEldzOvli1b6o033tDUqVMVHh6uhQsXasqUKXZt2rdvr8cee0z9+/dXQECApk2bJkmaN2+eBg0apBEjRqhJkybq16+f/v77b9WpU0eSdP311+vDDz/UW2+9pZYtW+qnn37S6NGjS6z2wpgM41LLUKOsSEpKksViUWJionx9fR1dTqFOnc1Um4mrLvv4La/cwkgpAAAAACjn0tPTdeDAAdWrV0/u7u5FPs7uTu4XSSxMptype/OHXqcbuZP7VXexn29R8wtGSqHEVfF0UV1/TxV34KRJUl1/T/l5cvc9AAAAAKisOjUO0Lyh18nDxSyTlO+7Zd4+DxczgVQ5RyiFEpc3D/hylMY8YAAAAABA+dKpcYA2jOqiMX1CVcff/q5ydfw9NaZPqP58uQuBVDnHQucoFXe2raXXf9qltCzrRYdb5nEySe4upTMPGAAAAABQ/lg8XDS0Qz0NaR+iM6lZSsnIlrebs/w8XRjMUEEwUgqlwuLholkD2+YOq7zEZ0Xe07MHtpXFg6l7AAAAAID/MZlMquLlqtr+nqri5UogVYEQSqHUXGoe8Pk+GHQNwy4BAAAAAKhECKVQqi42D7h2FQ/5uJllSNp2JNExBQIAAAAAAIdgTSmUuovNA16+LU5P/Pcfzfp1n/q1rql61bwcXS4AAAAAALgKGCmFq6agecA9mwepY6NqyszO0dil0TKKsio6AAAAAAAo9wil4FAmk0kT+obL1eyk33YnaEVUnKNLAgAAAAAAVwGhFByuXjUvPXZTA0nShO+3KyUj28EVAQAAAACA0kYohTLh8ZsaqI6/p+KS0vXW6t2OLgcAAAAAUIkNGTJEJpMp39a9e/ercv5x48apVatWV+VcjkQohTLB3cWs8X3DJEkfrzuoXXHJDq4IAAAAAFCZde/eXceOHbPbPv/8c0eXVaEQSqHM6NwkUN3DgmTNMTR6yTYWPQcAAAAAOIybm5uCgoLstipVquiXX36Rq6urfv/9d1vbadOmKTAwUPHx8ZKklStX6oYbbpCfn5+qVq2q3r17a9++fXb9HzlyRAMGDJC/v7+8vLx0zTXX6K+//tL8+fM1fvx4bd261TZCa/78+VfzpV81zo4uADjfmD6h+nV3gv4+eFrf/HNUd7Wt5eiSAAAAAAAl6ezZwp8zmyV396K1dXKSPDwu3dbLq3j1XcJNN92kZ599Vvfff7+2bt2q/fv365VXXtFXX32l6tWrnyvlrIYPH64WLVooJSVFY8aM0e23367IyEg5OTkpJSVFnTp1Us2aNbV06VIFBQXpn3/+UU5Ojvr376+oqCitXLlSq1evliRZLJYSfQ1lBaEUypRgPw8907WRXluxU1OW71DXZoHy83R1dFkAAAAAgJLi7V34cz17Sj/88L/HgYFSamrBbTt1kn755X+PQ0KkEyfyt7vMWTjLli2T9wW1vvzyy3r55Zf16quvatWqVXrkkUcUFRWlwYMH67bbbrO1u/POO+2O+/jjjxUQEKDt27crPDxc//3vf5WQkKC///5b/v7+kqSGDRva2nt7e8vZ2VlBQUGXVXt5wfQ9lDkPdKinRoHeOnk2U9N/3OXocgAAAAAAlVDnzp0VGRlptz322GOSJFdXVy1cuFDffPON0tPT9eabb9odu2fPHg0YMED169eXr6+vQkJCJEkxMTGSpMjISLVu3doWSFVWjJRCmePq7KSJ/cJ17wd/6r8bY3T3NbXVqrafo8sCAAAAAJSElJTCnzOb7R8fP154W6cLxtkcPHjZJRXEy8vLbvTShdavXy9JOnXqlE6dOiWv86YJ9unTR3Xr1tWHH36o4OBg5eTkKDw8XJmZmZIkj/OnHVZijJRCmXR9/aq6o3VNGYY0esk2WXNY9BwAAAAAKgQvr8K389eTulTbC4OdwtqVgn379um5557Thx9+qHbt2mnw4MHKycmRJJ08eVK7du3S6NGj1aVLFzVr1kynT5+2O75FixaKjIzUqVOnCuzf1dVVVqu1VGovSwilUGaN6tlMPu7OijqapP/+dcjR5QAAAAAAKpGMjAzFxcXZbSdOnJDVatXAgQPVrVs3DR06VPPmzdO///6rGTNmSJKqVKmiqlWr6oMPPtDevXv1888/a/jw4XZ9DxgwQEFBQerXr5/WrVun/fv365tvvtGGDRskSSEhITpw4IAiIyN14sQJZWRkXPXXfzUQSqHMCvBx04vdmkiSpv24SwnJFfOXEAAAAABQ9qxcuVI1atSw22644QZNmjRJhw4d0pw5cyRJNWrU0AcffKDRo0dr69atcnJy0hdffKHNmzcrPDxczz33nKZPn27Xt6urq3766ScFBgaqZ8+eat68uV577TWZz01fvPPOO9W9e3d17txZAQEB+vzzz6/6678aTIZxmcvQ46pLSkqSxWJRYmKifH19HV3OVWHNMdTvvXXadjRRd7SuqTf6t3J0SQAAAACAIkhPT9eBAwdUr149uV84LQ/l3sV+vkXNLxgphTLN7GTSq/3CZTJJi7cc1Z/7Tzq6JAAAAAAAUAIIpVDmtaztp/9cV0eS9MqSKGVm5zi4IgAAAAAAcKUIpVAuvNitqap6uWrP8RR9vO6Ao8sBAAAAAABXiFAK5YLF00WjejaTJL21eo+OnklzcEUAAAAAAOBKEEqh3LizTU1dF+KvtCyrJnwf7ehyAAAAAADAFSCUQrlhMpk0sV+4zE4m/Rgdr7U7jzu6JAAAAADAJeTksC5wRVQSP1fnEqgDuGqaBPnowRvq6YPf9mvs0mhFNKgqdxezo8sCAAAAAFzA1dVVTk5Oio2NVUBAgFxdXWUymRxdFq6QYRjKzMxUQkKCnJyc5Orqetl9EUqh3HmmSyMtjYxVzKlUvf/LPg2/pbGjSwIAAAAAXMDJyUn16tXTsWPHFBsb6+hyUMI8PT1Vp04dOTld/iQ8QimUO15uzhrTJ1SPL/xHs3/Zp9tb11S9al6OLgsAAAAAcAFXV1fVqVNH2dnZslqtji4HJcRsNsvZ2fmKR74RSqFc6hEepBsbB+i33Qka812UPn3gOoaBAgAAAEAZZDKZ5OLiIhcXF0eXgjKm3Cx0PmnSJLVv316enp7y8/MrsE1MTIx69eolT09PBQYG6oUXXlB2drZdm4ULF6ply5by9PRUjRo19MADD+jkyZMXPfeaNWvUvn17+fj4KCgoSC+99JJdvwcPHpTJZMq3/fnnn3b9fPXVV2ratKnc3d3VvHlzLV++/PIuBmQymTThtjC5Ojvp9z0ntHxbnKNLAgAAAAAAxVBuQqnMzEzdfffdGjZsWIHPW61W9erVS5mZmVq/fr0++eQTzZ8/X2PGjLG1WbdunQYNGqQHH3xQ0dHR+uqrr7Rx40Y9/PDDhZ5369at6tmzp7p3764tW7Zo0aJFWrp0qUaOHJmv7erVq3Xs2DHb1rZtW9tz69ev14ABA/Tggw9qy5Yt6tevn/r166eoqKgruCqVW0g1Lw3r1ECSNGFZtFIysi9xBAAAAAAAKCtMhmEYji6iOObPn69nn31WZ86csdu/YsUK9e7dW7Gxsapevbokafbs2XrppZeUkJAgV1dXvf7665o1a5b27dtnO+6dd97R1KlTdeTIkQLP9/LLL2vVqlX6+++/bfu+//573XPPPTp+/Lh8fHx08OBB1atXT1u2bFGrVq0K7Kd///46e/asli1bZtt3/fXXq1WrVpo9e3aRXntSUpIsFosSExPl6+tbpGMquvQsq7rN/E2HTqbq4Y719H+9Qh1dEgAAAAAAlVpR84tyM1LqUjZs2KDmzZvbAilJ6tatm5KSkhQdHS1JioiI0OHDh7V8+XIZhqH4+Hh9/fXX6tmzZ6H9ZmRkyN3d3W6fh4eH0tPTtXnzZrv9t912mwIDA3XDDTdo6dKl+err2rWr3b5u3bppw4YNFz13UlKS3QZ77i5mjbstTJL08bqD2hnHNQIAAAAAoDyoMKFUXFycXSAlyfY4Li53vaEOHTpo4cKF6t+/v1xdXRUUFCSLxaL33nuv0H67deum9evX6/PPP5fVatXRo0c1YcIESdKxY8ckSd7e3poxY4a++uor/fDDD7rhhhvUr18/u2CqsPryaivIlClTZLFYbFvt2rWLcUUqj85NAtUjPEjWHEOjv41STk65GvwHAAAAAECl5NBQauTIkQUuEH7+tnPnzhI73/bt2/XMM89ozJgx2rx5s1auXKmDBw/qscceK/SYW2+9VdOnT9djjz0mNzc3NW7c2Dayyskp9/JVq1ZNw4cPV7t27XTttdfqtdde08CBAzV9+vQrqnfUqFFKTEy0bYcPH76i/iqyV3qHytPVrE2HTuubfwqeigkAAAAAAMoOZ0eefMSIERoyZMhF29SvX79IfQUFBWnjxo12++Lj423PSbkjjzp06KAXXnhBktSiRQt5eXmpY8eOevXVV1WjRo0C+x4+fLiee+45HTt2TFWqVNHBgwc1atSoi9bWrl07rVq1yq6+vHrOry+vtoK4ubnJzc3tIq8aeYL9PPRMl0aasmKnpqzYqVtCq8vP09XRZQEAAAAAgEI4dKRUQECAmjZtetHN1bVowUJERIS2bdum48eP2/atWrVKvr6+Cg3NXfw6NTXVNropj9lsliRdar13k8mk4OBgeXh46PPPP1ft2rXVpk2bQttHRkbahVwRERFas2aNXZtVq1YpIiKiSK8Pl/bADfXUKNBbp85matqPuxxdDgAAAAAAuIhys6ZUTEyMIiMjFRMTI6vVqsjISEVGRiolJUVS7jS70NBQ3X///dq6dat+/PFHjR49Wk888YRttFGfPn20ePFizZo1S/v379e6dev09NNP67rrrlNwcLAk6dtvv1XTpk3tzj19+nRt27ZN0dHRmjhxol577TW9/fbbtkDrk08+0eeff66dO3dq586dmjx5sj7++GM99dRTtj6eeeYZrVy5UjNmzNDOnTs1btw4bdq0SU8++eTVuHyVgovZSa/2C5ckfb4xRpGHzzi2IAAAAAAAUCiHTt8rjjFjxuiTTz6xPW7durUkae3atbrppptkNpu1bNkyDRs2TBEREfLy8tLgwYNti5JL0pAhQ5ScnKx3331XI0aMkJ+fn26++WZNnTrV1iYxMVG7dtmPslmxYoUmTZqkjIwMtWzZUt9995169Ohh12bixIk6dOiQnJ2d1bRpUy1atEh33XWX7fn27dvrv//9r0aPHq2XX35ZjRo10pIlSxQeHl6i16mya1e/qu5oU1OL/zmq0Uu26bsnbpDZyeTosgAAAAAAwAVMxqXmraHMSEpKksViUWJionx9fR1dTpmVkJyhLjN+UVJ6tib0DdOg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62rEiBFu27dt26bbbrtNISEhioqK0rRp04q18cEHH+jGG29USEiIYmNjtWTJkku+xjVr1qhNmzYKDg5Ws2bNNG/evEvuAwBXqlmzZunmm29WWFiYwsLCFBcXp6VLl0ryfr222Wz64IMPrDZKc31+66231KpVK4WGhqp+/foaNGiQTpw44Vbzj3/8Q82bN5fdbldUVJT+9Kc/6fz589b2S11jvOG8DQAoi++//14PPvigrrnmGtntdsXGxmrz5s3W9jNnzuixxx5Tw4YNZbfbFRMTo9mzZ1vbS3P93Lp1q/r166eoqCjZ7Xa1aNFCM2fO9NqndevWKSAgQK1bt3ZbX1WvjYRS8GrIkCFauXKl3nzzTW3fvl3du3dXt27d9P3330uSpk2bphdffFGzZ8/Wxo0bVa1aNSUmJlq/NH777bdyuVx69dVXtXPnTv3973/X7Nmz9dRTTxU71meffaYjR45YS9u2bb32y+l0qkePHsrNzdX69es1f/58zZs3TxMnTqyYNwLlcvbsWbVq1Uovv/yy1+0dO3bU888/X2I7jzzyiNtn4+JA6W9/+5vGjRunsWPHaufOnfrss8+UmJhobc/KylL37t0VHR2tlJQUTZ8+XZMmTdK//vUvq2b9+vXq16+fBg8erC1btqh3797q3bu3duzY4bVf6enp6tGjh7p06aLU1FSNHDlSQ4YM0fLly0vz9gDAFadhw4aaOnWqUlJStHnzZt1xxx3q1auXdu7cqaioKLdz8ZEjR/T000+revXquuuuuySV7vq8bt06PfTQQxo8eLB27typDz74QJs2bdIjjzxi1bz99tsaO3askpOTlZaWpjlz5ui9995z+/3hUtcYTzhvAwDK4uTJk0pISFBgYKCWLl2qb775RjNmzFCtWrWsmieffFLLli3TggULlJaWppEjR+qxxx7Tp59+Kkmlun6mpKSobt26WrBggXbu3Klx48YpKSlJ//znP4v16dSpU3rooYfUtWvXYtuq7LXRAB5kZ2cbf39/s2jRIrf1bdq0MePGjTMul8tERkaa6dOnW9tOnTplgoODzTvvvOO13WnTppnGjRtbz9PT040ks2XLllL3bcmSJcbPz88cPXrUWjdr1iwTFhZmcnJySt0OfEeS+eSTTzxuK+kz0LlzZ/PEE094bfenn34ydrvdfPbZZ15rXnnlFVOrVi23z8aYMWNM8+bNref333+/6dGjh9t+HTp0MH/84x+9tvuXv/zFtGzZ0m1d3759TWJiotd9AKCqqVWrlnn99dc9bmvdurUZNGiQ9bw01+fp06ebJk2auLXz4osvmmuvvdZ6PmLECHPHHXe41Tz55JMmISHBYz9KusYUxXkbAFAWY8aMMR07diyxpmXLluaZZ55xW1fwN7M3F18/PXn00UdNly5diq3v27evGT9+vElOTjatWrXyun9VujYyUgoe5eXlyel0KiQkxG293W7Xl19+qfT0dB09elTdunWztoWHh6tDhw7asGGD13YzMzNVu3btYuvvuece1a1bVx07drRSZW82bNig2NhY1atXz1qXmJiorKws7dy5s7QvEVXEW2+9pTp16uimm25SUlKSsrOzrW0rV66Uy+XS999/rxYtWqhhw4a6//77dfDgQatmw4YN6tSpk4KCgqx1iYmJ2rVrl06ePGnVFP0sF9SU9Fkuzz4AUFU4nU69++67Onv2rOLi4optT0lJUWpqqgYPHmytK831OS4uTgcPHtSSJUtkjNGxY8f04Ycf6je/+Y21T3x8vFJSUrRp0yZJ0v79+7VkyRK3mvLgvA0AKItPP/1U7dq1U58+fVS3bl3dcssteu2119xq4uPj9emnn+r777+XMUarV6/W7t271b17d49terp+euLp7+a5c+dq//79Sk5O/nkvrIgr4doY4LMjoUqpUaOG4uLi9Oyzz6pFixaqV6+e3nnnHW3YsEHNmjXT0aNHJcntF8+C5wXbLrZ371699NJLeuGFF6x11atX14wZM5SQkCA/Pz999NFH6t27txYuXKh77rnHYztHjx71eNyCbbh6PPDAA4qOjlaDBg20bds2jRkzRrt27dLHH38sKf8PFZfLpSlTpmjmzJkKDw/X+PHj9etf/1rbtm1TUFCQjh49qsaNG7u1W/TzUqtWLa+fqZI+T972ycrK0rlz52S32y/HWwAAPrV9+3bFxcXp/Pnzql69uj755BPFxMQUq5szZ45atGih+Ph4a11prs8JCQl666231LdvX50/f155eXnq2bOn260GDzzwgH788Ud17NhRxhjl5eVp2LBhHm//LwvO2wCAsti/f79mzZqlJ598Uk899ZS+/vprPf744woKCtKAAQMkSS+99JKGDh2qhg0bKiAgQH5+fnrttdfUqVMnj216un5ebP369Xrvvfe0ePFia92ePXs0duxYffHFFwoIuHwxzpVwbSSUgldvvvmmBg0apGuvvVb+/v5q06aN+vXrp5SUlDK39f333+vOO+9Unz593OaNqFOnjp588knr+a9+9SsdPnxY06dP9xpK4Zdj6NCh1uPY2FjVr19fXbt21b59+9S0aVO5XC45HA69+OKL1v9GvPPOO4qMjNTq1avd5pYCAFxa8+bNlZqaqszMTH344YcaMGCA1q5d6xZMnTt3Tm+//bYmTJhQ5va/+eYbPfHEE5o4caISExN15MgRjR49WsOGDdOcOXMk5U+4OmXKFL3yyivq0KGD9u7dqyeeeELPPvtsuY4JAEB5uFwutWvXTlOmTJEk3XLLLdqxY4dmz57tFkp99dVX+vTTTxUdHa3PP/9cI0aMUIMGDYqNQCrN9XPHjh3q1auXkpOTrb9vnE6nHnjgAT399NO64YYbKujVVh5CKXjVtGlTrV27VmfPnlVWVpbq16+vvn37qkmTJoqMjJQkHTt2TPXr17f2OXbsWLFvATh8+LC6dOmi+Ph4t8mlvenQoYNWrlzpdXtkZKQ1pL/ocQu24erVoUMHSfmj7po2bWp99or+sRQREaE6deooIyNDUv5nouDzUeDiz4u3mpI+T972CQsL43/bAVRZQUFBatasmSSpbdu2+vrrrzVz5ky9+uqrVs2HH36o7OxsPfTQQ277lub6/NxzzykhIUGjR4+WJN18882qVq2abrvtNv31r39V/fr1NWHCBPXv319DhgyRlP+fEmfPntXQoUM1btw4+fmVb/YJztsAgLKoX79+sdHCLVq00EcffSQpP2R66qmn9Mknn6hHjx6S8q9rqampeuGFF4qFUt6unwW++eYbde3aVUOHDtX48eOt9adPn9bmzZu1ZcsWPfbYY5LyAzNjjAICArRixQrdcccd5XqNV8K1kTmlcEnVqlVT/fr1dfLkSS1fvly9evVS48aNFRkZqVWrVll1WVlZ2rhxo9vcE99//71uv/12tW3bVnPnzi3VL5KpqaluQdfF4uLitH37dh0/ftxat3LlSoWFhXm8xQBXj9TUVEmyPh8JCQmSpF27dlk1P/30k3788UdFR0dLyv+8fP7553I4HFbNypUr1bx5c+ubM+Li4tw+ywU1nuZRKVCefQCgqnG5XMrJyXFbN2fOHN1zzz2KiIhwW1+a63N2dnax3wX8/f0lScaYUteUB+dtAEBZJCQkuP2dIUm7d++2/s5wOBxyOBwer1kul6tYe96un5K0c+dOdenSRQMGDNDkyZPdtoWFhWn79u1KTU21lmHDhlmjmwv+4748rohro8+mVEeVs2zZMrN06VKzf/9+s2LFCtOqVSvToUMHk5uba4wxZurUqaZmzZrmP//5j9m2bZvp1auXady4sTl37pwxxphDhw6ZZs2ama5du5pDhw6ZI0eOWEuBefPmmbffftukpaWZtLQ0M3nyZOPn52feeOMNq+bjjz92+6a0vLw8c9NNN5nu3bub1NRUs2zZMhMREWGSkpJ89M6gNE6fPm22bNlitmzZYiSZv/3tb2bLli3mu+++M8YYc+LECbNlyxazePFiI8m8++67ZsuWLdbnY+/eveaZZ54xmzdvNunp6eY///mPadKkienUqZPbcXr16mVatmxp1q1bZ7Zv327uvvtuExMTY31OT506ZerVq2f69+9vduzYYd59910TGhpqXn31VauNdevWmYCAAPPCCy+YtLQ0k5ycbAIDA8327dutmrFjx5r+/ftbz/fv329CQ0PN6NGjTVpamnn55ZeNv7+/WbZsWYW9pwBQkcaOHWvWrl1r0tPTzbZt28zYsWONzWYzK1assGr27NljbDabWbp0abH9S3N9njt3rgkICDCvvPKK2bdvn/nyyy9Nu3btTPv27a2a5ORkU6NGDfPOO+9Yv4M0bdrU3H///VbNpa4xBa+H8zYAoLw2bdpkAgICzOTJk82ePXvMW2+9ZUJDQ82CBQusms6dO5uWLVua1atXm/3795u5c+eakJAQ88orr7i1VdL1c/v27SYiIsI8+OCDbn8zHz9+3GvfPH37XlW9NhJKwav33nvPNGnSxAQFBZnIyEgzYsQIc+rUKWu7y+UyEyZMMPXq1TPBwcGma9euZteuXdb2uXPnGkkelwLz5s0zLVq0MKGhoSYsLMy0b9/efPDBB279KGinqAMHDpi77rrL2O12U6dOHTNq1CjjcDgq6J1Aeaxevdrjv/2AAQOMMd4/H8nJycYYYzIyMkynTp1M7dq1TXBwsGnWrJkZPXq0yczMdDtOZmamGTRokKlZs6apXbu2+e1vf2syMjLcarZu3Wo6duxogoODzbXXXmumTp1arL/vv/++ueGGG0xQUJBp2bKlWbx4sdv2AQMGmM6dOxd7ja1btzZBQUGmSZMmZu7cuT/rPQOAyjRo0CATHR1tgoKCTEREhOnatatbIGWMMUlJSSYqKso4nU6PbZTm+vziiy+amJgYY7fbTf369c0f/vAHc+jQIWu7w+EwkyZNMk2bNjUhISEmKirKPProo+bkyZNWzaWuMcZw3gYA/Hz//e9/zU033WSCg4PNjTfeaP71r3+5bT9y5IgZOHCgadCggQkJCTHNmzc3M2bMMC6Xy62upOtncnKyx2tadHS01355CqWq6rXRZszPGAcNAAAAAAAAlANzSgEAAAAAAMDnCKUAAAAAAADgc4RSAAAAAAAA8DlCKQAAAAAAAPgcoRQAAAAAAAB8jlAKAAAAAAAAPkcoBQAAAAAAAJ8jlAIAAAAAAIDPEUoBAACU0po1a2Sz2XTq1KnK7kqFu/i1zps3TzVr1qzUPpXGwIED1bt378ruBgAAKAVCKQAA8Ivwww8/aPjw4bruuusUHBysyMhIJSYmat26dZXdtSqhb9++2r17d2V345JmzpypefPmVXY3AABAKQRUdgcAAAB84b777lNubq7mz5+vJk2a6NixY1q1apVOnDhR2V2rEux2u+x2e2V345LCw8MruwsAAKCUGCkFAACueqdOndIXX3yh559/Xl26dFF0dLTat2+vpKQk3XPPPZKkAwcOyGazKTU11W0/m82mNWvWuLW3bt063XzzzQoJCdGtt96qHTt2WNu+++479ezZU7Vq1VK1atXUsmVLLVmyRFLhLXGLFy/2uv+JEyfUr18/XXvttQoNDVVsbKzeeecdt+O7XC5NmzZNzZo1U3BwsK677jpNnjzZ2n7w4EHdf//9qlmzpmrXrq1evXrpwIEDJb5HS5Ys0Q033CC73a4uXboUq7/49r1JkyapdevWeuONN3TdddepevXqevTRR+V0OjVt2jRFRkaqbt26bv0qeE+HDBmiiIgIhYWF6Y477tDWrVuLtfvmm2+qUaNGCg8P1+9//3udPn3aqvnwww8VGxsru92ua665Rt26ddPZs2clFb99LycnR48//rjq1q2rkJAQdezYUV9//bW1veDfZNWqVWrXrp1CQ0MVHx+vXbt2lfh+AQCAn49QCgAAXPWqV6+u6tWra+HChcrJyfnZ7Y0ePVozZszQ119/rYiICPXs2VMOh0OSNGLECOXk5Ojzzz/X9u3b9fzzz6t69eql3v/8+fNq27atFi9erB07dmjo0KHq37+/Nm3aZO2flJSkqVOnasKECfrmm2/09ttvq169epIkh8OhxMRE1ahRQ1988YXWrVun6tWr684771Rubq7H13Pw4EHde++96tmzp1JTUzVkyBCNHTv2ku/Dvn37tHTpUi1btkzvvPOO5syZox49eujQoUNau3atnn/+eY0fP14bN2609unTp4+OHz+upUuXKiUlRW3atFHXrl31008/ubW7cOFCLVq0SIsWLdLatWs1depUSdKRI0fUr18/DRo0SGlpaVqzZo3uvfdeGWM89vEvf/mLPvroI82fP1//+9//1KxZMyUmJrodT5LGjRunGTNmaPPmzQoICNCgQYMu+foBAMDPZAAAAH4BPvzwQ1OrVi0TEhJi4uPjTVJSktm6dau1PT093UgyW7ZssdadPHnSSDKrV682xhizevVqI8m8++67Vs2JEyeM3W437733njHGmNjYWDNp0iSPfSjN/p706NHDjBo1yhhjTFZWlgkODjavvfaax9o333zTNG/e3LhcLmtdTk6OsdvtZvny5R73SUpKMjExMW7rxowZYySZkydPGmOMmTt3rgkPD7e2Jycnm9DQUJOVlWWtS0xMNI0aNTJOp9Na17x5c/Pcc88ZY4z54osvTFhYmDl//rzbsZo2bWpeffVVr+2OHj3adOjQwRhjTEpKipFkDhw44PG1DBgwwPTq1csYY8yZM2dMYGCgeeutt6ztubm5pkGDBmbatGnGmMJ/k88++8yqWbx4sZFkzp075/EYAADg8mCkFAAA+EW47777dPjwYX366ae68847tWbNGrVp06Zck2LHxcVZj2vXrq3mzZsrLS1NkvT444/rr3/9qxISEpScnKxt27aVaX+n06lnn31WsbGxql27tqpXr67ly5crIyNDkpSWlqacnBx17drVY9+2bt2qvXv3qkaNGtYIsdq1a+v8+fPat2+fx33S0tLUoUMHr330plGjRqpRo4b1vF69eoqJiZGfn5/buuPHj1t9O3PmjK655hqrb9WrV1d6erpb3y5ut379+lYbrVq1UteuXRUbG6s+ffrotdde08mTJz32b9++fXI4HEpISLDWBQYGqn379tb7XeDmm292O54k65gAAKBiMNE5AAD4xQgJCdGvf/1r/frXv9aECRM0ZMgQJScna+DAgVaQYorcBlZwS11ZDBkyRImJiVq8eLFWrFih5557TjNmzND//d//lWr/6dOna+bMmfrHP/6h2NhYVatWTSNHjrRuvbvUZONnzpxR27Zt9dZbbxXbFhERUebXU5LAwEC35zabzeM6l8tl9a1+/frF5uiS5DZfVUlt+Pv7a+XKlVq/fr1WrFihl156SePGjdPGjRvVuHHjy/JabDabJFnHBAAAFYORUgAA4BcrJibGmiC7ILA5cuSItb3opOdFffXVV9bjkydPavfu3WrRooW1LioqSsOGDdPHH3+sUaNG6bXXXiv1/uvWrVOvXr304IMPqlWrVmrSpIl2795t1V9//fWy2+1atWqVx761adNGe/bsUd26ddWsWTO3xds307Vo0cJtzqqL+3i5tGnTRkePHlVAQECxvtWpU6fU7dhsNiUkJOjpp5/Wli1bFBQUpE8++aRYXdOmTRUUFKR169ZZ6xwOh77++mvFxMRcltcEAADKj1AKAABc9U6cOKE77rhDCxYs0LZt25Senq4PPvhA06ZNU69evSTlj0C69dZbNXXqVKWlpWnt2rUaP368x/aeeeYZrVq1Sjt27NDAgQNVp04d6xvfRo4cqeXLlys9PV3/+9//tHr1arfA6lL7X3/99dZIoLS0NP3xj3/UsWPHrH1DQkI0ZswY/eUvf9G///1v7du3T1999ZXmzJkjSfrDH/6gOnXqqFevXvriiy+Unp6uNWvW6PHHH9ehQ4c8vp5hw4Zpz549Gj16tHbt2qW33367XLc1Xkq3bt0UFxen3r17a8WKFTpw4IDWr1+vcePGafPmzaVqY+PGjZoyZYo2b96sjIwMffzxx/rhhx+KvceSVK1aNQ0fPlyjR4/WsmXL9M033+iRRx5Rdna2Bg8efLlfHgAAKCNu3wMAAFe96tWrq0OHDvr73/9uzTMUFRWlRx55RE899ZRV98Ybb2jw4MFq27atmjdvrmnTpql79+7F2ps6daqeeOIJ7dmzR61bt9Z///tfBQUFScqfE2rEiBE6dOiQwsLCdOedd+rvf/97qfcfP3689u/fr8TERIWGhmro0KHq3bu3MjMzrf0nTJiggIAATZw4UYcPH1b9+vU1bNgwSVJoaKg+//xzjRkzRvfee69Onz6ta6+9Vl27dlVYWJjH9+e6667TRx99pD/96U966aWX1L59e02ZMuWyfwOdzWbTkiVLNG7cOD388MP64YcfFBkZqU6dOlnfHngpYWFh+vzzz/WPf/xDWVlZio6O1owZM3TXXXd5rJ86dapcLpf69++v06dPq127dlq+fLlq1ap1OV8aAAAoB5sxXr4/FwAAAJfVmjVr1KVLF508edJtDiUAAIBfIm7fAwAAAAAAgM8RSgEAAAAAAMDnuH0PAAAAAAAAPsdIKQAAAAAAAPgcoRQAAAAAAAB8jlAKAAAAAAAAPkcoBQAAAAAAAJ8jlAIAAAAAAIDPEUoBAAAAAADA5wilAAAAAAAA4HOEUgAAAAAAAPA5QikAAAAAAAD43P8HoZhtzoy2kM4AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# Data for energies plot\n", "x1 = subspace_dimensions\n", "n2_exact = -109.10288938\n", "y1 = energies\n", "\n", "fig, axs = plt.subplots(1, 1, figsize=(12, 6))\n", "\n", "# Plot energies\n", "axs.plot(x1, y1, marker=\".\", markersize=20, label=\"Estimated\")\n", "axs.set_xticks(x1)\n", "axs.set_xticklabels(x1)\n", "axs.axhline(y=n2_exact, color=\"red\", linestyle=\"--\", label=\"Exact\")\n", "axs.set_title(\"Approximated Ground State Energy vs subspace dimension\")\n", "axs.set_xlabel(\"Subspace dimension\")\n", "axs.set_ylabel(\"Energy (Ha)\")\n", "axs.legend()\n", "\n", "\n", "plt.tight_layout()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.4" } }, "nbformat": 4, "nbformat_minor": 5 }