From b0809c774fd3481dc8621c8132ec1247ff884d5a Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Fri, 10 May 2024 01:39:10 -0400 Subject: [PATCH 01/21] enable only wire cut finding --- .../cutting/automated_cut_finding.py | 2 + .../cutting/cut_finding/best_first_search.py | 4 +- .../cutting/cut_finding/cut_optimization.py | 2 +- .../cut_finding/optimization_settings.py | 28 ++-- ...gate_cutting_to_reduce_circuit_width.ipynb | 2 +- .../tutorials/04_automatic_cut_finding.ipynb | 120 +++++++++++++++++- 6 files changed, 136 insertions(+), 22 deletions(-) diff --git a/circuit_knitting/cutting/automated_cut_finding.py b/circuit_knitting/cutting/automated_cut_finding.py index 51505e017..f1e3ea15c 100644 --- a/circuit_knitting/cutting/automated_cut_finding.py +++ b/circuit_knitting/cutting/automated_cut_finding.py @@ -137,6 +137,8 @@ class OptimizationParameters: seed: int | None = OptimizationSettings().seed max_gamma: float = OptimizationSettings().max_gamma max_backjumps: None | int = OptimizationSettings().max_backjumps + gate_lo: bool = OptimizationSettings().gate_lo + wire_lo: bool = OptimizationSettings().wire_lo @dataclass diff --git a/circuit_knitting/cutting/cut_finding/best_first_search.py b/circuit_knitting/cutting/cut_finding/best_first_search.py index 61c8af51b..89d67f8fc 100644 --- a/circuit_knitting/cutting/cut_finding/best_first_search.py +++ b/circuit_knitting/cutting/cut_finding/best_first_search.py @@ -149,6 +149,8 @@ class BestFirstSearch: ``stop_at_first_min`` (Boolean) is a flag that indicates whether or not to stop the search after the first minimum-cost goal state has been reached. + We set it to True because in the framework of LO cutting where no QPD assignments + are taking place, there is no need to explore multiple minima. ``max_backjumps`` (int or None) is the maximum number of backjump operations that can be performed before the search is forced to terminate. None indicates @@ -185,7 +187,7 @@ def __init__( self, optimization_settings: OptimizationSettings, search_functions: SearchFunctions, - stop_at_first_min: bool = False, + stop_at_first_min: bool = True, ): """Initialize an instance of :class:`BestFirstSearch`. diff --git a/circuit_knitting/cutting/cut_finding/cut_optimization.py b/circuit_knitting/cutting/cut_finding/cut_optimization.py index a0319bc2b..28885a243 100644 --- a/circuit_knitting/cutting/cut_finding/cut_optimization.py +++ b/circuit_knitting/cutting/cut_finding/cut_optimization.py @@ -261,7 +261,7 @@ def __init__( "CutOptimization", self.settings, self.search_funcs, - stop_at_first_min=False, + stop_at_first_min=True, ) sq.initialize([start_state], self.func_args) diff --git a/circuit_knitting/cutting/cut_finding/optimization_settings.py b/circuit_knitting/cutting/cut_finding/optimization_settings.py index bf8f3c89e..31fd4fc2b 100644 --- a/circuit_knitting/cutting/cut_finding/optimization_settings.py +++ b/circuit_knitting/cutting/cut_finding/optimization_settings.py @@ -45,9 +45,11 @@ class OptimizationSettings: max_gamma: float = 1024 max_backjumps: None | int = 10000 seed: int | None = None - LO: bool = True - LOCC_ancillas: bool = False - LOCC_no_ancillas: bool = False + gate_lo: bool = False + wire_lo: bool = True + gate_LOCC_ancillas: bool = False + wire_LOCC_ancillas: bool = False + wire_LOCC_no_ancillas: bool = False engine_selections: dict[str, str] | None = None def __post_init__(self): @@ -57,12 +59,12 @@ def __post_init__(self): if self.max_backjumps is not None and self.max_backjumps < 0: raise ValueError("max_backjumps must be a positive semi-definite integer.") - self.gate_cut_LO = self.LO - self.gate_cut_LOCC_with_ancillas = self.LOCC_ancillas + self.gate_cut_LO = self.gate_lo + self.gate_cut_LOCC_with_ancillas = self.gate_LOCC_ancillas - self.wire_cut_LO = self.LO - self.wire_cut_LOCC_with_ancillas = self.LOCC_ancillas - self.wire_cut_LOCC_no_ancillas = self.LOCC_no_ancillas + self.wire_cut_LO = self.wire_lo + self.wire_cut_LOCC_with_ancillas = self.wire_LOCC_ancillas + self.wire_cut_LOCC_no_ancillas = self.wire_LOCC_no_ancillas if self.engine_selections is None: self.engine_selections = {"CutOptimization": "BestFirst"} @@ -102,8 +104,8 @@ def set_gate_cut_types(self) -> None: The default is to only include LO gate cuts, which are the only cut types supported in this release. """ - self.gate_cut_LO = self.LO - self.gate_cut_LOCC_with_ancillas = self.LOCC_ancillas + self.gate_cut_LO = self.gate_lo + self.gate_cut_LOCC_with_ancillas = self.gate_LOCC_ancillas def set_wire_cut_types(self) -> None: """Select which wire-cut types to include in the optimization. @@ -111,9 +113,9 @@ def set_wire_cut_types(self) -> None: The default is to only include LO wire cuts, which are the only cut types supported in this release. """ - self.wire_cut_LO = self.LO - self.wire_cut_LOCC_with_ancillas = self.LOCC_ancillas - self.wire_cut_LOCC_no_ancillas = self.LOCC_no_ancillas + self.wire_cut_LO = self.wire_lo + self.wire_cut_LOCC_with_ancillas = self.wire_LOCC_ancillas + self.wire_cut_LOCC_no_ancillas = self.wire_LOCC_no_ancillas def get_cut_search_groups(self) -> list[None | str]: """Return a list of action groups to include in the optimization.""" diff --git a/docs/circuit_cutting/tutorials/01_gate_cutting_to_reduce_circuit_width.ipynb b/docs/circuit_cutting/tutorials/01_gate_cutting_to_reduce_circuit_width.ipynb index b06524fc0..aa20fc470 100644 --- a/docs/circuit_cutting/tutorials/01_gate_cutting_to_reduce_circuit_width.ipynb +++ b/docs/circuit_cutting/tutorials/01_gate_cutting_to_reduce_circuit_width.ipynb @@ -413,7 +413,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.9.6" } }, "nbformat": 4, diff --git a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb index 7843ebf17..f27a47d70 100644 --- a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb +++ b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb @@ -21,9 +21,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/0AAAGRCAYAAAA3ltNoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB+I0lEQVR4nO3deVwU5R8H8M9eXHIJCIuAggfmgSKeeB9pmpXmbaX5Ky0zz8qy8qw0zcozzay01DzySFMjBe8TU0HwABEPQBaQQ+5j2f39QaEr5wK7s7t83q9Xr9xnZnY/A8zx3XnmGZFarVaDiIiIiIiIiEyOWOgARERERERERKQbLPqJiIiIiIiITBSLfiIiIiIiIiITxaKfiIiIiIiIyESx6CciIiIiIiIyUSz6iYiIiIiIiEwUi34iIiIiIiIiE8Win4iIiIiIiMhEsegnIiIiIiIiMlEs+omIiIiIiIhMFIt+IiIiIiIiIhPFop+IiIiIiIjIRLHoJyIiIiIiIjJRLPqJiIiIiIiITBSLfiIiIiIiIiITxaKfiIiIiIiIyESx6CciIiIiIiIyUSz6iYiIiIiIiEwUi34iIiIiIiIiE8Win4iIiIiIiMhEsegnIiIiIiIiMlEs+omIiIiIiIhMFIt+IiIiIiIiIhPFop+IiIiIiIjIRLHoJyIiIiIiIjJRLPqJiIiIiIiITBSLfiIiIiIiIiITxaKfiIiIiIiIyESx6CciIiIiIiIyUSz6iYiIiIiIiEwUi34iIiIiIiIiE8Win4iIiIiIiMhESYUOQKQvQa8vQcZdhdAxYOMpR99fZlfrPQxlXYCaWR8iIiJ9MJTjJ4+dZExMabsxlHUB9LsfYNFPtUbGXQXSImOFjlEjTGldiIiI9IXHTyLtmdJ2Y0rrog127yciIiIiIiIyUSz6iYiIiIiIiEwUi34iIiIiIiIiE8Win4iIiIiIiMhEcSA/oqd0W/EumozqDQBQFRYiJyEN8WfCcXnxVmQrUgROR0RERLrGcwEi7XG7MVy80k9UCsX569jRegJ2tX8HJ99dAcdWnuj1w/tCxyIiIiI94bkAkfa43RgmFv1EpVDlK5GTlIZsRQoSzt9AxJZAOHdoBpm1pdDRiIiISA94LkCkPW43holFP1EFLF3qwvOFzlApC6EuVAkdh4iIiPSM5wJE2uN2Yzh4Tz9RKeRdWuLVqM0QicWQWpoDAMLX7YcyJw8A0GvD+3hwIhSRWwIBAA6tvNBj7XT82W8WCvMKBMtNRERENaOicwEruQOeP7AIB577CLnJ6ZBYmmFw4Dc4+uYypN28L2R0IsFUtN00GNgRvu+N0FjGztsdwXM3IuLXw3rPW1sYddEfGhqKefPm4fjx41Cr1ejTpw/WrVsHb29vDBo0CNu3bxc6IhmppMu3cHr6GkjMZfB8qQvqd2+NK0u3FU8PnrsRA/d9jnuHLiAvNRP+Sybiwic/seAnIiIyERWdC2QrUnB9/QF0WDgep6asgu/7I3Hvrwss+KlWq2i7uf9XMO7/FVz8usGADvD7+BVE/X5cgLS1h9EW/UFBQXjhhRfQsGFDzJkzB5aWlti0aRMGDhyIzMxM+Pr6Ch2RjFhhbj4y7ioAACHLdsDGU45Oi97E2Q++B1B0oL+2/gDazx2Lh1ei8Cg6HvGnw4SMXGkSCzO0njYUXoO7wsrVoWhd7yXg9q6TuPHTIaHjERmkzJgkRGw+jKRLkVApC2HbyBXer/VDPb+mEIlEQscjIh2o6FwAAG789BdeCFiK5hOeR8PnO2F/3w+EiktkECqz3fzHytUBnRZPQOCri1GYk6/vqFrr99unkFlb4a8hc6FWPb5dwcHHC4MOLMbJd1fh3oFzAiYsm1EW/UlJSRg1ahT8/PwQGBgIS8uigSHGjh0LLy8vAGDRTzUq5OsdePnkSkRsPoLk0NsAgJsbAzDo4GK4dm2FPwfOFjhh5fkvmQh511YInvszUq7dg8zGEo6tvFDHzUnoaEQGR61W48rS7bi6ag+gVgMiABAhMfgmorYfg1tvX/Rc/x7MbKyEjkpEOlbauYBapcLF+ZswYM9CHH3jq+IuzERUpLTtBgAgEqHHmukIW/MHUm/cEy6gFk7P+A6Dj34Dn2kv4+qK3QCKLqb1WDMN0XtOGWzBDxjpQH5Lly5FamoqNm7cWFzwA4CdnR38/PwAsOinmpVxR4GYI//Ab/aYx41qNSJ+PYLYoMvIS04XLpyWGgzoiPC1+3A/4CIyYxKRev0eonYeR+jyXUJHIzI4IV/vxNWVu4sKfgBQ4/G/AcQdC8HR8UuhKlAKE5CI9KbUcwEAbn3bIluRgrrPNBAoGZHhKmu7aTNjGPIzsnHz578ESqa9nMQ0nP3ge7SZORyObRoDANp9+hrEZjJcmPOzwOnKZ5RF//bt29G9e3d4e3uXOt3FxQVyuRwAoFQqMX36dDg4OMDe3h5vvvkmcnNz9RmXTET42v1w6+ULuX/Lx40qFdQqddkLGaDsxFS49W4LM3troaMQGbTshNSigr8CirPXcD8guML5iMj4PX0uYP9MAzQY0BEHBs5G01f6wrqBs8AJiQzP09uNc4dmaPpKX5yZ+Z3AybR3P+AionYeR4810+DRvz2ajeuHU1NWQZll2PWl0XXvVygUiIuLw6hRo0pMU6lUCAsLQ9u2bYvbFi9ejGPHjiEsLAxmZmZ46aWX8OGHH2LVqlWV+jylUgmFQlFj+Uk4BZW8End6Ruk7oKR/IrDJdXiN5IiNja32e1TV2ffXocfaGRgd/hPSImKRdDkScUGXcT/gYpWzVHd9iAxR9E+HK/2IodD1+yFty6t8RIaups8F/Je+hYvzNyFbkYIrX21Hp0VvImjsl5XKwWMnGYua3G7MbK3QffU0nJ6+BnmpmVrnEPIc+j8X523Ci0eWoffPs3B1+W4kXYqschZt10cul0Mq1b6EN7qiPysrCwBKHThp3759SExM1Oja/+OPP+Krr76Cm5sbAGDBggUYMWIEli9fDolEUuHnKRQKeHh41Ex4EtQXjv3gJrMVOgYiIyMxspp/U9VZl8SLEdjd+V04tW0K53becOncAr02fIC4o1cQ9PoSrd+vJtaHyBBNs/eHr7lrpQbqi794k8cKIiNQk+cCTV99FrkPHyE26DIA4PbvJ9B0TB80eL4T7h+6UO6yPHaSManJ7abZ68/B0tkeHReO12iP+v0Erv9woNxlhT6H/o8yJw/h6/bDf8lEhK6o+u2xVVmfmJgYuLu7a/1ZRlf0e3h4QCKR4MSJExrt9+7dw9SpUwE8vp8/LS0NMTExGl8C+Pn5ISMjA3fv3kXjxo31FZtMVNTO44jaeVzoGFpTF6qQ9E8Ekv6JwLX1f6LRsO7osWY6XPxbIOHcdaHjERkEESo/Kr+YI/gT1Tq3tgbi1tZAjbaAofMFSkNkHMJW70XY6r1Cx6g29b89BirbI1BoRlf0m5mZYdy4cdi4cSMGDx6MQYMGISYmBhs2bICLiwvi4uKKi/yMjAwAgL29ffHy//37v2kVkcvliImJqclVIIGcG7kEWXeEv1XD29sbMTurN9hHTa/Lo1txAAALRzutl62J9SEyRLdW78e9X49WPKMIcHymIWL+4bGCyNCZ0rkAkb6Y0nZjKOsCVG19/hu3TltGV/QDwKpVqyCTybBv3z4cPXoU/v7+2Lt3Lz777DNERUUVD/BnY2MDAHj06FHxDygtLU1jWkWkUmmVulCQ4ZHJDOPPXSar/t9UddZlwJ6FuPPHGTwMvY3c5Eew9XSF38evIC8tE4qz4VXKwm2ETJHtpJcrV/SrAZ8JL3A7IDICpnQuQKQvprTdGMq6APrdDxjOWmvB2toa69evx/r16zXaw8PD4ePjA7G46KEE9vb28PDwQEhICJo1awYAuHLlCmxsbODp6anv2EQGIe7oFTQa2h2+s0bBzNoSOcmPkHD+Bk7P/A55KZXrAUNUG9h6uaLpmD64ta38wt+uqRu8Xu6mp1RERERE2jHKor80aWlpiI2NxaBBgzTaJ0yYgC+//BLdu3eHTCbDggULMH78+EoN4kdkisLW/IGwNX8IHYPIKHReMhHKnDzc+eNMqdPtvN3R/7c5kFlZ6DkZERERCcXYxvUymaI/LCwMADQG7QOATz75BA8fPkTLli2hUqkwfPhwLF26VICERERkbCRmMvRYOwPNxvZH+Lr9iA28BABw8muK5m8MhOcL/pCYywROSURERFQ2ky/6pVIpVq1ahVWrVgmQioxF01f6ounoPlCrVTj30Qak3bxfPM2jf3u0njYUhQVKRG4+gug9pwAAXb6eBNvG9VGYm48z769D9oNkNBnZC23eG4GsuIcAgCOvLkJhbr4g60RENUMkEkHepSVsPOX4vd3bAIDeGz5AnfqOAicjIl2ydq+HHmtnQKVUQiSR4PzsDUi9ca94evc102DTwAUiiRg3NwXg9u8nynk3ItNV0bYisTRDp8/fgHUDF4glYgS+thjWHvXgv+xtqFVqqJWFOPP+OmTeTxRwLUybyRT9kydPxuTJk4WOQUbIzN4azV7vj4ODPoFNQxf4L5mIv0csLJooEqHdp6/iwMCPUZiXjwF7FiLmyCW4dm2JwrwCBLw8D46tG6Hdp6/h1LsrAQCRW46w+zwREZGRy4pPxqHBcwC1GvKurdB62lCceGd58fSQb3Yi444CYjMpBh/9Fnf+OAPVv4/xIqpNKtpWfN8biei9p6E483jA6NzkdAS+9iUKMrLh1tsXbWYOx5mZa4WIXyuYTNFPVFX12jaB4uw1qJWFSL/9AOYOtoBIBKjVsHCwQe7DdCizcwEAj6IeoJ5fU9g2qo/k0NsAgOSr0XDp9Ezx+zUZ1Rvu/drhfsBFXFu3X5B1IiIioup58vnbZjaWSLl+V2N6xr+P/VLlKwG1Gmq1Wp/xiAxGRduKvGtLSMyl8H1vBB6cuoqrK3YjNzm9eLqqoNBonndvrMRCByASmpm9NfIfZRW/LsjMgZmtFYCibyEtnGxh6WwPaR0LuHRqDnN7a6TevI/6vXwBAG69fWH57/Pt7wcE44+eM/H38IWQ+7eEazcfva8PERER1QyHlp54/s9F6LRoAuJPhZU6T6t3h+DuwfNQKwv1nI7IcJS3rTi08ETcsRAEDF8AR59GkPu3LJ4msTCD76yRuP7jIX1HrlVY9FOtl/8oC2a2dYpfy6wtkZ+eXfz63Ec/oMd309Fz3UykRcQgOyEFcUevID36AQbsXgi3Pm2R8u99S/np2VCrVFAVKHHv0AU4+HjpfX2IiIioZqRcu4tDL36KoPFL0GnxmyWmew3uCkcfL1xZul2AdESGo7xtJTclHXHHQwG1Gg9OhKJui4YAAJFEjB5rp+Pauv0a42lRzWPRT7Ve0uVbcOncHCKJGDaecuSlpANPdNFLOH8Df49YiBOTlkNqZY6kS7cAACFf70TAsPmI+fsfKM5eAwDIbKyKl5P7t0DGnXj9rgwRERHVCLHZ47tgC9KzUZijOTBv/V5t0HRMH5yatlrjvIGotqloW0k4fwOOrRsBABxbN0L6v+fHXb95Bw+Oh+J+wEX9ha2leE8/1Xr5aZm49VsQBu79HGq1Cuc//hFuvX1hZm+NO3tPo/38cXD0aQSVshCXv/wNqgIlzB1s0HvDB1ApC5EV9xAXPv0JANBy0otw6+ULtUqFhyG3uRMjIiIyUs4dnoHvByOhLlRBJBIheMEmjfOD7iunIDshFf23zQUAnJi0HDlJacKGJhJARdvKpcVb0PXrdyCxMENaRAzijl6BW29feL7UBdYezvAa3BUp1+4geN4moVfFZLHoJwIQuSUQkVsCi1+nXn/8mJF/Fv5aYv68lAwEDJtfoj1k2Q6ELNuhm5BERESkN4oz4Qh4YrTxp+1oM1GPaYgMV0XbSlbsQxwe/blGW9yxEGxp9Kquo9G/2L2fiIiIiIiIyESx6CciIiIiIiIyUSz6iYiIiIiIiEwU7+mnWsPGU16t5VXKQqRHF402atvIFWKpRJAcNfEeNbUuNZGFiIhIXwzl+MljJxkTU9puDGnb02cWkVrNZ4wQVUbWg2T83u5tAMCIS+tRp76jwImqzpTWhUhfuN0QEfcDRNrjdiM8du8nIiIiIiIiMlEs+omIiIiIiIhMFIt+IiIiIiIiIhPFop+IiIiIiIjIRLHoJyIiIiIiIjJRLPqJiIiIiIiITBSLfiIiIiIiIiITxaKfiIiIiIiIyESx6CciIiIiIiIyUSz6iYiIiIiIiEwUi34iIiIiIiIiE8Win4iIiIiIiMhEsegnIiIiIiIiMlEs+omIiIiIiIhMFIt+IiIiIiIiIhMlFToAGa6g15cg465C6BgAABtPOfr+MlvoGERERFozpOOpseBxv2KG9HdlTL+vmReAuGyhUwBuVsDyTkKnoNqCRT+VKeOuAmmRsULHICIiMmo8npIu8O+qauKygegMoVMQ6Re79xMRERERERGZKBb9RERERERERCaK3fsNyKOMfETcfYScPCVkUjEaudtA7mQldCwiIiIiIiIyUiz6BXb9dirW7byJv8/G4ta99BLT6ztboVd7V7w9vBm6t5NDJBIJkJKIiIiIiIiMEYt+gdx7kIHJi87i0KnyB2B5kJiN3w7dxm+HbqNNMwesn9sVnVo76yll5XVb8S6ajOoNAFAVFiInIQ3xZ8JxefFWZCtSBE5HREREVHvxPI2oduM9/QL4Zd8ttBq6t8KC/2mhESnoMu4APl55EYWFKh2lqzrF+evY0XoCdrV/ByffXQHHVp7o9cP7QsciIiIiqvV4nkZUe7Ho17NlG69i/NyTyMwuqNLyKpUaS366inGfnjS4wl+Vr0ROUhqyFSlIOH8DEVsC4dyhGWTWlkJHIyIiIqrVeJ5GVHux6NejX/ffwofLL5Y7j0QigpuLFdxcrCCRlH3//m+HbuO9ZRdqOmKNsXSpC88XOkOlLITawL6cICIiIqrNeJ5GVLuw6NeT+/GZmPLluQrnkztZIvbIGMQeGQO5U/nfvK767TqCzj+oqYjVJu/SEq9GbcZr0VsxKmQD5P4tcX3DQShz8gAAVnIHDP9nHSwcbQEAEkszDD2zGvbPNBAyNhEREZHJq+g8rdeG9+H92rPF8zu08sKQkysgMZcJFdmohE30FDoCUZmMuugPDQ3F4MGDYWdnB1tbWwwZMgTx8fGwsbHB6NGjhY6nYcric8jIqlqX/vJMWHAK+QWFNf6+VZF0+Rb2PzsLBwbORsi3vyPxYgSuLN1WPD1bkYLr6w+gw8LxAADf90fi3l8XkHbzvkCJiYhIl5QqICwFuJAE3HoEqNVCJyKqvSo6TwueuxE+U1+GuYMNIBLBf8lEXPjkJxTm1fz5KxHpl9EW/UFBQejcuTMiIiIwZ84cLF68GLGxsRg4cCAyMzPh6+srdMRiEXfS8OcJ3RS2dx9kYk/gXZ28t7YKc/ORcVeBtIgYhCzbgYyYRHRa9KbGPDd++gv23h5oPuF5NHy+E0K/+V2gtEREpCt5hcAPEcCgI8D/TgPvngPGnABGHwf+vM/i/0kunZujz8aPMPziOoyP34XWM4YJHYlMVEXnadmKFFxbfwDt545Fs7H98Cg6HvGnwwRMbBxifpyJ6zN8UZDyANdn+CL6q1FCRyIqwSgf2ZeUlIRRo0bBz88PgYGBsLQs6gY/duxYeHl5AYBBFf3rd93U6fuv3XEDowc21ulnVEXI1zvw8smViNh8BMmhtwEAapUKF+dvwoA9C3H0ja+Ku5QREZFpyFUCU88DV1KAp0emic4AFoYAkenAey0BUdlD19QaUisLpN2KQfTeU+j42f+EjkO1SGnnaTc3BmDQwcVw7doKfw6cLXBCYanychC/azFST21HfnIsxGaWMJc3hmOvsXB+cVrxfB4TlgMo6t7fYkWIQGmJymeUV/qXLl2K1NRUbNy4sbjgBwA7Ozv4+fkBMKyi/++zcTp9/zMhiciq4tMAdCnjjgIxR/6B3+wxGu1ufdsiW5GCuryXn4jI5Ky4XlTwA8DTF/T/e70tGvhLu6fWmqy4o1dwefFvuLv/LFT5hncsJ9NV6nmaWo2IX48gNugy8pLThQtnAO5//w5Sjv0K9/HL0HLNdXh/cQz1nn8Xyqw0oaMRac0oi/7t27eje/fu8Pb2LnW6i4sL5HI5AGDnzp3o1q0brK2t4enpqceURTKzC3DzziOdfoZKpUZIRIpOP6Oqwtfuh1svX8j9WwIA7J9pgAYDOuLAwNlo+kpfWDdwFjghERHVlPR8YH8l7mYTAdgazW7+REJ7+jwNAKBSQa3ixpl24Q+4vDwL9p2HwNzFC1ZebeDUdzzqj54ndDQirRld936FQoG4uDiMGlXyfhmVSoWwsDC0bdu2uK1u3bqYMmUKEhISsHz5cq0/T6lUQqFQVDlv+O10qJ7acUokojJH5nd9ot21jHkUD3NQWKj5nmcv3UHDejV7haCgQFnpeU/P+K7U9qR/IrDJdXjxa/+lb+Hi/E3IVqTgylfb0WnRmwga+2WlssTGCntZKDchrfjf8fHxsFDlCBemmkxpXYj0hdtNxYKSrZCvcqhwPjWAiEdA8G0F3Cwqf6wxVtocT6mIIRz3S2NI+wFdnKdVJ4sh/r5KU1DgAqDiJxLI6roi/XIAHHq8AqlNxfs17XMUIDY2ocbf1xAZ0nZj7ORyOaRS7Ut4oyv6s7KyAACiUm4E3LdvHxITEzW69vfr1w8A8Mcff1Tp8xQKBTw8PKq0LADAqjHQ+GONpv8ey1eRi9uGlNru3m8b4hKyNdo+nP0JPpx4rMoxS/OFYz+4yWxr7P2avvosch8+QmzQZQDA7d9PoOmYPmjwfCfcP3Sh3GUjIyMxsjq/hxpQV2yJb52fBwB07NgRqUa8wzKldSHSF243FXMZ8j7c//d1pefv++IwZN08q8NEhqGmj6e1gSEc90tjSPsBQ/q7MtTfV2larA6HZYOWFc7XcMqPuPPNKwgdVw+WHi1Rp1ln2LV7HnadBpdah2grMjISHs+1qvb7GAND2m6MXUxMDNzd3bVezuiKfg8PD0gkEpw4cUKj/d69e5g6dSoAw7qfHyo9fbuvMozH9pXn1tZA3NoaqNEWMHS+QGmIiKimFWZrdw9wYU7tvmeYyBBF7TyOqJ3HhY4hOOvmXdFq/W1kRQYjK+IcMq6dxO2lw2HXbiAaf7q/ROFv4dFCoKREFTO6ot/MzAzjxo3Dxo0bMXjwYAwaNAgxMTHYsGEDXFxcEBcXV6NFv1wuR0xMTJWXT8sogM+ooxptioc5cO+3rdT5XZ0si6/wdxjzB+IflvwmTFFK2/ZfV6Grr2OVc5bm3MglyLpT9VsbapK3tzdidv4saIbchDScfmEBACA4OBgWLvaC5qkOU1oXIn3hdlOx5HwxJoaroSoxbr8mEdRwMVNiz6m/IK4FI/gb0vHUWBjCcb80hrQfMKS/K0P9fZVm6nUXxORWbl6RRArr5l1g3bwLXIa8j+TjW3B3+VhkXjsJm1Y9NeZtOu+QVjm8vb3xdzVqDGNiSNuNsftv3DptGV3RDwCrVq2CTCbDvn37cPToUfj7+2Pv3r347LPPEBUVVeYAf1UhlUqr1IXiP+4AGrnbIDo2o7itsFBdont+aeIf5lRqPgB4rsczsLc1r2rMUslkhvPnIZNV7/dQE7LET4y34OqKOvVr9ksWfTKldSHSF243FXMH0CcFCHxQ/nxqiDCmqQwNPITdr+tLecdTqZUFbL2KTuLEMiks69nDoaUnCrJykXHXMAo6IRjCcb80hrQf4Hla1chuAahk0f80C/fmAADlo8Tq55DJjOZnVl2GtN3UVoazt9CCtbU11q9fj/Xr12u0h4eHw8fHB2KxYT2UoHcHV42iv6b5PuNQ4wU/ERFRVXzoA9x8BMRmlT1PdxdglJf+MhkypzaNMWDPwuLXzd8YiOZvDITi7DUEDOMtcERCifikJxy6j4FVk/aQ2tVDXnwU4jZ/Akkde9j49BY6HpFWjLLoL01aWhpiY2MxaNAgjfbCwkIUFBSgoKAAarUaubm5EIlEMDfXX5H89ohn8NPeSJ29/6QRzXX23kRERNpwMAc2dgO+CQeOPACefNiMtRQY7glMegaQGtb384JRnLtWI6OnE1HNsvMbiJSTW/Fg2zwUZqdDaucMm5Y94DltI6S2TkLHI9KKyRxyw8LCAJQcxG/z5s2wtLTEyJEjcf/+fVhaWqJZs2Z6zdahVT34t9HN8+gd7Mzx6qDGOnlvbdg2csW4+9tRz6+pRrvv+yMx/OI69Pvt0+I2iaUZnv9zEV65+Qu8BnfVd1QiItKxuubAF+2AX7o/bvu4NRDQH5jSggU/kb6VdZ72nwG7F8J/6VtaLWPq5MNno9mXp9Dm10T47cpF65/uw+u9LbBswAH7yPiYzGG3rKJ//PjxUKvVGv/dvXtX7/m+n9sVUmnNj1a0anZnWFtV/KxRXWszczgU566XaI/YfLhE90RVnhLH3liG6xsO6iseEREJoO4Tneq6uQAWJtO/kMi4lHWeBgDuz7ZDQWbJQaLLW4aIjIvJFP2TJ0+GWq1G586dhY5SqtbeDlgwya/C+f4b2d+937ZSR+l/0st9G+KV54W/yu/UtilyEtOQHZ9cYlpOYhqgUmu0qVUq5CSl6SccERERUS1W3nkaRCI8878BuLkpoPLLEJHRMZmi3xh8MrENJg4r/9aC/0b2j0vIRmGhusz5urV1weZFPUs8I1QIracPRdiavULHICIiIqKnlHee1mRkL9w7dAGFuQWVXoaIjA+Lfj0SiUT4fm5XfDKhDapTqw971hMB655DHQPo1u/e1w/JobeRl5opdBQiIiIiekJ552kScxkaDe2OqO1HK70MERkn3l2nZ2KxCIumtcegHh54Y94pRNx9VOllHe3NsXq2P0YPbGQQV/gBwKGVJ+RdWsK5QzPYP9MAto3r49iby4q69RMRERGRYMo7T7Nu4Awzuzp4dvPHMLO3hqWzPRqP6Ik69R15bkdkYlj0C6SLrwvC9wzFwVMxWLfjBo4Gx6NAqSoxn0gEtGvhhEkjnsHoAY0M4ur+k66u3IOrK/cAALqteBcRvx6GQ0tPmHW1xp29p+H92rNoPKIn7Jq4of+OeTg1bTVyElLR68cP4NjKC8rsXDj5NcXF+ZuEXREiIiIiE1PRedqBAR8BAOT+LeE1pCtu/36ieLknl2HBT2TcWPQLSCoVY3DvhhjcuyHy8gsRHpWKM5cTMP2r8wCAXd/0Qf8ubrCpYyZw0so5PeO7Em2RWwIRuSWwRPvxCV/rIxIRERERofTztP8ozl2D4tw1rZYhIuPBe/oNhLmZBO1aOGHos57FbZ18nI2m4CciIiIiIiLDw6KfiIiIiIiIyESx6CciIiIiIiIyUbynn8pk4ykXOkIxQ8pCREREJDRDOjcypCwVcbMSOkERQ8lBtQOLfipT319mCx2BiIiIiErB87SqWd5J6ARE+sfu/UREREREREQmikU/ERERERERkYli0U9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RERERERERCaKRT8RERERERGRiWLRT0RERERERGSiWPQTERERERERmSgW/UREREREREQmikU/ERERERERkYli0U9ERERERERkoqRCByDDNfMCEJctdIoiblbA8k5CpyAybUGvL0HGXYXQMSrNxlOOvr/MFjoGEZEgDGmfrYv9sSGtn7HgcbFitbW+YdFPZYrLBqIzhE5BRPqScVeBtMhYoWMQEVElmPo+29TXj4RRW+sbdu8nIiIiIiIiMlEs+omIiIiIiIhMFIt+IiIiIiIiIhPFop+IiIiIiIjIRLHoJyIiIiIyYd1WvIvx8bswPn4XxsXuwIhL69Ft1VRYyR2EjmawBuxeiC5fTyrRbu1eD+Pjd8G54zMCpCJ9ivi0F+6unlCiPS/hLi4NFiHz+mkBUlUNi34iIiIi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NB3TB6emrQbU6uL2rt+8gwfHQ3E/4KJe8xJR7fDoVhziz4Sj8fCeAIAOn42HSCrWePwdAFxeug05D9PRZVnR4/m6rZyCjLsJuLpyt8Z8Zz9cD3O7OsWP3BOKvEtLSOtY4M6fZwXNQUT0tPLO7Uo9HxQBeWmZgFqNgswcSMykEEslek5dNpO5p5+IqLrsmrqhy9eTUJCVC1VBIc59uB5uvX1hZm+NO3tPo/vKKchOSEX/bXMBACcmLYdDK094vtQF1h7O8BrcFSnX7iB43iZhV4SITM6VZTvQc90MXP/hAM7NWl/qPKp8Jfb3fb/49ZExX5Q6X35aJna2favMz1Kcu4ZdHSs3TtIm1+HlTo/aeRxRO4+XOq3V5MEIW/MHCnNKDgJIRCQUt96+Jc7t4o6FlHs+GH8yDI2GdMPAPz6HxFyGGz/9hcK8AoHX5DEW/URE/0q+Go0/+3+o0fbk1f4dbSaWWCbuWAi2NBL2ahkRmb7ECzcQ+u3vsGngjLTIWKHjVJu0jgUSL0Xi+g8HhI5CRKShonO70s4HAeD0jO90FanaWPQTERERGYHILabzGGJlVi6uLi/9MX5ERFSzeE8/ERERERERkYli0U9ERERERERkoti9n4hqDRtPudARABhOjqcZaq6yGFteIiIiElZ1zx1UykKkR8cDAGwbuVZrhH59nsew6CeiWqPvL7OFjmDQ+PMhIiIiU1bdc52sB8n4vV3RY1Gf+30B6tR3rIlYOsfu/UREREREREQmikU/ERERERERkYli0U9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RERERERERCaKRT8RERERERGRiWLRT0RERERERGSiWPQTERERERERmSgW/UREREREREQmikU/ERERERERkYli0U9ERERERERkoqRCByDSl5kXgLhsoVMAblbA8k5CpzBMQa8vQcZdhdAxjJ6Npxx9f5ldI+/10tQjuB2bXiPvVR2N3W2xf3U/oWMQkZEzlONMTe6niYgqwqKfao24bCA6Q+gUVJ6MuwqkRcYKHYOecDs2Hddvpwkdg4ioRvA4Q0S1Ebv3ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RETl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BsbGpxfa7TOcnhRERKR/jhbAl+2BpFzgbCKQrQQczIHuLkWFPxERGbdmXvYY0NUdAWdq/tGTFuYSTBiq2y8VahuTOfSWVfQ/Pcq/IbOpY4YxzzcWOgYREVGNqGcBDG4gdAoiItKF1R/7o/XwPcjJrdlR9hdPaw+5k3Fd+DR0JtO5bvLkyVCr1ejcubPQUYiIiIiIiExakwa2+Gpmxwrn+29kf/d+20odpf9JPdrJMe0VPt67pplM0U9ERERERET68+7o5nh/XKty5/lvZP+4hGwUFpZ9G7BP07rYu+JZSCQsUWsaf6JERERERESkNZFIhGXvd8QXU9pB8vTorVro09EVx38eBAc78xpMR/9h0U9ERERERERVIhKJ8Olbvji/5UW0alJXq2WtrWRY+2kXHPlhIAt+HTKZgfyIiIiIiIhIGO1b1kPI70MQcCYW322/gcDzD1CgVJU6b/NG9nhrWDOMH9wU9rYs9nWNRT8RERERERFVm0QixqAeDTCoRwPk5Rci7FYKTl1KwHtfXwAAbP2yF57r6gZHewuBk9Yu7N5PRERERERENcrcTIL2LethRH+v4rYe7eQs+AXAop+IiIiIiIjIRLHoJyIiIiIiIjJRvKefyuRmJXSCxwwpCxERkTZsPOVCRzA6uvqZGcrvwlByEFHtwKKfyrS8k9AJiIiIjF/fX2YLHYH+xd8FEdVG7N5PREREREREZKJY9BMRERERERGZKBb9RERERERERCaKRT8RERERERGRiWLRT0RERERERGSiWPQTERERERERmSgW/UREREREREQmikU/ERERERERkYli0U9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RERERERERCZKKnQAIn2ZeQGIyxY6BeBmBSzvJHQKoton6PUlyLirqPLyKmVh8b//HrEAYqmkyu9l4ylH319mV3l5IiKqmuocC3gcIGPFop9qjbhsIDpD6BREJJSMuwqkRcbWyHulR8fXyPsQEZF+1dSxgMcBMibs3k9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJ4kB+RERET+m24l00GdUbAKAqLEROQhriz4Tj8uKtyFakCJyOiIh0jccBMiW80k9ERFQKxfnr2NF6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OVjiozfa4KM32ggdpdYzmaJ/8uTJmDx5stAxiIjIiOUmpyPwtS9RkJENt96+aDNzOM7MXKsxj/uz7VCQmVP8WpWnxLE3lqHZuP76jktERDWsouOA73sjEb33NBRnwovbHoZEIWDYfABAi4mDILEw03tuovIY5UB+REREupCbnI6CjGwAgKqgEOrCpx45JBLhmf8NwM1NAcVNapUKOUlpekxJRES6UtFxQN61JRo81x4Ddi9E6xnDSizv9XI33Nl7Wi9ZiSqLRT8REdFTJBZm8J01Etd/PKTR3mRkL9w7dAGFuQUCJSMiIn0o6zjg0MITccdCEDB8ARx9GkHu37J4mm0jV6gKlMiMTdJ3XKJysegnIiJ6gkgiRo+103Ft3X6k3bxf3C4xl6HR0O6I2n5UwHRERKRrZR0HACA3JR1xx0MBtRoPToSibouGxdMaDe2O6D28yk+Gh0U/ERHRE7p+8w4eHA/F/YCLGu3WDZxhZlcHz27+GO3mvga3vm3ReERPgVISEZGulHUcAICE8zfg2LoRAMCxdSOk34kvnub5Uhfc/fNsiWWIhGYyA/kRERFVl1tvX3i+1AXWHs7wGtwVKdfuIO5YCMzsrXFn72kcGPARAEDu3xJeQ7ri9u8nAAC9fvwAjq28oMzOhZNfU1ycv0nAtSAioqqq6DhwafEWdP36HUgszJAWEYO4o1cAAE5tmyLjXgLyUjIEXgOikkRqtVotdAgifRh5DIg2gP1wIxtgZ2+hUxDVPn/0nIG0yFihYwAoeiTUkBMrhI5BRFTrGMqxgMcB0id27yciIiIiIiIyUSz6iYiIiIiIiEwUi34iIiIiIiIiE8WB/KjWcLMSOkERQ8lBVNvYeMqFjlDMkLIQEdUmhrL/NZQcVDtwID8iIiIiIiIiE8Xu/UREREREREQmikU/ERERERERkYli0U9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RERERERERCaKRT8RERERERGRiWLRT0RERERERGSiWPQTERERERERmSgW/UREREREREQmikU/ERERERERkYli0U9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RERERERERCaKRT8RERERERGRifo/4J6/88UxBv8AAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ - "
" + "
" ] }, "execution_count": 1, @@ -31,6 +31,114 @@ "output_type": "execute_result" } ], + "source": [ + "from qiskit.circuit.library import EfficientSU2\n", + "from circuit_knitting.cutting.cut_finding.cco_utils import qc_to_cco_circuit\n", + "from circuit_knitting.cutting.cut_finding.optimization_settings import OptimizationSettings\n", + "from circuit_knitting.cutting.automated_cut_finding import DeviceConstraints\n", + "from circuit_knitting.cutting.cut_finding.lo_cuts_optimizer import LOCutsOptimizer\n", + "from circuit_knitting.cutting.cut_finding.circuit_interface import SimpleGateList\n", + "\n", + "qc = EfficientSU2(4, entanglement=\"linear\", reps=2).decompose()\n", + "qc.assign_parameters([0.4] * len(qc.parameters), inplace=True)\n", + "\n", + "circuit_ckt = qc_to_cco_circuit(qc)\n", + "\n", + "\n", + "qc.draw(\"mpl\", scale=0.8)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "OptimizationSettings().gate_cut_LO" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "__init__() got an unexpected keyword argument 'gate_lo'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[10], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m settings \u001b[38;5;241m=\u001b[39m \u001b[43mOptimizationSettings\u001b[49m\u001b[43m(\u001b[49m\u001b[43mseed\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m111\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgate_lo\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m circuit_size \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m4\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m qubits_per_subcircuit \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(circuit_size, \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m):\n", + "\u001b[0;31mTypeError\u001b[0m: __init__() got an unexpected keyword argument 'gate_lo'" + ] + } + ], + "source": [ + "settings = OptimizationSettings(seed=111, gate_lo=False)\n", + "circuit_size = 4\n", + "for qubits_per_subcircuit in range(circuit_size, 0, -1):\n", + " for engine in [\"BestFirst\"]:\n", + " settings.set_engine_selection(\"CutOptimization\", engine)\n", + " print(\n", + " f\"\\n\\n---------- {qubits_per_subcircuit} Qubits per subcircuit ----------\"\n", + " )\n", + "\n", + " constraint_obj = DeviceConstraints(\n", + " qubits_per_subcircuit=qubits_per_subcircuit)\n", + "\n", + " interface = SimpleGateList(circuit_ckt)\n", + "\n", + " op= LOCutsOptimizer(interface, settings, constraint_obj)\n", + "\n", + " out= op.optimize()\n", + "\n", + " print(\n", + " \" Gamma =\",\n", + " None if (out is None) else out.upper_bound_gamma(),\n", + " \", Min_gamma_reached =\",\n", + " op.minimum_reached(),\n", + " )\n", + " if out is not None:\n", + " out.print(simple=True)\n", + " else:\n", + " print(out)\n", + "\n", + " print(\n", + " \"Subcircuits:\",\n", + " interface.export_subcircuits_as_string(name_mapping=\"default\"),\n", + " \"\\n\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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655DHQPo1u/e1w/JobeRl5opdBQiIiIiekJ552kScxkaDe2OqO1HK70MERkn3l2nZ2KxCIumtcegHh54Y94pRNx9VOllHe3NsXq2P0YPbGQQV/gBwKGVJ+RdWsK5QzPYP9MAto3r49iby4q69RMRERGRYMo7T7Nu4Awzuzp4dvPHMLO3hqWzPRqP6Ik69R15bkdkYlj0C6SLrwvC9wzFwVMxWLfjBo4Gx6NAqSoxn0gEtGvhhEkjnsHoAY0M4ur+k66u3IOrK/cAALqteBcRvx6GQ0tPmHW1xp29p+H92rNoPKIn7Jq4of+OeTg1bTVyElLR68cP4NjKC8rsXDj5NcXF+ZuEXREiIiIiE1PRedqBAR8BAOT+LeE1pCtu/36ieLknl2HBT2TcWPQLSCoVY3DvhhjcuyHy8gsRHpWKM5cTMP2r8wCAXd/0Qf8ubrCpYyZw0so5PeO7Em2RWwIRuSWwRPvxCV/rIxIRERERofTztP8ozl2D4tw1rZYhIuPBe/oNhLmZBO1aOGHos57FbZ18nI2m4CciIiIiIiLDw6KfiIiIiIiIyESx6CciIiIiIiIyUbynn8pk4ykXOkIxQ8pCREREJDRDOjcypCwVcbMSOkERQ8lBtQOLfipT319mCx2BiIiIiErB87SqWd5J6ARE+sfu/UREREREREQmikU/ERERERERkYli0U9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RERERERERCaKRT8RERERERGRiWLRT0RERERERGSiWPQTERERERERmSgW/UREREREREQmikU/ERERERERkYli0U9ERERERERkoqRCByDDNfMCEJctdIoiblbA8k5CpyAybUGvL0HGXYXQMSrNxlOOvr/MFjoGEZEgDGmfrYv9sSGtn7HgcbFitbW+YdFPZYrLBqIzhE5BRPqScVeBtMhYoWMQEVElmPo+29TXj4RRW+sbdu8nIiIiIiIiMlEs+omIiIiIiIhMFIt+IiIiIiIiIhPFop+IiIiIiIjIRLHoJyIiIiIyYd1WvIvx8bswPn4XxsXuwIhL69Ft1VRYyR2EjmawBuxeiC5fTyrRbu1eD+Pjd8G54zMCpCJ9ivi0F+6unlCiPS/hLi4NFiHz+mkBUlUNi34iIiIi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NB3TB6emrQbU6uL2rt+8gwfHQ3E/4KJe8xJR7fDoVhziz4Sj8fCeAIAOn42HSCrWePwdAFxeug05D9PRZVnR4/m6rZyCjLsJuLpyt8Z8Zz9cD3O7OsWP3BOKvEtLSOtY4M6fZwXNQUT0tPLO7Uo9HxQBeWmZgFqNgswcSMykEEslek5dNpO5p5+IqLrsmrqhy9eTUJCVC1VBIc59uB5uvX1hZm+NO3tPo/vKKchOSEX/bXMBACcmLYdDK094vtQF1h7O8BrcFSnX7iB43iZhV4SITM6VZTvQc90MXP/hAM7NWl/qPKp8Jfb3fb/49ZExX5Q6X35aJna2favMz1Kcu4ZdHSs3TtIm1+HlTo/aeRxRO4+XOq3V5MEIW/MHCnNKDgJIRCQUt96+Jc7t4o6FlHs+GH8yDI2GdMPAPz6HxFyGGz/9hcK8AoHX5DEW/URE/0q+Go0/+3+o0fbk1f4dbSaWWCbuWAi2NBL2ahkRmb7ECzcQ+u3vsGngjLTIWKHjVJu0jgUSL0Xi+g8HhI5CRKShonO70s4HAeD0jO90FanaWPQTERERGYHILabzGGJlVi6uLi/9MX5ERFSzeE8/ERERERERkYli0U9ERERERERkoti9n4hqDRtPudARABhOjqcZaq6yGFteIiIiElZ1zx1UykKkR8cDAGwbuVZrhH59nsew6CeiWqPvL7OFjmDQ+PMhIiIiU1bdc52sB8n4vV3RY1Gf+30B6tR3rIlYOsfu/UREREREREQmikU/ERERERERkYli0U9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RERERERERCaKRT8RERERERGRiWLRT0RERERERGSiWPQTERERERERmSgW/UREREREREQmikU/ERERERERkYli0U9ERERERERkoqRCByDSl5kXgLhsoVMAblbA8k5CpzBMQa8vQcZdhdAxjJ6Npxx9f5ldI+/10tQjuB2bXiPvVR2N3W2xf3U/oWMQkZEzlONMTe6niYgqwqKfao24bCA6Q+gUVJ6MuwqkRcYKHYOecDs2Hddvpwkdg4ioRvA4Q0S1Ebv3ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RETl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BsbGpxfa7TOcnhRERKR/jhbAl+2BpFzgbCKQrQQczIHuLkWFPxERGbdmXvYY0NUdAWdq/tGTFuYSTBiq2y8VahuTOfSWVfQ/Pcq/IbOpY4YxzzcWOgYREVGNqGcBDG4gdAoiItKF1R/7o/XwPcjJrdlR9hdPaw+5k3Fd+DR0JtO5bvLkyVCr1ejcubPQUYiIiIiIiExakwa2+Gpmxwrn+29kf/d+20odpf9JPdrJMe0VPt67pplM0U9ERERERET68+7o5nh/XKty5/lvZP+4hGwUFpZ9G7BP07rYu+JZSCQsUWsaf6JERERERESkNZFIhGXvd8QXU9pB8vTorVro09EVx38eBAc78xpMR/9h0U9ERERERERVIhKJ8Olbvji/5UW0alJXq2WtrWRY+2kXHPlhIAt+HTKZgfyIiIiIiIhIGO1b1kPI70MQcCYW322/gcDzD1CgVJU6b/NG9nhrWDOMH9wU9rYs9nWNRT8RERERERFVm0QixqAeDTCoRwPk5Rci7FYKTl1KwHtfXwAAbP2yF57r6gZHewuBk9Yu7N5PRERERERENcrcTIL2LethRH+v4rYe7eQs+AXAop+IiIiIiIjIRLHoJyIiIiIiIjJRvKefyuRmJXSCxwwpCxERkTZsPOVCRzA6uvqZGcrvwlByEFHtwKKfyrS8k9AJiIiIjF/fX2YLHYH+xd8FEdVG7N5PREREREREZKJY9BMRERERERGZKBb9RERERERERCaKRT8RERERERGRiWLRT0RERERERGSiWPQTERERERERmSgW/UREREREREQmikU/ERERERERkYli0U9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RERERERERCZKKnQAIn2ZeQGIyxY6BeBmBSzvJHQKoton6PUlyLirqPLyKmVh8b//HrEAYqmkyu9l4ylH319mV3l5IiKqmuocC3gcIGPFop9qjbhsIDpD6BREJJSMuwqkRcbWyHulR8fXyPsQEZF+1dSxgMcBMibs3k9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJ4kB+RERET+m24l00GdUbAKAqLEROQhriz4Tj8uKtyFakCJyOiIh0jccBMiW80k9ERFQKxfnr2NF6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OVjiozfa4KM32ggdpdYzmaJ/8uTJmDx5stAxiIjIiOUmpyPwtS9RkJENt96+aDNzOM7MXKsxj/uz7VCQmVP8WpWnxLE3lqHZuP76jktERDWsouOA73sjEb33NBRnwovbHoZEIWDYfABAi4mDILEw03tuovIY5UB+REREupCbnI6CjGwAgKqgEOrCpx45JBLhmf8NwM1NAcVNapUKOUlpekxJRES6UtFxQN61JRo81x4Ddi9E6xnDSizv9XI33Nl7Wi9ZiSqLRT8REdFTJBZm8J01Etd/PKTR3mRkL9w7dAGFuQUCJSMiIn0o6zjg0MITccdCEDB8ARx9GkHu37J4mm0jV6gKlMiMTdJ3XKJysegnIiJ6gkgiRo+103Ft3X6k3bxf3C4xl6HR0O6I2n5UwHRERKRrZR0HACA3JR1xx0MBtRoPToSibouGxdMaDe2O6D28yk+Gh0U/ERHRE7p+8w4eHA/F/YCLGu3WDZxhZlcHz27+GO3mvga3vm3ReERPgVISEZGulHUcAICE8zfg2LoRAMCxdSOk34kvnub5Uhfc/fNsiWWIhGYyA/kRERFVl1tvX3i+1AXWHs7wGtwVKdfuIO5YCMzsrXFn72kcGPARAEDu3xJeQ7ri9u8nAAC9fvwAjq28oMzOhZNfU1ycv0nAtSAioqqq6DhwafEWdP36HUgszJAWEYO4o1cAAE5tmyLjXgLyUjIEXgOikkRqtVotdAgifRh5DIg2gP1wIxtgZ2+hUxDVPn/0nIG0yFihYwAoeiTUkBMrhI5BRFTrGMqxgMcB0id27yciIiIiIiIyUSz6iYiIiIiIiEwUi34iIiIiIiIiE8WB/KjWcLMSOkERQ8lBVNvYeMqFjlDMkLIQEdUmhrL/NZQcVDtwID8iIiIiIiIiE8Xu/UREREREREQmikU/ERERERERkYli0U9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RERERERERCaKRT8RERERERGRiWLRT0RERERERGSiWPQTERERERERmSgW/UREREREREQmikU/ERERERERkYli0U9ERERERERkolj0ExEREREREZkoFv1EREREREREJopFPxEREREREZGJYtFPREREREREZKJY9BMRERERERGZKBb9RERERERERCaKRT8RERERERGRifo/4J6/88UxBv8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import numpy as np\n", "from qiskit.circuit.random import random_circuit\n", @@ -52,7 +160,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -66,12 +174,12 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABDAAAAGRCAYAAACT7EP6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACF00lEQVR4nOzdd1xV9R8G8OculiwB4SKg4MCJIubAPXKluWel+SstM2fTypGVpqlpappZaaU5Mk1zkIrbVFwgiII4AbmyZY87fn9Q6JW97jkXnvfr5Uvu96znXDjjfu453yPR6XQ6EBERERERERGJmFToAEREREREREREJWEBg4iIiIiIiIhEjwUMIiIiIiIiIhI9FjCIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9FjCIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9FjCIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9FjCIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9FjCIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9FjCIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9FjCIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9FjCIiIiIiIiISPTkQgcgMhT/V5cg9Z5K6Biwclei989zKjQPsawLUDnrQ0REZAhiOX7y2EnGhNtN2YnlPQOM630rDRYwqMZIvadCcniU0DEqRXVaFyIiIkPh8ZOo7LjdlB3fs6rDW0iIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9duJJ9Iwuq95GozE9AQBajQaZj5IRczYEVxZvRYYqUeB0REREVNV4LkBUdtxuyBB4BQZRIVTnQ7Gj1STseu4tnHp7FexbuqPH9+8KHYuIiIgMhOcCRGXH7YaqGgsYRIXQ5qiRGZeMDFUiHp2/gbAtR+HYrgkUluZCRyMiIiID4LkAUdlxu6GqxgIGUQnMnWrDfVBHaNUa6DRaoeMQERGRgfFcgKjsuN1QVWAfGESFUHZqgZcjfoVEKoXc3BQAELJ+H9SZ2QCAHhvfxcOTQQjfchQAYNfSA93WzcRffd6HJjtXsNxERERUOUo6F7BQ2uGF/Yuwv9+HyEpIgczcBEOOrsCx15ch+eYDIaMTCaak7abegPbwfmeU3jQ2nq4ImLcJYb8cNnheMj5GXcAICgrC/PnzceLECeh0OvTq1Qvr16+Hp6cnBg4ciO3btwsdkYxU3JVbODNzLWSmCrgP7oS6XVvh6tJt+cMD5m3CgL2f4/7BC8hOSoPvksm48PGPLF4QERFVEyWdC2SoEhG6YT/aLZyI09NWw/vd0bh/6AKLF1SjlbTdPDgUgAeHAvJf1+vfDj4fvYSI308IkJaMkdEWMPz9/TFo0CDUr18fc+fOhbm5OTZv3owBAwYgLS0N3t7eQkckI6bJykHqPRUAIHDZDli5K9Fh0ev4573vAOSdtFzfsB/PzRuP+KsReHwnBjFngoWMXGoyMxO0mjEcHkM6w8LZLm9d7z/C7V2ncOPHg0LHIxKltMg4hP16GHGXw6FVa2DdwBmer/RBHZ/GkEgkQscjoipQ0rkAANz48RAG+S1Fs0kvoP4LHbCv93tCxSUShdJsN/+xcLZDh8WTcPTlxdBk5hg6qmj1+e0TKCwtcGjoPOi0T269sfPywMD9i3Hq7dW4v/+cgAmFZZQFjLi4OIwZMwY+Pj44evQozM3zOoUZP348PDw8AIAFDKpUgct3YNipbxD26xEkBN0GANzc5IeBBxbDuXNL/DVgjsAJS893yWQoO7dEwLyfkHj9PhRW5rBv6YFaLg5CRyMSHZ1Oh6tLt+Pa6t2ATgdIAECC2ICbiNh+HC49vdF9wzswsbIQOioRVbHCzgV0Wi0uLtiM/rsX4thrX+VfJk9EeQrbbgAAEgm6rZ2J4LV/IunGfeECitCZWd9iyLEV8JoxDNdW/QEg7wvIbmtn4M7u0zW6eAEYaSeeS5cuRVJSEjZt2pRfvAAAGxsb+Pj4AGABgypX6l0VIo9cgs+ccU8adTqE/XIEUf5XkJ2QIly4MqrXvz1C1u3FA7+LSIuMRVLofUTsPIGglbuEjkYkOoHLd+LaN3/kFS8AQIcnPwOIPh6IYxOXQpurFiYgERlMoecCAFx6t0GGKhG1m9YTKBmReBW13bSeNQI5qRm4+dMhgZKJV2ZsMv557zu0nj0S9q0bAgDafvIKpCYKXJj7k8DphGeUBYzt27eja9eu8PT0LHS4k5MTlEolAECtVmPmzJmws7ODra0tXn/9dWRlZRkyLlUTIev2waWHN5S+LZ40arXQaXVFTyRCGbFJcOnZBia2lkJHIRK1jEdJecWLEqj+uY4HfgEljkdExu/ZcwHbpvVQr3977B8wB41f6g3Leo4CJyQSn2e3G8d2TdD4pd44O/tbgZOJ1wO/i4jYeQLd1s6AW9/n0GRCH5yethrqdH6ONbpbSFQqFaKjozFmzJgCw7RaLYKDg9GmTZv8tsWLF+P48eMIDg6GiYkJBg8ejA8++ACrV68u1fLUajVUKlWl5Sfh5JbyG9IzswrfmcZdCsNm55GVkiMqKqrC8yivf95dj27rZmFsyI9IDotC3JVwRPtfwQO/i+XOUtH1IRKjOz8eLvVj34I27IO8Db99JRK7yj4X8F36Bi4u2IwMVSKufrUdHRa9Dv/xX5YqB4+dZCwqc7sxsbZA1zUzcGbmWmQnpZU5h7FsNxU5V//Pxfmb8eKRZej50/u4tvIPxF0OL3cWsb5vSqUScnnZShJGV8BIT08HgEI7Tdu7dy9iY2P1bh/54Ycf8NVXX8HFxQUA8Omnn2LUqFFYuXIlZDJZictTqVRwc3OrnPAkqC/s+8BFYS10DISHh2N0Bf+mKrIusRfD8EfHt+HQpjEc23rCqWNz9Nj4HqKPXYX/q0vKPL/KWB8iMZph6wtvU+dSddIZc/EmjxVERqAyzwUav/w8suIfI8r/CgDg9u8n0XhcL9R7oQMeHLxQ7LQ8dpIxqcztpsmr/WDuaIv2CyfqtUf8fhKh3+8vdlpj2m4q4z1TZ2YjZP0++C6ZjKBV5b/VW8zvW2RkJFxdXcs0jdEVMNzc3CCTyXDy5Em99vv372P69OkAnvR/kZycjMjISL2Cho+PD1JTU3Hv3j00bNjQULGpmorYeQIRO08IHaPMdBot4i6FIe5SGK5v+AsNRnRFt7Uz4eTbHI/OhQodj0gUJCj900WkfBIJUY1za+tR3Np6VK/Nb/gCgdIQGYfgNXsQvGaP0DGMhu7fKzlKe0VoTWB0BQwTExNMmDABmzZtwpAhQzBw4EBERkZi48aNcHJyQnR0dH7BIjU1FQBga2ubP/1/P/83rCRKpRKRkZGVuQokkHOjlyD9rvC3A3l6eiJyZ8U64KnsdXl8KxoAYGZvU+ZpK2N9iMTo1pp9uP/LsZJHlAD2Tesj8hKPFURiV53OBYgMhdtN2YnlPQPE/b79129lWRhdAQMAVq9eDYVCgb179+LYsWPw9fXFnj178NlnnyEiIiK/c08rKysAwOPHj/PfnOTkZL1hJZHL5WW+rIXESaEQx5+7QlHxv6mKrEv/3Qtx98+ziA+6jayEx7B2d4bPRy8hOzkNqn9CypWF2whVR9ZThpWugKEDvCYN4nZAZASq07kAkaFwuyk7sbxngHG9b6Uhnne2DCwtLbFhwwZs2LBBrz0kJAReXl6QSvMermJraws3NzcEBgaiSZMmAICrV6/CysoK7u7uho5NJArRx66iwfCu8H5/DEwszZGZ8BiPzt/AmdnfIjuxdFcmEdUE1h7OaDyuF25tK76IYdPYBR7DuhgoFREREVHNZZQFjMIkJycjKioKAwcO1GufNGkSvvzyS3Tt2hUKhQKffvopJk6cWKoOPImqo+C1fyJ47Z9CxyAyCh2XTIY6Mxt3/zxb6HAbT1f0/W0uFBZmBk5GRERE1Z2x9rdXlapNASM4OBgA9DrsBICPP/4Y8fHxaNGiBbRaLUaOHImlS5cKkJCIiIyNzESBbutmocn4vghZvw9RRy8DABx8GqPZawPgPsgXMlOFwCmJiIiIaoZqX8CQy+VYvXo1Vq9eLUAqMhaNX+qNxmN7QafT4tyHG5F880H+MLe+z6HVjOHQ5KoR/usR3Nl9GgDQafkUWDesC01WDs6+ux4ZDxPQaHQPtH5nFNKj4wEAR15eBE1WjiDrRESVQyKRQNmpBazclfi97ZsAgJ4b30OtuvYCJyOiqmTpWgfd1s2CVq2GRCbD+TkbkXTjfv7wrmtnwKqeEyQyKW5u9sPt308WMzei6qukbUVmboIOn78Gy3pOkMqkOPrKYli61YHvsjeh0+qgU2tw9t31SHsQK+BakLGoNgWMqVOnYurUqULHICNkYmuJJq/2xYGBH8OqvhN8l0zG36MW5g2USND2k5exf8BH0GTnoP/uhYg8chnOnVtAk50Lv2HzYd+qAdp+8gpOv/0NACB8yxHeokFERGTk0mMScHDIXECng7JzS7SaMRwn31qZPzxwxU6k3lVBaiLHkGNf4+6fZ6H995GHRDVJSduK9zujcWfPGajOPuksPishBUdf+RK5qRlw6emN1rNH4uzsdULEJyNTbQoYROVVp00jqP65Dp1ag5TbD2FqZw1IJIBOBzM7K2TFp0CdkQUAeBzxEHV8GsO6QV0kBN0GACRcuwOnDk3z59doTE+49mmLB34XcX39PkHWiYiIiCpGp9Hm/2xiZY7E0Ht6w1P/fUSiNkcN6HTQ6XSGjEckGiVtK8rOLSAzlcP7nVF4ePoarq36A1kJKfnDtbkavXkQFUcqdAAioZnYWiLncXr+69y0TJhYWwDIqw6bOVjD3NEW8lpmcOrQDKa2lki6+QB1e3gDAFx6esPc3gYA8MAvAH92n42/Ry6E0rcFnLt4GXx9iIiIqHLYtXDHC38tQodFkxBzOrjQcVq+PRT3DpyHTq0xcDoi8ShuW7Fr7o7o44HwG/kp7L0aQOnbIn+YzMwE3u+PRugPBw0dmYwUCxhU4+U8ToeJda381wpLc+SkZOS/Pvfh9+j27Ux0Xz8byWGRyHiUiOhjV5Fy5yH6/7EQLr3aIPHf+/xyUjKg02qhzVXj/sELsPPyMPj6EBERUeVIvH4PB1/8BP4Tl6DD4tcLDPcY0hn2Xh64unS7AOmIxKO4bSUrMQXRJ4IAnQ4PTwahdvP6AACJTIpu62bi+vp9ev3PERWHBQyq8eKu3IJTx2aQyKSwclciOzEFeOoy0Efnb+DvUQtxcspKyC1MEXf5FgAgcPlO+I1YgMi/L0H1z3UAgMLKIn86pW9zpN6NMezKEBERUaWQmjy50zo3JQOaTP1Ouev2aI3G43rh9Iw1eucNRDVNSdvKo/M3YN+qAQDAvlUDpPx7ftx5xVt4eCIID/wuGi4sGT32gUE1Xk5yGm795o8Bez6HTqfF+Y9+gEtPb5jYWuLunjN4bsEE2Hs1gFatwZUvf4M2Vw1TOyv03PgetGoN0qPjceGTHwEALaa8CJce3tBptYgPvM0dMhERkZFybNcU3u+Nhk6jhUQiQcCnm/XOD7p+Mw0Zj5LQd9s8AMDJKSuRGZcsbGgiAZS0rVxevAWdl78FmZkJksMiEX3sKlx6esN9cCdYujnCY0hnJF6/i4D5m4VeFTICLGAQAQjfchThW47mv04KffLop0sLfykwfnZiKvxGLCjQHrhsBwKX7aiakERERGQwqrMh8HvqqQnP2tF6sgHTEIlXSdtKelQ8Do/9XK8t+nggtjR4uaqjUTXEW0iIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEj31gUI1h5a6s0PRatQYpd/J6TbZu4AypXCZIjsqYR2WtS2VkISIiMhSxHD957CRjwu2m7MSUVUxZKoNEp+Nzn4hKI/1hAn5v+yYAYNTlDahV117gROVXndaFyFC43RAR9wNEZcfthioTbyEhIiIiIiIiItFjAYOIiIiIiIiIRI8FDCIiIiIiIiISPRYwiIiIiIiIiEj0WMAgIiIiIiIiItFjAYOIiIiIiIiIRI8FDCIiIiIiIiISPRYwiIiIiIiIiEj0WMAgIiIiIiIiItFjAYOIiIiIiIiIRI8FDCIiIiIiIiISPRYwiIiIiIiIiEj0WMAgIiIiIiIiItFjAYOIiIiIiIiIRI8FDCIiIiIiIiISPbnQAUi8/F9dgtR7KqFjAACs3JXo/fMcoWMQERGVmZiOp8aCx/2Sienvyph+X7MvANEZQqcAXCyAlR2ETkFkfFjAoCKl3lMhOTxK6BhERERGjcdTqgr8uyqf6AzgTqrQKYiovHgLCRERERERERGJHgsYRERERERERCR6vIVERB6n5iDs3mNkZquhkEvRwNUKSgcLoWMRERERERERCY4FDIGF3k7C+p038fc/Ubh1P6XA8LqOFujxnDPeHNkEXdsqIZFIBEhJREREREREJCwWMARy/2Eqpi76BwdPF9/50sPYDPx28DZ+O3gbrZvYYcO8zujQytFAKUuvy6q30WhMTwCAVqNB5qNkxJwNwZXFW5GhShQ4HREREVHNxfM0Iqou2AeGAH7eewsth+8psXjxrKCwRHSasB8ffXMRGo22itKVn+p8KHa0moRdz72FU2+vgn1Ld/T4/l2hYxERERHVeDxPI6LqgAUMA1u26RomzjuFtIzcck2v1eqw5MdrmPDJKdEVMbQ5amTGJSNDlYhH528gbMtROLZrAoWludDRiIiIiGo0nqcRUXXAAoYB/bLvFj5YebHYcWQyCVycLODiZAGZrOj+Ln47eBvvLLtQ2RErjblTbbgP6gitWgOdyAotRERERDUZz9OIyFixgGEgD2LSMO3LcyWOp3QwR9SRcYg6Mg5Kh+Ir4qt/C4X/+YeVFbHClJ1a4OWIX/HKna0YE7gRSt8WCN14AOrMbACAhdIOIy+th5m9NQBAZm6C4WfXwLZpPSFjExEREVV7JZ2n9dj4LjxfeT5/fLuWHhh6ahVkpgqhIhuV4MnuQkcgqhGMuoARFBSEIUOGwMbGBtbW1hg6dChiYmJgZWWFsWPHCh1Pz7TF55CaXr7bRooz6dPTyMnVVPp8yyPuyi3se/597B8wB4Ff/47Yi2G4unRb/vAMVSJCN+xHu4UTAQDe747G/UMXkHzzgUCJiYioKqm1QHAicCEOuPUY0OmETkRUc5V0nhYwbxO8pg+DqZ0VIJHAd8lkXPj4R2iyK//8lYiovIy2gOHv74+OHTsiLCwMc+fOxeLFixEVFYUBAwYgLS0N3t7eQkfMF3Y3GX+drJoP6fcepmH30XtVMu+y0mTlIPWeCslhkQhctgOpkbHosOh1vXFu/HgItp5uaDbpBdR/oQOCVvwuUFoiIqoq2Rrg+zBg4BHgf2eAt88B404CY08Afz1gIeNpTh2bodemDzHy4npMjNmFVrNGCB2JqqmSztMyVIm4vmE/nps3Hk3G98HjOzGIORMsYGLjEPnDbITO8kZu4kOEzvLGna/GCB2JqFozyseoxsXFYcyYMfDx8cHRo0dhbp53q8X48ePh4eEBAKIqYGzYdbNK579uxw2MHdCwSpdRHoHLd2DYqW8Q9usRJATdBgDotFpcXLAZ/XcvxLHXvsq/bJGIiKqHLDUw/TxwNRF4tienO6nAwkAgPAV4pwUgKbqrpxpDbmGG5FuRuLPnNNp/9j+h41ANUth52s1Nfhh4YDGcO7fEXwPmCJxQWNrsTMTsWoyk09uRkxAFqYk5TJUNYd9jPBxfnJE/ntuklQDybiFpvipQoLRENYdRXoGxdOlSJCUlYdOmTfnFCwCwsbGBj48PAHEVMP7+J7pK5382MBbp5XyqSVVKvatC5JFL8JkzTq/dpXcbZKgSUZt9XxARVTurQvOKFwDw7IUW/73edgc4VLYniVdb0ceu4sri33Bv3z/Q5ojvWE7VV6HnaTodwn45gij/K8hOSBEunAg8+O4tJB7/Ba4Tl6HF2lB4fnEcdV54G+r0ZKGjEdVoRlnA2L59O7p27QpPT89Chzs5OUGpVAIAdu7ciS5dusDS0hLu7u4GTJknLSMXN+8+rtJlaLU6BIYlVukyyitk3T649PCG0rcFAMC2aT3U698e+wfMQeOXesOynqPACYmIqLKk5AD7SnHHpATA1ju8lYRIaM+epwEAtFrotNw4ky/8Cadh78O241CYOnnAwqM1HHpPRN2x84WORlSjGd0tJCqVCtHR0RgzpuD9ZVqtFsHBwWjTpk1+W+3atTFt2jQ8evQIK1euLPPy1Go1VCpVufOG3E6B9pmDgEwmKfIJI85PtTsXMY4qPhMajf48/7l8F/XrVO43N7m56lKPe2bWt4W2x10Kw2bnkfmvfZe+gYsLNiNDlYirX21Hh0Wvw3/8l6XKEhUl7Nd1WY+S83+OiYmBmTZTuDAVVJ3WhchQuN2UzD/BAjlauxLH0wEIewwE3FbBxaz0xxpjVZbjKeURw3G/MGLaD1TFeVpFsojx91WY3FwnACU/WUVR2xkpV/xg1+0lyK1K3q+VPUcuoqIeVfp8xUhM2w2Ji1KphFxetpKE0RUw0tPTAQCSQm6c3bt3L2JjY/VuH+nTpw8A4M8//yzX8lQqFdzc3Mo1LQDAoiHQ8CO9pv8elVqSi9uGFtru2mcboh9l6LV9MOdjfDD5eLljFuYL+z5wUVhX2vwav/w8suIfI8r/CgDg9u8n0XhcL9R7oQMeHLxQ7LTh4eEYXZHfQyWoLTXH144vAADat2+PJCPe+VandSEyFG43JXMa+i5c/7e81OP3fnEE0m/+U4WJxKGyj6c1gRiO+4UR035ATH9XYv19Fab5mhCY12tR4nj1p/2AuyteQtCEOjB3a4FaTTrCpu0LsOkwpNDPIWUVHh4Ot34tKzwfYyCm7YbEJTIyEq6urmWaxugKGG5ubpDJZDh58qRe+/379zF9+nQA4ur/AloDfeuiFcejVItza+tR3Np6VK/Nb/gCgdIQEVFl02SU7Z55TWbNvseeSIwidp5AxM4TQscQnGWzzmi54TbSwwOQHnYOqddP4fbSkbBpOwANP9lXoIhh5tZcoKRENYvRFTBMTEwwYcIEbNq0CUOGDMHAgQMRGRmJjRs3wsnJCdHR0ZVawFAqlYiMjCz39MmpufAac0yvTRWfCdc+2wod39nBPP/Ki3bj/kRMfMEKpaqQtu2/rEZnb/ty5yzMudFLkH63/LfPVCZPT09E7vxJ0AxZj5JxZtCnAICAgACYOdkKmqciqtO6EBkKt5uSJeRIMTlEB22B54/ok0AHJxM1dp8+BGkNeBKJmI6nxkIMx/3CiGk/IKa/K7H+vgozPdQJkVmlG1cik8OyWSdYNusEp6HvIuHEFtxbOR5p10/BqmV3vXEbzz9Yphyenp74uwKfMYyJmLYbEpf/+q0sC6MrYADA6tWroVAosHfvXhw7dgy+vr7Ys2cPPvvsM0RERBTZuWd5yOXyMl/W8jRXAA1crXAnKjW/TaPRFbgFpDAx8ZmlGg8A+nVrCltr0/LGLJRCIZ4/D4WiYr+HypAufap/Emdn1KpbuQUjQ6pO60JkKNxuSuYKoFcicPRh8ePpIMG4xgrUcxN2v24oxR1P5RZmsPbIO4GTKuQwr2MLuxbuyE3PQuo9cXw4FYIYjvuFEdN+gOdp5aO4BaCUBYxnmbk2AwCoH8dWPIdCYTTvWUWJabsh4yeePV8ZWFpaYsOGDdiwYYNee0hICLy8vCCViuvhKj3bOesVMCqbd1O7Si9eEBERlccHXsDNx0BUetHjdHUCxngYLpOYObRuiP67F+a/bvbaADR7bQBU/1yH3wjeZkkklLCPu8Ou6zhYNHoOcps6yI6JQPSvH0NWyxZWXj2FjkdUYxllAaMwycnJiIqKwsCBA/XaNRoNcnNzkZubC51Oh6ysLEgkEpiaGu4D/5ujmuLHPeFVNv8po5pV2byJiIjKws4U2NQFWBECHHkIPP3QLEs5MNIdmNIUkIvruwbBqM5dr5SnQBBR5bLxGYDEU1vxcNt8aDJSILdxhFWLbnCfsQlyaweh4xHVWNXm9CE4OBhAwQ48f/31V5ibm2P06NF48OABzM3N0aRJE4Nma9eyDnxbO1bJvO1sTPHywIZVMu+ysG7gjAkPtqOOT2O9du93R2PkxfXo89sn+W0ycxO88NcivHTzZ3gM6WzoqEREVMVqmwJftAV+7vqk7aNWgF9fYFpzFi+IDK2o87T/9P9jIXyXvlGmaao75cg5aPLlabT+JRY+u7LQ6scH8HhnC8zrsbNOIiFVm1OIogoYEydOhE6n0/t37949g+f7bl5nyOWV31PZ6jkdYWlR8rOsq1rr2SOhOhdaoD3s18MFLoHVZqtx/LVlCN14wFDxiIhIALWfutixixNgVm2u+yQyLkWdpwGA6/NtkZtWsIP44qYhIhJKtSlgTJ06FTqdDh07dhQ6SqFaedrh0yk+JY733xNKXPtsK/RpI08b1rs+XnpB+KsvHNo0RmZsMjJiEgoMy4xNBrQ6vTadVovMuGTDhCMiIiKqwYo7T4NEgqb/64+bm/1KPw0RkYCqTQHDGHw8uTUmjyj+9pX/nlAS/SgDGo2uyPG6tHHCr4u6F3gGtRBazRyO4LV7hI5BRERERM8o7jyt0egeuH/wAjRZuaWehohISCxgGJBEIsF38zrj40mtUZG6w4jn3eG3vh9qieDWEdfePkgIuo3spDShoxARERHRU4o7T5OZKtBgeFdEbD9W6mmIiITGu1ENTCqVYNGM5zCwmxtem38aYfcel3pae1tTrJnji7EDGojiygsAsGvpDmWnFnBs1wS2TevBumFdHH99Wd6tI0REREQkmOLO0yzrOcLEphae//UjmNhawtzRFg1HdUetuvY8tyMi0WIBQyCdvJ0Qsns4DpyOxPodN3AsIAa5am2B8SQSoG1zB0wZ1RRj+zcQxVUXT7v2zW5c+2Y3AKDLqrcR9sth2LVwh0lnS9zdcwaerzyPhqO6w6aRC/rumI/TM9Yg81ESevzwHuxbekCdkQUHn8a4uGCzsCtCREREVM2UdJ62v/+HAAClbwt4DO2M27+fzJ/u6WlYvCAisWABQ0ByuRRDetbHkJ71kZ2jQUhEEs5eeYSZX50HAOxa0Qt9O7nAqpaJwElL58ysbwu0hW85ivAtRwu0n5i03BCRiIiIiAiFn6f9R3XuOlTnrpdpGiIiIbAPDJEwNZGhbXMHDH/ePb+tg5ej0RQviIiIiIiIiKoSCxhEREREREREJHosYBARERERERGR6LEPDCqSlbtS6Aj5xJSFiIiISGhiOjcSU5aSuFgInSCPWHIQGRsWMKhIvX+eI3QEIiIiIioEz9PKZ2UHoRMQUUXwFhIiIiIiIiIiEj0WMIiIiIiIiIhI9FjAICIiIiIiIiLRYwGDiIiIiIiIiESPBQwiIiIiIiIiEj0WMIiIiIiIiIhI9FjAICIiIiIiIiLRYwGDiIiIiIiIiESPBQwiIiIiIiIiEj0WMIiIiIiIiIhI9FjAICIiIiIiIiLRYwGDiIiIiIiIiESPBQwiIiIiIiIiEj0WMIiIiIiIiIhI9FjAICIiIiIiIiLRkwsdgMRr9gUgOkPoFHlcLICVHYROQVS9+b+6BKn3VELHKDUrdyV6/zxH6BhERIIQ0z67KvbHYlo/Y8Hjonjwc1TVYQGDihSdAdxJFToFERlK6j0VksOjhI5BRESlUN332dV9/ah64+eoqsNbSIiIiIiIiIhI9FjAICIiIiIiIiLRYwGDiIiIiIiIiESPBQwiIiIiIiIiEj0WMIiIiIiIqrEuq97GxJhdmBizCxOidmDU5Q3osno6LJR2QkcTrf5/LESn5VMKtFu61sHEmF1wbN9UgFRUHYV90gP31kwq0J796B4uD5EgLfSMAKnEiwUMIiIiIqJqTnU+FDtaTcKu597CqbdXwb6lO3p8/67QsYiIyoQFDCIiIiKiak6bo0ZmXDIyVIl4dP4GwrYchWO7JlBYmgsdjYio1FjAICIiIiKqQcydasN9UEdo1RroNFqh4xARlZpc6ABERERERFS1lJ1a4OWIXyGRSiE3NwUAhKzfB3VmNgCgx8Z38fBkEMK3HAUA2LX0QLd1M/FXn/ehyc4VLLfY9d/zGUwszSFRyBF74QbOf/QDdFoWhajy3V31KlKuHILcxhEt1oQIHUcwRn0FRlBQEIYMGQIbGxtYW1tj6NChiImJgZWVFcaOHSt0PCIiIiIiUYi7cgv7nn8f+wfMQeDXvyP2YhiuLt2WPzxg3iZ4TR8GUzsrQCKB75LJuPDxjyxelMB//JfY1+d97O0xG6b21nB/0VfoSFRNOTz/Ghov8BM6huCM9goMf39/DBo0CPXr18fcuXNhbm6OzZs3Y8CAAUhLS4O3t7fQEWs0bXYmYnYtRtLp7chJiILUxBymyoaw7zEeji/OEDoeUZnkpGbg9q6TiDpyGbnpWTCvY4uGI7vB9fm2kMplQserck4dm6HFm4Nh19Idlq51cGXpNlxb9YfQsYiIqAw0WTlIvacCAAQu2wErdyU6LHod/7z3HQAgQ5WI6xv247l54xF/NQKP78Qg5kywkJEFlZOSARPrWgXaTWzy2v4r7OSmZQIAJHIZZAo5dDqd4UJStSCzsIEm43GBdk16MgBAojADAFi17I7sR/cMmEycjLKAERcXhzFjxsDHxwdHjx6FuXle50Pjx4+Hh4cHALCAIbAH372F1ODjcJv0Dcw9WkOTkYKMO1eRE/dA6GhEZXL/UABOT/sG6oxsQAIAEkCnw/0D52Hl4Yznf5kDm0YuQsesUnILMyTfisSdPafR/rP/CR2HiIgqQeDyHRh26huE/XoECUG3AQA3N/lh4IHFcO7cEn8NmCNwQmE9joiG+4u+kEilereEOLRpBK1ag9S7Mflt/XZ9CvuWHojyv4L7+88LEZeMmJlrUySd/R06jQYS2ZMvxtJvBQBSGUydGwmYTnyM8haSpUuXIikpCZs2bcovXgCAjY0NfHx8ALCAIbTkC3/Cadj7sO04FKZOHrDwaA2H3hNRd+x8oaMRlVr0iUCcmLQc6sycvAYdgKe+WUm9GwO/EQuQHpMgTEADiT52FVcW/4Z7+/6BNoeXEhMRVQepd1WIPHIJPnPGPWnU6RD2yxFE+V9BdkKKcOFE4ObPfjCrY4POq96GfasGsKrvBI+hndHmg7GI2HEcOSkZ+eP+PfJT7PCeDJm5CZRdWgqYmoxRnQFToU5+hHur/4f0iMvIjrmNxFPb8HDrPDj0/h/klrZCRxQVoyxgbN++HV27doWnp2ehw52cnKBUKpGdnY3JkyejQYMGsLKygqenJ9asWWPgtDWTorYzUq74QZ2aKHQUonLR6XQImL8571LQYi4HzYxNRsi3fxouGBERUSUJWbcPLj28ofRt8aRRq4VOy9sg0qPicfDFT2BqUwu9f56DwcdWoNWM4QhZtw/n5mwsML4mKwcPDgWgXr92AqQlY2bqWB9Nlv4DTXoSbn/xIkJntkLMrsVwGvY+6k1ZJ3Q80TG6W0hUKhWio6MxZsyYAsO0Wi2Cg4PRpk0bAIBarYZSqcThw4fRoEEDXLt2Df369YOTkxNGjx5dquWp1WqoVKpKXYfixMRnPflZFQOozQy27Gfl5joBUJRr2vrTfsDdFS8haEIdmLu1QK0mHWHT9gXYdBgCiURSjiy5iIp6VK4slSXrUXL+zzExMTDTZgoXpoKq07pUlaTLEXh8K6pU44ZvOwblqz0g+7dXd2OVm6sWOkKZ5OaqERVVut9RZeB2U3bxOTIAzgDy3rNcE42wgQRibNuWGBh6+y4tMe0HyvJ3dWbWt4W2x10Kw2bnkZWSpbJ/X2LYbpJC78P/1SVFDldYWUBqIkd2QgokMinc+jwH1T/XDZhQH7cb8Sjr5ygLj9ZoNPevKsoi/OeooiiVSsjlZStJGF0BIz09HQAK/RC8d+9exMbG5t8+UqtWLXz++ef5w729vTF48GCcOXOm1AUMlUoFNze3igcvLXltoNkyAED7du0BdZLhlv2M5mtCYF6vRckjFsKyWWe03HAb6eEBSA87h9Trp3B76UjYtB2Ahp/sK3MRIzw8HG79hL0kr7bUHF87vgAAaN++PZKMeOdbndalqvSzaIyx1q1KNa4mIxtdm7dFpLpgB0zG5Av7PnBRWAsdo9TCw8Mx2oD7Z243Zaewd0Grn/JOptu3b4fchGiBEwnD2LYtMTD09l1aYtoPiOnvqip+X2Jav6KY2Fig5w/vQ6qQQyKTIuZUEMJ+PSxYHm434lGRz1FFub10FNJunIE6JR7XXnOFcuTHcHxhaonTieFzVFEiIyPh6upapmmMroDh5uYGmUyGkydP6rXfv38f06dPB1B0/xe5ubk4ffo03nvvvaqOSQAkMjksm3WCZbNOcBr6LhJObMG9leORdv0UrFp2FzoeUbGkZSyySVH2K4uIiIjEJmLnCUTsPCF0DKOQHhWP/f0/FDoG1RANP/xd6AiiYHQFDBMTE0yYMAGbNm3CkCFDMHDgQERGRmLjxo1wcnJCdHR0kQWMadOmwcrKChMmTCj18pRKJSIjIyspfcli4rPQfkJecSbgYgCcHYS7hWR6qBMis0oer7TMXJsBANSPY8s8raenJ/424O+hMFmPknFm0KcAgICAAJg52QqapyKq07pUlbhTIQh694dSjSuRy3A88DwUNgUft2ZMzo1egvS7hrtlrqI8PT0RufMngy2P203ZxefIMCkk7+eAgItwqKG3kBjbtiUGht6+S0tM+wEx/V1Vxe9LTOtnLLjdiEdlf46qCDF8jiqKUqks8zRGV8AAgNWrV0OhUGDv3r04duwYfH19sWfPHnz22WeIiIgotHPPd955B+fOncOxY8dgYmJS6mXJ5fIyX9ZSIfL0/B+dlc5wVQr3gUhxC0A5N7ywj7vDrus4WDR6DnKbOsiOiUD0rx9DVssWVl49y55FoTDs76EQ6dInT7xxdnZGrbr2AqapmOq0LlWl7mhn3Fq+BxmqhLynjxTDY0hneLRoYphgVUihKPyQILcwg7VH3gFGqpDDvI4t7Fq4Izc9C6n3hDu5VCgMu3/mdlN2ikwA/xYwnJ2d4WRe7OjVVlHbFhXN0Nt3aYlpPyCmv6uq+H2Jaf2MBbcb8ajI56jKJobPUZXJKPcMlpaW2LBhAzZs2KDXHhISAi8vL0il+g9XmTVrFvz9/XHs2DE4ODgYMmqNZeMzAImntuLhtvnQZKRAbuMIqxbd4D5jE+TW/B2Q+EnlMrT5YAzOzl4HSFB4EUMigczMBF7Thxk6nkE5tG6I/rsX5r9u9toANHttAFT/XIffiAUCJiMiIiKimsQoCxiFSU5ORlRUFAYOHKjXPmPGDBw7dgzHjx9HnTp1BEpX8yhHzoFy5ByhYxBVSOOxvZCdlIpLn/2qP+Dfgoailhl6/fwhajcRX4dZlUl17nql9FJPRERERFQR1aaAERwcDEC/A8/79+9jzZo1MDU1hYeHR357165dcejQIUNHJCIj1PKtIXDt5YOQ9XsRseMEAMDawxmNx/VC47G9YOZgI2xAIiIiIqIaoloXMOrXrw+droSb14mISmDbxA1tPhiXX8Do9/unNeL+TSIiqj4sXeug27pZ0KrVkMhkOD9nI5Ju3M8f3nXtDFjVc4JEJsXNzX64/fvJYuYmHOsGzhh6YiUODZ2HuCu39IZZ1nNE56+nQqqQ48GhAFz/bh9k5ibot3MBbBu74tyH3+Pu3rPFzt/U3hodF70OM3trqDNz4D/hS73hzScPhMewLtDmapAYfAcX5hbfaWbr2SNRt0draLJycWbWWmTEJJa4PKlCjm7fzoS5oy0kMikufPIjEq7dQevZI+HcxQsAYOWhRMi3e3Hjx4OlfetIhK6MskAtz/YAAMdBM1Hbt+BtyWGf9ICZS1PUn/pdfltWdDiuT2+BJl+ehmWTjgbLKwbVpoAxdepUTJ1a8nNwiYiIiIhqmvSYBBwcMhfQ6aDs3BKtZgzHybdW5g8PXLETqXdVkJrIMeTY17j751loc9UCJi5c69kjoToXWuiw5+aOx5Uvf0Pc5XD0370Q9w+cR3p0PI6/tgxNJvQt1fzbLXgVgct34HHEw0KHRx65jNCNBwAA3dfPhpNvczwqIo+tpysc2zfFoSHz4NytFXw+HIczs74tcXnOXb2Qk5qBE2+sgEObxmg1cwSOv74MQSt3IWjlLgDAi4e/wv0D50u1TiReJnXqocmiE0UOT764HzJzqwLtMTs/h1WL7lWYTLykJY9CRERERETGTKfRAv9emWxiZY7E0Ht6w1P/fWSpNkcN6HSivIrZoU1jZMYmIyMmodDhNo1dEHc5HAAQdfQKnDo2g06rRWZccqnmL5FKYdvEFV7ThqH/7oVo/FLvAuM8/fQtrVqd974Wwaljc0QeuQwAiDl1DfatGpRqean3VJCZKgAAJjYWyEp4rDedracrch6nI0OlfzUHGZ/cxIcI+7g77iwbi9zkWL1hOq0WcQe/RZ0X3tZrTw+7AIWtEiYO1efJImXBAgYRERERUQ1g18IdL/y1CB0WTULM6eBCx2n59lDcO3AeOrXGwOlK1mrmcASv3VPkcIlUkv9z9uN0mNYu+M11ccwcrGHX3B0h6/fh8NjP0XhsL1jVdyp0XMf2TWGhtENswM0i52dia4mcx2lP8sn0P3oVtby0qDjIzU0x7PQ36Pz1VNz4Qf82kQYjuuHOnjNlWjcSJ6/v76DJ4pOwbT8YUZve1RuWcOxn2PoOh1Rhptce8/siKEfU3IclsIBBRERERFQDJF6/h4MvfgL/iUvQYfHrBYZ7DOkMey8PXF26XYB0xXPt7YOEoNvITkorcpynLxoxsbZAdlJqmZaR8zgd6Q/jkRwWCW2OGo/Oh8K2kCeN2TR2wXNzx+PEm18XP7/kNJhY13qS75mrNYpaXqPRPZAWGYs9XWfi0OC56Py1/m3y9V/ogPv7z5Vp3Uic5NYOAIDaXUYj487V/HZtThYST26FQ+//6Y3/+NIBWDR6DnLrmtsXGwsYRERUabqsehsTY3ZhYswuTIjagVGXN6DL6umwUNoJHY2IqEaTmjzp+i43JQOazBy94XV7tEbjcb1wesYa/UqASNi1dIeyUwv0+e0TOHdrhXYLJ8Lc0VZvnMfhUXDwbgQgr+Dx6MKNIucnr2UGE2sLvTZNdi7So+Lzj1l2rRog5albRgCglosDunwzDafe/gbZiU8KJBZKO0ik+h+tHp0PhUuvNgAAZeeWSLh2p3TLk0iQ9e+8sx+nQ/FUTsf2TZF8Kwo5KRlFrhsZB01WOnSavCudUq+fgqlzo/xh2Y/uQpOejIjPByHq5w/w+PJBJBz7BRl3ApEWcgK3Pu2PlMAjiPpxNnITY4RaBUFUm048iYhIHFTnQ3Hyja8hkUlh5e6Ejosnocf37+Lg4E+EjkZEVGM5tmsK7/dGQ6fRQiKRIODTzXDp6Q0TW0vc3XMGXb+ZhoxHSei7bR4A4OSUlaXuO8IQrn2zG9e+2Q0gr1ge9sthZMYm663D5cVb0XnFW5DIZYj8+yLSHuT1KdDjh/dg39ID6owsOPg0xsUFm+ExtAvkZiYFnuIRsGAzuq2bCalcjqjjV/E4PArmdWzR/M1BuPzFFjw3dzzM7KzRZVVevwTBa/cg+ngguq2fhWOvLtErLCSHRyEh8DYG7P0cmmw1zs7O68Cz0egeSIuOh+psSKHLS4+MQ7d1s9B/90LIzU1xdem2/Hk2GN4Vd3bz9pHqICvqJu5/OxkyM0tI5ArUm7oBj6/4QZOaCLvuL6HZ15cAAKnBJ5B4ejvse00AADiPzjufuvfNRDj0nwKFnbNQqyAIFjCIiKhSaXPU+Se9GapEhG05io6LXofC0hy5aZnChiMiqqFUZ0PgdzakyOE7Wk82YJqKefpJHtHHA/N/Tr2ngt+IBQXGPzFpeYG22k3dELTqjwLtiSF34Tdcfx6Zccm4/MUWANB7cst/JHIZ0h7EFnpVROCKnQhcsVOvLWLniWKXp87MxrH/LS0wLwA4P2djoe1kfGo1aovmK6/otZk9dRXGf6y8esDKq0eBdveZm6sombixgEFERFXG3Kk23Ad1hFatKbandiIiIkMKmLep0ualU2twZubaSpsfERWNfWAQEVGlUnZqgZcjfsUrd7ZiTOBGKH1bIHTjAagzswHk3Sc88tJ6mNlbAwBk5iYYfnYNbJvWK3YYEREREdVsLGAQEVGlirtyC/uefx/7B8xB4Ne/I/ZimN79uxmqRIRu2I92CycCALzfHY37hy4g+eaDYocRERERUc3GW0ioSC4WJY9jKGLKQkTF02TlIPXfXtsDl+2AlbsSHRa9jn/e+y5/nBs/HsIgv6VoNukF1H+hA/b1fq9Uw4iIKI+Vu7JC02vVGqTcyXt6gXUDZ0jlMsGyGGqe1R3fM/EQ02cXMWWpDCxgUJFWdhA6ARFVB4HLd2DYqW8Q9usRJATdBgDotFpcXLAZ/XcvxLHXvsq/vaSkYURElKf3z3MqNH36wwT83vZNAEC/3z9Frbr2lRGr0lR0/YiExM9RVYe3kBARUZVKvatC5JFL8JkzTq/dpXcbZKgSUbuQ/i2KG0ZERERENRMLGEREVOVC1u2DSw9vKH1bAABsm9ZDvf7tsX/AHDR+qTcs6znmj1vcMCIiIiKquVjAICKiSnNm1rc4POazAu1xl8Kw2XkkVOeuAwB8l76Biws2I0OViKtfbUeHRa/nj1vcMCIiIiKquVjAICIig2r88vPIin+MKP8rAIDbv5+EopYZ6r3QodhhRERERFSzsRNPIiIyqFtbj+LW1qN6bX7DF+gNL2oYEREREdVcvAKDiIiIiIiIiESPBQwiIiIiIiIiEj0WMIiIiIiIiIhI9FjAICIiIiIiIiLRYwGDiIiIiIiIiESPBQwiIiIiIiIiEj0+RpWIiCqdracrfJe9CZ1WB51ag7Pvrkfag9j84d7vjkajsT3x+FYUjry0qFTTEBEREVHNxiswiIio0mUlpODoK1/Cb9h8hKzbi9azR+oND/v1MPxGLCjTNERERERUs7GAQURElS4rIQW5qRkAAG2uBjqNVm94ZmwyoNWVaRoiIiIiqtlYwCAioiojMzOB9/ujEfrDwSqdhoiIiIiqP/aBQUQ1hv+rS5B6T1WuabVqTf7Pf4/6FFK5rNw5rNyV6P3znHJPbywkMim6rZuJ6+v3IfnmgyqbhoiIiKgyVeScsboR23krCxhEVGOk3lMhOTyqwvNJuRNTCWmqv84r3sLDE0F44HexSqchIiIiqkyVdc5IlY8FDCIiqnQuPb3hPrgTLN0c4TGkMxKv30X08UCY2Fri7p4z8HzleTQc1R02jVzQd8d8nJ6xBnbN6xeYJmD+ZqFXhYiIiIhEggUMIiKqdNHHA7GlwctFDg/fchThW47qT/MoqdhpiIiIiKhmYyeeRERERERERCR6LGAQERERERERkejxFhIiomd0WfU2Go3pCQDQajTIfJSMmLMhuLJ4KzJUiQKnIyIiIiKqmXgFBhFRIVTnQ7Gj1STseu4tnHp7FexbuqPH9+8KHYuIiIiIqMZiAYOIqBDaHDUy45KRoUrEo/M3ELblKBzbNYHC0lzoaERERERENRILGEREJTB3qg33QR2hVWug02iFjkNEREREVCOxDwwiokIoO7XAyxG/QiKVQm5uCgAIWb8P6sxsAEC9Ae3h/c4ovWlsPF0RMG8Twn45bPC8RERERETVnVEXMIKCgjB//nycOHECOp0OvXr1wvr16+Hp6YmBAwdi+/btQkekakKn0+FxRHT+a61aI2AaMoS4K7dwZuZayEwVcB/cCXW7tsLVpdvyhz84FIAHhwLyX9fr3w4+H72EiN9PCJCWiIiqmk6nQ8rdmPzX2ly1gGmIjEfKXVX+z9xuqKKMtoDh7++PQYMGoX79+pg7dy7Mzc2xefNmDBgwAGlpafD29hY6IlUDOp0Ot38/iesb/kJS6P389gODPkKz/w1Ay6lDIDNVCJiQqoomKwep9/IOuIHLdsDKXYkOi17HP+99V2BcC2c7dFg8CUdfXgxNZo6hoxqES682aPvRS7Bp7IrM2CSE/ngQoRv2Cx2LiMgg7vx5BtfX70PCtTv5bftf+AhNX+0Lr2nDILcwFTAdkTjd3fcPQtbvRULg7fy2/QM+RJMJ/eA1YxgUFmYCpisfp47N0OLNwbBr6Q5L1zq4snQbrq36Q+hYNYpRFjDi4uIwZswY+Pj44OjRozA3z+tUb/z48fDw8AAAFjCownQ6HS4u2IzQjQcAif6wrPjHuPrVdsScCcbzWz7Ov8WAqq/A5Tsw7NQ3CPv1CBKCnhyIIZGg29qZCF77J5Ju3C96BkbMvnVD9N78IUK+24eTU1ehTpvG8F36BjSZObxdhoiqvStLtuHaN38UOBfITkpB0MpdiD4ZhH4750NRi508E/0ncMVOBC7fWXC7SU7DtW/+wMOTQei7cz5MrCyECVhOcgszJN+KxJ09p9H+s/8JHadGMspOPJcuXYqkpCRs2rQpv3gBADY2NvDx8QHAAgZV3J3dp/OKFwCge2bgv69V/1zHpS+2GDQXCSP1rgqRRy7BZ844vfbWs0YgJzUDN386JFCyqtfijUGID7yNK4t/w+Nb0YjYeQI3fjoEr2lDhY5GRFSl7h+8kFe8AIo8F4i/cgsXPvnJoLmIxCzyyKW84gVQ9HYTGIHzH/1g0FyVIfrYVVxZ/Bvu7fsH2pxcoePUSEZZwNi+fTu6du0KT0/PQoc7OTlBqVQCAKZOnQo3NzdYW1vDxcUFs2bNQk5O9bzEmyqPTqfD9Q1/FagaF+bWb/7ISUmv+lAkuJB1++DSwxtK3xYAAMd2TdD4pd44O/tbgZNVLcf2TRF9/KpeW/TxQFi6OcLC2U6gVEREVS90Y+lulbv9xylkxj+u4jRExiH/C8AS3P3zDDIeJVVxGqpujO4WEpVKhejoaIwZM6bAMK1Wi+DgYLRp0ya/bdq0aVi2bBlq1aqF+Ph4jBo1CosXL8ann35aquWp1WqoVKqSR6wkMfFZT35WxQBq47s3rDpIvx+LxOC7pRpXk5WDwG1/o+7A9lWcqvJkPUrO/zkmJgZm2kzhwhhQbik7jjozq/CCRNylMGx2HgkAMLG2QNc1M3Bm5lpkJ6WVOUdUVFSZpjGEot4fc0dbZMYl67Vlxib9O6w2MmISqzpaoQz9PtbU7aYi4nNkAJwB5L1nuSY1swPk0u576Akx7CezHiXj0fkbpRpXp9YgaMshuI7sUsWpKg/3aVQVsuNTEHM6uFTj6jRaBP56EPXGdq/iVGXH/fYTVbk/ViqVkMvLVpIwugJGenreN90SScGvxvfu3YvY2Fi920eaN2+e/7NOp4NUKsWtW7dKvTyVSgU3N7fyBy4reW2g2TIAQPt27QE1q5JCaKywx8f2PUo9/vx35uDvKaX/uxJabak5vnZ8AQDQvn17JNWQk5Yv7PvARWFdKfNq8mo/mDvaov3CiXrtEb+fROj3xX9jFx4ejtGG3K+UUmW+P4Zg6Pexpm43FaGwd0Grn/JOetq3b4fchOgSpqiejG3bEgMx7CfryW2w0OH5Uo+/ZO5n2Du7dAUPMeA+jaqCi9waXzj0KfX4yxcuxp73X6nCROXD/fYTVbk/joyMhKura5mmMboChpubG2QyGU6ePKnXfv/+fUyfPh1Awf4vlixZgi+++ALp6emwt7fHkiVLDBWXjFSmrmz3tGXpWKWtaYLX7EHwmj1CxzCIzNhkmNex1Wsz+/f1f1diEFHVkluYYdiZb3Dsf1/pdyRspOS1zDDinzU4PO4Lvad8iUlmGY/tZT13IKqOMrU8h6aqZXQFDBMTE0yYMAGbNm3CkCFDMHDgQERGRmLjxo1wcnJCdHR0gQLGnDlzMGfOHNy4cQNbt26Fs7NzqZenVCoRGRlZyWtRtJj4LLSfkFecCbgYAGcH3kIiBJ1Wi7PDvkBWTGLBzoeeJZXgx7N/wbSOjUGyVYasR8k4M+hTAEBAQADMnGwFzWMo50YvQfpdw90SVhRPT09E7hRfh29FvT+xATdRt4c3glbuym9z6emNtMhYwW4fAQz/PtbU7aYi4nNkmBSS93NAwEU41NBbSCpj3+M1bSgSgu4gIeg2bBrVxYuHl+HCvE24tfVo/jiWrnUw2H85Ar/+HaEb9kPp2wJ9d87H0VcW4+HJoPzxHLwb4YV9X+DElJV4cPBCmXJ4DO2MLqumYf8Lc/QKDxKZFC/sW4SsxBRIZVIoLC1waOg86LTa/HHsvDwwcP9inHp7Ne7vP4frG/aj3YJXcXjMZwWWI4b9pE6nw/mxS/N+dyWdC0iANf6/w8LVwSDZKgP3aVQVdDodAl5ZjtRb0SVvNwBW+v2G792dqj5YGYnlnFEMqnJ//F+/lWVhdAUMAFi9ejUUCgX27t2LY8eOwdfXF3v27MFnn32GiIiIIjv3bNasGVq3bo3x48fj+PHjpVqWXC4v82UtFSJ/0hmks9IZrspahls26fGa/CIuLvy5xPHcB3ZEwzYtDJCo8qRLnzy9x9nZGbXq2guYxnAUCnHs8hQKA+9XSqmo9+f69/sx8K9FaDNnHO7sOgmHNo3R7LUBuPhpydtHVTL0+1hTt5uKUGQC+LeA4ezsDKca+pTJiu57ZKYKNHm1L05PXwMAeBzxEJc++xXtF74K1dkQpN5TQSKVouu3MxAfdAehG/JuY1Odu47Q7/ej88qp2Nf7XWQnpUFubopu387E7V2niixeKH1boMs3b2NX+6kFht398yxcn2+Lbt/OxP7+H0KTnfdta+tZI2HpVgf+E76ERCbFkGMr4DVjGK6tynuCh8zMBN3WzsCd3adxf/85AEDEjuPwmTMOtk3ckBym/2WRWPaTGW8OxrkPvy9xPJeebeDZ0bvqA1Ui7tOoqmRNGYyz76wvcby63VqhSZe2BkhUdkXtt+UWZrD2yPvQLVXIYV7HFnYt3JGbnoXUe9Wz4CGW/fF/jPIpJJaWltiwYQNUKhVSU1Nx+PBh+Pr6IiQkBF5eXpBKi16t3NxchIeHGzAtGatmrw+Aa2+fYsexqu+EDosnGSgRkTASgm7j2P++gtvzbTH46Aq0+WAsrizdhrBfDgsdjahGcOnpDZmZid5VFDc3++HR+RvotnYGJDIpvGYMg62nG87MXKM37ZUl25CdmArfr94EALT//H+QyKS4MK/836ad/+gHKGqZwefjlwHkXdHhNWMYzs5eh6yEFGTGJuOf975D69kjYd+6IQCg7SevQGqiwIW5T5ablZCC2EthaDiiW7mzVLXGL/dG/UEd814U8WQyi7r26LRsiuFCEYlcozE94TG0c96LorYbpR06f12wSCp2Dq0bYvDR5Rh8dDkslHZo9toADD66HJ1XvCV0tBpDHF9HVoLk5GRERUVh4MCB+W2PHz/Gnj17MHToUNjY2CA4OBhffPEF+vXrJ2BSMhZShRw9f3ofV7/ajrBfDiM39UnnVhKZFO4v+qL956/B3MF4bh0hKq8o/yuI8r8idAyiGsnJtwUSQ+5Cp9HqtZ+dvQ5Djq9A1zUz4D6oI05PX1Pgti5trhqn3v4Ggw4tQdc10+ExtAv8hs+HOj0L5ZWbmoFT09eg/+8LoDobgufmjUf4Vn+9fcQDv4uI2HkC3dbOwKXPf0WTCX3gN3xBgeXGXbkFZeeW5c5S1aQyGbqvn43ARjtx86dDyEnJyB8mkUpRb0B7dPjiNVgo+Uhpov9IpFJ0XTsD1g3r4sYPB5Hz+MkV5pBKUK9fO3T44nWjvOpHde56/hPpSBjVpoARHJz3uJ6n+7+QSCTYsmUL3nnnHeTk5MDR0RHDhw/HwoULBUpJxkZmosBzc8ej9TujEHX0CrLikiG3NIdLT29YONYWOh5VgVfubEX81QgAQOgPB/DgUED+sK5rZ8CqnhMkMilubvbD7d9PwtbTFb7L3oROq4NOrcHZd9cj7UGsUPGJqBqyqudYaH8zmXHJuPzlNnRePgX39p/D3b1nC50+OSwS17/fj9YzRyBk/T7EXgyrcKbYCzcQvG4vev70PlLuxODSZ78UGOfi/M148cgy9PzpfVxb+QfiLhe8AjYjJhFW9R0rnKcqSeUy+Hw4Dq1mDEeU/xVkPkqC3MIUdXt4o5az8X0AIzIEqUyGNu+NgdfbQxHlfxWZsUmQm5ugbrfWqOViPH3FkPhU6wKGtbU1jh49WsQURKWnsDCDx+BOQscgA0iPjoffiAWFDgtcsROpd1WQmsgx5NjXuPvnWWQlpODoK18iNzUDLj290Xr2SJydvc7AqYmoOpOZmeh98/8fiUyKxmN7Ijc9E/ZeDSCvZVbolRXyWmZoMLQLctMz4diuCSRSqV7nmrVcHDD05Mon85VKITNV4OWIX/Pb0qLisbfHbL35Bi7fmVcUWfsnNFk5BZarzsxGyPp98F0yGUGrdhUYDgCa7BzIzExKfhNEQG5uCvdBvkLHIDIqedtNR6FjUDVSbQoYU6dOxdSpxncfFRGJi7lTbfTfvRCZj5JxYe6PyEpIyR+W+m9v1NocNaDTQafT6Q3X5moKXOJNRFRRWQkpMLW1LNDeetZIWDdwxl/9PkTfbXPRfuFE/PPedwXG67jodWjVGuwfMAcD/1qs17kmAGSoErHv+ffzX9fxaYy2n7yiV8zVqgs+6lCnznuqjFZT9NNldLl50xW1bzS1tdTbjxIRERXHKDvxJCKqKn90fBt+wxfgweGLaPfpq4WO0/Ltobh34Hz+yTuQ9w2p9/ujEfrDQUNFJaIaIiH4DmybuOm1ObRpjFYzh+Of9zcg5fZDnJ65Fo3G9oRrH/0e/esP7IAGw7vi9LTVeHwrGufn/ojWs0fCzssjfxydRovUe6r8fxkxidBpNHpt6VHxVbJuts3qIyHoTpXMm4iIqh8WMIiInpKdmAoAuLfvH9i19Cgw3GNIZ9h7eeDq0u35bRKZFN3WzcT19fuQfPOBwbISUc0QfewqrOo7weLfDu/k5qbotnYGbv/x5FGoj86FInTDfnRePgWm9tYAAHNHW/h+9SaCVv2B+MC8vn3u7DqFyL8voeuaGZCZKoRZoacoOzRD1NHLQscgIiIjwQIGEdG/5OamkPz7GGanjs0LPM+7bo/WaDyuF07PWAPodPntnVe8hYcngvDA76JB8xJRzfD4VjRizoag4cjuAIB2n02ERC7VeyQpAFxZug2Z8SnotCzvkaldvpmG1HuPcO2bP/TG++eDDTC1qZX/GFShKDu1gLyWGe7+9Y+gOYiIyHhUmz4wiIgqyqaxCzotn4Lc9CxoczU498EGuPT0homtJe7uOYOu30xDxqMk9N02DwBwcspK2LV0h/vgTrB0c4THkM5IvH4XAfM3C7siRFTtXF22A93Xz0Lo9/tx7v0NhY6jzVFjX+93818fGfdFoePlJKdhZ5s3ilyW6tx17Gpfun7FSnqcYMTOE4jYeaLQYS2nDkHw2j+hySzYASgREVFhWMAgIvpXwrU7+KvvB3ptT1+FsaP15ALTRB8PxJYGwn6LSUTVX+yFGwj6+ndY1XNEcniU0HEqTF7LDLGXwxH6/X6hoxARkRFhAYOIiIjICIRvqT6PhlenZ+HaysIfrUpERFQU9oFBRERERERERKLHAgYRERERERERiR5vISGiGsPKXSl0BADiyfEsseYqirHlJSIiIqKKYQGDiGqM3j/PETqCqPH9ISIiIiIx4y0kRERERERERCR6LGAQERERERERiUTfHfPRZdXbQscQJRYwiIiIiIiIiGoQqcI4e5MwztREREREREREItV0Yn80/V8/WNVXIic1A48u3MCJScsxMmAdwn/zx7VVf+SP22n5FFh7OMNvxAJ0WfU26nZrBQBoNKYnAMBv+AKozl0vdnkSmRStZo5Aw1HdUcvZHlmJKXhw8AIuzP0JADAxZhcuzP0JdXwaw/V5H0QfD4QmKyd/GU8LXL4TgSt2VtZbUalYwCAiIiIiIiKqJN7vjUaLKS/i8qKteHgyCPJaZnDt1aZU016YtwmW9Z2Q+SgJAfM2AQCyk9NKnK7z11Ph0qsNLi78GXEXw2Bmb406zzXRG6f1O6MQuHwHrn61HZBKkBWfgsuLtuYPd+v3HDp+ORmPLtwow9oaFgsYRERERERERJVAbm6KllOH4OpXO3Bzk19+e2Lw3VJNn5uaAW2OGpqsHGTGJZdqGit3JRqN7oHjk5bj/oHzAIDU+48Qd+WW3ngP/AL0Mv23PACwa+GOdp++igtzf0LMmeBSLVcI7AODiIiIiIiIqBLYNnGD3NwUD08GGWyZ9l4eAFDiMuMDIwptN3e0Re+f5+DWb/4I+/nvSs9XmVjAICIiIiIiIjIAnVYHSCR6bYbqUFOdkVWgTWZugt4/z0FCyF0ELPjZIDkqggUMIiIiIiIiokqQHB4FdWY26nZvXejwrPjHsHCqrddm19JD77U2Vw2JrPQf1RP+vT2lqGUWp+vq6ZDIZDj11ipApyvz9IbGPjCIiIiIiIiIKoE6IwvXN/wF7/dGQZOVg4engiAzM4Frbx8Er9mDh6evoemr/fDgUADSouLQZEJfWLo6IPGpjjpTH8TCuXMLWNV3Qk5qBnJSMqBTa4pcZuo9FW7/cQodl0yGzEyBuEvhMLG1hGO7Jrjxw8Eip/N+dzScO7fE4bGfQ2FpDoWlOQAgNz2r0Ks1xIAFDCIiIiIiIqJKcnXpdmQlpKDZ6wPQbuGryHmcjkfn857sEbz2T1i61kH372ZDq9YgbPPfuPfXOVh7OOdPf/27fajdrB4G+y+HopZ5qR6jembWt/B+ZxR8PhwHc6fayIpPwf0D54qdRtmpBUxrW+HFv7/Sa+djVImIiIiIiIhqiBs/HCz06gd1ehZOT19T7LRpD2LhN2x+mZanU2tw9avteY9ILcRm55EF2vxGLCjTMsSAfWAQERERERERkejxCgwiIiIiIiIikfKaMRytZgwrcvjWRuMNmEZYLGAQERERERERiVTYL4dxb98/QscQBRYwqMaYfQGIzhA6BeBiAazsIHQKcfJ/dQlS76mEjmH0rNyV6P3znEqZ1+DpR3A7KqVS5lURDV2tsW9NH6FjEJGRE8txpjL300RU/eUkpyHnqaeU1GQsYFCNEZ0B3EkVOgUVJ/WeCsnhUULHoKfcjkpB6O1koWMQEVUKHmeIiIwbO/EkIiIiIiIiItFjAYOIiIiIiIiIRI8FDCIiIiIiIiISPRYwiIiIiIiIiEj0WMAgIiIiIiIiItFjAYOIqBj9/1iITsunFGi3dK2DiTG74Ni+qQCpiIiIiIhqHhYwiIiIiIiIiEj0WMAgIiIiIiIiItFjAYOIiIiIiIiIRM+oCxhBQUEYMmQIbGxsYG1tjaFDhyImJgZWVlYYO3as0PGohgie7C50BCIiIiIiompPLnSA8vL398egQYNQv359zJ07F+bm5ti8eTMGDBiAtLQ0eHt7Cx2RiKjGOrpxABRyKXq8dgA63ZP2P795Hi6OFvAd/xfUal3RMyAiEpE+v30ChaUFDg2dB51Wm99u5+WBgfsX49Tbq3F//zkBExKJj06rRfTxQNzedRIZqiTIzU3g2tsHDUd1h4l1LaHjlZtLrzZo+9FLsGnsiszYJIT+eBChG/YLHavGMMoCRlxcHMaMGQMfHx8cPXoU5ubmAIDx48fDw8MDAFjAoCoX+cNspIYcR27iQ4TO8oZZ3SZo8MEOoWNRJctJySj0IGtik9emyc41dCSj8Orck7i2azg+fK0Vlvx4DQDwxsgm6NPRBT5j/mTxgoiMyplZ32LIsRXwmjEM11b9AQCQmZmg29oZuLP7NIsXRM9IjYyF//gvkRwWmdcgkQA6HaKPB+LSoq3osupteAzuJGzIcrBv3RC9N3+IkO/24eTUVajTpjF8l74BTWYOwn45LHS8GsEoCxhLly5FUlISNm3alF+8AAAbGxv4+PjA39+fBQwqt8tDJMUON3GsD6+N9+A2aSWAvFtImq8KNEAyEsLjiGi4v+gLiVSq962bQ5tG0Ko1SL0bI2A68Yp+lIG3vjiLXxd3h9/ZaGRkqfH1+x3w/tcBCLv3WOh4RERlkhmbjH/e+w7dN7yD6OOBSAi6jbafvAKpiQIX5v4kdDwiUcmKfwy/4QuQHhX3pPGpyzE1WTk4OWUlZKYK1OvXToCE5dfijUGID7yNK4t/AwA8vhUN2yZu8Jo2lAUMAzHKAsb27dvRtWtXeHp6FjrcyckJSqVSry0zMxNeXl5QqVRIS0szREwyUq02P/lAmnbzH9xZMgLNVl6BorZzXqNUJlAyEsLNn/3Q9LX+6Lzqbdz44QByHqfDoU0jtPlgLCJ2HEdOSobQEUVr59938WL3etj6ZXdkZKlx6rIK63bcEDoWEVG5PPC7iIidJ9Bt7Qxc+vxXNJnQB37DF0CdniV0NCJRub5hv37x4lk6HSCRIGD+Jrj1aQuJ1Hi6ZXRs3xS3fvPXa4s+HoiWU4fAwtkOGTGJAiWrOYyugKFSqRAdHY0xY8YUGKbVahEcHIw2bdoUGDZ//nzUr18fKpWqTMtTq9VlnqYiYuKfHARjVDGA2sxgy67ucnOdAChKHE9R+0nxS25pl/e/dR299orlyEVU1KNKmVd5ZT1Kzv85JiYGZtpM4cI8JTdXLXSEAtKj4nHwxU/g8+E49P55DhTWFki7/wgh6/Yh9IcDQscrVG6uGlFRUZUyL3VuxW6RmfblOUQfHQutVodB045UKEdlrVN5iXW7EbP4HBmAvOJvTEwMck00wgYSiBj3bWJXmfuxZ+dbERfnb8aLR5ah50/v49rKPxB3ObzcObhPo+pIm6PGzV//LnlEnQ5pD2IRtMsfDp2aVX2wMipqX2HuaIvMuGS9tszYpH+H1a6WBYyq3F8plUrI5WUrSRhdASM9PR0AIJEUvMx/7969iI2NLXD7yOXLl+Hn54cVK1Zg+PDhZVqeSqWCm5tbufOWmbw20GwZAKB9u/aAOslwy67mmq8JgXm9FkLHQHh4ONz6tRQ0Q22pOb52fAEA0L59eySJ5KTlC/s+cFFYCx2jgKTQ+/B/dYnQMUotPDwcoytrv9V4IWDmUu7JXxnYEBJIYGEmQ9vmDjh4OrJc8wkPD4eb27hy56gMYt1uxExh74JWP+Wd9LRv3w65CdECJxJGVe7bbD1d4bvsTei0OujUGpx9dz3SHsTqjdN17QxY1XOCRCbFzc1+uP37SVi61kG3dbOgVashkclwfs5GJN24X+yyJHIZhp1chVvb/BG89k+9Yc0nD4THsC7Q5mqQGHwn/7YKU3trdFz0OszsraHOzIH/hC9LtV6Vuh97SkV/F+rMbISs3wffJZMRtGpXuedTVetXFtynUVVwklliSZ1+pR5//msz8Ff6zSpMVD5iPScVQlXuryIjI+Hq6lqmaYyugOHm5gaZTIaTJ0/qtd+/fx/Tp08HoN+Bp1qtxuTJk/Htt99C+9T960REVLWaetjgq9ntMfOr82jewBY/fNoFXiN2IyE5W+hoRNVGVkIKjr7yJXJTM+DS0xutZ4/E2dnr9MYJXLETqXdVkJrIMeTY17j751mkxyTg4JC5gE4HZeeWaDVjOE6+tbLYZTUZ3wePIwovQkUeuYzQjXlXpXVfPxtOvs3x6Fwo2i14FYHLd+BxxMPKWWER0P37zaxOw/NKomdJUXxfcgXGL+RLaTHLjE2GeR1bvTazf1//dyUGVS2jK2CYmJhgwoQJ2LRpE4YMGYKBAwciMjISGzduhJOTE6Kjo/UKGMuWLUObNm3QrVs3nDhxoszLUyqViIws3zeG5RETn4X2E/KKMwEXA+DswFtIKsv0UCdEVsFtqmZuzcs0vqenJ/424N9UYbIeJePMoE8BAAEBATBzshU0z3/OjV6C9LuGu2WruvL09ETkzsrpVK73lDMIf5Be5unkcgm2fNkDRy9E44c/wmBqIkMfXxdsmN8ZI985Vub5eXp6wv8YtxtjE58jw6SQvJ8DAi7CoYbeQlKV+7ashJT8n7W5mkI/VKf+u2xtjhrQ6aDT6fTGM7EyR2LovWKXI7cwg0uvNrj/1zmYO9oWXMa9J+unVauh02ghkUph28QVXtOGwbKeI27vOlXg3vGiVOZ+7GliOc5U1fqVBfdpVBXUGdk41XcutKV8Stvcb5ZgbV+fKk5VdkXtK2IDbqJuD28ErXxyBZZLT2+kRcZWy9tHgKrdXz3bb2VpGF0BAwBWr14NhUKBvXv34tixY/D19cWePXvw2WefISIiIr9zz4iICHz33Xe4evVquZcll8vLfFlLhciffFBwVjrDVWm8z0gWG8UtAFVQwGg8/2DZcigUhv2bKkS69MnTe5ydnVGrrr2AaZ5QKIxylyQ6CkXl7bfkipL7jSnMZ1PbwtWpFgZMzbsPNjtHg1c+OoGA3wZj/IuN8OtfEWXOwe3G+CgyAfxbwHB2doaTebGjV1uG2LfJzEzg/f5onPtwY5HjtHx7KO4dOA+dOq+QZNfCHR2XTEatug44/vqyYuffcupghG48gFpKu2LHc2zfFBZKO8QG3IS5oy3smrvjzIy1SLkbg/67FkJ1NgSp90vuB6oy92PPzlcMqmr9yoL7NKoqD0f1QPiWkvu9MrWzQpuXB0BmWr5zjapU1L7i+vf7MfCvRWgzZxzu7DoJhzaN0ey1Abj46c8GTmg4YthfPc14unx9iqWlJTZs2ACVSoXU1FQcPnwYvr6+CAkJgZeXF6T/9mR75swZPHr0CJ6ennBwcMCQIUOQnp4OBwcHnDp1SuC1ICKqnjq3ccL7E70w6dPTiEt8UjUMCkvEgnVXsPrDjnBjcZao0khkUnRbNxPX1+9D8s0HhY7jMaQz7L08cHXp9vy2xOv3cPDFT+A/cQk6LH69yPmbOdjArqUHYk5dKzaHTWMXPDd3PE68+TUAIOdxOtIfxiM5LBLaHDUenQ+FbRNh+30goqrX8q3BkNcyA0q4PcT7nVGiLF4UJyHoNo797yu4Pd8Wg4+uQJsPxuLK0m18hKoBiaMMXQmSk5MRFRWFgQMH5reNHj0azz//fP7rc+fOYeLEiQgMDESdOnWEiElEVO2dvfoICp9NhQ5b8uM1LPmx+A9BRFQ2nVe8hYcngvDA72Khw+v2aI3G43rh6IQv8x5fCEBqIs+7pQRAbkoGNJk5AAB5LTNIZVK9R0TXblYPZvbW6PPbJ7BQ2kGqkCMh5C4engjKH6eWiwO6fDMNJ99ciezEVACAJjsX6VHxsFDaIUOVCLtWDRCxS78PM2MUsfMEInaeEDoGkWhZN3BGn9/mwn/84rx9iQSATn+c1u+OQtPXBgiSr6Ki/K8gyv+K0DFqrGpTwAgODgag34GnhYUFLCws8l/XqVMHEolEVJfAEBEREZWXS09vuA/uBEs3R3gM6YzE63cRMH8zXHp6w8TWEnf3nEHXb6Yh41ES+m6bBwA4OWUlbDxd4f3e6Ly+KiQSBHy6GQDgMbQL5GYmuPHjk9sjY04HI+Z03nlWo9E9YO5oi4cngmBexxbN3xyEy19swXNzx8PMzhpdVr0NAAheuwfRxwMRsGAzuq2bCalcjqjjV/E4XNhHhxKRYTi1b4rh/6xFxI7jCN96FCl3YgAADYZ3RYu3BsO+pYfACclYVesCxrN69OiBtLQ0AyWi6sDKqwfa7tWVPCJVOpm5CfrtXADbxq449+H3uLv3bIFxvN8djUZje+LxrSgceWlRqad7WqflU+D6fFtE/n0R5z78vtBxvKYNhXPXVpDKZbiydBtiA26W6dGAprUt0WX1dJhYWSA+MKLAfZLKTi3g89FL0Oaq8zq/mrYaOclP9lVdvpkG8zo2+es44vy3SI+OBwDc3XuWly0S1WDRxwOxpcHLhbb/Z0fryQWGZ8Ylw+9sSIH22k3dELTqjyKX9/SVB5lxybj8xRYAKPIJJokhd+E3fEGR8yOi6svM3hotpw6Bx9Au+L3tmwCAtp+8wv5WqEKqTQFj6tSpmDp1qtAxiKiSaLPVOP7aMjSZ0LfIccJ+PYyI30/Ad8nkMk33tMDlO3Hnj9PwGNq50OEuvdpAZm6Kw2M+02svy6MBvaYNw50/TuHun2fR9duZUPq2gOrc9fzhKfdU+Hvkp9Bk56LJhL5o9toABH39OwCgdrP6MLHW7y9Cm6uG3wh+ICCiyhcwr/Dbv4iIiMTAKDvxJKLqT6fVIjMuudhxMmOTAa3+FTKlme5pGariH3nl/qIv5Bam6LtzAbqsehvyWmZ6jwbsv3shGr/Uu9h5OHVohsgjlwEAkX4BcPLVf/RuxsMEaP593Jg2Vw2d9snjDVvPHolrq3frjS+RStFv16fo/fMcWLmX/fFTRERERETGiAUMIqJiWCjtoMvV4PDohUi8fg8tpwyGmYM17Jq7I2T9Phwe+zkaj+0Fq/pORc5DYWUOdXre0ziyH6fDtLZloeOZ2lujycR+uPWbPwBA6dsCj+88RNYzBZkDL36Mv0d+iuB1e9H567cqZ0WJiIiIiESOBQwiomJkJ6Xl30seffwqajevX+ZHA+amZUFuYQYAMLGuheykgn3xyC3M0GPDOzg/54e8K0sAeE0fiuvr9hbM9G8P/7EXbsC8jm3FVpCIiIiIyEiwgEFENYK8lhlMrC1KHvEZqnPXYd+6IQDAvnVDpNyN0Xs0IADYtWqAlHsqSGRSmDvaFpjHo/OhcO3dBgDg1vc5PDoXqjdcqpCjx8Z3cf27vxB/9VZ+XvM6tuj+3Wx0WT0N9q0aoMVbgyE1kec/M926gTNy0zLLvE5ERERERMao2nTiSUTVT48f3oN9Sw+oM7Lg4NMYFxfoPxrQ85Xn0XBUd9g0ckHfHfNxesYaZD5KKnS6wh4NCOT1MeHWvx3MHWzRd8d8HB77OcwdbPIfDRix4zg6r3gL/XbldbJ5esYaACj00YBWHko8N3c8jr++TG8Zwev2ous309Ds9ReQcO12fgeeXVZPx5kZa9B4XC/UadMIcrPBaPnWYEQfv4rgtX9iX5/3AQCWrnXg+9UbuL5+H8ydauP5Xz+COiMbkADn5mw0wG+CiIiIiEh4LGAQkWidmLS8QNvTjwYM33IU4VuOlmq6oh4NGLRyF4JW7tJre/rRgNocNU5PX1NgusIeDVinTWPc2naswLjZCSk4+sriAu1n/i2GhP1yuNhHoaZFxeU/QjXzURL+6vtBkeMSEREREVVXLGAQUY1giEcD3tl9usqXQURERERUU7EPDCIiIiIiIiISPRYwiIiIiIiIiEj0eAsJ1RguZX8ARZUQSw4xsnJXCh2hWqjM97Ghq3WlzasixJKDiIybWI4zYslBRIXjNvqE2N4LFjCoxljZQegEVJLeP88ROgI9Y9+aPkJHICKqNDzOEFFpcF8hXryFhIiIiIiIiIhEjwUMIiIiEtT333+PHj165P9zdnbGJ598UmT7086ePYtFi/IeM5yRkQFfX1/Y2tpi+/btBZaj0+kwefJkdOvWDf369UNkZCQAICAgIH8Zbdu2hY+PDwAgMTERr7zyShWvPREREZUWbyEhIiIiQb3xxht44403AAC3b9/G0KFD8d5776F27dqFtj9t6dKl2LQp7zHJpqam2LNnD7777rtCl7N3716Ympri1KlTuHz5MubMmYOtW7eiffv2OHHiBABg1apVyMzMBADY2dnBxsYGISEhaNmyZVWsOhEREZUBr8AgIiIiUcjNzcUrr7yC9evXo3bt2iW2p6Sk4PHjx7C3twcAyGQyKJVFdzYWHh6O5557DgDg4+OD06dPFxjnt99+w7hx4/JfDxgwALt27arwuhEREVHFsYBBREREojBnzhwMHDgQXbp0KVV7WFgYPDw8Sj1/Ly8v/P3339DpdPj7778RGxurNzw8PBwmJiZwd3fPb2vYsCGCg4PLvjJERERU6XgLCREREQnu4MGDCAoKwuHDh0vVXh4DBgzA+fPn0bNnT7Ru3RqtWrXSG75161a89NJLFV4OERERVQ0WMIiIiEhQMTExeP/993H06FFIpdIS2//j6emJO3fulGlZCxcuBAD4+/vD1NRUb9jOnTsL3FZy+/Zt9n9BREQkEixgEBERkaC++OILpKSk6PU90atXLzx69KjQ9vnz5wMAbGxsYGNjg4SEhPx+MEaMGIGrV6+iVq1auHDhAlauXAkAmDBhAr7++muMHDkScrkc9erVw5o1a/Lne+HCBTRo0AAODg562Q4dOoQpU6ZU2boTERFR6bGAQURERIL69ttv8e233xY5rDgffvghvvvuu/zHq/7xxx+FjvfLL78AQP7TRp7VoUMHHDhwQK8tMTERjx8/hpeXV7EZiIiIyDBYwCAiIiKj1aVLlwKde1YWOzs7bNmypUrmTURERGXHp5AQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkejxKSRUpNkXgOgMoVPkcbEAVnYQOgUREREZM/9XlyD1nkroGLByV6L3z3OEjkFEZHRYwKAiRWcAd1KFTkFERERUOVLvqZAcHiV0DCIiKifeQkJEREREREREoscCBhERERERERGJHm8hISIiIiIiIhIBjUaLWw9SkJSSDQkkcLQ3g4eL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q3KfNPVi93oY0rN+pc5TrKrNBZxTp06FTqdDx44dhY5CREREREREpMdEIcPmz7vBRFH8x/D/nlDi2mdbgSeNPMve1hTfzesEiaQGPNYL1aiAQURERERERCRmPs0dsGNZT8hlRRcc/ntCSfSjDGg0Rd+eb22pwKF1/VDXsVZVRBUlFjCIiIiIiIiIDGRoL3fsW90Hdjam5Z6He11LHP/hBbRrWacSk4kfCxhEREREREREBjSgqxtC/xyBYb3L3nfF1DHNELx7OHyaO1RBMnGrNp14EhERERERERkLJ3tz7F75PK7eiMf6nTex4+87SEnLLXTcOrXN8OrgxpgyuikaulkbOKl4sIBBREREREREJJA2zRzw/YIu+G5eZ9y6/xhHzz/EtC/PAQC+n98ZfTu5oJ6zZY3pqLM4vIWEiIiIiIiISGBSqQRNPGz1Hok6oIsb6te1YvHiXyxgEBEREREREZHosYBBRERERERERKLHPjCoSC4WQid4QkxZiIiIysLKXSl0BKNTVe+ZWH4XYslBRGRsWMCgIq3sIHQCIiIi49f75zlCR6B/8XdBRGTceAsJEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6MmFDkBkKLMvANEZQqcAXCyAlR2ETkFU8/i/ugSp91Tlnl6r1uT//PeoTyGVy8o9Lyt3JXr/PKfc0xMR1UQV3Y9XN4Y6lojl+MljJwEsYFANEp0B3EkVOgURCSX1ngrJ4VGVMq+UOzGVMh8iIiq9ytyPU+nx+EliwltIiIiIiIiIiEj0WMAgIiIiIiIiItFjAYOIiIiIiIiIRI8FDCIiIiIiIiISPXbiSURE9Iwuq95GozE9AQBajQaZj5IRczYEVxZvRYYqUeB0RERE4sTjJ1U1XoFBRERUCNX5UOxoNQm7nnsLp95eBfuW7ujx/btCxyIiIhI1Hj+pKrGAQUREVAhtjhqZccnIUCXi0fkbCNtyFI7tmkBhaS50NCIiItHi8ZOqEgsYREREJTB3qg33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", + "image/png": "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5P9zdnbGJ598UmT7086ePYtFi/IeM5yRkQFfX1/Y2tpi+/btBZaj0+kwefJkdOvWDf369UNkZCQAICAgIH8Zbdu2hY+PDwAgMTERr7zyShWvPREREZUWbyEhIiIiQb3xxht44403AAC3b9/G0KFD8d5776F27dqFtj9t6dKl2LQp7zHJpqam2LNnD7777rtCl7N3716Ympri1KlTuHz5MubMmYOtW7eiffv2OHHiBABg1apVyMzMBADY2dnBxsYGISEhaNmyZVWsOhEREZUBr8AgIiIiUcjNzcUrr7yC9evXo3bt2iW2p6Sk4PHjx7C3twcAyGQyKJVFdzYWHh6O5557DgDg4+OD06dPFxjnt99+w7hx4/JfDxgwALt27arwuhEREVHFsYBBREREojBnzhwMHDgQXbp0KVV7WFgYPDw8Sj1/Ly8v/P3339DpdPj7778RGxurNzw8PBwmJiZwd3fPb2vYsCGCg4PLvjJERERU6XgLCREREQnu4MGDCAoKwuHDh0vVXh4DBgzA+fPn0bNnT7Ru3RqtWrXSG75161a89NJLFV4OERERVQ0WMIiIiEhQMTExeP/993H06FFIpdIS2//j6emJO3fulGlZCxcuBAD4+/vD1NRUb9jOnTsL3FZy+/Zt9n9BREQkEixgEBERkaC++OILpKSk6PU90atXLzx69KjQ9vnz5wMAbGxsYGNjg4SEhPx+MEaMGIGrV6+iVq1auHDhAlauXAkAmDBhAr7++muMHDkScrkc9erVw5o1a/Lne+HCBTRo0AAODg562Q4dOoQpU6ZU2boTERFR6bGAQURERIL69ttv8e233xY5rDgffvghvvvuu/zHq/7xxx+FjvfLL78AQP7TRp7VoUMHHDhwQK8tMTERjx8/hpeXV7EZiIiIyDBYwCAiIiKj1aVLlwKde1YWOzs7bNmypUrmTURERGXHp5AQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkejxKSRUpNkXgOgMoVPkcbEAVnYQOgUREREZM/9XlyD1nkroGLByV6L3z3OEjkFEZHRYwKAiRWcAd1KFTkFERERUOVLvqZAcHiV0DCIiKifeQkJEREREREREoscCBhERERERERGJHm8hISIiIiIiIhIBjUaLWw9SkJSSDQkkcLQ3g4eL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q3KfNPVi93oY0rN+pc5TrKrNBZxTp06FTqdDx44dhY5CREREREREpMdEIcPmz7vBRFH8x/D/nlDi2mdbgSeNPMve1hTfzesEiaQGPNYL1aiAQURERERERCRmPs0dsGNZT8hlRRcc/ntCSfSjDGg0Rd+eb22pwKF1/VDXsVZVRBUlFjCIiIiIiIiIDGRoL3fsW90Hdjam5Z6He11LHP/hBbRrWacSk4kfCxhEREREREREBjSgqxtC/xyBYb3L3nfF1DHNELx7OHyaO1RBMnGrNp14EhERERERERkLJ3tz7F75PK7eiMf6nTex4+87SEnLLXTcOrXN8OrgxpgyuikaulkbOKl4sIBBREREREREJJA2zRzw/YIu+G5eZ9y6/xhHzz/EtC/PAQC+n98ZfTu5oJ6zZY3pqLM4vIWEiIiIiIiISGBSqQRNPGz1Hok6oIsb6te1YvHiXyxgEBEREREREZHosYBBRERERERERKLHPjCoSC4WQid4QkxZiIiIysLKXSl0BKNTVe+ZWH4XYslBRGRsWMCgIq3sIHQCIiIi49f75zlCR6B/8XdBRGTceAsJEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6MmFDkBkKLMvANEZQqcAXCyAlR2ETkFU8/i/ugSp91Tlnl6r1uT//PeoTyGVy8o9Lyt3JXr/PKfc0xMR1UQV3Y9XN4Y6lojl+MljJwEsYFANEp0B3EkVOgURCSX1ngrJ4VGVMq+UOzGVMh8iIiq9ytyPU+nx+EliwltIiIiIiIiIiEj0WMAgIiIiIiIiItFjAYOIiIiIiIiIRI8FDCIiIiIiIiISPXbiSURE9Iwuq95GozE9AQBajQaZj5IRczYEVxZvRYYqUeB0RERE4sTjJ1U1XoFBRERUCNX5UOxoNQm7nnsLp95eBfuW7ujx/btCxyIiIhI1Hj+pKrGAQUREVAhtjhqZccnIUCXi0fkbCNtyFI7tmkBhaS50NCIiItHi8ZOqEgsYREREJTB3qg33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", "text/plain": [ "
" ] }, - "execution_count": 2, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -275,7 +383,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.8" + "version": "3.9.6" } }, "nbformat": 4, From d2396e21b6eafa3e1a8cf9ff33a83d7e89db1c36 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Fri, 10 May 2024 02:36:10 -0400 Subject: [PATCH 02/21] edit tests --- .../tutorials/04_automatic_cut_finding.ipynb | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb index f27a47d70..ed64894ec 100644 --- a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb +++ b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb @@ -48,26 +48,6 @@ "qc.draw(\"mpl\", scale=0.8)" ] }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "OptimizationSettings().gate_cut_LO" - ] - }, { "cell_type": "code", "execution_count": 10, From d064584d3c0ebbba41a17956f99a1f4da51ca32c Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Fri, 10 May 2024 09:16:02 -0400 Subject: [PATCH 03/21] explore adding new flags --- .../cut_finding/optimization_settings.py | 4 +- .../tutorials/04_automatic_cut_finding.ipynb | 41 +++++++++++++++---- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/circuit_knitting/cutting/cut_finding/optimization_settings.py b/circuit_knitting/cutting/cut_finding/optimization_settings.py index 31fd4fc2b..804d05efb 100644 --- a/circuit_knitting/cutting/cut_finding/optimization_settings.py +++ b/circuit_knitting/cutting/cut_finding/optimization_settings.py @@ -42,10 +42,10 @@ class OptimizationSettings: flags have been incorporated with an eye towards future releases. """ - max_gamma: float = 1024 + max_gamma: float = 1025 max_backjumps: None | int = 10000 seed: int | None = None - gate_lo: bool = False + gate_lo: bool = True wire_lo: bool = True gate_LOCC_ancillas: bool = False wire_LOCC_ancillas: bool = False diff --git a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb index ed64894ec..a12e44eaf 100644 --- a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb +++ b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb @@ -50,23 +50,50 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "metadata": {}, "outputs": [ { - "ename": "TypeError", - "evalue": "__init__() got an unexpected keyword argument 'gate_lo'", + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "---------- 4 Qubits per subcircuit ----------\n", + " Gamma = 1.0 , Min_gamma_reached = True\n", + "[]\n", + "Subcircuits: AAAA \n", + "\n", + "\n", + "\n", + "---------- 3 Qubits per subcircuit ----------\n", + " Gamma = 16.0 , Min_gamma_reached = True\n", + "[OneWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3], input=1)), OneWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2], input=1))]\n", + "Subcircuits: AABABB \n", + "\n", + "\n", + "\n", + "---------- 2 Qubits per subcircuit ----------\n" + ] + }, + { + "ename": "ValueError", + "evalue": "not enough values to unpack (expected 3, got 2)", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[10], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m settings \u001b[38;5;241m=\u001b[39m \u001b[43mOptimizationSettings\u001b[49m\u001b[43m(\u001b[49m\u001b[43mseed\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m111\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgate_lo\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m circuit_size \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m4\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m qubits_per_subcircuit \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(circuit_size, \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m):\n", - "\u001b[0;31mTypeError\u001b[0m: __init__() got an unexpected keyword argument 'gate_lo'" + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[2], line 17\u001b[0m\n\u001b[1;32m 13\u001b[0m interface \u001b[38;5;241m=\u001b[39m SimpleGateList(circuit_ckt)\n\u001b[1;32m 15\u001b[0m op\u001b[38;5;241m=\u001b[39m LOCutsOptimizer(interface, settings, constraint_obj)\n\u001b[0;32m---> 17\u001b[0m out\u001b[38;5;241m=\u001b[39m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 20\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Gamma =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 21\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m (out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m out\u001b[38;5;241m.\u001b[39mupper_bound_gamma(),\n\u001b[1;32m 22\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m, Min_gamma_reached =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 23\u001b[0m op\u001b[38;5;241m.\u001b[39mminimum_reached(),\n\u001b[1;32m 24\u001b[0m )\n\u001b[1;32m 25\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py:148\u001b[0m, in \u001b[0;36mLOCutsOptimizer.optimize\u001b[0;34m(self, circuit_interface, optimization_settings, device_constraints)\u001b[0m\n\u001b[1;32m 146\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m min_cost \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 147\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbest_result \u001b[38;5;241m=\u001b[39m min_cost[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m--> 148\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbest_result\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexport_cuts\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcircuit_interface\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 150\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbest_result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py:459\u001b[0m, in \u001b[0;36mDisjointSubcircuitsState.export_cuts\u001b[0;34m(self, circuit_interface)\u001b[0m\n\u001b[1;32m 457\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mactions \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 458\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m action \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mactions:\n\u001b[0;32m--> 459\u001b[0m \u001b[43maction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexport_cuts\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore\u001b[39;49;00m\n\u001b[1;32m 460\u001b[0m \u001b[43m \u001b[49m\u001b[43mcircuit_interface\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 461\u001b[0m \u001b[43m \u001b[49m\u001b[43mwire_map\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 462\u001b[0m \u001b[43m \u001b[49m\u001b[43maction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgate_spec\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 463\u001b[0m \u001b[43m \u001b[49m\u001b[43maction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 464\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 466\u001b[0m root_list \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_sub_circuit_indices()\n\u001b[1;32m 467\u001b[0m wires_to_roots \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_wire_root_mapping()\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cutting_actions.py:432\u001b[0m, in \u001b[0;36mActionCutBothWires.export_cuts\u001b[0;34m(self, circuit_interface, wire_map, gate_spec, cut_args)\u001b[0m\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mexport_cuts\u001b[39m(\n\u001b[1;32m 425\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 426\u001b[0m circuit_interface: SimpleGateList,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 429\u001b[0m cut_args,\n\u001b[1;32m 430\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 431\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Insert LO wire cuts into the input circuit for the specified gate and cut arguments.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 432\u001b[0m \u001b[43minsert_all_lo_wire_cuts\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcircuit_interface\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mwire_map\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgate_spec\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcut_args\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cutting_actions.py:287\u001b[0m, in \u001b[0;36minsert_all_lo_wire_cuts\u001b[0;34m(circuit_interface, wire_map, gate_spec, cut_args)\u001b[0m\n\u001b[1;32m 285\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Insert LO wire cuts into the input circuit for the specified gate and all cut arguments.\"\"\"\u001b[39;00m\n\u001b[1;32m 286\u001b[0m gate_ID \u001b[38;5;241m=\u001b[39m gate_spec\u001b[38;5;241m.\u001b[39minstruction_id\n\u001b[0;32m--> 287\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m input_ID, wire_ID, new_wire_ID \u001b[38;5;129;01min\u001b[39;00m cut_args:\n\u001b[1;32m 288\u001b[0m circuit_interface\u001b[38;5;241m.\u001b[39minsert_wire_cut(\n\u001b[1;32m 289\u001b[0m gate_ID, input_ID, wire_map[wire_ID], wire_map[new_wire_ID], \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLO\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 290\u001b[0m )\n", + "\u001b[0;31mValueError\u001b[0m: not enough values to unpack (expected 3, got 2)" ] } ], "source": [ - "settings = OptimizationSettings(seed=111, gate_lo=False)\n", + "settings = OptimizationSettings(seed=111, gate_lo=True)\n", "circuit_size = 4\n", "for qubits_per_subcircuit in range(circuit_size, 0, -1):\n", " for engine in [\"BestFirst\"]:\n", From 98c693a0d3a09a7d8e61478b845fcc928b1f5567 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Fri, 10 May 2024 13:48:00 -0400 Subject: [PATCH 04/21] Handle multiple arguments when cutting both wires --- .../cutting/cut_finding/cutting_actions.py | 2 +- .../cut_finding/disjoint_subcircuits_state.py | 4 +-- .../cut_finding/optimization_settings.py | 26 +++++++++---------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/circuit_knitting/cutting/cut_finding/cutting_actions.py b/circuit_knitting/cutting/cut_finding/cutting_actions.py index bfa9afe58..450f35ed3 100644 --- a/circuit_knitting/cutting/cut_finding/cutting_actions.py +++ b/circuit_knitting/cutting/cut_finding/cutting_actions.py @@ -417,7 +417,7 @@ def next_state_primitive( new_state.bell_pairs.append((r2, rnew_2)) new_state.gamma_UB *= 16 - new_state.add_action(self, gate_spec, ((1, w1, rnew_1), (2, w2, rnew_2))) + new_state.add_action(self, gate_spec, (1, w1, rnew_1), (2, w2, rnew_2)) return [new_state] diff --git a/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py b/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py index e1712647e..f2544fdb3 100644 --- a/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py +++ b/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py @@ -430,12 +430,12 @@ def add_action( self, action_obj: DisjointSearchAction, gate_spec: GateSpec, - args: tuple | None = None, + *args: tuple | None, ) -> None: """Append the specified action to the list of search-space actions that have been performed.""" if action_obj.get_name() is not None: self.actions = cast(list, self.actions) - self.actions.append(Action(action_obj, gate_spec, [args])) + self.actions.append(Action(action_obj, gate_spec, args)) def get_search_level(self) -> int: """Return the search level.""" diff --git a/circuit_knitting/cutting/cut_finding/optimization_settings.py b/circuit_knitting/cutting/cut_finding/optimization_settings.py index 804d05efb..5a5ccb69c 100644 --- a/circuit_knitting/cutting/cut_finding/optimization_settings.py +++ b/circuit_knitting/cutting/cut_finding/optimization_settings.py @@ -38,7 +38,7 @@ class OptimizationSettings: If None is used as the random seed, then a seed is obtained using an operating-system call to achieve an unrepeatable randomized initialization. - NOTE: The current release only supports LO gate and wire cuts. LOCC + NOTE: The current release only supports LO gate and wire cuts. locc flags have been incorporated with an eye towards future releases. """ @@ -47,9 +47,9 @@ class OptimizationSettings: seed: int | None = None gate_lo: bool = True wire_lo: bool = True - gate_LOCC_ancillas: bool = False - wire_LOCC_ancillas: bool = False - wire_LOCC_no_ancillas: bool = False + gate_locc_ancillas: bool = False + wire_locc_ancillas: bool = False + wire_locc_no_ancillas: bool = False engine_selections: dict[str, str] | None = None def __post_init__(self): @@ -60,11 +60,11 @@ def __post_init__(self): raise ValueError("max_backjumps must be a positive semi-definite integer.") self.gate_cut_LO = self.gate_lo - self.gate_cut_LOCC_with_ancillas = self.gate_LOCC_ancillas + self.gate_cut_locc_with_ancillas = self.gate_locc_ancillas self.wire_cut_LO = self.wire_lo - self.wire_cut_LOCC_with_ancillas = self.wire_LOCC_ancillas - self.wire_cut_LOCC_no_ancillas = self.wire_LOCC_no_ancillas + self.wire_cut_locc_with_ancillas = self.wire_locc_ancillas + self.wire_cut_locc_no_ancillas = self.wire_locc_no_ancillas if self.engine_selections is None: self.engine_selections = {"CutOptimization": "BestFirst"} @@ -105,7 +105,7 @@ def set_gate_cut_types(self) -> None: only cut types supported in this release. """ self.gate_cut_LO = self.gate_lo - self.gate_cut_LOCC_with_ancillas = self.gate_LOCC_ancillas + self.gate_cut_locc_with_ancillas = self.gate_locc_ancillas def set_wire_cut_types(self) -> None: """Select which wire-cut types to include in the optimization. @@ -114,21 +114,21 @@ def set_wire_cut_types(self) -> None: only cut types supported in this release. """ self.wire_cut_LO = self.wire_lo - self.wire_cut_LOCC_with_ancillas = self.wire_LOCC_ancillas - self.wire_cut_LOCC_no_ancillas = self.wire_LOCC_no_ancillas + self.wire_cut_locc_with_ancillas = self.wire_locc_ancillas + self.wire_cut_locc_no_ancillas = self.wire_locc_no_ancillas def get_cut_search_groups(self) -> list[None | str]: """Return a list of action groups to include in the optimization.""" out: list out = [None] - if self.gate_cut_LO or self.gate_cut_LOCC_with_ancillas: + if self.gate_cut_LO or self.gate_cut_locc_with_ancillas: out.append("GateCut") if ( self.wire_cut_LO - or self.wire_cut_LOCC_with_ancillas - or self.wire_cut_LOCC_no_ancillas + or self.wire_cut_locc_with_ancillas + or self.wire_cut_locc_no_ancillas ): out.append("WireCut") From 21c35cfd1650f6b90898fae72ec02a1e89e07a94 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Fri, 10 May 2024 13:59:10 -0400 Subject: [PATCH 05/21] black, mypy, remove the erroneous example I added to the tutorial. --- .../cut_finding/disjoint_subcircuits_state.py | 2 +- .../tutorials/04_automatic_cut_finding.ipynb | 115 ------------------ 2 files changed, 1 insertion(+), 116 deletions(-) diff --git a/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py b/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py index f2544fdb3..7a22ff33e 100644 --- a/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py +++ b/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py @@ -37,7 +37,7 @@ class Action(NamedTuple): action: DisjointSearchAction gate_spec: GateSpec - args: list + args: list | tuple class GateCutLocation(NamedTuple): diff --git a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb index a12e44eaf..cb5943415 100644 --- a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb +++ b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb @@ -14,121 +14,6 @@ "#### Create a circuit and observables" ] }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from qiskit.circuit.library import EfficientSU2\n", - "from circuit_knitting.cutting.cut_finding.cco_utils import qc_to_cco_circuit\n", - "from circuit_knitting.cutting.cut_finding.optimization_settings import OptimizationSettings\n", - "from circuit_knitting.cutting.automated_cut_finding import DeviceConstraints\n", - "from circuit_knitting.cutting.cut_finding.lo_cuts_optimizer import LOCutsOptimizer\n", - "from circuit_knitting.cutting.cut_finding.circuit_interface import SimpleGateList\n", - "\n", - "qc = EfficientSU2(4, entanglement=\"linear\", reps=2).decompose()\n", - "qc.assign_parameters([0.4] * len(qc.parameters), inplace=True)\n", - "\n", - "circuit_ckt = qc_to_cco_circuit(qc)\n", - "\n", - "\n", - "qc.draw(\"mpl\", scale=0.8)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "---------- 4 Qubits per subcircuit ----------\n", - " Gamma = 1.0 , Min_gamma_reached = True\n", - "[]\n", - "Subcircuits: AAAA \n", - "\n", - "\n", - "\n", - "---------- 3 Qubits per subcircuit ----------\n", - " Gamma = 16.0 , Min_gamma_reached = True\n", - "[OneWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3], input=1)), OneWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2], input=1))]\n", - "Subcircuits: AABABB \n", - "\n", - "\n", - "\n", - "---------- 2 Qubits per subcircuit ----------\n" - ] - }, - { - "ename": "ValueError", - "evalue": "not enough values to unpack (expected 3, got 2)", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[2], line 17\u001b[0m\n\u001b[1;32m 13\u001b[0m interface \u001b[38;5;241m=\u001b[39m SimpleGateList(circuit_ckt)\n\u001b[1;32m 15\u001b[0m op\u001b[38;5;241m=\u001b[39m LOCutsOptimizer(interface, settings, constraint_obj)\n\u001b[0;32m---> 17\u001b[0m out\u001b[38;5;241m=\u001b[39m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 20\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Gamma =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 21\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m (out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m out\u001b[38;5;241m.\u001b[39mupper_bound_gamma(),\n\u001b[1;32m 22\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m, Min_gamma_reached =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 23\u001b[0m op\u001b[38;5;241m.\u001b[39mminimum_reached(),\n\u001b[1;32m 24\u001b[0m )\n\u001b[1;32m 25\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py:148\u001b[0m, in \u001b[0;36mLOCutsOptimizer.optimize\u001b[0;34m(self, circuit_interface, optimization_settings, device_constraints)\u001b[0m\n\u001b[1;32m 146\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m min_cost \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 147\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbest_result \u001b[38;5;241m=\u001b[39m min_cost[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m--> 148\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbest_result\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexport_cuts\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcircuit_interface\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 150\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbest_result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py:459\u001b[0m, in \u001b[0;36mDisjointSubcircuitsState.export_cuts\u001b[0;34m(self, circuit_interface)\u001b[0m\n\u001b[1;32m 457\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mactions \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 458\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m action \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mactions:\n\u001b[0;32m--> 459\u001b[0m \u001b[43maction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexport_cuts\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore\u001b[39;49;00m\n\u001b[1;32m 460\u001b[0m \u001b[43m \u001b[49m\u001b[43mcircuit_interface\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 461\u001b[0m \u001b[43m \u001b[49m\u001b[43mwire_map\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 462\u001b[0m \u001b[43m \u001b[49m\u001b[43maction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgate_spec\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 463\u001b[0m \u001b[43m \u001b[49m\u001b[43maction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 464\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 466\u001b[0m root_list \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_sub_circuit_indices()\n\u001b[1;32m 467\u001b[0m wires_to_roots \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_wire_root_mapping()\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cutting_actions.py:432\u001b[0m, in \u001b[0;36mActionCutBothWires.export_cuts\u001b[0;34m(self, circuit_interface, wire_map, gate_spec, cut_args)\u001b[0m\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mexport_cuts\u001b[39m(\n\u001b[1;32m 425\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 426\u001b[0m circuit_interface: SimpleGateList,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 429\u001b[0m cut_args,\n\u001b[1;32m 430\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 431\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Insert LO wire cuts into the input circuit for the specified gate and cut arguments.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 432\u001b[0m \u001b[43minsert_all_lo_wire_cuts\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcircuit_interface\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mwire_map\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgate_spec\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcut_args\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cutting_actions.py:287\u001b[0m, in \u001b[0;36minsert_all_lo_wire_cuts\u001b[0;34m(circuit_interface, wire_map, gate_spec, cut_args)\u001b[0m\n\u001b[1;32m 285\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Insert LO wire cuts into the input circuit for the specified gate and all cut arguments.\"\"\"\u001b[39;00m\n\u001b[1;32m 286\u001b[0m gate_ID \u001b[38;5;241m=\u001b[39m gate_spec\u001b[38;5;241m.\u001b[39minstruction_id\n\u001b[0;32m--> 287\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m input_ID, wire_ID, new_wire_ID \u001b[38;5;129;01min\u001b[39;00m cut_args:\n\u001b[1;32m 288\u001b[0m circuit_interface\u001b[38;5;241m.\u001b[39minsert_wire_cut(\n\u001b[1;32m 289\u001b[0m gate_ID, input_ID, wire_map[wire_ID], wire_map[new_wire_ID], \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLO\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 290\u001b[0m )\n", - "\u001b[0;31mValueError\u001b[0m: not enough values to unpack (expected 3, got 2)" - ] - } - ], - "source": [ - "settings = OptimizationSettings(seed=111, gate_lo=True)\n", - "circuit_size = 4\n", - "for qubits_per_subcircuit in range(circuit_size, 0, -1):\n", - " for engine in [\"BestFirst\"]:\n", - " settings.set_engine_selection(\"CutOptimization\", engine)\n", - " print(\n", - " f\"\\n\\n---------- {qubits_per_subcircuit} Qubits per subcircuit ----------\"\n", - " )\n", - "\n", - " constraint_obj = DeviceConstraints(\n", - " qubits_per_subcircuit=qubits_per_subcircuit)\n", - "\n", - " interface = SimpleGateList(circuit_ckt)\n", - "\n", - " op= LOCutsOptimizer(interface, settings, constraint_obj)\n", - "\n", - " out= op.optimize()\n", - "\n", - " print(\n", - " \" Gamma =\",\n", - " None if (out is None) else out.upper_bound_gamma(),\n", - " \", Min_gamma_reached =\",\n", - " op.minimum_reached(),\n", - " )\n", - " if out is not None:\n", - " out.print(simple=True)\n", - " else:\n", - " print(out)\n", - "\n", - " print(\n", - " \"Subcircuits:\",\n", - " interface.export_subcircuits_as_string(name_mapping=\"default\"),\n", - " \"\\n\",\n", - ")" - ] - }, { "cell_type": "code", "execution_count": 4, From b581a18fc0de203282b679f1c747ba936d751e12 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Fri, 10 May 2024 14:04:28 -0400 Subject: [PATCH 06/21] doc string --- circuit_knitting/cutting/cut_finding/best_first_search.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuit_knitting/cutting/cut_finding/best_first_search.py b/circuit_knitting/cutting/cut_finding/best_first_search.py index 89d67f8fc..1ee8de14a 100644 --- a/circuit_knitting/cutting/cut_finding/best_first_search.py +++ b/circuit_knitting/cutting/cut_finding/best_first_search.py @@ -149,8 +149,8 @@ class BestFirstSearch: ``stop_at_first_min`` (Boolean) is a flag that indicates whether or not to stop the search after the first minimum-cost goal state has been reached. - We set it to True because in the framework of LO cutting where no QPD assignments - are taking place, there is no need to explore multiple minima. + In the absence of any non-LO QPD assignments, it always makes sense to stop once + the first minimum has been reached and therefore, we set this bool to True. ``max_backjumps`` (int or None) is the maximum number of backjump operations that can be performed before the search is forced to terminate. None indicates From 381bbf7c121c6ea828eae4d8435ba8843aedfc55 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Mon, 13 May 2024 08:13:33 -0400 Subject: [PATCH 07/21] update doc string --- circuit_knitting/cutting/cut_finding/best_first_search.py | 2 +- circuit_knitting/cutting/cut_finding/optimization_settings.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/circuit_knitting/cutting/cut_finding/best_first_search.py b/circuit_knitting/cutting/cut_finding/best_first_search.py index 1ee8de14a..f5d4c28a0 100644 --- a/circuit_knitting/cutting/cut_finding/best_first_search.py +++ b/circuit_knitting/cutting/cut_finding/best_first_search.py @@ -150,7 +150,7 @@ class BestFirstSearch: ``stop_at_first_min`` (Boolean) is a flag that indicates whether or not to stop the search after the first minimum-cost goal state has been reached. In the absence of any non-LO QPD assignments, it always makes sense to stop once - the first minimum has been reached and therefore, we set this bool to True. + the first minimum has been reached and therefore, we set this bool to ``True``. ``max_backjumps`` (int or None) is the maximum number of backjump operations that can be performed before the search is forced to terminate. None indicates diff --git a/circuit_knitting/cutting/cut_finding/optimization_settings.py b/circuit_knitting/cutting/cut_finding/optimization_settings.py index 5a5ccb69c..d5614a04a 100644 --- a/circuit_knitting/cutting/cut_finding/optimization_settings.py +++ b/circuit_knitting/cutting/cut_finding/optimization_settings.py @@ -42,7 +42,7 @@ class OptimizationSettings: flags have been incorporated with an eye towards future releases. """ - max_gamma: float = 1025 + max_gamma: float = 1024 max_backjumps: None | int = 10000 seed: int | None = None gate_lo: bool = True From 422ee7d15243ec03851bf149edce691b0fb9d10c Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Tue, 14 May 2024 09:19:09 -0400 Subject: [PATCH 08/21] update tests --- .../cutting/cut_finding/cut_optimization.py | 9 +- .../cut_finding/disjoint_subcircuits_state.py | 24 +- .../cut_finding/optimization_settings.py | 12 +- .../tutorials/trial_circuit_notebook.ipynb | 265 ++++++++++++++++++ .../cut_finding/test_best_first_search.py | 6 +- .../cut_finding/test_cut_finder_results.py | 32 +-- .../cut_finding/test_cutting_actions.py | 4 +- .../cut_finding/test_optimization_settings.py | 26 +- 8 files changed, 326 insertions(+), 52 deletions(-) create mode 100644 docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb diff --git a/circuit_knitting/cutting/cut_finding/cut_optimization.py b/circuit_knitting/cutting/cut_finding/cut_optimization.py index 28885a243..8a2eb660f 100644 --- a/circuit_knitting/cutting/cut_finding/cut_optimization.py +++ b/circuit_knitting/cutting/cut_finding/cut_optimization.py @@ -60,11 +60,16 @@ def cut_optimization_cost_func( def cut_optimization_upper_bound_cost_func( - goal_state, func_args: CutOptimizationFuncArgs + goal_state: DisjointSubcircuitsState, func_args: CutOptimizationFuncArgs ) -> tuple[float, float]: """Return the value of :math:`gamma` computed assuming all LO cuts.""" # pylint: disable=unused-argument - return (goal_state.upper_bound_gamma(), np.inf) + if goal_state is not None: + return (goal_state.upper_bound_gamma(), np.inf) + else: + raise Exception( + "None state encountered. This means that no cut state satisfying the specified constraints and settings was found." + ) def cut_optimization_min_cost_bound_func( diff --git a/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py b/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py index 7a22ff33e..88e3310bd 100644 --- a/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py +++ b/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py @@ -40,8 +40,12 @@ class Action(NamedTuple): args: list | tuple -class GateCutLocation(NamedTuple): - """Named tuple for specification of gate cut location.""" +class CutLocation(NamedTuple): + """Named tuple for specifying cut locations. + + This is used to specify instances of both :class:`CutTwoQubitGate` and :class:`CutBothWires`. + Both of these instances are fully specified by a gate reference. + """ instruction_id: int gate_name: str @@ -49,7 +53,7 @@ class GateCutLocation(NamedTuple): class WireCutLocation(NamedTuple): - """Named tuple for specification of wire cut location. + """Named tuple for specification of (single) wire cut locations. Wire cuts are identified through the gates whose input wires are cut. """ @@ -64,10 +68,10 @@ class CutIdentifier(NamedTuple): """Named tuple for specification of location of :class:`CutTwoQubitGate` or :class:`CutBothWires` instances.""" cut_action: DisjointSearchAction - gate_cut_location: GateCutLocation + cut_location: CutLocation -class OneWireCutIdentifier(NamedTuple): +class SingleWireCutIdentifier(NamedTuple): """Named tuple for specification of location of :class:`CutLeftWire` or :class:`CutRightWire` instances.""" cut_action: DisjointSearchAction @@ -130,15 +134,13 @@ def __init__(self, num_qubits: int | None = None, max_wire_cuts: int | None = No if not ( num_qubits is None or (isinstance(num_qubits, int) and num_qubits >= 0) ): - raise ValueError("num_qubits must be either be None or a positive integer.") + raise ValueError("num_qubits must either be None or a positive integer.") if not ( max_wire_cuts is None or (isinstance(max_wire_cuts, int) and max_wire_cuts >= 0) ): - raise ValueError( - "max_wire_cuts must be either be None or a positive integer." - ) + raise ValueError("max_wire_cuts must either be None or a positive integer.") if num_qubits is None or max_wire_cuts is None: self.wiremap: NDArray[np.int_] | None = None @@ -213,7 +215,7 @@ def cut_actions_sublist(self) -> list[NamedTuple]: for i in range(len(cut_actions)): if cut_actions[i].action.get_name() in ("CutLeftWire", "CutRightWire"): self.cut_actions_list.append( - OneWireCutIdentifier( + SingleWireCutIdentifier( cut_actions[i].action.get_name(), WireCutLocation( cut_actions[i].gate_spec.instruction_id, @@ -231,7 +233,7 @@ def cut_actions_sublist(self) -> list[NamedTuple]: self.cut_actions_list.append( CutIdentifier( cut_actions[i].action.get_name(), - GateCutLocation( + CutLocation( cut_actions[i].gate_spec.instruction_id, cut_actions[i].gate_spec.gate.name, cut_actions[i].gate_spec.gate.qubits, diff --git a/circuit_knitting/cutting/cut_finding/optimization_settings.py b/circuit_knitting/cutting/cut_finding/optimization_settings.py index d5614a04a..54275373a 100644 --- a/circuit_knitting/cutting/cut_finding/optimization_settings.py +++ b/circuit_knitting/cutting/cut_finding/optimization_settings.py @@ -59,10 +59,10 @@ def __post_init__(self): if self.max_backjumps is not None and self.max_backjumps < 0: raise ValueError("max_backjumps must be a positive semi-definite integer.") - self.gate_cut_LO = self.gate_lo + self.gate_cut_lo = self.gate_lo self.gate_cut_locc_with_ancillas = self.gate_locc_ancillas - self.wire_cut_LO = self.wire_lo + self.wire_cut_lo = self.wire_lo self.wire_cut_locc_with_ancillas = self.wire_locc_ancillas self.wire_cut_locc_no_ancillas = self.wire_locc_no_ancillas if self.engine_selections is None: @@ -104,7 +104,7 @@ def set_gate_cut_types(self) -> None: The default is to only include LO gate cuts, which are the only cut types supported in this release. """ - self.gate_cut_LO = self.gate_lo + self.gate_cut_lo = self.gate_lo self.gate_cut_locc_with_ancillas = self.gate_locc_ancillas def set_wire_cut_types(self) -> None: @@ -113,7 +113,7 @@ def set_wire_cut_types(self) -> None: The default is to only include LO wire cuts, which are the only cut types supported in this release. """ - self.wire_cut_LO = self.wire_lo + self.wire_cut_lo = self.wire_lo self.wire_cut_locc_with_ancillas = self.wire_locc_ancillas self.wire_cut_locc_no_ancillas = self.wire_locc_no_ancillas @@ -122,11 +122,11 @@ def get_cut_search_groups(self) -> list[None | str]: out: list out = [None] - if self.gate_cut_LO or self.gate_cut_locc_with_ancillas: + if self.gate_cut_lo or self.gate_cut_locc_with_ancillas: out.append("GateCut") if ( - self.wire_cut_LO + self.wire_cut_lo or self.wire_cut_locc_with_ancillas or self.wire_cut_locc_no_ancillas ): diff --git a/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb b/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb new file mode 100644 index 000000000..ef1ef76b9 --- /dev/null +++ b/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb @@ -0,0 +1,265 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from circuit_knitting.cutting.cut_finding.circuit_interface import SimpleGateList\n", + "from circuit_knitting.cutting.cut_finding.lo_cuts_optimizer import LOCutsOptimizer\n", + "from circuit_knitting.cutting.cut_finding.optimization_settings import (\n", + " OptimizationSettings,\n", + ")\n", + "from circuit_knitting.cutting.automated_cut_finding import DeviceConstraints" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAD2CAYAAABobBdEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABDdElEQVR4nO3deXhM9/4H8PfMZEKSSYQgE0kIItYoUT9CY6e2oguqLdrb3VJbtXRRLdXqguqiiobSWtp7LXVRRGm1pFSoWBK7JDKRXfZl5vz+yJWIbDM5c+acGe/X83gec+bMdz7hvL/5zJxNJQiCACIiIiKiWlLLXQARERER2Tc2lEREREQkChtKIiIiIhKFDSURERERicKGkoiIiIhEYUNJRERERKKwoSQiIiIiUdhQEhEREZEobCiJiIiISBQ2lEREREQkChtKIiIiIhKFDSURERERicKGkoiIiIhEYUNJRERERKKwoSQiIiIiUdhQEhEREZEobCiJiIiISBQ2lEREREQkChtKIiIiIhKFDSURERERicKGkoiIiIhEYUNJRERERKKwoSQiIiIiUdhQEhEREZEobCiJiIiISBQ2lEREREQkChtKIiIiIhKFDSURERERicKGkoiIiIhEYUNJRERERKKwoSQiIiIiUdhQEhEREZEoTnIX4GgiJn6IrKsGucuAe4Ae/dfNETXGjEggIddKBYnk6wos7SZ3FcqhlO0McKxtjduZY2NupMHcEMCG0uqyrhqQERsvdxlWkZALXM6SuwqqjCNtZwC3NbIN5oZIOtzlTURERESisKEkIiIiIlHYUBIRERGRKGwoiYiIiEgUnpQjkweWTUbg2L4AAJPRiLykDCT+EY0Ti75HriFN5uosd/Wzp5F6YF3JA7Ua2vo+cA/uB98JH8DZy1fe4u5xjrStcTsjW2FuiCzDbyhlZDh6Fps7Poef7n8Zv01eBq8OAejzzSy5y6o1XbswdFybiODV19F81g/IvRKFy4tHy10WwbG2NW5nZCvMDZH52FDKyFRYjLzkDOQa0pB09BxiNuxH466todW5yF1araicnKGtr4ezly/c2/dCo0EvICfmCIy5t+Qu7Z7nSNsatzOyFeaGyHxsKBXCxbs+AoZ3h6nYCMFokrsc0QpTbyD9z58AtabkDymGI21r3M7IVpgbourxGEoZ6Xu0x5MX10OlVsPJpQ4AIHrFDhTnFQAA+qyahRuHTiF2w34AQIMOzdHrq2n4eeBsGAuKZKu7KlnRBxE1VgfBZIJQmAcA8B41C5q6bgCA9CNbkbj53XKvyY87C//nPkOjIS/bvN57iSNta9zOyFaYG+aGzGfXDeWpU6cwb948HDx4EIIgoF+/flixYgWCgoIwbNgwbNq0Se4Sq5V84gIOT/sCmjpaBIzogSZhHRG1eGPp83+9HY4h2xfg2q5IFKRnI/TD5xH5xhrFTVS3uQV1Q8D0dRAK85F+eAtundqPJk8uLH2+fujDqB/6cOnjjKPbkLD+DXj1myhHuRYRBAFnLqbjZlo+dK5ahLT1gpOT/XzB70jbmiNvZ45GEAScvZSBpNQ86Fy16NzGC1otcyMH5oakZrcNZUREBIYPH45mzZrhrbfegouLC9auXYshQ4YgOzsbnTp1krvEGhnzC0vvK3vy481wD9Cj2/vP4s9XvwYA5BrScGblTtz/9nikRF1E5uVEJB4+LWfJ1VI7u6CuTyAAwKVZBxQYLiHum6loNmVVhXULU+JxfeVkBL6zG+o6rrYu1WyCIOC7HRexZH00/oktO7OzSSNXvDy2DWY/3RF1nJW/y8iRtjVH3M4cjSAI+P6/l/DputM4GVOWG5+GLnhpTFu89kww6tZR/q8f5oa5IfPZz0fFOyQnJ2Ps2LEICQlBVFQUZs+ejSlTpiAiIgLXr18HALtoKO928pPNCBzbF173tSxddj58Dzxb+yN4yigce3edjNVZzmfcfKREhCPnwvFyywWTCVeWPgX9o3PgGtBRpupqJggCZn4ciaff/g2nL5S/TEhiSi7e/uIEBr+0B3n5xTJVWHuOtK3Z+3bmaARBwGtLjmH8G4dwKrZ8bgypeXjnqxMY9OIe5OYxN3Jibsja7LKhXLx4MdLT0xEeHg4Xl7Kz7erVq4eQkBAA9tlQZl0xIG7fcYTMGVe2UBAQ890+xEecQEGqfZ2NV7dJK3h2fQg3NrxZbnniloXQuHig8fCpMlVmnh92XcKyDWcAAIJQ/rnbjw8eN+C1pcdsXJl4jrSt2ft25mi2/HIFn6wr+Zauqtz8fiIJMz+JtHFl4jE3RFWzy4Zy06ZNCAsLQ1BQUKXPe3t7Q6/XAwCKi4sxbdo0NGjQAJ6ennj22WeRn59vy3ItEv3VDvj26QR9aPuyhSYTBJNQ9YsUzPvh2bh1ci+yTh8EAGSf+wOp+9cg4JVwWeuqiSAIWPJdNFSqmtdd858YZGYVSl+UlTnStmav25kjWrrevNys3R6LtMwC6QuyMuaGqHLKP4jlLgaDAQkJCRg7dmyF50wmE06fPo3OnTuXLlu0aBF+/fVXnD59Gs7OzhgxYgRee+01LF++3Kz3Ky4uhsFgMLu+oiLzduMcnv5lpcuTj8dgrc9jZr9fdXXEx8eLHMMbgNasdQOmra10ua5tD3TZXjLRFmdn4MrS8Qh4ZS2cPLwsrKUI8fFJFr1GjMvxOThxLtWsdfMKjAj/TxQe62+7O06Yu50BjrWtOdp25miuJuYi8nSyWesWFJrw7U9RePxBP4mrKsPclMfcUGX0ej2cnCxvD+2uoczJyQEAqCr5CLx9+3bcvHmz3O7u1atX46OPPoKvb8kv+/nz52P06NFYunQpNJqaT6YwGAzw9/c3u76FXgPhq/Uwe32pxMbGYowFdVem3efRcGnavuYVzZS8ZwWK0hMR9+2Mcsu9+k6E98gZVbyqRGxsLPwf7GC1WmrkGgi0nGP26jNenYcZKXslLKg8pWxngPK2NbvazhyNSwsg8A2zV5899z3Mfm63hAWVx9xUjbmh2+Li4uDnZ/kHPbtrKP39/aHRaHDo0KFyy69du4apU0uO+bjdUGZkZCAuLq5cgxkSEoKsrCxcvXoVLVu2hD24uOUgLm45KHcZovk8Nhc+j82VuwzzmCw8LMKo3MMoLOEI25pdbWeOxpRn2frMjWIwNySW3TWUzs7OmDBhAsLDwzFy5EgMGzYMcXFxWLVqFby9vZGQkFDaQGZlZQEAPD09S19/+++3n6uJXq9HXFyc2fUdGfMhcq6Yv4tcKkFBQYjb8q2oMaae9UacQub7oKAg/GLB/4NYJpOAB579HfE38yqcWHA3tRqI/HUN9F51bVMclLOdAY61rdl6O3M0JpOAPi8cxtXE3JpzowL+3LcSvo1tdxtD5kYazI1juX0OiqXsrqEEgOXLl0Or1WL79u04cOAAQkNDsXXrVrz33nu4ePFi6ck67u7uAIDMzMzSf6CMjIxyz9XEycnJoq9+tVpl/JNqtZbVXekYFwAoYLICAK1WK/rnsdT08cGY9clfNa736IDmuP++QBtUVEYp2xngWNuaHNuZo5k+viOmLT5a43oj+jZDt5BWNqioDHMjDeaGADs9y1un02HlypUwGAzIysrC3r17ERoaiujoaAQHB0OtLvmxPD094e/vj5MnT5a+NioqCu7u7ggICJCneLIbU8e1x9Cw6ifJln7u+GJuqI0qIlK+SWPbYkSfptWu09xXhxVv9bBRRURkC3bZUFYmIyMD8fHxFa4/+dxzz+GDDz7AjRs3kJycjPnz5+Ppp58264QcurdptWpsXTYArz0TDA+38mdSajQqPD64Bf5c/xAae9lulx2R0jk5qfHTp/0x59mOFXOjVmHMg81xZMMI6BvyDixEjsRhGsrTp0supHt3Q/nGG2+gV69eaN++PQIDA9G2bVssXrxYhgrJHjlrNVg84/9wI2Icvnqz7BuVv74fgY0f9WUzSVQJrVaND6Z1rZCbo9+PwOaP+8GbuSFyOA7fUDo5OWH58uVIT09HZmYm1qxZU+7uOnJr9UR/DN3xPoZsXwDPNpXvJhr873cRuvgFG1dWOyl7V+P8az1wfs4DyLta+T1tY97sg2tfvWTjysRxc9Xiod5l/z+NGyhnGzKXI21rjrqdOZq7c6O3w0aSuSEyj8M0lJMmTYIgCOjevbvcpZjN2VOH1hMHYfcj8/DHzBXotuCZCuv4DeiComwLL8Uhk+KsNCTvWYHWiw4hYMoaxK2eVmGdjGM7oXEx74Qosh5H2ta4nZGtMDdE5nOYhtIeNeocCMOfZyAUG3Hr0g3UaeCBcvcsU6nQ5pnBOL92j3xFWiDnwl/QdegDlZMWdf1ao/hWCgSTqfR5wWRC8q4v0WjoZBmrvDc50rbG7YxshbkhMh8bShk5e+pQmJlT+rgoOw/OHmUHqgeO6YNruyJhzC+SozyLGbPS4KSrX/pY7eIOY25m6ePUA+vgGfoI1FrbXa+RSjjStsbtjGyFuSEyHxtKGRVm5sDZw630sVbngsJbuQAATR0tWjwShoubDshVnsU0uvow5mSUPjblZUHjWq/k74X5SDv0PRr2r7jLiKTnSNsatzOyFeaGyHzKucrrPSj5xAV0enUMVBo1dP6NUZB2C7dvL6Fr2hjO9dwwYP1cOHvq4NLYEy1H98alHw/VMKp83IK64cbGdyAYi1Fw8yqcPBpC9b9rghYkXYExJwMXFwxHcXYaitINSD3wHbz6TZC56nuDI21r3M7IVpgb5obMx4ZSRoUZ2bjwQwSGbF0AQTDh6NzV8O3bCc6eOlzZehg7B78OANCHtkfzUT0VO1Hd5uTeAA0HPoeYub0AtRpNX/wSmSf2wJiVhga9n0DbJccBAFmnDyLt902crGzIkbY1bmdkK8wNkflUglDTHVfJEtt6T0dGbLzcZcAzyA+jDi0TNcaYX4HL5t3yXHIt3IEtfeWtId6QA/9BmwAAcXsfh5/erYZXSEcp2xngWNuaErYzR8PcVI65IUfDYyiJiIiISBQ2lEREREQkCo+htDL3AL3cJQCwTh2+CrrVrpJqUQKlbGeAY21rSqmDpMHcSEMpdZC8eAwlkZmUdCwYkb1gbojuDdzlTURERESisKEkIiIiIlHYUBIRERGRKGwoiYiIiEgUNpREREREJAobSiIiIiIShQ0lEREREYnChpKIiIiIRGFDSURERESisKEkIiIiIlHYUBIRERGRKGwoiYiIiEgUNpREREREJAobSiIiIiIShQ0lEREREYniJHcBjiZi4ofIumqQuwy4B+jRf90cUWPMiAQScq1UkEi+rsDSbnJXQVJhbqTB3Dg25kYazE3tsKG0sqyrBmTExstdhlUk5AKXs+Sugu4FzA2R5ZgbUhLu8iYiIiIiUdhQEhEREZEobCiJiIiISBQeQ0lUjeS0PPx6LBHHz6Qg6lxq6fI3Pz+OPl190KuLHi39PWSskEh5UtLz/5ebZJw4W5abN5aX5SawKXND5EjYUBJV4u+zKVjyXTR+3HsFRcWmCs9/9/NFfPfzRQDAgO5NMHVcOzzUpylUKpWtSyVSjBNnU7B0QzS2/HIFhUUVc7N+50Ws31mSm37/54OpT7TDyL7NmBsiB8CGUiYPLJuMwLF9AQAmoxF5SRlI/CMaJxZ9j1xDmszVWe7qZ08j9cC6kgdqNbT1feAe3A++Ez6As5evvMVZIC+/GG9/8TeWrI+GIJj3mv1Hb2D/0RsY0acpvn67J3wauUpb5D2MuVGm/IJivPPVCXyyLhomk3nBOfBXIg78lYhhvfzxzbyeaNLYTeIq713MDdkCj6GUkeHoWWzu+Bx+uv9l/DZ5Gbw6BKDPN7PkLqvWdO3C0HFtIoJXX0fzWT8g90oULi8eLXdZZjOk5KL7Uz/j0+/MbybvtOPgdQQ/+h8ci062fnFUirlRlqTUPPQYvxMfhZ82u5m8039/i0Pwo1tx9NRNCaqj25gbkhobShmZCouRl5yBXEMako6eQ8yG/WjctTW0Ohe5S6sVlZMztPX1cPbyhXv7Xmg06AXkxByBMfeW3KXVKCU9H32f3YV/Yqv+tK7RqODr7Qpfb1doNJXvokvNKMCAF3bjxNkUqUq95zE3ypGWWYD+z+1C1PnUKtcxJzdpmQUY+OJufhiTEHNDUmNDqRAu3vURMLw7TMVGCMaKxx7Zm8LUG0j/8ydArSn5o2CCIGDiW4dw/kpmtevpG7ogft84xO8bB33DqifhW9lFeGRmBLJyCq1dKt2FuZGPIAj417zfcOZSRrXrmZub7NxiPDozAplZzI3UmBuSAo+hlJG+R3s8eXE9VGo1nFzqAACiV+xAcV4BAKDPqlm4cegUYjfsBwA06NAcvb6ahp8HzoaxoEi2uquSFX0QUWN1EEwmCIV5AADvUbOgqVtybFT6ka1I3Pxuudfkx52F/3OfodGQl21e723rdlzArt+te7eJazey8dqSY1jxdk+rjkvMDaCM3Pyw6xK2/3rdqmPGGXLw6qeRWDU/zKrjEnMDKCM3jsyuG8pTp05h3rx5OHjwIARBQL9+/bBixQoEBQVh2LBh2LRpk9wlViv5xAUcnvYFNHW0CBjRA03COiJq8cbS5/96OxxDti/AtV2RKEjPRuiHzyPyjTWKDDcAuAV1Q8D0dRAK85F+eAtundqPJk8uLH2+fujDqB/6cOnjjKPbkLD+DXj1myhHuQCAwiIj5iw7LsnYX/94HjPGd0BQQD1Jxq+t64nZ+Oan8zj6TzKMJgGtA+rhhUdbI6RdQ7lLMwtzI39uiotNeH3pMUnGXv2fWMwY3wHtWtaXZPzaijfk4Jt/n8eRUzdRbBTQqqkHXnisNe5v30ju0szC3MifG0dnt7u8IyIi0L17d8TExOCtt97CokWLEB8fjyFDhiA7OxudOnWSu8QaGfMLS+7FGhOHkx9vRlbcTXR7/9nS53MNaTizcifuf3s8Wo8fiMzLiUg8fFrGiqundnZBXZ9AuDTrgCZPvoc63s0R983UStctTInH9ZWT0Xz2JqjryHdW9NaIa0hKzZNs/K9/PCfZ2JYSBAFvfX4czQdvxvurTuHAXzdw6HgiVv54Hl0e345R0/YhO1eZvzzuxNzIn5sdB68j4WauZON//eN5yca2lCAImP/VCQQM3owFK08i4mhJblb9OwZdx+3AQ1P22sXhLcyN/LlxdHbZUCYnJ2Ps2LEICQlBVFQUZs+ejSlTpiAiIgLXr5fsgrGHhvJuJz/ZjMCxfeF1X8vSZefD98CztT+Cp4zCsXfXyVid5XzGzUdKRDhyLpT/BlAwmXBl6VPQPzoHrgEdZaquxHc/X5B4/IsQanPKuATe+eoE3l91CrdPxBUElDubffuv1/HozAgY7eyYKubG9qTOzfqfL9bqjHEpLFh5Eu9+HQXj/+oRUD43O3+Lw6hp+1FUyXU3lYy5IWuzy4Zy8eLFSE9PR3h4OFxcyg7yrlevHkJCQgDYZ0OZdcWAuH3HETJnXNlCQUDMd/sQH3ECBan2dfZa3Sat4Nn1IdzY8Ga55YlbFkLj4oHGwyv/NGkrgiAg8rS0Z5WmZhTgcnyWpO9hjoSkHCxadarG9fb+mYCdv8XZoCLrYW5sT+rcZGQV4sK16k+SswVDSi4WfBNV43oH/krE9l+v2aAi62FuyNrs8hjKTZs2ISwsDEFBQZU+7+3tDb1eDwDYsmULli9fjpMnT6Jhw4a4evWqRe9VXFwMg8Fg9vpFRcUWjX+36K92YNjP70Mf2h6GI2dKFppMECz8tF5UVIz4eHEnmhQVeQPQihrD++HZiJnTE1mnD8I9uA+yz/2B1P1r0HbJCQtrKUJ8fJKoWu6WcDMPqRkF5ZZpNKoqz0T1uWO5TxXrGFLyYDSW/7/adzgWdcL0IqsVZ8mGi6XfsNS47roodGll2zMlmZvylJybpLQCGFLKHyYiRW72Ho6Fm7aJyGrFWb7pEoqLzduGln53Et3bift/txRzU56Sc2NP9Ho9nJwsbw9VglL2x5nJYDDAx8cHM2fOxKefflruOZPJBB8fH3Tu3Bl79uwBAOzbtw+pqalISkrC0qVLLW4o4+Pj4e/vb/b6C70Gwldr3XvUBo7pA6/7WiLyzTVmvyah6BbeSt0n6n3bfR4Nl6btRY1xp+LsDJybGYKAKWvg3rGvRa/Nu34GZ6d2sFotAACXZkDg2+UW+Xq7In7fuCpeUDO/gRuRkHTXsWUJ3wNpv9Z6TKto9grgHgyYc4s7Yy5w9hXpa7oDc1M1xeWmrj/Q6p1yiyTJzY1NQOr+Wo9pFU0nAx6dzMxNPnB2iuQl3Ym5qZricmNH4uLi4OfnZ/Hr7O4bypycHACo9N6v27dvx82bN8vt7h44cCAAYNu2bbYoj6qRvGcFitITEfftjHLLvfpOhPfIGVW8Sko2un+wEu5TrLLk6BYF1EullJcbG7G33FiUMZLaPZsbGdndN5SFhYVwdXVF586dcexY2WUrrl27hp49eyIhIQEbN27E448/Xu5127Ztw/Tp0yXf5X1kzIfIuWL++lJxa65H6JY5osaYetYbcfm23YVTFf+6Rfi8nXV3QVxJyEGv5w+XW1bTrrtjG0cBALqO24bElIpnh1e26+6zV4PxSD95d93N/+Y81myr+RgvFYCOQR7YuSxU+qLuwNxIQ4rcXDfkoue/fi+3TIrcfDK9A8YOkve+zAvXxGDlv6/WuJ5KBbRr7o49X/SQvqg7MDfSkCI39qS2u7zt7htKZ2dnTJgwAeHh4Rg5ciSGDRuGuLg4rFq1Ct7e3khISLDqCTlOTk4WffWr1Srjn1SrtazuSse4ACDfOvWIpdVqRf88d2vSRIDONbLcpXKMRqHirrdKJKbkmbUeAPQLDYSfX4Na12kNs57WmdVQCgCmPXWf1f+ta8LcSEOK3Pj6CqjnHlnujjZS5KZ/j0D4+XnVuk5rmDnR3ayGUhCAV57qyNyIGcPBc3MvsMvv6JcvX44XXngBkZGRmDVrFiIjI7F161Y0adIErq6uVZ6sQ3QntVqFkLbS/sJyreuENs09JX0Pc7Rt4Yknh7U0a72xD7awQUVkr1QqFe6X+CL4deto0F4BFzYPCqiHiSNa1bxeMw88ObTmfBE5MrtsKHU6HVauXAmDwYCsrCzs3bsXoaGhiI6ORnBwMNRqu/yxSAaPD5a2eRo9qDmcnJSxPa6e/wBG9WtWYfntI9XatfDE3q8Hw9VFGd96kHJJnZtHBwRAq1VGblbO64lHBwRUWH47N60D6mHvysFwc1XG7loiuSgjsVaQkZGB+Pj4Cru7jUYj8vPzUVRUBEEQkJ+fj4KCgsoHoXvOU8NbQifhL4JJY9tKNral6tZxwr+X9McvXz+IgaFlx6aFtPPCuoW9cHzTSPjp3WSskOzFuCEtUM/dWbLxlZSbOs4abPmkH/Z9MxgP9ijLTee2XghfEIaoLaPQrIm7jBUSKYPDNJSnT5fcIuruhnL9+vVwcXHBmDFjcP36dbi4uKB169YyVFi5Vk/0x9Ad72PI9gXwbNO00nUG//tdhC5+wcaV1U7K3tU4/1oPnJ/zAPKuVn7brpg3++DaVy/ZuLLKubs5Y/bTwZKMPTTMD107KOv+2Gq1CoN6+OHbd8NKl21bNhATRrSCS137+WaSuZGXm6sWrz8jzV1HBvXwReh9jSUZu7bUahUGdPfF6vlludn+2UA8PTKIuZGRveXG0Tl8Q/n0009DEIRyfyw901sqzp46tJ44CLsfmYc/Zq5AtwXPVFjHb0AXFGVLd69payrOSkPynhVovegQAqasQdzqaRXWyTi2ExoXZX2an/vsfejUxronzdRzd8Y38x6o9PJWJA5zowyznw7G/e2t+4HJ3U2LVe8wN1JgbkhqDtNQTpo0CYIgoHv37nKXYrZGnQNh+PMMhGIjbl26gToNPMpfe02lQptnBuP82j3yFWmBnAt/QdehD1ROWtT1a43iWykQTGX3txVMJiTv+hKNhk6WscqKtFo1Ni7uCy/POtWuZ0jJg9/AjfAbuLHCnULupNGosG5hL/h6c/exFJgbZXByUuOHD/ugUf261a5nbm7UahXC3wtDUx+dtUslMDckPYdpKO2Rs6cOhZk5pY+LsvPg7OFa+jhwTB9c2xUJY35RZS9XHGNWGpx0ZWdmql3cYcwtux9v6oF18Ax9BGpt9b+A5NCmuSf2fzOk2l+Oty+NkpCUW+Gaebc5aVT44cM+GNm34skvZB3MjXK0alYP+1cNgbdX5degBMzLjUajwnfv98KjA5tLVeo9j7khqbGhlFFhZg6cPcq+xdLqXFB4q+QabZo6WrR4JAwXNx2QqzyLaXT1YczJKH1sysuCxrVeyd8L85F26Hs07F9xN4tSdGrjhb83jyx34L0l2rbwxOF1wzGGl92RFHOjLB2DGuD4xpEY8kDtrtsX1KwefgsfhieHBVq5MroTc0NSY0Mpo+QTF+DdvS1UGjXcA/QoSLtVcoVcALqmjeFczw0D1s9Fl7efgm//zmg5urfMFVfPLagbss78BsFYjPzEi3DyaAjV/y7hVJB0BcacDFxcMBzx615D5t+7kHrgO5krrshfr8PuFQ/iu/d7IbiVedfBa9LYFQundMGJzSPRraOyTiZwRMyN8nLjp3fDf78chA0f9MZ9rc07HtmnkSvemxyCkz+OQo9O3hJXSMyN8nLjaOzn9DQHVJiRjQs/RGDI1gUQBBOOzl0N376d4Oypw5Wth7Fz8OsAAH1oezQf1ROXfjwkc8XVc3JvgIYDn0PM3F6AWo2mL36JzBN7YMxKQ4PeT6DtkuMAgKzTB5H2+yZ49Zsgb8FVUKlUGP9QKzw1PBB/nryJPX/E4++zKTh3OQO5+cVw1mrQws8dXdp5oVcXPYaFNVXMNfPuBcyNcnPz5LBAPDG0JY7+cxO7D5fk5uylktxondT/y01D9Oqix/BezI0tMTfKzI0jsbt7eSvdtt7TkREbL3cZ8Azyw6hDy0SNMeZX4HKWdeoRq4U7sKWv3FU4jnhDDvwHbQIAxO19XPbrTzI30mBurIu5qRxzQwB3eRMRERGRSGwoiYiIiEgUNpREREREJApPyrEy9wC93CUAsE4dvq41r2MrSqqFrI+5kYaSaiHrY26koaRa7AlPyiG6Bynt5AIie8DcEFWNu7yJiIiISBQ2lEREREQkChtKIiIiIhKFDSURERERicKGkoiIiIhEYUNJRERERKKwoSQiIiIiUdhQEhEREZEobCiJiIiISBQ2lEREREQkChtKIiIiIhKFDSURERERicKGkoiIiIhEYUNJRERERKKwoSQiIiIiUZzkLsDRREz8EFlXDXKXAfcAPfqvmyNqjBmRQEKulQoSydcVWNpN7iqIaqaUOQBwrHmAc4BjY26kYcvcsKG0sqyrBmTExstdhlUk5AKXs+Sugsi+ONIcAHAeINtgbuwfd3kTERERkShsKImIiIhIFDaURPcYQRAQZ8gufXzheiaKi00yVkSkfHfnJvYac0N0Jx5DSXQPKCwy4j/7r2LdjouIPH0T6bcKS5/r99xuuNTVoFNrL4wZ1BwTR7ZCfY86MlZLpAyFRUZsO3ANa7dfQOTpZKRlFpQ+1//53ahbR4NOrRtg9KDmeHpkEBrUY27o3sWGUiYPLJuMwLF9AQAmoxF5SRlI/CMaJxZ9j1xDmszVWe7qZ08j9cC6kgdqNbT1feAe3A++Ez6As5evvMXdwwRBwLodFzBn2XEkpeZVuV5evhFHTt3EkVM38cbnxzH9yQ545+XOqOOssWG19x5HmgccaQ4QBAEbdl7Ea0uPwZBSdW7yC4w4+k8yjv6TjDc//xuvPNEO704KQd06/NUqJeZGmbjLW0aGo2exueNz+On+l/Hb5GXw6hCAPt/MkrusWtO1C0PHtYkIXn0dzWf9gNwrUbi8eLTcZd2zUtLzMXzKXjzz9u/VNpN3y8s34oM1pxAydhtOx9rX5GyPHGkecIQ5IC2zAKOm7ceEN3+rtpm8W36BER+Fn0bnMdtw8nyqhBUSwNwoERtKGZkKi5GXnIFcQxqSjp5DzIb9aNy1NbQ6F7lLqxWVkzO09fVw9vKFe/teaDToBeTEHIEx95bcpd1zklLz0OuZ/2LX77W/DMfZSxkIe+a/iPznphUro7s50jxg73NAcloeej/zX+w4eL3WY5y/kolez/wXf55MsmJldDfmRnnYUCqEi3d9BAzvDlOxEYLR/g/0Lky9gfQ/fwLUmpI/ZDP5BcUY/PIenLucUeU6Go0Kvt6u8PV2hUajqnK9zKxCDJn0Cy7F2dfEZq8caR6wtzmgoNCIoZP3IvpiepXrmJubrJwiDJ28F7FXM6Uole7C3CgDD/SQkb5Hezx5cT1UajWcXEoO5o5esQPFeSUHfvdZNQs3Dp1C7Ib9AIAGHZqj11fT8PPA2TAWFMlWd1Wyog8iaqwOgskEobBkV5H3qFnQ1HUDAKQf2YrEze+We01+3Fn4P/cZGg152eb1Oqr5K6Jw8nz1u6r1DV0Qv28cAMBv4EYkJFV9S4f0W4X417zf8euaoVCrq/4lSrXjSPOAPc8BC1ZG4fiZlGrXsSQ3mVmF+Nc7v+PQt0Oh0fC7G2tjbpSRmzvZdUN56tQpzJs3DwcPHoQgCOjXrx9WrFiBoKAgDBs2DJs2bZK7xGoln7iAw9O+gKaOFgEjeqBJWEdELd5Y+vxfb4djyPYFuLYrEgXp2Qj98HlEvrFGcWG4zS2oGwKmr4NQmI/0w1tw69R+NHlyYenz9UMfRv3Qh0sfZxzdhoT1b8Cr30Q5ynVIp2JS8fHa01Yf97e/DVj9nxi88Fgbq48tliAIOH8lE0mpeXB30+K+oAZwcrKfX+CONA/Y6xwQfSENH377j9XH/SMqCSt/PI9Jj7ez+tjWEHMlA4kpedC5OqFTay/mRib2mpu72W1DGRERgeHDh6NZs2Z466234OLigrVr12LIkCHIzs5Gp06d5C6xRsb8wtJ7l578eDPcA/To9v6z+PPVrwEAuYY0nFm5E/e/PR4pUReReTkRiYet3yxYi9rZBXV9AgEALs06oMBwCXHfTEWzKasqrFuYEo/rKycj8J3dUNdxtXWpDmvZhjMwmQRJxv50XTSef7Q1VCplfEspCAJ+2HUJS76LxolzZSdB+DZ2xctj2uLVp4Pt4ix1R5oH7HUO+Oz7MzAapcnNkvXReGlMW0V9u7/xf7k5frbsG9kmjVzx0pg2mP10sF2cpc7cyJ+bu9nPx5E7JCcnY+zYsQgJCUFUVBRmz56NKVOmICIiAtevlxxMbQ8N5d1OfrIZgWP7wuu+lqXLzofvgWdrfwRPGYVj766TsTrL+Yybj5SIcORcOF5uuWAy4crSp6B/dA5cAzrKVJ3jScsswKY9lyUbP/ZaJg5EJko2viUEQcDrS4/hqbmHEHXXGbU3knPx1hd/Y8jLvyAvv1imCmvPkeYBe5gDMm4V4PtdlyQb/1JcFvb+mSDZ+JZ647PjeGLOQfx9rvzu/cSUXMz78gQefOkX5OYxN3Kyh9xUxi4bysWLFyM9PR3h4eFwcSk7o6tevXoICQkBYJ8NZdYVA+L2HUfInHFlCwUBMd/tQ3zECRSk2teJEXWbtIJn14dwY8Ob5ZYnblkIjYsHGg+fKlNljunQ8UTkFxglfY9f/qz9WePWtHnP5dJd+8JdXyzdfvzrsUS8+ulfNq5MPEeaB+xhDjgclYS8/HsjN//edwUfrDkFoOrc/Pa3ATM+PmrjysRjbuRnlw3lpk2bEBYWhqCgoEqf9/b2hl6vR0FBAZ5//nm0aNEC7u7uCAoKwueff27jai0T/dUO+PbpBH1o+7KFJhMEiXZjSs374dm4dXIvsk4fBABkn/sDqfvXIOCVcFnrckR/n63+hAJ7eQ9zLF0fDXP2vH+7LRYZtwpqXlFhHGkeUPocwNxUtG7HBaRm5EtfkJUxN/JS/oESdzEYDEhISMDYsWMrPGcymXD69Gl07twZAFBcXAy9Xo+9e/eiRYsW+Oeff/Dggw/C29sbY8aMMev9iouLYTAYzK6vqMi8XQWHp39Z6fLk4zFY6/OY2e9XXR3x8eI+FRcVeQPQmrVuwLS1lS7Xte2BLttLwlycnYErS8cj4JW1cPLwsrCWIsTH87pu1Yk6W3471WhU0Des/JpsPncs96liHQAwpOSVO7Ys+mKa6O1KrCs3cvBXtHm/oPMLjAj/z0mMHmC7O06YOwcAjjUP2Osc8PeZ8odxSJGbMwrITXxSHv44ad41ZQsKTfj2p5MYN9hP4qrKMDflyZkbvV4PJyfL20O7ayhzcnIAoNITA7Zv346bN2+W7u52c3PDggULSp/v1KkTRowYgcOHD5vdUBoMBvj7+5td30KvgfDVepi9vlRiY2MxxoK6K9Pu82i4NG1f84pmSt6zAkXpiYj7dka55V59J8J75IwqXlUiNjYW/g92sFotDqnZK4BH2XE1d17ipDrHNo6q8rm7L41yMznNojxIwrUF0PINs1efOXs+ZqbskbCg8pQyBwDKmwcUOQc0mwx4dC59KEVu0tKz5M+NSwAQ+JbZq7/2xgK89vwu6eq5C3NTNVvnJi4uDn5+ln+YsLuG0t/fHxqNBocOHSq3/Nq1a5g6teS4gqqOnywqKsLvv/+OV199VeoyreriloO4uOWg3GWI5vPYXPg8NlfuMhyXIO1xYAAAkw3eoyZGC3fFmcy/fZ6SOcI8oMg5wBa5scV71MRoYQ5M9rfLuzLMje2oBOHuQ3OV71//+hfCw8MxYsQIDBs2DHFxcVi1ahW8vb3xzz//4Ny5c2jTpuL18l588UWcOHECf/zxB5ydnc16L0t3eR8Z8yFyrpi/vlTcmusRumWOqDGmnvVGXL55u7yl5l+3CJ+34y7v6ry36jxWbb1W+rimXXe3v2HpOm4bEqu4Z/Hdu+66tPXEtk+7Wa/oWjCZBIQ99zvikvIqnFhwN7UaOLq2N3wa1rVNcVDOHAA41jwg1Ryw6NsYrPjpauljKXLTsZUH/vtZqNVqrg1BENDnhcO4ciO3xtyoVMAf3/aCv7ftbmPI3EijNrm5Z3Z5A8Dy5cuh1Wqxfft2HDhwAKGhodi6dSvee+89XLx4sdKTdWbOnIkjR47gwIEDZjeTAODk5GTRV79arTL+SbVay+qudIwLABTyIVWr1Yr+eRxdn/8rKNdQGo1CtXfyuC0xJc+s9QAgtFMTRfw/TB/fETM/jqxxvZF9m6Frp0AbVFRGKXMA4FjzgFRzQJ9uheUaSkfOzYwJ92HqB0dqXG94r6YI7dLKBhWVYW6kYcvfnXZ5lrdOp8PKlSthMBiQlZWFvXv3IjQ0FNHR0QgODoZaXf7Hmj59Ovbt24eIiAg0bNhQpqqJpBXWxdusMzjF6N1FL+0bmGnK4+0wNKz6SbK5rw5fvdnDRhWRvXqgs7fkFx1XSm5eGt0GI/o0rXadpno3fP02c0OWs8uGsjIZGRmIj4+vcPzkK6+8gv379+PAgQNo1KiRPMUR2YC/XodhYdId+O/t5YIRfav/ZWQrWq0aW5cNwOyng+HuVn63kkatwuhBzfHn+oegb6isO0mQ8jRp7FZjkyVGw/p18ciAAMnGt4STkxo/fdofr/+rIzzuyo1arcKjAwJw9PsRaNLYTaYKyZ45TEN5+nTJRY7vbCivXbuGzz//HBcvXkTz5s2h0+mg0+kwZMgQmaokktYrT1rvrPy7vTS6DZy1yrmVobNWg49m/h9uRIzDF3PLjk87+v0IbPmkH5tJMtsrT0h3r+0XH2utqFuAarVqfDi9K25EjMOXb5R9E3l0w0P4aUl/+DRibqh2HLqhbNasGQRBQH5+PrKzs0v/7N69W6YqK2r1RH8M3fE+hmxfAM82lX9KHvzvdxG6+AUbV1Y7KXtX4/xrPXB+zgPIu1r5fVNj3uyDa1+9ZOPK7g0DQ30xdnBzq48b1KweXv+X8m71BQA6Vy1G9m1W+ljvZbsTCazFkeYBe5wD+v5fEzw5rGXNK1qopb875j57n9XHtQY3V225b2Z97PADGHOjLA7TUE6aNAmCIKB79+5yl2I2Z08dWk8chN2PzMMfM1eg24JnKqzjN6ALirLt47InxVlpSN6zAq0XHULAlDWIWz2twjoZx3ZC4+IuQ3X3ji/m9qjyLNXbDCl58Bu4EX4DN8JQxZmqtzlpVAhfEAaXuso5aN6RONI8YM9zwPI5ofBtXH1TZUluNBoVvn03DG6u8p/p64iYG+VxmIbSHjXqHAjDn2cgFBtx69IN1GnggXJnVahUaPPMYJxfa7uLMouRc+Ev6Dr0gcpJi7p+rVF8KwWCyVT6vGAyIXnXl2g0dLKMVTq+hvXr4pevB6NBvTpVrnP7TNaEpNxylze5m1qtwvpFvdGjk7cUpRIcax6w5zmgQb062LPiQXh5is+NSgWEvxeGXvf7SFEqgblRIjaUMnL21KEwM6f0cVF2Hpw9yj4hB47pg2u7ImHML5KjPIsZs9LgpKtf+ljt4g5jbmbp49QD6+AZ+gjUWttdE/Be1TGoAQ59OxSBTWt/54l67s7495J+eHyI9XcFUhlHmgfsfQ7o0KoBfl87HEHN6tV6DA+dFls+7ofxD9n2sjv3GuZGedhQyqgwMwfOHmVn02l1Lii8VXJdM00dLVo8EoaLmw7IVZ7FNLr6MOZklD425WVB41oyMZsK85F26Hs07F9xtwRJo0OrBjj148OYMb69xZcTGtbLH2f+8whG9QuQpDYq40jzgCPMAW1beOLkj6Pw6sRgiy8nNLinH6L/8wgeG2T945ipPOZGeXhQlIyST1xAp1fHQKVRQ+ffGAVpt3D7Fga6po3hXM8NA9bPhbOnDi6NPdFydG9c+vFQDaPKxy2oG25sfAeCsRgFN6/CyaMhVP+7JmhB0hUYczJwccFwFGenoSjdgNQD38Gr3wSZq3Zsri5OWDK7O155oj1W/nQea7dfqPLYL52rFo8NDMCksW3RtQMvsWUrjjQPOMoc4FLXCR/P+j9MGdcW3/wUg/DtF5CYXPlFzN1cnPDogABMfrwdunZoCJXUF4MlAMyNEnPDhlJGhRnZuPBDBIZsXQBBMOHo3NXw7dsJzp46XNl6GDsHvw4A0Ie2R/NRPRUbhtuc3Bug4cDnEDO3F6BWo+mLXyLzxB4Ys9LQoPcTaLvkOAAg6/RBpP2+SZGBcFQBvu74YFpXLHrlfsQn5eDvsylISs2HySTA090Zndp4IaiZBzQa7rSwNUeaBxxtDmjWxB3vv3I/Fk7tgoSkXPx9LgVJqSW3VfR0d8Z9rRugdUA95kYGzI3y2OW9vJVsW+/pyIiNl7sMeAb5YdShZaLGGPMrcDnLOvWI1cId2NJX7ipIqeINOfAftAkAELf3cfjp5bsws1LmAMCx5gHOAdbH3FSOuakdfqwiIiIiIlHYUBIRERGRKDyG0srcA/RylwDAOnX4KujGCUqqhag6SpkDAMeaB5RSB0mDuZGGLevgMZREZPeUdCwYkb1gbsiauMubiIiIiERhQ0lEREREorChJCIiIiJR2FASERERkShsKImIiIhIFDaURERERCQKG0oiIiIiEoUNJRERERGJwoaSiIiIiERhQ0lEREREorChJCIiIiJR2FASERERkShsKImIiIhIFDaURERERCQKG0oiIiIiEsVJ7gIcTcTED5F11SB3GXAP0KP/ujmixpgRCSTkWqkgkXxdgaXd5K6CqGZKmQMAx5oHOAc4NuZGGrbMDRtKK8u6akBGbLzcZVhFQi5wOUvuKojsiyPNAQDnAbIN5sb+cZc3EREREYnChpKIiIiIRGFDSURERESi8BhKIrJLqRn5+PWvRPx9LgUnzqaWLn/7y7/R+349enXRo4Wfh4wVEilPWmYBfv3rBv4+m4q/z6aULn/ri5LchIXoEdiUuSHLsaEkIrsSdS4FS9efwZa9V1BQaKzw/NrtF7B2+wUAwMDQJpg6rj2G9/aHSqWydalEinEqJhVL15/Bpj2XK83Nuh0XsG5HSW76d2uCqU+0w4g+TZkbMhsbSpk8sGwyAsf2BQCYjEbkJWUg8Y9onFj0PXINaTJXZ7mrnz2N1APrSh6o1dDW94F7cD/4TvgAzl6+8hZHDiG/oBjvfHUCn6yLhskkmPWafUduYN+RGxjRpylWzusJfUNXiau0jCPNA5wDlKmg0Ij3vo7C4vB/YDSal5uIyBuIiLyB4b38sXJeTzRp7CZxlZZhbpSJx1DKyHD0LDZ3fA4/3f8yfpu8DF4dAtDnm1lyl1VrunZh6Lg2EcGrr6P5rB+QeyUKlxePlrsscgA3U/PQY/xOfBR+2uxm8k47Dl5H8KNbcSw6WYLqxHGkeYBzgLKkpOfjgYk7sWj1KbObyTvt/C0OwY9uxdFTNyWoThzmRnnYUMrIVFiMvOQM5BrSkHT0HGI27Efjrq2h1bnIXVqtqJycoa2vh7OXL9zb90KjQS8gJ+YIjLm35C6N7FhqRj76PbcLUedTq1xHo1HB19sVvt6u0Ggq30WXkp6PAS/sxok7jhtTAkeaBzgHKEf6rQL0f343jp+pens3JzdpmQUY+OJuxX0YY26Uhw2lQrh410fA8O4wFRshGE1ylyNaYeoNpP/5E6DWlPwhqgVBEPDM27/jzKWMatfTN3RB/L5xiN83DvqGVf9CuZVdhEdmRiArp9DKlVqHI80DnAPkIwgCnnvnMP6JrX73r7m5yc4txiMzIpCZxdxIzZ5zw2MoZaTv0R5PXlwPlVoNJ5c6AIDoFTtQnFcAAOizahZuHDqF2A37AQANOjRHr6+m4eeBs2EsKJKt7qpkRR9E1FgdBJMJQmEeAMB71Cxo6pYcf5N+ZCsSN79b7jX5cWfh/9xnaDTkZZvXS8r3/X8v4edD16065rUb2XhtyTGseLunVcetLUeaBzgHKMOWX67gPxFXrTpmfFIOZn0SidXvhll13NpibpSXG7tuKE+dOoV58+bh4MGDEAQB/fr1w4oVKxAUFIRhw4Zh06ZNcpdYreQTF3B42hfQ1NEiYEQPNAnriKjFG0uf/+vtcAzZvgDXdkWiID0boR8+j8g31iguDLe5BXVDwPR1EArzkX54C26d2o8mTy4sfb5+6MOoH/pw6eOMo9uQsP4NePWbKEe5pHBFRSa8vuyYJGN//eN5zBjfAUEB9SQZ3xKONA9wDpCf0WjC7CV/STL2mq2xmDmhA9q1rC/J+JZgbpSXG7vd5R0REYHu3bsjJiYGb731FhYtWoT4+HgMGTIE2dnZ6NSpk9wl1siYX1hy/9KYOJz8eDOy4m6i2/vPlj6fa0jDmZU7cf/b49F6/EBkXk5E4uHTMlZcPbWzC+r6BMKlWQc0efI91PFujrhvpla6bmFKPK6vnIzmszdBXUdZZ96SMuw4eA03buZKNv7XP56TbGxLONI8wDlAfv/9LQ5xhhzJxl+x5bxkY1uCuVFebuyyoUxOTsbYsWMREhKCqKgozJ49G1OmTEFERASuXy/ZPWYPDeXdTn6yGYFj+8Lrvpaly86H74Fna38ETxmFY++uk7E6y/mMm4+UiHDkXDhebrlgMuHK0qegf3QOXAM6ylQdKd26HRclH782Z4xLzZHmAc4Btid1btbvvAijAo9TZG7kZ5cN5eLFi5Geno7w8HC4uJQdSFyvXj2EhIQAsM+GMuuKAXH7jiNkzriyhYKAmO/2IT7iBApS7euMr7pNWsGz60O4seHNcssTtyyExsUDjYdX/gmMSBAERJ6W9lIlaZkFuByfJel71IYjzQOcA2xP6txkZhUi9prytkHmRn52eQzlpk2bEBYWhqCgoEqf9/b2hl6vBwBMmjQJP//8MzIzM+Hu7o7Ro0fjo48+grOzs1nvVVxcDIPBYHZtRUXFZq9bmeivdmDYz+9DH9oehiNnShaaTBAs/CalqKgY8fHxomopKvIGoBU1hvfDsxEzpyeyTh+Ee3AfZJ/7A6n716DtkhMW1lKE+PgkUbWQ/UhMycfNtPxyyzQaVZVnovrcsdyninUMKXkVrsX3y+8xqNvbR2S15YmdAwDHmgc4B9hOSkYBEu46TESK3Ow7HAt35yYiqy2PuSlPztzo9Xo4OVneHqoEQVDePp9qGAwG+Pj4YObMmfj000/LPWcymeDj44POnTtjz549AICzZ8+iWbNmcHNzQ0pKCkaPHo3evXtj/vz5Zr1ffHw8/P39za5voddA+Gqtex/UwDF94HVfS0S+ucbs1yQU3cJbqftEvW+7z6Ph0rS9qDHuVJydgXMzQxAwZQ3cO/a16LV518/g7NQOVquFFK5uU6DVvHKLfL1dEb9vXBUvqJnfwI1ISLrrmMwbPwCpB2o9ZmWkmAMAx5gHOAdIrI4vEFT+bGBJcpO4GUgRt13djbmpmq1zExcXBz8/P4teA9jhN5Q5OSUHG1d2f9Ht27fj5s2b5XZ3t2vXrvTvgiBArVbjwoULktdJFSXvWYGi9ETEfTuj3HKvvhPhPXJGFa+ie5Ot7h/M+xTbEucAidnsvtvMjS3ZS27s7hvKwsJCuLq6onPnzjh2rOySIteuXUPPnj2RkJCAjRs34vHHHy997sMPP8TChQuRk5MDLy8v7N69G127djXr/Szd5X1kzIfIuWL++lJxa65H6JY5osaYetYbcfnidnlbi3/dInzejru77hVXE3MR9uzv5ZbVtOvu2MZRAICu47YhMSWvwjqV7bpbMrMDRg+w7v1ylTIHAI41D3AOqFnCzTx0f/q3csukyM3H09rj8Qct/warOsyNNGqTm9ru8ra7byidnZ0xYcIEhIeHY+TIkRg2bBji4uKwatUqeHt7IyEhocIJOXPmzMGcOXNw7tw5fP/99/DxMf+YKScnJ4u++tVqlfFPqtVaVnelY1wAkF/jajah1WpF/zxkP5o0EeDudhRZOWXXjDMahYq73iqRmJJn1noA0C80EH5+XrWuszJKmQMAx5oHOAfUzNdXQH2Po0i/VXZHGyly0zc0EH5+DWtdZ2WYG2nYMjd2eZb38uXL8cILLyAyMhKzZs1CZGQktm7diiZNmsDV1bXKk3Xatm2L++67D+PHj7dxxURkCbVahS7trPsL625162jQroX8F2gmshaVSoX720ubG2etGh0CmRuqyC4bSp1Oh5UrV8JgMCArKwt79+5FaGgooqOjERwcDLW66h+rqKgIsbGxNqyWiGpj7IPNJR3/sYEB0GrtcgokqtLYB1tIOv7D/ZuhjrN93WOabMNhZtOMjAzEx8eX292dmZmJtWvXIiMjA4Ig4J9//sHChQvx4IMPylcoEZnlyWEt4e4m3TFIk8a2lWxsIrmMG9IS9dzNuyxebUwaw9xQ5RymoTx9uuSWSnc2lCqVChs2bECLFi3g7u6OUaNGYejQofj8889lqrKiVk/0x9Ad72PI9gXwbNO00nUG//tdhC5+wcaV1U7K3tU4/1oPnJ/zAPKuVn6bq5g3++DaVy/ZuDKyN+5uznjtmWBJxn6why+6d2wsydi14UjzAOcAebm6OGHOv6S5i0r/bk0Q1kUvydi1wdwoi0M3lB4eHti/fz/S0tKQnZ2Ny5cv45NPPoGbm5tMVZbn7KlD64mDsPuRefhj5gp0W/BMhXX8BnRBUXbFM++UqDgrDcl7VqD1okMImLIGcaunVVgn49hOaFzcZaiO7NHrz9yHzm2se9KMh06LVfMfqPTSY3JwpHmAc4AyvDoxGF07WPdYSp2rFquZG0k4Sm4cpqGcNGkSBEFA9+7d5S7FbI06B8Lw5xkIxUbcunQDdRp4lL+OmEqFNs8Mxvm1e+Qr0gI5F/6CrkMfqJy0qOvXGsW3UiCYyu75KphMSN71JRoNnSxjlWRPtFo1fljcB16edapdz5CSB7+BG+E3cCMMlVz65Da1WoXw93rBX6+zdqm15kjzAOcAZXByUuP7D/qgUf261a5nbm5UKmDNuw8gwFc5DQ1zozwO01DaI2dPHQozc0ofF2XnwdnDtfRx4Jg+uLYrEsb8osperjjGrDQ46crO/lO7uMOYm1n6OPXAOniGPgK1tvpJjuhObZp7Yv83Q6r95Xj70igJSbkVrpl3m0ajwvr3e+ORAQESVVo7jjQPcA5QjlbN6iFi1RB4e1V+DUrA/NysXdALYyQ+2cdSzI3ysKGUUWFmDpw9yna/a3UuKLxVch0wTR0tWjwShoubrHtbOClpdPVhzMkofWzKy4LGtV7J3wvzkXboezTsX3G3BFFNOrXxwvFNIzEwtHb3Dw5qVg+/hQ/DE8NaWrky8RxpHuAcoCzBQQ1wfONIDO5Zu+sQBjb1wK+rh2LCiFZWrkw85kZ52FDKKPnEBXh3bwuVRg33AD0K0m4B/7txka5pYzjXc8OA9XPR5e2n4Nu/M1qO7i1zxdVzC+qGrDO/QTAWIz/xIpw8GkL1v0s4FSRdgTEnAxcXDEf8uteQ+fcupB74TuaKyZ409dHhl68HY+2CXmZfB0/f0AXzX+6Mkz+OQo9O3hJXWDuONA9wDlAeP70bdn01COsX9UbHoAZmvcbbywXzXuyMUz8+rKiTcO7E3CiPci5Nfw8qzMjGhR8iMGTrAgiCCUfnroZv305w9tThytbD2Dn4dQCAPrQ9mo/qiUs/HpK54uo5uTdAw4HPIWZuL0CtRtMXv0TmiT0wZqWhQe8n0HbJcQBA1umDSPt9E7z6TZC3YLI7KpUKE0e2woQRgTh8Igl7/ojH32dTcO5KBnLzjXDWqtHc1x1d2nqh9/0+eKh3U8Vfa9KR5gHOAcqkUqnw1PBAPDmsJf48eRO7D8fh77OpOHs5Hbn5Rmid1Gjuq0OXdg3RK0SPEX2bwlmr7GtNMjfKY3f38la6bb2nIyM2Xu4y4Bnkh1GHlokaY8yvwOUs69QjVgt3YEtfuasgqplS5gDAseYBzgGOjbmRhi1zo+yP7kRERESkeGwoiYiIiEgUNpREREREJApPyrEy9wBlnBFnjTp8XWtex1aUVAtRdZQyBwCONQ8opQ6SBnMjDVvWwZNyiIiIiEgU7vImIiIiIlHYUBIRERGRKGwoiYiIiEgUNpREREREJAobSiIiIiIShQ0lEREREYnChpKIiIiIRGFDSURERESisKEkIiIiIlHYUBIRERGRKGwoiYiIiEgUNpREREREJAobSiIiIiIShQ0lEREREYnChpKIiIiIRGFDSURERESisKEkIiIiIlHYUBIRERGRKGwoiYiIiEgUNpREREREJAobSiIiIiIShQ0lEREREYny/+nhttSBnktAAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit.circuit.library import EfficientSU2\n", + "from circuit_knitting.cutting.cut_finding.cco_utils import qc_to_cco_circuit\n", + "\n", + "qc = EfficientSU2(4, entanglement=\"linear\", reps=2).decompose()\n", + "qc.assign_parameters([0.4] * len(qc.parameters), inplace=True)\n", + "\n", + "circuit_ckt = qc_to_cco_circuit(qc)\n", + "\n", + "qc.draw(\"mpl\", scale=0.8)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "---------- 4 qubits ----------\n", + "gamma = 1.0 min_reached = True\n", + "[]\n", + "\n", + "\n", + "---------- 3 qubits ----------\n", + "gamma = 16.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2], input=1))]\n", + "\n", + "\n", + "---------- 2 qubits ----------\n", + "gamma = 65536.0 min_reached = False\n", + "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[1, 2], input=1)), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[0, 1])), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3], input=1)), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2])), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=25, gate_name='cx', qubits=[2, 3]))]\n", + "\n", + "\n", + "---------- 1 qubits ----------\n" + ] + }, + { + "ename": "Exception", + "evalue": "None state encountered. This means that no cut state satisfying the specified constraints and settings was found.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mException\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[5], line 15\u001b[0m\n\u001b[1;32m 11\u001b[0m interface \u001b[38;5;241m=\u001b[39m SimpleGateList(circuit_ckt)\n\u001b[1;32m 13\u001b[0m op \u001b[38;5;241m=\u001b[39m LOCutsOptimizer(interface, settings, constraint_obj)\n\u001b[0;32m---> 15\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgamma =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m (out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m out\u001b[38;5;241m.\u001b[39mupper_bound_gamma(),\n\u001b[1;32m 20\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmin_reached =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 21\u001b[0m op\u001b[38;5;241m.\u001b[39mminimum_reached(),\n\u001b[1;32m 22\u001b[0m )\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py:139\u001b[0m, in \u001b[0;36mLOCutsOptimizer.optimize\u001b[0;34m(self, circuit_interface, optimization_settings, device_constraints)\u001b[0m\n\u001b[1;32m 136\u001b[0m out_1 \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 138\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 139\u001b[0m state, cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcut_optimization\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimization_pass\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:289\u001b[0m, in \u001b[0;36mCutOptimization.optimization_pass\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 287\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned:\n\u001b[1;32m 288\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgreedy_goal_state\n\u001b[0;32m--> 289\u001b[0m cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch_funcs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcost_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state, cost\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:70\u001b[0m, in \u001b[0;36mcut_optimization_upper_bound_cost_func\u001b[0;34m(goal_state, func_args)\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (goal_state\u001b[38;5;241m.\u001b[39mupper_bound_gamma(), np\u001b[38;5;241m.\u001b[39minf)\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 70\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone state encountered. This means that no cut state satisfying the specified constraints and settings was found.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[0;31mException\u001b[0m: None state encountered. This means that no cut state satisfying the specified constraints and settings was found." + ] + } + ], + "source": [ + "settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True)\n", + "\n", + "settings.set_engine_selection(\"CutOptimization\", \"BestFirst\")\n", + "\n", + "qubit_per_subcircuit = 4\n", + "\n", + "for qpu_qubits in range(qubit_per_subcircuit, 0, -1):\n", + " print(f\"\\n\\n---------- {qpu_qubits} qubits ----------\")\n", + "\n", + " constraint_obj = DeviceConstraints(qubits_per_subcircuit=qpu_qubits)\n", + " interface = SimpleGateList(circuit_ckt)\n", + "\n", + " op = LOCutsOptimizer(interface, settings, constraint_obj)\n", + "\n", + " out = op.optimize()\n", + "\n", + " print(\n", + " \"gamma =\",\n", + " None if (out is None) else out.upper_bound_gamma(),\n", + " \"min_reached =\",\n", + " op.minimum_reached(),\n", + " )\n", + " if out is not None:\n", + " out.print(simple=True)\n", + " else:\n", + " print(out)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit\n", + "import numpy as np\n", + "\n", + "qc_0 = QuantumCircuit(7)\n", + "for i in range(7):\n", + " qc_0.rx(np.pi / 4, i)\n", + "qc_0.cx(0, 3)\n", + "qc_0.cx(1, 3)\n", + "qc_0.cx(2, 3)\n", + "qc_0.cx(3, 4)\n", + "qc_0.cx(3, 5)\n", + "qc_0.cx(3, 6)\n", + "\n", + "circuit2 = qc_to_cco_circuit(qc_0)\n", + "\n", + "qc_0.draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "---------- 7 qubits ----------\n", + "gamma = 1.0 min_reached = True\n", + "[]\n", + "\n", + "\n", + "---------- 6 qubits ----------\n", + "gamma = 4.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6], input=1))]\n", + "\n", + "\n", + "---------- 5 qubits ----------\n", + "gamma = 4.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1))]\n", + "\n", + "\n", + "---------- 4 qubits ----------\n", + "gamma = 4.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4], input=1))]\n", + "\n", + "\n", + "---------- 3 qubits ----------\n", + "gamma = 16.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3], input=2)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1))]\n", + "\n", + "\n", + "---------- 2 qubits ----------\n", + "gamma = 1024.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=8, gate_name='cx', qubits=[1, 3], input=2)), SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3], input=2)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6], input=1))]\n", + "\n", + "\n", + "---------- 1 qubits ----------\n" + ] + }, + { + "ename": "Exception", + "evalue": "None state encountered. This means that no cut state satisfying the specified constraints and settings was found.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mException\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[8], line 16\u001b[0m\n\u001b[1;32m 11\u001b[0m interface \u001b[38;5;241m=\u001b[39m SimpleGateList(circuit2)\n\u001b[1;32m 13\u001b[0m op \u001b[38;5;241m=\u001b[39m LOCutsOptimizer(interface, settings, constraint_obj)\n\u001b[0;32m---> 16\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 18\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 19\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgamma =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 20\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m (out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m out\u001b[38;5;241m.\u001b[39mupper_bound_gamma(),\n\u001b[1;32m 21\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmin_reached =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 22\u001b[0m op\u001b[38;5;241m.\u001b[39mminimum_reached(),\n\u001b[1;32m 23\u001b[0m )\n\u001b[1;32m 24\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py:139\u001b[0m, in \u001b[0;36mLOCutsOptimizer.optimize\u001b[0;34m(self, circuit_interface, optimization_settings, device_constraints)\u001b[0m\n\u001b[1;32m 136\u001b[0m out_1 \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 138\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 139\u001b[0m state, cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcut_optimization\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimization_pass\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:289\u001b[0m, in \u001b[0;36mCutOptimization.optimization_pass\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 287\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned:\n\u001b[1;32m 288\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgreedy_goal_state\n\u001b[0;32m--> 289\u001b[0m cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch_funcs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcost_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state, cost\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:70\u001b[0m, in \u001b[0;36mcut_optimization_upper_bound_cost_func\u001b[0;34m(goal_state, func_args)\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (goal_state\u001b[38;5;241m.\u001b[39mupper_bound_gamma(), np\u001b[38;5;241m.\u001b[39minf)\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 70\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone state encountered. This means that no cut state satisfying the specified constraints and settings was found.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[0;31mException\u001b[0m: None state encountered. This means that no cut state satisfying the specified constraints and settings was found." + ] + } + ], + "source": [ + "settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True)\n", + "\n", + "settings.set_engine_selection(\"CutOptimization\", \"BestFirst\")\n", + "\n", + "qubit_per_subcircuit = 7\n", + "\n", + "for qpu_qubits in range(qubit_per_subcircuit, 0, -1):\n", + " print(f\"\\n\\n---------- {qpu_qubits} qubits ----------\")\n", + "\n", + " constraint_obj = DeviceConstraints(qubits_per_subcircuit=qpu_qubits)\n", + " interface = SimpleGateList(circuit2)\n", + "\n", + " op = LOCutsOptimizer(interface, settings, constraint_obj)\n", + "\n", + " out = op.optimize()\n", + "\n", + " print(\n", + " \"gamma =\",\n", + " None if (out is None) else out.upper_bound_gamma(),\n", + " \"min_reached =\",\n", + " op.minimum_reached(),\n", + " )\n", + " if out is not None:\n", + " out.print(simple=True)\n", + " else:\n", + " print(out)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ckt", + "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.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/cutting/cut_finding/test_best_first_search.py b/test/cutting/cut_finding/test_best_first_search.py index 91a3b56ea..d992807e5 100644 --- a/test/cutting/cut_finding/test_best_first_search.py +++ b/test/cutting/cut_finding/test_best_first_search.py @@ -97,7 +97,7 @@ def test_best_first_search(test_circuit: SimpleGateList): gate=CircuitElement(name="cx", params=[], qubits=[3, 4], gamma=3), cut_constraints=None, ), - [((1, 3), (2, 4))], + (((1, 3), (2, 4))), ), ( GateSpec( @@ -105,7 +105,7 @@ def test_best_first_search(test_circuit: SimpleGateList): gate=CircuitElement(name="cx", params=[], qubits=[3, 5], gamma=3), cut_constraints=None, ), - [((1, 3), (2, 5))], + (((1, 3), (2, 5))), ), ( GateSpec( @@ -113,7 +113,7 @@ def test_best_first_search(test_circuit: SimpleGateList): gate=CircuitElement(name="cx", params=[], qubits=[3, 6], gamma=3), cut_constraints=None, ), - [((1, 3), (2, 6))], + (((1, 3), (2, 6))), ), ] diff --git a/test/cutting/cut_finding/test_cut_finder_results.py b/test/cutting/cut_finding/test_cut_finder_results.py index cbddec03d..6737c02d9 100644 --- a/test/cutting/cut_finding/test_cut_finder_results.py +++ b/test/cutting/cut_finding/test_cut_finder_results.py @@ -29,10 +29,10 @@ from circuit_knitting.cutting.automated_cut_finding import DeviceConstraints from circuit_knitting.cutting.cut_finding.disjoint_subcircuits_state import ( get_actions_list, - OneWireCutIdentifier, + SingleWireCutIdentifier, WireCutLocation, CutIdentifier, - GateCutLocation, + CutLocation, ) from circuit_knitting.cutting.cut_finding.lo_cuts_optimizer import ( LOCutsOptimizer, @@ -126,15 +126,11 @@ def test_four_qubit_circuit_three_qubit_qpu( assert cut_actions_list == [ CutIdentifier( cut_action="CutTwoQubitGate", - gate_cut_location=GateCutLocation( - instruction_id=17, gate_name="cx", qubits=[2, 3] - ), + cut_location=CutLocation(instruction_id=17, gate_name="cx", qubits=[2, 3]), ), CutIdentifier( cut_action="CutTwoQubitGate", - gate_cut_location=GateCutLocation( - instruction_id=25, gate_name="cx", qubits=[2, 3] - ), + cut_location=CutLocation(instruction_id=25, gate_name="cx", qubits=[2, 3]), ), ] best_result = optimization_pass.get_results() @@ -167,13 +163,13 @@ def test_four_qubit_circuit_two_qubit_qpu( assert cut_actions_list == [ CutIdentifier( cut_action="CutTwoQubitGate", - gate_cut_location=GateCutLocation( + cut_location=CutLocation( instruction_id=9, gate_name="cx", qubits=[1, 2] ), ), CutIdentifier( cut_action="CutTwoQubitGate", - gate_cut_location=GateCutLocation( + cut_location=CutLocation( instruction_id=20, gate_name="cx", qubits=[1, 2] ), ), @@ -213,31 +209,31 @@ def test_seven_qubit_circuit_two_qubit_qpu( assert cut_actions_list == [ CutIdentifier( cut_action="CutTwoQubitGate", - gate_cut_location=GateCutLocation( + cut_location=CutLocation( instruction_id=7, gate_name="cx", qubits=[0, 3] ), ), CutIdentifier( cut_action="CutTwoQubitGate", - gate_cut_location=GateCutLocation( + cut_location=CutLocation( instruction_id=8, gate_name="cx", qubits=[1, 3] ), ), CutIdentifier( cut_action="CutTwoQubitGate", - gate_cut_location=GateCutLocation( + cut_location=CutLocation( instruction_id=9, gate_name="cx", qubits=[2, 3] ), ), CutIdentifier( cut_action="CutTwoQubitGate", - gate_cut_location=GateCutLocation( + cut_location=CutLocation( instruction_id=11, gate_name="cx", qubits=[3, 5] ), ), CutIdentifier( cut_action="CutTwoQubitGate", - gate_cut_location=GateCutLocation( + cut_location=CutLocation( instruction_id=12, gate_name="cx", qubits=[3, 6] ), ), @@ -270,7 +266,7 @@ def test_one_wire_cut( cut_actions_list = output.cut_actions_sublist() assert cut_actions_list == [ - OneWireCutIdentifier( + SingleWireCutIdentifier( cut_action="CutLeftWire", wire_cut_location=WireCutLocation( instruction_id=10, gate_name="cx", qubits=[3, 4], input=1 @@ -306,13 +302,13 @@ def test_two_wire_cuts( cut_actions_list = output.cut_actions_sublist() assert cut_actions_list == [ - OneWireCutIdentifier( + SingleWireCutIdentifier( cut_action="CutRightWire", wire_cut_location=WireCutLocation( instruction_id=9, gate_name="cx", qubits=[2, 3], input=2 ), ), - OneWireCutIdentifier( + SingleWireCutIdentifier( cut_action="CutLeftWire", wire_cut_location=WireCutLocation( instruction_id=11, gate_name="cx", qubits=[3, 5], input=1 diff --git a/test/cutting/cut_finding/test_cutting_actions.py b/test/cutting/cut_finding/test_cutting_actions.py index 04cfd53e8..3b7fb48bc 100644 --- a/test/cutting/cut_finding/test_cutting_actions.py +++ b/test/cutting/cut_finding/test_cutting_actions.py @@ -30,7 +30,7 @@ DisjointSubcircuitsState, get_actions_list, CutIdentifier, - GateCutLocation, + CutLocation, ) from circuit_knitting.cutting.cut_finding.search_space_generator import ActionNames @@ -93,7 +93,7 @@ def test_cut_two_qubit_gate( assert actions_list == [ CutIdentifier( cut_action="CutTwoQubitGate", - gate_cut_location=GateCutLocation( + cut_location=CutLocation( instruction_id=2, gate_name="cx", qubits=[0, 1] ), # In renaming qubits here,"q1" -> 0, "q0" -> 1. ) diff --git a/test/cutting/cut_finding/test_optimization_settings.py b/test/cutting/cut_finding/test_optimization_settings.py index cbe92dfe0..251b2edd5 100644 --- a/test/cutting/cut_finding/test_optimization_settings.py +++ b/test/cutting/cut_finding/test_optimization_settings.py @@ -30,27 +30,33 @@ def test_optimization_parameters(max_gamma: int, max_backjumps: int): _ = OptimizationSettings(max_gamma=max_gamma, max_backjumps=max_backjumps) -def test_gate_cut_types(LO: bool = True, LOCC_ancillas: bool = False): +def test_gate_cut_types(gate_lo: bool = True, gate_locc_ancillas: bool = False): """Test default gate cut types.""" - op = OptimizationSettings(LO, LOCC_ancillas) + op = OptimizationSettings(gate_lo, gate_locc_ancillas) op.set_gate_cut_types() - assert op.gate_cut_LO is True - assert op.gate_cut_LOCC_with_ancillas is False + assert op.gate_cut_lo is True + assert op.gate_cut_locc_with_ancillas is False def test_wire_cut_types( - LO: bool = True, LOCC_ancillas: bool = False, LOCC_no_ancillas: bool = False + wire_lo: bool = True, + wire_locc_ancillas: bool = False, + wire_locc_no_ancillas: bool = False, ): """Test default wire cut types.""" - op = OptimizationSettings(LO, LOCC_ancillas, LOCC_no_ancillas) + op = OptimizationSettings(wire_lo, wire_locc_ancillas, wire_locc_no_ancillas) op.set_wire_cut_types() - assert op.wire_cut_LO - assert op.wire_cut_LOCC_with_ancillas is False - assert op.wire_cut_LOCC_no_ancillas is False + assert op.wire_cut_lo + assert op.wire_cut_locc_with_ancillas is False + assert op.wire_cut_locc_no_ancillas is False def test_all_cut_search_groups(): """Test for the existence of all cut search groups.""" assert OptimizationSettings( - LO=True, LOCC_ancillas=True, LOCC_no_ancillas=True + gate_lo=True, + gate_locc_ancillas=True, + wire_lo=True, + wire_locc_ancillas=True, + wire_locc_no_ancillas=True, ).get_cut_search_groups() == [None, "GateCut", "WireCut"] From f784d9b6126268ee89e998a692299c5e548f84fa Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Tue, 14 May 2024 13:03:52 -0400 Subject: [PATCH 09/21] reorganise tests --- .../cutting/cut_finding/cut_optimization.py | 2 +- .../tutorials/trial_circuit_notebook.ipynb | 76 +-- .../cut_finding/test_best_first_search.py | 6 +- .../cut_finding/test_cut_finder_results.py | 602 ++++++++++-------- 4 files changed, 359 insertions(+), 327 deletions(-) diff --git a/circuit_knitting/cutting/cut_finding/cut_optimization.py b/circuit_knitting/cutting/cut_finding/cut_optimization.py index 8a2eb660f..07829d859 100644 --- a/circuit_knitting/cutting/cut_finding/cut_optimization.py +++ b/circuit_knitting/cutting/cut_finding/cut_optimization.py @@ -68,7 +68,7 @@ def cut_optimization_upper_bound_cost_func( return (goal_state.upper_bound_gamma(), np.inf) else: raise Exception( - "None state encountered. This means that no cut state satisfying the specified constraints and settings was found." + "None state encountered: no cut state satisfying the specified constraints and settings could be found." ) diff --git a/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb b/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb index ef1ef76b9..a29e3bf68 100644 --- a/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb +++ b/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -60,35 +60,23 @@ "\n", "\n", "---------- 3 qubits ----------\n", - "gamma = 16.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2], input=1))]\n", + "gamma = 9.0 min_reached = True\n", + "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=25, gate_name='cx', qubits=[2, 3]))]\n", "\n", "\n", "---------- 2 qubits ----------\n", - "gamma = 65536.0 min_reached = False\n", - "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[1, 2], input=1)), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[0, 1])), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3], input=1)), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2])), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=25, gate_name='cx', qubits=[2, 3]))]\n", + "gamma = 9.0 min_reached = True\n", + "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[1, 2])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2]))]\n", "\n", "\n", - "---------- 1 qubits ----------\n" - ] - }, - { - "ename": "Exception", - "evalue": "None state encountered. This means that no cut state satisfying the specified constraints and settings was found.", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mException\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[5], line 15\u001b[0m\n\u001b[1;32m 11\u001b[0m interface \u001b[38;5;241m=\u001b[39m SimpleGateList(circuit_ckt)\n\u001b[1;32m 13\u001b[0m op \u001b[38;5;241m=\u001b[39m LOCutsOptimizer(interface, settings, constraint_obj)\n\u001b[0;32m---> 15\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgamma =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m (out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m out\u001b[38;5;241m.\u001b[39mupper_bound_gamma(),\n\u001b[1;32m 20\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmin_reached =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 21\u001b[0m op\u001b[38;5;241m.\u001b[39mminimum_reached(),\n\u001b[1;32m 22\u001b[0m )\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py:139\u001b[0m, in \u001b[0;36mLOCutsOptimizer.optimize\u001b[0;34m(self, circuit_interface, optimization_settings, device_constraints)\u001b[0m\n\u001b[1;32m 136\u001b[0m out_1 \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 138\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 139\u001b[0m state, cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcut_optimization\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimization_pass\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:289\u001b[0m, in \u001b[0;36mCutOptimization.optimization_pass\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 287\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned:\n\u001b[1;32m 288\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgreedy_goal_state\n\u001b[0;32m--> 289\u001b[0m cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch_funcs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcost_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state, cost\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:70\u001b[0m, in \u001b[0;36mcut_optimization_upper_bound_cost_func\u001b[0;34m(goal_state, func_args)\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (goal_state\u001b[38;5;241m.\u001b[39mupper_bound_gamma(), np\u001b[38;5;241m.\u001b[39minf)\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 70\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone state encountered. This means that no cut state satisfying the specified constraints and settings was found.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mException\u001b[0m: None state encountered. This means that no cut state satisfying the specified constraints and settings was found." + "---------- 1 qubits ----------\n", + "gamma = 729.0 min_reached = True\n", + "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=4, gate_name='cx', qubits=[0, 1])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[1, 2])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[0, 1])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=25, gate_name='cx', qubits=[2, 3]))]\n" ] } ], "source": [ - "settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True)\n", + "settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=False)\n", "\n", "settings.set_engine_selection(\"CutOptimization\", \"BestFirst\")\n", "\n", @@ -118,7 +106,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -128,7 +116,7 @@ "
" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -154,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -169,50 +157,38 @@ "\n", "\n", "---------- 6 qubits ----------\n", - "gamma = 4.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6], input=1))]\n", + "gamma = 3.0 min_reached = True\n", + "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n", "\n", "\n", "---------- 5 qubits ----------\n", - "gamma = 4.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1))]\n", + "gamma = 9.0 min_reached = True\n", + "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n", "\n", "\n", "---------- 4 qubits ----------\n", - "gamma = 4.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4], input=1))]\n", + "gamma = 27.0 min_reached = True\n", + "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n", "\n", "\n", "---------- 3 qubits ----------\n", - "gamma = 16.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3], input=2)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1))]\n", + "gamma = 81.0 min_reached = True\n", + "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=7, gate_name='cx', qubits=[0, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=8, gate_name='cx', qubits=[1, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n", "\n", "\n", "---------- 2 qubits ----------\n", - "gamma = 1024.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=8, gate_name='cx', qubits=[1, 3], input=2)), SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3], input=2)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6], input=1))]\n", + "gamma = 243.0 min_reached = True\n", + "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=7, gate_name='cx', qubits=[0, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n", "\n", "\n", - "---------- 1 qubits ----------\n" - ] - }, - { - "ename": "Exception", - "evalue": "None state encountered. This means that no cut state satisfying the specified constraints and settings was found.", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mException\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[8], line 16\u001b[0m\n\u001b[1;32m 11\u001b[0m interface \u001b[38;5;241m=\u001b[39m SimpleGateList(circuit2)\n\u001b[1;32m 13\u001b[0m op \u001b[38;5;241m=\u001b[39m LOCutsOptimizer(interface, settings, constraint_obj)\n\u001b[0;32m---> 16\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 18\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 19\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgamma =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 20\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m (out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m out\u001b[38;5;241m.\u001b[39mupper_bound_gamma(),\n\u001b[1;32m 21\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmin_reached =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 22\u001b[0m op\u001b[38;5;241m.\u001b[39mminimum_reached(),\n\u001b[1;32m 23\u001b[0m )\n\u001b[1;32m 24\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py:139\u001b[0m, in \u001b[0;36mLOCutsOptimizer.optimize\u001b[0;34m(self, circuit_interface, optimization_settings, device_constraints)\u001b[0m\n\u001b[1;32m 136\u001b[0m out_1 \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 138\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 139\u001b[0m state, cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcut_optimization\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimization_pass\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:289\u001b[0m, in \u001b[0;36mCutOptimization.optimization_pass\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 287\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned:\n\u001b[1;32m 288\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgreedy_goal_state\n\u001b[0;32m--> 289\u001b[0m cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch_funcs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcost_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state, cost\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:70\u001b[0m, in \u001b[0;36mcut_optimization_upper_bound_cost_func\u001b[0;34m(goal_state, func_args)\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (goal_state\u001b[38;5;241m.\u001b[39mupper_bound_gamma(), np\u001b[38;5;241m.\u001b[39minf)\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 70\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone state encountered. This means that no cut state satisfying the specified constraints and settings was found.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mException\u001b[0m: None state encountered. This means that no cut state satisfying the specified constraints and settings was found." + "---------- 1 qubits ----------\n", + "gamma = 729.0 min_reached = True\n", + "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=7, gate_name='cx', qubits=[0, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=8, gate_name='cx', qubits=[1, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n" ] } ], "source": [ - "settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True)\n", + "settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=False)\n", "\n", "settings.set_engine_selection(\"CutOptimization\", \"BestFirst\")\n", "\n", diff --git a/test/cutting/cut_finding/test_best_first_search.py b/test/cutting/cut_finding/test_best_first_search.py index d992807e5..47731c2bb 100644 --- a/test/cutting/cut_finding/test_best_first_search.py +++ b/test/cutting/cut_finding/test_best_first_search.py @@ -97,7 +97,7 @@ def test_best_first_search(test_circuit: SimpleGateList): gate=CircuitElement(name="cx", params=[], qubits=[3, 4], gamma=3), cut_constraints=None, ), - (((1, 3), (2, 4))), + (((1, 3), (2, 4)),), ), ( GateSpec( @@ -105,7 +105,7 @@ def test_best_first_search(test_circuit: SimpleGateList): gate=CircuitElement(name="cx", params=[], qubits=[3, 5], gamma=3), cut_constraints=None, ), - (((1, 3), (2, 5))), + (((1, 3), (2, 5)),), ), ( GateSpec( @@ -113,7 +113,7 @@ def test_best_first_search(test_circuit: SimpleGateList): gate=CircuitElement(name="cx", params=[], qubits=[3, 6], gamma=3), cut_constraints=None, ), - (((1, 3), (2, 6))), + (((1, 3), (2, 6)),), ), ] diff --git a/test/cutting/cut_finding/test_cut_finder_results.py b/test/cutting/cut_finding/test_cut_finder_results.py index 6737c02d9..8eeaa6f44 100644 --- a/test/cutting/cut_finding/test_cut_finder_results.py +++ b/test/cutting/cut_finding/test_cut_finder_results.py @@ -14,10 +14,9 @@ from __future__ import annotations import numpy as np -from numpy import array -from pytest import fixture, raises +import unittest +from pytest import raises from qiskit import QuantumCircuit -from typing import Callable from qiskit.circuit.library import EfficientSU2 from circuit_knitting.cutting.cut_finding.cco_utils import qc_to_cco_circuit from circuit_knitting.cutting.cut_finding.circuit_interface import ( @@ -40,357 +39,414 @@ from circuit_knitting.cutting.cut_finding.cut_optimization import CutOptimization -@fixture -def empty_circuit(): - qc = QuantumCircuit(3) - qc.barrier([0]) - qc.barrier([1]) - qc.barrier([2]) +class TestCuttingFourQubitCircuit(unittest.TestCase): + def setUp(self): + qc = EfficientSU2(4, entanglement="linear", reps=2).decompose() + qc.assign_parameters([0.4] * len(qc.parameters), inplace=True) + self.circuit_internal = qc_to_cco_circuit(qc) + def test_four_qubit_cutting_workflow(self): + with self.subTest("No cuts needed"): -@fixture -def four_qubit_test_setup(): - qc = EfficientSU2(4, entanglement="linear", reps=2).decompose() - qc.assign_parameters([0.4] * len(qc.parameters), inplace=True) - circuit_internal = qc_to_cco_circuit(qc) - interface = SimpleGateList(circuit_internal) - settings = OptimizationSettings(seed=12345) - settings.set_engine_selection("CutOptimization", "BestFirst") - return interface, settings + qubits_per_subcircuit = 4 + interface = SimpleGateList(self.circuit_internal) -@fixture -def seven_qubit_test_setup(): - qc = QuantumCircuit(7) - for i in range(7): - qc.rx(np.pi / 4, i) - qc.cx(0, 3) - qc.cx(1, 3) - qc.cx(2, 3) - qc.cx(3, 4) - qc.cx(3, 5) - qc.cx(3, 6) - circuit_internal = qc_to_cco_circuit(qc) - interface = SimpleGateList(circuit_internal) - settings = OptimizationSettings(seed=12345) - settings.set_engine_selection("CutOptimization", "BestFirst") - return interface, settings + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) + settings.set_engine_selection("CutOptimization", "BestFirst") -@fixture -def multiqubit_gate_test_setup(): - qc = QuantumCircuit(3) - qc.ccx(0, 1, 2) - circuit_internal = qc_to_cco_circuit(qc) - interface = SimpleGateList(circuit_internal) - settings = OptimizationSettings(seed=12345) - settings.set_engine_selection("CutOptimization", "BestFirst") - return interface, settings + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) -def test_no_cuts( - four_qubit_test_setup: Callable[[], tuple[SimpleGateList, OptimizationSettings]] -): - # QPU with 4 qubits for a 4 qubit circuit results in no cutting. - qubits_per_subcircuit = 4 + output = optimization_pass.optimize(interface, settings, constraint_obj) - interface, settings = four_qubit_test_setup + assert get_actions_list(output.actions) == [] # no cutting. - constraint_obj = DeviceConstraints(qubits_per_subcircuit) + assert ( + interface.export_subcircuits_as_string(name_mapping="default") == "AAAA" + ) - optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + with self.subTest("No cuts found when all flags set to False"): - output = optimization_pass.optimize(interface, settings, constraint_obj) + qubits_per_subcircuit = 3 - assert get_actions_list(output.actions) == [] # no cutting. + interface = SimpleGateList(self.circuit_internal) - assert interface.export_subcircuits_as_string(name_mapping="default") == "AAAA" + settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=False) + settings.set_engine_selection("CutOptimization", "BestFirst") -def test_four_qubit_circuit_three_qubit_qpu( - four_qubit_test_setup: Callable[[], tuple[SimpleGateList, OptimizationSettings]] -): - # QPU with 3 qubits for a 4 qubit circuit enforces cutting. - qubits_per_subcircuit = 3 + constraint_obj = DeviceConstraints(qubits_per_subcircuit) - interface, settings = four_qubit_test_setup + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) - constraint_obj = DeviceConstraints(qubits_per_subcircuit) + with raises(Exception) as e_info: + optimization_pass.optimize(interface, settings, constraint_obj) + assert ( + e_info.value.args[0] + == "None state encountered. This means that no cut state satisfying the specified constraints and settings was found." + ) + with self.subTest("No separating cuts possible if only qubit per qpu and only wire cuts allowed"): - optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True) - output = optimization_pass.optimize() + settings.set_engine_selection("CutOptimization", "BestFirst") - cut_actions_list = output.cut_actions_sublist() + interface = SimpleGateList(self.circuit_internal) - assert cut_actions_list == [ - CutIdentifier( - cut_action="CutTwoQubitGate", - cut_location=CutLocation(instruction_id=17, gate_name="cx", qubits=[2, 3]), - ), - CutIdentifier( - cut_action="CutTwoQubitGate", - cut_location=CutLocation(instruction_id=25, gate_name="cx", qubits=[2, 3]), - ), - ] - best_result = optimization_pass.get_results() - - assert output.upper_bound_gamma() == best_result.gamma_UB == 9 # 2 LO cnot cuts. - - assert optimization_pass.minimum_reached() is True # matches optimal solution. - - assert ( - interface.export_subcircuits_as_string(name_mapping="default") == "AAAB" - ) # circuit separated into 2 subcircuits. - - -def test_four_qubit_circuit_two_qubit_qpu( - four_qubit_test_setup: Callable[[], tuple[SimpleGateList, OptimizationSettings]] -): - # QPU with 2 qubits enforces cutting. - qubits_per_subcircuit = 2 + for qubits_per_subcircuit in [3, 2, 1]: + constraint_obj = DeviceConstraints(qubits_per_subcircuit) - interface, settings = four_qubit_test_setup + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) - constraint_obj = DeviceConstraints(qubits_per_subcircuit) + with raises(Exception) as e_info: + optimization_pass.optimize(interface, settings, constraint_obj) + assert ( + e_info.value.args[0] + == "None state encountered. This means that no cut state satisfying the specified constraints and settings was found." + ) + with self.subTest("Three qubits per subcircuit"): + # QPU with 3 qubits for a 4 qubit circuit enforces cutting. + qubits_per_subcircuit = 3 - optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + interface = SimpleGateList(self.circuit_internal) - output = optimization_pass.optimize() + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) - cut_actions_list = output.cut_actions_sublist() + settings.set_engine_selection("CutOptimization", "BestFirst") - assert cut_actions_list == [ - CutIdentifier( - cut_action="CutTwoQubitGate", - cut_location=CutLocation( - instruction_id=9, gate_name="cx", qubits=[1, 2] - ), - ), - CutIdentifier( - cut_action="CutTwoQubitGate", - cut_location=CutLocation( - instruction_id=20, gate_name="cx", qubits=[1, 2] - ), - ), - ] + constraint_obj = DeviceConstraints(qubits_per_subcircuit) - best_result = optimization_pass.get_results() + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) - assert output.upper_bound_gamma() == best_result.gamma_UB == 9 # 2 LO cnot cuts. + output = optimization_pass.optimize() - assert optimization_pass.minimum_reached() is True # matches optimal solution. + cut_actions_list = output.cut_actions_sublist() - assert ( - interface.export_subcircuits_as_string(name_mapping="default") == "AABB" - ) # circuit separated into 2 subcircuits. + assert cut_actions_list == [ + CutIdentifier( + cut_action="CutTwoQubitGate", + cut_location=CutLocation( + instruction_id=17, gate_name="cx", qubits=[2, 3] + ), + ), + CutIdentifier( + cut_action="CutTwoQubitGate", + cut_location=CutLocation( + instruction_id=25, gate_name="cx", qubits=[2, 3] + ), + ), + ] + best_result = optimization_pass.get_results() - assert ( - optimization_pass.get_stats()["CutOptimization"] == array([15, 46, 15, 6]) - ).all() # matches known stats. + assert ( + output.upper_bound_gamma() == best_result.gamma_UB == 9 + ) # 2 LO cnot cuts. + assert ( + optimization_pass.minimum_reached() is True + ) # matches optimal solution. -def test_seven_qubit_circuit_two_qubit_qpu( - seven_qubit_test_setup: Callable[[], tuple[SimpleGateList, OptimizationSettings]] -): - # QPU with 2 qubits enforces cutting. - qubits_per_subcircuit = 2 + assert ( + interface.export_subcircuits_as_string(name_mapping="default") == "AAAB" + ) # circuit separated into 2 subcircuits. - interface, settings = seven_qubit_test_setup + with self.subTest("Two qubits per subcircuit"): - constraint_obj = DeviceConstraints(qubits_per_subcircuit) + qubits_per_subcircuit = 2 - optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + interface = SimpleGateList(self.circuit_internal) - output = optimization_pass.optimize() + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) - cut_actions_list = output.cut_actions_sublist() + settings.set_engine_selection("CutOptimization", "BestFirst") - assert cut_actions_list == [ - CutIdentifier( - cut_action="CutTwoQubitGate", - cut_location=CutLocation( - instruction_id=7, gate_name="cx", qubits=[0, 3] - ), - ), - CutIdentifier( - cut_action="CutTwoQubitGate", - cut_location=CutLocation( - instruction_id=8, gate_name="cx", qubits=[1, 3] - ), - ), - CutIdentifier( - cut_action="CutTwoQubitGate", - cut_location=CutLocation( - instruction_id=9, gate_name="cx", qubits=[2, 3] - ), - ), - CutIdentifier( - cut_action="CutTwoQubitGate", - cut_location=CutLocation( - instruction_id=11, gate_name="cx", qubits=[3, 5] - ), - ), - CutIdentifier( - cut_action="CutTwoQubitGate", - cut_location=CutLocation( - instruction_id=12, gate_name="cx", qubits=[3, 6] - ), - ), - ] + constraint_obj = DeviceConstraints(qubits_per_subcircuit) - best_result = optimization_pass.get_results() + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) - assert output.upper_bound_gamma() == best_result.gamma_UB == 243 # 5 LO cnot cuts. + output = optimization_pass.optimize() - assert optimization_pass.minimum_reached() is True # matches optimal solution. + cut_actions_list = output.cut_actions_sublist() - assert ( - interface.export_subcircuits_as_string(name_mapping="default") == "ABCDDEF" - ) # circuit separated into 2 subcircuits. + assert cut_actions_list == [ + CutIdentifier( + cut_action="CutTwoQubitGate", + cut_location=CutLocation( + instruction_id=9, gate_name="cx", qubits=[1, 2] + ), + ), + CutIdentifier( + cut_action="CutTwoQubitGate", + cut_location=CutLocation( + instruction_id=20, gate_name="cx", qubits=[1, 2] + ), + ), + ] + best_result = optimization_pass.get_results() -def test_one_wire_cut( - seven_qubit_test_setup: Callable[[], tuple[SimpleGateList, OptimizationSettings]] -): - qubits_per_subcircuit = 4 - - interface, settings = seven_qubit_test_setup - - constraint_obj = DeviceConstraints(qubits_per_subcircuit) - - optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) - - output = optimization_pass.optimize() - - cut_actions_list = output.cut_actions_sublist() - - assert cut_actions_list == [ - SingleWireCutIdentifier( - cut_action="CutLeftWire", - wire_cut_location=WireCutLocation( - instruction_id=10, gate_name="cx", qubits=[3, 4], input=1 - ), + assert ( + output.upper_bound_gamma() == best_result.gamma_UB == 9 + ) # 2 LO cnot cuts. + + assert optimization_pass.minimum_reached() is True # matches optimal solution. + + assert ( + interface.export_subcircuits_as_string(name_mapping="default") == "AABB" + ) # circuit separated into 2 subcircuits. + + assert ( + optimization_pass.get_stats()["CutOptimization"][3] + <= settings.max_backjumps + ).all() # matches known stats. + + with self.subTest("Search engine not supported"): + # Check if unspported search engine is flagged + + qubits_per_subcircuit = 4 + + interface = SimpleGateList(self.circuit_internal) + + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) + + settings.set_engine_selection("CutOptimization", "BeamSearch") + + search_engine = settings.get_engine_selection("CutOptimization") + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + + with raises(ValueError) as e_info: + _ = optimization_pass.optimize() + assert ( + e_info.value.args[0] == f"Search engine {search_engine} is not supported." ) - ] - assert ( - interface.export_subcircuits_as_string(name_mapping="default") == "AAAABBBB" - ) # extra wires because of wire cuts - # and not qubit reuse. + with self.subTest("Greedy search warm start test"): + # Even if the input cost bounds are too stringent, greedy_cut_optimization + # is able to return a solution. + + qubits_per_subcircuit = 3 + + interface = SimpleGateList(self.circuit_internal) + + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) + + settings.set_engine_selection("CutOptimization", "BestFirst") + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) - best_result = optimization_pass.get_results() + # Impose a stringent cost upper bound, insist gamma <=2. + cut_opt = CutOptimization(interface, settings, constraint_obj) + cut_opt.update_upperbound_cost((2, 4)) + state, cost = cut_opt.optimization_pass() - assert output.upper_bound_gamma() == best_result.gamma_UB == 4 # One LO wire cut. + # 2 cnot cuts are still found + assert state is not None + assert cost[0] == 9 - assert optimization_pass.minimum_reached() is True # matches optimal solution +class TestCuttingSevenQubitCircuit(unittest.TestCase): + def setUp(self): + qc = QuantumCircuit(7) + for i in range(7): + qc.rx(np.pi / 4, i) + qc.cx(0, 3) + qc.cx(1, 3) + qc.cx(2, 3) + qc.cx(3, 4) + qc.cx(3, 5) + qc.cx(3, 6) + self.circuit_internal = qc_to_cco_circuit(qc) -def test_two_wire_cuts( - seven_qubit_test_setup: Callable[[], tuple[SimpleGateList, OptimizationSettings]] -): - qubits_per_subcircuit = 3 + def test_seven_qubit_workflow(self): + with self.subTest("Two qubits per subcircuit"): - interface, settings = seven_qubit_test_setup + qubits_per_subcircuit = 2 - constraint_obj = DeviceConstraints(qubits_per_subcircuit) + interface = SimpleGateList(self.circuit_internal) - optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) - output = optimization_pass.optimize() + settings.set_engine_selection("CutOptimization", "BestFirst") - cut_actions_list = output.cut_actions_sublist() + constraint_obj = DeviceConstraints(qubits_per_subcircuit) - assert cut_actions_list == [ - SingleWireCutIdentifier( - cut_action="CutRightWire", - wire_cut_location=WireCutLocation( - instruction_id=9, gate_name="cx", qubits=[2, 3], input=2 - ), - ), - SingleWireCutIdentifier( - cut_action="CutLeftWire", - wire_cut_location=WireCutLocation( - instruction_id=11, gate_name="cx", qubits=[3, 5], input=1 - ), - ), - ] + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) - assert ( - interface.export_subcircuits_as_string(name_mapping="default") == "AABABCBCC" - ) # extra wires because of wire cuts - # and no qubit reuse. In the string above, - # {A: wire 0, A:wire 1, B:wire 2, A: wire 3, - # B: first cut on wire 3, C: second cut on wire 3, - # B: wire 4, C: wire 5, C: wire 6}. + output = optimization_pass.optimize() - best_result = optimization_pass.get_results() + cut_actions_list = output.cut_actions_sublist() - assert output.upper_bound_gamma() == best_result.gamma_UB == 16 # Two LO wire cuts. + assert cut_actions_list == [ + CutIdentifier( + cut_action="CutTwoQubitGate", + cut_location=CutLocation( + instruction_id=7, gate_name="cx", qubits=[0, 3] + ), + ), + CutIdentifier( + cut_action="CutTwoQubitGate", + cut_location=CutLocation( + instruction_id=8, gate_name="cx", qubits=[1, 3] + ), + ), + CutIdentifier( + cut_action="CutTwoQubitGate", + cut_location=CutLocation( + instruction_id=9, gate_name="cx", qubits=[2, 3] + ), + ), + CutIdentifier( + cut_action="CutTwoQubitGate", + cut_location=CutLocation( + instruction_id=11, gate_name="cx", qubits=[3, 5] + ), + ), + CutIdentifier( + cut_action="CutTwoQubitGate", + cut_location=CutLocation( + instruction_id=12, gate_name="cx", qubits=[3, 6] + ), + ), + ] - assert optimization_pass.minimum_reached() is True # matches optimal solution + best_result = optimization_pass.get_results() + assert ( + output.upper_bound_gamma() == best_result.gamma_UB == 243 + ) # 5 LO cnot cuts. -# check if unsupported search engine is flagged. -def test_supported_search_engine( - four_qubit_test_setup: Callable[[], tuple[SimpleGateList, OptimizationSettings]] -): - qubits_per_subcircuit = 4 + assert ( + optimization_pass.minimum_reached() is True + ) # matches optimal solution. - interface, settings = four_qubit_test_setup + assert ( + interface.export_subcircuits_as_string(name_mapping="default") + == "ABCDDEF" + ) # circuit separated into 2 subcircuits. - settings.set_engine_selection("CutOptimization", "BeamSearch") + with self.subTest("Single wire cut"): - search_engine = settings.get_engine_selection("CutOptimization") + qubits_per_subcircuit = 4 - constraint_obj = DeviceConstraints(qubits_per_subcircuit) + interface = SimpleGateList(self.circuit_internal) - optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) - with raises(ValueError) as e_info: - _ = optimization_pass.optimize() - assert e_info.value.args[0] == f"Search engine {search_engine} is not supported." + settings.set_engine_selection("CutOptimization", "BestFirst") + constraint_obj = DeviceConstraints(qubits_per_subcircuit) -# The cutting of multiqubit gates is not supported at present. -def test_multiqubit_cuts( - multiqubit_gate_test_setup: Callable[ - [], tuple[SimpleGateList, OptimizationSettings] - ] -): - # QPU with 2 qubits requires cutting. - qubits_per_subcircuit = 2 + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) - interface, settings = multiqubit_gate_test_setup + output = optimization_pass.optimize() - constraint_obj = DeviceConstraints(qubits_per_subcircuit) + cut_actions_list = output.cut_actions_sublist() - optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + assert cut_actions_list == [ + SingleWireCutIdentifier( + cut_action="CutLeftWire", + wire_cut_location=WireCutLocation( + instruction_id=10, gate_name="cx", qubits=[3, 4], input=1 + ), + ) + ] - with raises(ValueError) as e_info: - _ = optimization_pass.optimize() - assert e_info.value.args[0] == ( - "The input circuit must contain only single and two-qubits gates. " - "Found 3-qubit gate: (ccx)." - ) + assert ( + interface.export_subcircuits_as_string(name_mapping="default") + == "AAAABBBB" + ) # extra wires because of wire cuts + # and no qubit reuse. + best_result = optimization_pass.get_results() -# Even if the input cost bounds are too stringent, greedy_cut_optimization -# is able to return a solution. -def test_greedy_search( - four_qubit_test_setup: Callable[[], tuple[SimpleGateList, OptimizationSettings]] -): - qubits_per_subcircuit = 3 + assert ( + output.upper_bound_gamma() == best_result.gamma_UB == 4 + ) # One LO wire cut. - interface, settings = four_qubit_test_setup + assert ( + optimization_pass.minimum_reached() is True + ) # matches optimal solution - constraint_obj = DeviceConstraints(qubits_per_subcircuit) + with self.subTest("Two single wire cuts"): - # Impose a stringent cost upper bound, insist gamma <=2. - cut_opt = CutOptimization(interface, settings, constraint_obj) - cut_opt.update_upperbound_cost((2, 4)) - state, cost = cut_opt.optimization_pass() + qubits_per_subcircuit = 3 - # 2 cnot cuts are still found - assert state is not None - assert cost[0] == 9 + interface = SimpleGateList(self.circuit_internal) + + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) + + settings.set_engine_selection("CutOptimization", "BestFirst") + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + + output = optimization_pass.optimize() + + cut_actions_list = output.cut_actions_sublist() + + assert cut_actions_list == [ + SingleWireCutIdentifier( + cut_action="CutRightWire", + wire_cut_location=WireCutLocation( + instruction_id=9, gate_name="cx", qubits=[2, 3], input=2 + ), + ), + SingleWireCutIdentifier( + cut_action="CutLeftWire", + wire_cut_location=WireCutLocation( + instruction_id=11, gate_name="cx", qubits=[3, 5], input=1 + ), + ), + ] + + assert ( + interface.export_subcircuits_as_string(name_mapping="default") + == "AABABCBCC" + ) # extra wires because of wire cuts + # and no qubit reuse. In the string above, + # {A: wire 0, A:wire 1, B:wire 2, A: wire 3, + # B: first cut on wire 3, C: second cut on wire 3, + # B: wire 4, C: wire 5, C: wire 6}. + + best_result = optimization_pass.get_results() + + assert ( + output.upper_bound_gamma() == best_result.gamma_UB == 16 + ) # Two LO wire cuts. + + assert optimization_pass.minimum_reached() is True # matches optimal solution + + +class TestCuttingMultiQubitGates(unittest.TestCase): + def setUp(self): + qc = QuantumCircuit(3) + qc.ccx(0, 1, 2) + circuit_internal = qc_to_cco_circuit(qc) + self.interface = SimpleGateList(circuit_internal) + self.settings = OptimizationSettings(seed=12345) + self.settings.set_engine_selection("CutOptimization", "BestFirst") + + def no_cutting_multiqubit_gates(self): + + # The cutting of multiqubit gates is not supported at present. + qubits_per_subcircuit = 2 + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + + optimization_pass = LOCutsOptimizer( + self.interface, self.settings, constraint_obj + ) + + with raises(ValueError) as e_info: + _ = optimization_pass.optimize() + assert e_info.value.args[0] == ( + "The input circuit must contain only single and two-qubits gates. " + "Found 3-qubit gate: (ccx)." + ) From 0ffcc5f459356ab8b80c933b471df07bcf4d1451 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Tue, 14 May 2024 14:53:16 -0400 Subject: [PATCH 10/21] add cut both wires test --- .../cutting/automated_cut_finding.py | 2 +- .../cutting/cut_finding/cut_optimization.py | 2 +- .../tutorials/trial_circuit_notebook.ipynb | 106 +++++++++---- .../cut_finding/test_cut_finder_results.py | 144 +++++++++++++++--- test/cutting/test_find_cuts.py | 15 ++ 5 files changed, 219 insertions(+), 50 deletions(-) diff --git a/circuit_knitting/cutting/automated_cut_finding.py b/circuit_knitting/cutting/automated_cut_finding.py index f1e3ea15c..c65e2765a 100644 --- a/circuit_knitting/cutting/automated_cut_finding.py +++ b/circuit_knitting/cutting/automated_cut_finding.py @@ -106,7 +106,7 @@ def find_cuts( ) counter += 1 - if action.action.get_name() == "CutBothWires": # pragma: no cover + if action.action.get_name() == "CutBothWires": # There should be two wires specified in the action in this case assert len(action.args) == 2 qubit_id2 = action.args[1][0] - 1 diff --git a/circuit_knitting/cutting/cut_finding/cut_optimization.py b/circuit_knitting/cutting/cut_finding/cut_optimization.py index 07829d859..6d438dac7 100644 --- a/circuit_knitting/cutting/cut_finding/cut_optimization.py +++ b/circuit_knitting/cutting/cut_finding/cut_optimization.py @@ -67,7 +67,7 @@ def cut_optimization_upper_bound_cost_func( if goal_state is not None: return (goal_state.upper_bound_gamma(), np.inf) else: - raise Exception( + raise ValueError( "None state encountered: no cut state satisfying the specified constraints and settings could be found." ) diff --git a/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb b/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb index a29e3bf68..8cdeb86fa 100644 --- a/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb +++ b/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -26,7 +26,7 @@ "
" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -57,26 +57,41 @@ "---------- 4 qubits ----------\n", "gamma = 1.0 min_reached = True\n", "[]\n", + "Subcircuits: AAAA\n", "\n", "\n", "---------- 3 qubits ----------\n", - "gamma = 9.0 min_reached = True\n", - "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=25, gate_name='cx', qubits=[2, 3]))]\n", + "gamma = 16.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2], input=1))]\n", + "Subcircuits: AABABB\n", "\n", "\n", "---------- 2 qubits ----------\n", - "gamma = 9.0 min_reached = True\n", - "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[1, 2])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2]))]\n", + "gamma = 65536.0 min_reached = False\n", + "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[1, 2], input=1)), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[0, 1])), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3], input=1)), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2])), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=25, gate_name='cx', qubits=[2, 3]))]\n", + "Subcircuits: ADABDEBCEFCF\n", "\n", "\n", - "---------- 1 qubits ----------\n", - "gamma = 729.0 min_reached = True\n", - "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=4, gate_name='cx', qubits=[0, 1])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[1, 2])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[0, 1])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=25, gate_name='cx', qubits=[2, 3]))]\n" + "---------- 1 qubits ----------\n" + ] + }, + { + "ename": "ValueError", + "evalue": "None state encountered: no cut state satisfying the specified constraints and settings could be found.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[5], line 15\u001b[0m\n\u001b[1;32m 11\u001b[0m interface \u001b[38;5;241m=\u001b[39m SimpleGateList(circuit_ckt)\n\u001b[1;32m 13\u001b[0m op \u001b[38;5;241m=\u001b[39m LOCutsOptimizer(interface, settings, constraint_obj)\n\u001b[0;32m---> 15\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgamma =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m (out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m out\u001b[38;5;241m.\u001b[39mupper_bound_gamma(),\n\u001b[1;32m 20\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmin_reached =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 21\u001b[0m op\u001b[38;5;241m.\u001b[39mminimum_reached(),\n\u001b[1;32m 22\u001b[0m )\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py:139\u001b[0m, in \u001b[0;36mLOCutsOptimizer.optimize\u001b[0;34m(self, circuit_interface, optimization_settings, device_constraints)\u001b[0m\n\u001b[1;32m 136\u001b[0m out_1 \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 138\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 139\u001b[0m state, cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcut_optimization\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimization_pass\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:291\u001b[0m, in \u001b[0;36mCutOptimization.optimization_pass\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 289\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned:\n\u001b[1;32m 290\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgreedy_goal_state\n\u001b[0;32m--> 291\u001b[0m cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch_funcs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcost_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 295\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state, cost\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:70\u001b[0m, in \u001b[0;36mcut_optimization_upper_bound_cost_func\u001b[0;34m(goal_state, func_args)\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (goal_state\u001b[38;5;241m.\u001b[39mupper_bound_gamma(), np\u001b[38;5;241m.\u001b[39minf)\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 70\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone state encountered: no cut state satisfying the specified constraints and settings could be found.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 72\u001b[0m )\n", + "\u001b[0;31mValueError\u001b[0m: None state encountered: no cut state satisfying the specified constraints and settings could be found." ] } ], "source": [ - "settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=False)\n", + "settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True)\n", "\n", "settings.set_engine_selection(\"CutOptimization\", \"BestFirst\")\n", "\n", @@ -101,12 +116,15 @@ " if out is not None:\n", " out.print(simple=True)\n", " else:\n", - " print(out)" + " print(out)\n", + " print(\n", + " \"Subcircuits:\", interface.export_subcircuits_as_string(name_mapping=\"default\")\n", + " )" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -116,7 +134,7 @@ "
" ] }, - "execution_count": 4, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -142,7 +160,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -154,41 +172,59 @@ "---------- 7 qubits ----------\n", "gamma = 1.0 min_reached = True\n", "[]\n", + "Subcircuits: AAAAAAA\n", "\n", "\n", "---------- 6 qubits ----------\n", - "gamma = 3.0 min_reached = True\n", - "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n", + "gamma = 4.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6], input=1))]\n", + "Subcircuits: AAAABAAB\n", "\n", "\n", "---------- 5 qubits ----------\n", - "gamma = 9.0 min_reached = True\n", - "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n", + "gamma = 4.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1))]\n", + "Subcircuits: AAAABABB\n", "\n", "\n", "---------- 4 qubits ----------\n", - "gamma = 27.0 min_reached = True\n", - "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n", + "gamma = 4.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4], input=1))]\n", + "Subcircuits: AAAABBBB\n", "\n", "\n", "---------- 3 qubits ----------\n", - "gamma = 81.0 min_reached = True\n", - "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=7, gate_name='cx', qubits=[0, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=8, gate_name='cx', qubits=[1, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n", + "gamma = 16.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3], input=2)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1))]\n", + "Subcircuits: AABABCBCC\n", "\n", "\n", "---------- 2 qubits ----------\n", - "gamma = 243.0 min_reached = True\n", - "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=7, gate_name='cx', qubits=[0, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n", + "gamma = 1024.0 min_reached = True\n", + "[SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=8, gate_name='cx', qubits=[1, 3], input=2)), SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3], input=2)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6], input=1))]\n", + "Subcircuits: ABCABCDEFDEF\n", "\n", "\n", - "---------- 1 qubits ----------\n", - "gamma = 729.0 min_reached = True\n", - "[CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=7, gate_name='cx', qubits=[0, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=8, gate_name='cx', qubits=[1, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5])), CutIdentifier(cut_action='CutTwoQubitGate', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6]))]\n" + "---------- 1 qubits ----------\n" + ] + }, + { + "ename": "ValueError", + "evalue": "None state encountered: no cut state satisfying the specified constraints and settings could be found.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[9], line 15\u001b[0m\n\u001b[1;32m 11\u001b[0m interface \u001b[38;5;241m=\u001b[39m SimpleGateList(circuit2)\n\u001b[1;32m 13\u001b[0m op \u001b[38;5;241m=\u001b[39m LOCutsOptimizer(interface, settings, constraint_obj)\n\u001b[0;32m---> 15\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgamma =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m (out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m out\u001b[38;5;241m.\u001b[39mupper_bound_gamma(),\n\u001b[1;32m 20\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmin_reached =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 21\u001b[0m op\u001b[38;5;241m.\u001b[39mminimum_reached(),\n\u001b[1;32m 22\u001b[0m )\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py:139\u001b[0m, in \u001b[0;36mLOCutsOptimizer.optimize\u001b[0;34m(self, circuit_interface, optimization_settings, device_constraints)\u001b[0m\n\u001b[1;32m 136\u001b[0m out_1 \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 138\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 139\u001b[0m state, cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcut_optimization\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimization_pass\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:291\u001b[0m, in \u001b[0;36mCutOptimization.optimization_pass\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 289\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned:\n\u001b[1;32m 290\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgreedy_goal_state\n\u001b[0;32m--> 291\u001b[0m cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch_funcs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcost_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 295\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state, cost\n", + "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:70\u001b[0m, in \u001b[0;36mcut_optimization_upper_bound_cost_func\u001b[0;34m(goal_state, func_args)\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (goal_state\u001b[38;5;241m.\u001b[39mupper_bound_gamma(), np\u001b[38;5;241m.\u001b[39minf)\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 70\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone state encountered: no cut state satisfying the specified constraints and settings could be found.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 72\u001b[0m )\n", + "\u001b[0;31mValueError\u001b[0m: None state encountered: no cut state satisfying the specified constraints and settings could be found." ] } ], "source": [ - "settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=False)\n", + "settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True)\n", "\n", "settings.set_engine_selection(\"CutOptimization\", \"BestFirst\")\n", "\n", @@ -213,8 +249,18 @@ " if out is not None:\n", " out.print(simple=True)\n", " else:\n", - " print(out)" + " print(out)\n", + " print(\n", + " \"Subcircuits:\", interface.export_subcircuits_as_string(name_mapping=\"default\")\n", + " )" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/test/cutting/cut_finding/test_cut_finder_results.py b/test/cutting/cut_finding/test_cut_finder_results.py index 8eeaa6f44..f01e2dbbb 100644 --- a/test/cutting/cut_finding/test_cut_finder_results.py +++ b/test/cutting/cut_finding/test_cut_finder_results.py @@ -46,6 +46,7 @@ def setUp(self): self.circuit_internal = qc_to_cco_circuit(qc) def test_four_qubit_cutting_workflow(self): + with self.subTest("No cuts needed"): qubits_per_subcircuit = 4 @@ -82,13 +83,16 @@ def test_four_qubit_cutting_workflow(self): optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) - with raises(Exception) as e_info: + with raises(ValueError) as e_info: optimization_pass.optimize(interface, settings, constraint_obj) - assert ( - e_info.value.args[0] - == "None state encountered. This means that no cut state satisfying the specified constraints and settings was found." - ) - with self.subTest("No separating cuts possible if only qubit per qpu and only wire cuts allowed"): + assert ( + e_info.value.args[0] + == "None state encountered: no cut state satisfying the specified constraints and settings could be found." + ) + + with self.subTest( + "No separating cuts possible if one qubit per qpu and only wire cuts allowed" + ): settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True) @@ -96,18 +100,19 @@ def test_four_qubit_cutting_workflow(self): interface = SimpleGateList(self.circuit_internal) - for qubits_per_subcircuit in [3, 2, 1]: - constraint_obj = DeviceConstraints(qubits_per_subcircuit) + qubits_per_subcircuit = 1 + constraint_obj = DeviceConstraints(qubits_per_subcircuit) - optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) - with raises(Exception) as e_info: - optimization_pass.optimize(interface, settings, constraint_obj) - assert ( - e_info.value.args[0] - == "None state encountered. This means that no cut state satisfying the specified constraints and settings was found." - ) - with self.subTest("Three qubits per subcircuit"): + with raises(ValueError) as e_info: + optimization_pass.optimize(interface, settings, constraint_obj) + assert ( + e_info.value.args[0] + == "None state encountered: no cut state satisfying the specified constraints and settings could be found." + ) + + with self.subTest("Gate cuts to get three qubits per subcircuit"): # QPU with 3 qubits for a 4 qubit circuit enforces cutting. qubits_per_subcircuit = 3 @@ -153,7 +158,7 @@ def test_four_qubit_cutting_workflow(self): interface.export_subcircuits_as_string(name_mapping="default") == "AAAB" ) # circuit separated into 2 subcircuits. - with self.subTest("Two qubits per subcircuit"): + with self.subTest("Gate cuts to get two qubits per subcircuit"): qubits_per_subcircuit = 2 @@ -201,7 +206,110 @@ def test_four_qubit_cutting_workflow(self): assert ( optimization_pass.get_stats()["CutOptimization"][3] <= settings.max_backjumps - ).all() # matches known stats. + ) # matches known stats. + + with self.subTest("Cut both wires instance"): + + qubits_per_subcircuit = 2 + + interface = SimpleGateList(self.circuit_internal) + + settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True) + + settings.set_engine_selection("CutOptimization", "BestFirst") + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + + output = optimization_pass.optimize() + + cut_actions_list = output.cut_actions_sublist() + + assert cut_actions_list == [ + SingleWireCutIdentifier( + cut_action="CutLeftWire", + wire_cut_location=WireCutLocation( + instruction_id=9, gate_name="cx", qubits=[1, 2], input=1 + ), + ), + CutIdentifier( + cut_action="CutBothWires", + cut_location=CutLocation( + instruction_id=12, gate_name="cx", qubits=[0, 1] + ), + ), + SingleWireCutIdentifier( + cut_action="CutLeftWire", + wire_cut_location=WireCutLocation( + instruction_id=17, gate_name="cx", qubits=[2, 3], input=1 + ), + ), + CutIdentifier( + cut_action="CutBothWires", + cut_location=CutLocation( + instruction_id=20, gate_name="cx", qubits=[1, 2] + ), + ), + CutIdentifier( + cut_action="CutBothWires", + cut_location=CutLocation( + instruction_id=25, gate_name="cx", qubits=[2, 3] + ), + ), + ] + + best_result = optimization_pass.get_results() + + assert output.upper_bound_gamma() == best_result.gamma_UB == 65536 + + assert ( + interface.export_subcircuits_as_string(name_mapping="default") + == "ADABDEBCEFCF" + ) + + with self.subTest("Wire cuts to get to 3 qubits per subcircuit"): + + qubits_per_subcircuit = 3 + + interface = SimpleGateList(self.circuit_internal) + + settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True) + + settings.set_engine_selection("CutOptimization", "BestFirst") + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + + output = optimization_pass.optimize() + + cut_actions_list = output.cut_actions_sublist() + + assert cut_actions_list == [ + SingleWireCutIdentifier( + cut_action="CutLeftWire", + wire_cut_location=WireCutLocation( + instruction_id=17, gate_name="cx", qubits=[2, 3], input=1 + ), + ), + SingleWireCutIdentifier( + cut_action="CutLeftWire", + wire_cut_location=WireCutLocation( + instruction_id=20, gate_name="cx", qubits=[1, 2], input=1 + ), + ), + ] + + best_result = optimization_pass.get_results() + + assert ( + output.upper_bound_gamma() == best_result.gamma_UB == 16 + ) # 2 LO wire cuts. + + assert ( + interface.export_subcircuits_as_string(name_mapping="default") == "AABABB" + ) # circuit separated into 2 subcircuits. with self.subTest("Search engine not supported"): # Check if unspported search engine is flagged diff --git a/test/cutting/test_find_cuts.py b/test/cutting/test_find_cuts.py index 365bfcfec..2a34b13b5 100644 --- a/test/cutting/test_find_cuts.py +++ b/test/cutting/test_find_cuts.py @@ -17,6 +17,7 @@ import os import numpy as np from qiskit import QuantumCircuit +from qiskit.circuit.library import EfficientSU2 from circuit_knitting.cutting.automated_cut_finding import ( find_cuts, @@ -47,6 +48,20 @@ def test_find_cuts(self): assert {"Wire Cut", "Gate Cut"} == cut_types assert np.isclose(127.06026169, metadata["sampling_overhead"], atol=1e-8) + with self.subTest("Cut both wires instance"): + qc = EfficientSU2(4, entanglement="linear", reps=2).decompose() + qc.assign_parameters([0.4] * len(qc.parameters), inplace=True) + optimization = OptimizationParameters(seed=12345, gate_lo=False, wire_lo=True) + constraints = DeviceConstraints(qubits_per_subcircuit=2) + + _, metadata = find_cuts( + qc, optimization=optimization, constraints=constraints + ) + cut_types = {cut[0] for cut in metadata["cuts"]} + + assert len(metadata["cuts"]) == 2 + assert {"Wire Cut", "Gate Cut"} == cut_types + with self.subTest("3-qubit gate"): circuit = QuantumCircuit(3) circuit.cswap(2, 1, 0) From 8748a1c6d164fb1d30993a20b1d51e33661ee6b2 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Tue, 14 May 2024 15:59:46 -0400 Subject: [PATCH 11/21] add release note --- .../cutting/automated_cut_finding.py | 4 +- ...ol-cut-finder-search-e499e1ea49abb0bc.yaml | 6 + .../cut_finding/test_cut_finder_results.py | 179 +++++++++++++++++- test/cutting/test_find_cuts.py | 9 +- 4 files changed, 185 insertions(+), 13 deletions(-) create mode 100644 releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml diff --git a/circuit_knitting/cutting/automated_cut_finding.py b/circuit_knitting/cutting/automated_cut_finding.py index c65e2765a..e7c252737 100644 --- a/circuit_knitting/cutting/automated_cut_finding.py +++ b/circuit_knitting/cutting/automated_cut_finding.py @@ -63,6 +63,8 @@ def find_cuts( seed=optimization.seed, max_gamma=optimization.max_gamma, max_backjumps=optimization.max_backjumps, + gate_lo=optimization.gate_lo, + wire_lo=optimization.wire_lo, ) # Hard-code the optimizer to an LO-only optimizer @@ -106,7 +108,7 @@ def find_cuts( ) counter += 1 - if action.action.get_name() == "CutBothWires": + if action.action.get_name() == "CutBothWires": # There should be two wires specified in the action in this case assert len(action.args) == 2 qubit_id2 = action.args[1][0] - 1 diff --git a/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml b/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml new file mode 100644 index 000000000..29c66432c --- /dev/null +++ b/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + When specifying instances of :class:`OptimizationParameters` that are to be inputted to :func:`find_cuts` the user can now control whether the + cut-finder looks only for gate cuts, only for wire cuts, or both, by setting the bools ``gate_lo`` and ``wire_lo`` appropriately. The default value + of both of these is set to `True` and so the default search considers both gate and wire cuts. diff --git a/test/cutting/cut_finding/test_cut_finder_results.py b/test/cutting/cut_finding/test_cut_finder_results.py index 0bc8a852f..e9dc02ed0 100644 --- a/test/cutting/cut_finding/test_cut_finder_results.py +++ b/test/cutting/cut_finding/test_cut_finder_results.py @@ -203,17 +203,178 @@ def test_four_qubit_cutting_workflow(self): interface.export_subcircuits_as_string(name_mapping="default") == "AABB" ) # circuit separated into 2 subcircuits. - assert ( - optimization_pass.get_stats()["CutOptimization"].backjumps - <= settings.max_backjumps - ) + assert ( + optimization_pass.get_stats()["CutOptimization"].backjumps + <= settings.max_backjumps + ) + + with self.subTest("Cut both wires instance"): + + qubits_per_subcircuit = 2 + + interface = SimpleGateList(self.circuit_internal) + + settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True) + + settings.set_engine_selection("CutOptimization", "BestFirst") + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + + output = optimization_pass.optimize() + cut_actions_list = output.cut_actions_sublist() -def test_seven_qubit_circuit_two_qubit_qpu( - seven_qubit_test_setup: Callable[[], tuple[SimpleGateList, OptimizationSettings]] -): - # QPU with 2 qubits enforces cutting. - qubits_per_subcircuit = 2 + assert cut_actions_list == [ + SingleWireCutIdentifier( + cut_action="CutLeftWire", + wire_cut_location=WireCutLocation( + instruction_id=9, gate_name="cx", qubits=[1, 2], input=1 + ), + ), + CutIdentifier( + cut_action="CutBothWires", + cut_location=CutLocation( + instruction_id=12, gate_name="cx", qubits=[0, 1] + ), + ), + SingleWireCutIdentifier( + cut_action="CutLeftWire", + wire_cut_location=WireCutLocation( + instruction_id=17, gate_name="cx", qubits=[2, 3], input=1 + ), + ), + CutIdentifier( + cut_action="CutBothWires", + cut_location=CutLocation( + instruction_id=20, gate_name="cx", qubits=[1, 2] + ), + ), + CutIdentifier( + cut_action="CutBothWires", + cut_location=CutLocation( + instruction_id=25, gate_name="cx", qubits=[2, 3] + ), + ), + ] + + best_result = optimization_pass.get_results() + + assert output.upper_bound_gamma() == best_result.gamma_UB == 65536 + + assert ( + interface.export_subcircuits_as_string(name_mapping="default") + == "ADABDEBCEFCF" + ) + + with self.subTest("Wire cuts to get to 3 qubits per subcircuit"): + + qubits_per_subcircuit = 3 + + interface = SimpleGateList(self.circuit_internal) + + settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True) + + settings.set_engine_selection("CutOptimization", "BestFirst") + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + + output = optimization_pass.optimize() + + cut_actions_list = output.cut_actions_sublist() + + assert cut_actions_list == [ + SingleWireCutIdentifier( + cut_action="CutLeftWire", + wire_cut_location=WireCutLocation( + instruction_id=17, gate_name="cx", qubits=[2, 3], input=1 + ), + ), + SingleWireCutIdentifier( + cut_action="CutLeftWire", + wire_cut_location=WireCutLocation( + instruction_id=20, gate_name="cx", qubits=[1, 2], input=1 + ), + ), + ] + + best_result = optimization_pass.get_results() + + assert ( + output.upper_bound_gamma() == best_result.gamma_UB == 16 + ) # 2 LO wire cuts. + + assert ( + interface.export_subcircuits_as_string(name_mapping="default") == "AABABB" + ) # circuit separated into 2 subcircuits. + + with self.subTest("Search engine not supported"): + # Check if unspported search engine is flagged + + qubits_per_subcircuit = 4 + + interface = SimpleGateList(self.circuit_internal) + + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) + + settings.set_engine_selection("CutOptimization", "BeamSearch") + + search_engine = settings.get_engine_selection("CutOptimization") + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + + optimization_pass = LOCutsOptimizer(interface, settings, constraint_obj) + + with raises(ValueError) as e_info: + _ = optimization_pass.optimize() + assert ( + e_info.value.args[0] == f"Search engine {search_engine} is not supported." + ) + + with self.subTest("Greedy search warm start test"): + # Even if the input cost bounds are too stringent, greedy_cut_optimization + # is able to return a solution. + + qubits_per_subcircuit = 3 + + interface = SimpleGateList(self.circuit_internal) + + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) + + settings.set_engine_selection("CutOptimization", "BestFirst") + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + + # Impose a stringent cost upper bound, insist gamma <=2. + cut_opt = CutOptimization(interface, settings, constraint_obj) + cut_opt.update_upperbound_cost((2, 4)) + state, cost = cut_opt.optimization_pass() + + # 2 cnot cuts are still found + assert state is not None + assert cost[0] == 9 + + +class TestCuttingSevenQubitCircuit(unittest.TestCase): + def setUp(self): + qc = QuantumCircuit(7) + for i in range(7): + qc.rx(np.pi / 4, i) + qc.cx(0, 3) + qc.cx(1, 3) + qc.cx(2, 3) + qc.cx(3, 4) + qc.cx(3, 5) + qc.cx(3, 6) + self.circuit_internal = qc_to_cco_circuit(qc) + + def test_seven_qubit_workflow(self): + with self.subTest("Two qubits per subcircuit"): + + qubits_per_subcircuit = 2 interface = SimpleGateList(self.circuit_internal) diff --git a/test/cutting/test_find_cuts.py b/test/cutting/test_find_cuts.py index 2a34b13b5..d681602f8 100644 --- a/test/cutting/test_find_cuts.py +++ b/test/cutting/test_find_cuts.py @@ -51,7 +51,9 @@ def test_find_cuts(self): with self.subTest("Cut both wires instance"): qc = EfficientSU2(4, entanglement="linear", reps=2).decompose() qc.assign_parameters([0.4] * len(qc.parameters), inplace=True) - optimization = OptimizationParameters(seed=12345, gate_lo=False, wire_lo=True) + optimization = OptimizationParameters( + seed=12345, gate_lo=False, wire_lo=True + ) constraints = DeviceConstraints(qubits_per_subcircuit=2) _, metadata = find_cuts( @@ -59,8 +61,9 @@ def test_find_cuts(self): ) cut_types = {cut[0] for cut in metadata["cuts"]} - assert len(metadata["cuts"]) == 2 - assert {"Wire Cut", "Gate Cut"} == cut_types + assert len(metadata["cuts"]) == 8 + assert {"Wire Cut"} == cut_types + assert np.isclose(65536.0**2, metadata["sampling_overhead"], atol=1e-8) with self.subTest("3-qubit gate"): circuit = QuantumCircuit(3) From 7fcfcb1c051d9f6879709d9186f95323c9ebf4af Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Tue, 14 May 2024 16:37:15 -0400 Subject: [PATCH 12/21] edit release note --- .../tutorials/trial_circuit_notebook.ipynb | 287 ------------------ ...ol-cut-finder-search-e499e1ea49abb0bc.yaml | 4 +- 2 files changed, 2 insertions(+), 289 deletions(-) delete mode 100644 docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb diff --git a/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb b/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb deleted file mode 100644 index 8cdeb86fa..000000000 --- a/docs/circuit_cutting/tutorials/trial_circuit_notebook.ipynb +++ /dev/null @@ -1,287 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from circuit_knitting.cutting.cut_finding.circuit_interface import SimpleGateList\n", - "from circuit_knitting.cutting.cut_finding.lo_cuts_optimizer import LOCutsOptimizer\n", - "from circuit_knitting.cutting.cut_finding.optimization_settings import (\n", - " OptimizationSettings,\n", - ")\n", - "from circuit_knitting.cutting.automated_cut_finding import DeviceConstraints" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from qiskit.circuit.library import EfficientSU2\n", - "from circuit_knitting.cutting.cut_finding.cco_utils import qc_to_cco_circuit\n", - "\n", - "qc = EfficientSU2(4, entanglement=\"linear\", reps=2).decompose()\n", - "qc.assign_parameters([0.4] * len(qc.parameters), inplace=True)\n", - "\n", - "circuit_ckt = qc_to_cco_circuit(qc)\n", - "\n", - "qc.draw(\"mpl\", scale=0.8)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "---------- 4 qubits ----------\n", - "gamma = 1.0 min_reached = True\n", - "[]\n", - "Subcircuits: AAAA\n", - "\n", - "\n", - "---------- 3 qubits ----------\n", - "gamma = 16.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2], input=1))]\n", - "Subcircuits: AABABB\n", - "\n", - "\n", - "---------- 2 qubits ----------\n", - "gamma = 65536.0 min_reached = False\n", - "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[1, 2], input=1)), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=12, gate_name='cx', qubits=[0, 1])), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=17, gate_name='cx', qubits=[2, 3], input=1)), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=20, gate_name='cx', qubits=[1, 2])), CutIdentifier(cut_action='CutBothWires', cut_location=CutLocation(instruction_id=25, gate_name='cx', qubits=[2, 3]))]\n", - "Subcircuits: ADABDEBCEFCF\n", - "\n", - "\n", - "---------- 1 qubits ----------\n" - ] - }, - { - "ename": "ValueError", - "evalue": "None state encountered: no cut state satisfying the specified constraints and settings could be found.", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[5], line 15\u001b[0m\n\u001b[1;32m 11\u001b[0m interface \u001b[38;5;241m=\u001b[39m SimpleGateList(circuit_ckt)\n\u001b[1;32m 13\u001b[0m op \u001b[38;5;241m=\u001b[39m LOCutsOptimizer(interface, settings, constraint_obj)\n\u001b[0;32m---> 15\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgamma =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m (out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m out\u001b[38;5;241m.\u001b[39mupper_bound_gamma(),\n\u001b[1;32m 20\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmin_reached =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 21\u001b[0m op\u001b[38;5;241m.\u001b[39mminimum_reached(),\n\u001b[1;32m 22\u001b[0m )\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py:139\u001b[0m, in \u001b[0;36mLOCutsOptimizer.optimize\u001b[0;34m(self, circuit_interface, optimization_settings, device_constraints)\u001b[0m\n\u001b[1;32m 136\u001b[0m out_1 \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 138\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 139\u001b[0m state, cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcut_optimization\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimization_pass\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:291\u001b[0m, in \u001b[0;36mCutOptimization.optimization_pass\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 289\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned:\n\u001b[1;32m 290\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgreedy_goal_state\n\u001b[0;32m--> 291\u001b[0m cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch_funcs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcost_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 295\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state, cost\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:70\u001b[0m, in \u001b[0;36mcut_optimization_upper_bound_cost_func\u001b[0;34m(goal_state, func_args)\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (goal_state\u001b[38;5;241m.\u001b[39mupper_bound_gamma(), np\u001b[38;5;241m.\u001b[39minf)\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 70\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone state encountered: no cut state satisfying the specified constraints and settings could be found.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 72\u001b[0m )\n", - "\u001b[0;31mValueError\u001b[0m: None state encountered: no cut state satisfying the specified constraints and settings could be found." - ] - } - ], - "source": [ - "settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True)\n", - "\n", - "settings.set_engine_selection(\"CutOptimization\", \"BestFirst\")\n", - "\n", - "qubit_per_subcircuit = 4\n", - "\n", - "for qpu_qubits in range(qubit_per_subcircuit, 0, -1):\n", - " print(f\"\\n\\n---------- {qpu_qubits} qubits ----------\")\n", - "\n", - " constraint_obj = DeviceConstraints(qubits_per_subcircuit=qpu_qubits)\n", - " interface = SimpleGateList(circuit_ckt)\n", - "\n", - " op = LOCutsOptimizer(interface, settings, constraint_obj)\n", - "\n", - " out = op.optimize()\n", - "\n", - " print(\n", - " \"gamma =\",\n", - " None if (out is None) else out.upper_bound_gamma(),\n", - " \"min_reached =\",\n", - " op.minimum_reached(),\n", - " )\n", - " if out is not None:\n", - " out.print(simple=True)\n", - " else:\n", - " print(out)\n", - " print(\n", - " \"Subcircuits:\", interface.export_subcircuits_as_string(name_mapping=\"default\")\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from qiskit import QuantumCircuit\n", - "import numpy as np\n", - "\n", - "qc_0 = QuantumCircuit(7)\n", - "for i in range(7):\n", - " qc_0.rx(np.pi / 4, i)\n", - "qc_0.cx(0, 3)\n", - "qc_0.cx(1, 3)\n", - "qc_0.cx(2, 3)\n", - "qc_0.cx(3, 4)\n", - "qc_0.cx(3, 5)\n", - "qc_0.cx(3, 6)\n", - "\n", - "circuit2 = qc_to_cco_circuit(qc_0)\n", - "\n", - "qc_0.draw(\"mpl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "---------- 7 qubits ----------\n", - "gamma = 1.0 min_reached = True\n", - "[]\n", - "Subcircuits: AAAAAAA\n", - "\n", - "\n", - "---------- 6 qubits ----------\n", - "gamma = 4.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6], input=1))]\n", - "Subcircuits: AAAABAAB\n", - "\n", - "\n", - "---------- 5 qubits ----------\n", - "gamma = 4.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1))]\n", - "Subcircuits: AAAABABB\n", - "\n", - "\n", - "---------- 4 qubits ----------\n", - "gamma = 4.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4], input=1))]\n", - "Subcircuits: AAAABBBB\n", - "\n", - "\n", - "---------- 3 qubits ----------\n", - "gamma = 16.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3], input=2)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1))]\n", - "Subcircuits: AABABCBCC\n", - "\n", - "\n", - "---------- 2 qubits ----------\n", - "gamma = 1024.0 min_reached = True\n", - "[SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=8, gate_name='cx', qubits=[1, 3], input=2)), SingleWireCutIdentifier(cut_action='CutRightWire', wire_cut_location=WireCutLocation(instruction_id=9, gate_name='cx', qubits=[2, 3], input=2)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=10, gate_name='cx', qubits=[3, 4], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=11, gate_name='cx', qubits=[3, 5], input=1)), SingleWireCutIdentifier(cut_action='CutLeftWire', wire_cut_location=WireCutLocation(instruction_id=12, gate_name='cx', qubits=[3, 6], input=1))]\n", - "Subcircuits: ABCABCDEFDEF\n", - "\n", - "\n", - "---------- 1 qubits ----------\n" - ] - }, - { - "ename": "ValueError", - "evalue": "None state encountered: no cut state satisfying the specified constraints and settings could be found.", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[9], line 15\u001b[0m\n\u001b[1;32m 11\u001b[0m interface \u001b[38;5;241m=\u001b[39m SimpleGateList(circuit2)\n\u001b[1;32m 13\u001b[0m op \u001b[38;5;241m=\u001b[39m LOCutsOptimizer(interface, settings, constraint_obj)\n\u001b[0;32m---> 15\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgamma =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m (out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m out\u001b[38;5;241m.\u001b[39mupper_bound_gamma(),\n\u001b[1;32m 20\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmin_reached =\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 21\u001b[0m op\u001b[38;5;241m.\u001b[39mminimum_reached(),\n\u001b[1;32m 22\u001b[0m )\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m out \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py:139\u001b[0m, in \u001b[0;36mLOCutsOptimizer.optimize\u001b[0;34m(self, circuit_interface, optimization_settings, device_constraints)\u001b[0m\n\u001b[1;32m 136\u001b[0m out_1 \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 138\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 139\u001b[0m state, cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcut_optimization\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimization_pass\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:291\u001b[0m, in \u001b[0;36mCutOptimization.optimization_pass\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 289\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m state \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned:\n\u001b[1;32m 290\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgreedy_goal_state\n\u001b[0;32m--> 291\u001b[0m cost \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch_funcs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcost_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgoal_state_returned \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 295\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state, cost\n", - "File \u001b[0;32m~/circuit-knitting-toolbox/circuit_knitting/cutting/cut_finding/cut_optimization.py:70\u001b[0m, in \u001b[0;36mcut_optimization_upper_bound_cost_func\u001b[0;34m(goal_state, func_args)\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (goal_state\u001b[38;5;241m.\u001b[39mupper_bound_gamma(), np\u001b[38;5;241m.\u001b[39minf)\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 70\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone state encountered: no cut state satisfying the specified constraints and settings could be found.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 72\u001b[0m )\n", - "\u001b[0;31mValueError\u001b[0m: None state encountered: no cut state satisfying the specified constraints and settings could be found." - ] - } - ], - "source": [ - "settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True)\n", - "\n", - "settings.set_engine_selection(\"CutOptimization\", \"BestFirst\")\n", - "\n", - "qubit_per_subcircuit = 7\n", - "\n", - "for qpu_qubits in range(qubit_per_subcircuit, 0, -1):\n", - " print(f\"\\n\\n---------- {qpu_qubits} qubits ----------\")\n", - "\n", - " constraint_obj = DeviceConstraints(qubits_per_subcircuit=qpu_qubits)\n", - " interface = SimpleGateList(circuit2)\n", - "\n", - " op = LOCutsOptimizer(interface, settings, constraint_obj)\n", - "\n", - " out = op.optimize()\n", - "\n", - " print(\n", - " \"gamma =\",\n", - " None if (out is None) else out.upper_bound_gamma(),\n", - " \"min_reached =\",\n", - " op.minimum_reached(),\n", - " )\n", - " if out is not None:\n", - " out.print(simple=True)\n", - " else:\n", - " print(out)\n", - " print(\n", - " \"Subcircuits:\", interface.export_subcircuits_as_string(name_mapping=\"default\")\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "ckt", - "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.9.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml b/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml index 29c66432c..7b3deae5c 100644 --- a/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml +++ b/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml @@ -1,6 +1,6 @@ --- features: - | - When specifying instances of :class:`OptimizationParameters` that are to be inputted to :func:`find_cuts` the user can now control whether the + When specifying instances of :class:`~OptimizationParameters` that are inputted to :meth:`circuit_knitting.cutting.find_cuts()`, the user can now control whether the cut-finder looks only for gate cuts, only for wire cuts, or both, by setting the bools ``gate_lo`` and ``wire_lo`` appropriately. The default value - of both of these is set to `True` and so the default search considers both gate and wire cuts. + of both of these is set to `True` and so the default search considers the possibility of both gate and wire cuts. From 2a486ad1f4561f841ae7e4d8ba022ffb57e67c45 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Thu, 23 May 2024 13:33:51 -0400 Subject: [PATCH 13/21] un-expose LOCC cost functions everywhere --- .../cutting/cut_finding/cut_optimization.py | 2 +- .../cut_finding/test_best_first_search.py | 3 ++- .../cut_finding/test_cut_finder_results.py | 27 +++++++++++++++++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/circuit_knitting/cutting/cut_finding/cut_optimization.py b/circuit_knitting/cutting/cut_finding/cut_optimization.py index 6f11daa02..791233b84 100644 --- a/circuit_knitting/cutting/cut_finding/cut_optimization.py +++ b/circuit_knitting/cutting/cut_finding/cut_optimization.py @@ -130,7 +130,7 @@ def cut_optimization_goal_state_func( # Global variable that holds the search-space functions for generating # the cut optimization search space. cut_optimization_search_funcs = SearchFunctions( - cost_func=cut_optimization_cost_func, + cost_func=cut_optimization_upper_bound_cost_func, # valid choice when considering only LO cuts. upperbound_cost_func=cut_optimization_upper_bound_cost_func, next_state_func=cut_optimization_next_state_func, goal_state_func=cut_optimization_goal_state_func, diff --git a/test/cutting/cut_finding/test_best_first_search.py b/test/cutting/cut_finding/test_best_first_search.py index 6cf50f8f4..efe27b6c9 100644 --- a/test/cutting/cut_finding/test_best_first_search.py +++ b/test/cutting/cut_finding/test_best_first_search.py @@ -93,10 +93,11 @@ def test_best_first_search(test_circuit: SimpleGateList): out, _ = op.optimization_pass() + print(get_actions_list(out.actions)) assert op.search_engine.get_stats(penultimate=True) is not None assert op.search_engine.get_stats() is not None assert op.get_upperbound_cost() == (27, inf) - assert op.minimum_reached() is False + assert op.minimum_reached() is True assert out is not None assert (out.lower_bound_gamma(), out.gamma_UB, out.get_max_width()) == ( 27, diff --git a/test/cutting/cut_finding/test_cut_finder_results.py b/test/cutting/cut_finding/test_cut_finder_results.py index e9dc02ed0..0ecf9a351 100644 --- a/test/cutting/cut_finding/test_cut_finder_results.py +++ b/test/cutting/cut_finding/test_cut_finder_results.py @@ -334,7 +334,7 @@ def test_four_qubit_cutting_workflow(self): e_info.value.args[0] == f"Search engine {search_engine} is not supported." ) - with self.subTest("Greedy search warm start test"): + with self.subTest("Greedy search gate cut warm start test"): # Even if the input cost bounds are too stringent, greedy_cut_optimization # is able to return a solution. @@ -342,7 +342,7 @@ def test_four_qubit_cutting_workflow(self): interface = SimpleGateList(self.circuit_internal) - settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=True) + settings = OptimizationSettings(seed=12345, gate_lo=True, wire_lo=False) settings.set_engine_selection("CutOptimization", "BestFirst") @@ -357,6 +357,29 @@ def test_four_qubit_cutting_workflow(self): assert state is not None assert cost[0] == 9 + with self.subTest("Greedy search wire cut warm start test"): + # Even if the input cost bounds are too stringent, greedy_cut_optimization + # is able to return a solution. + + qubits_per_subcircuit = 3 + + interface = SimpleGateList(self.circuit_internal) + + settings = OptimizationSettings(seed=12345, gate_lo=False, wire_lo=True) + + settings.set_engine_selection("CutOptimization", "BestFirst") + + constraint_obj = DeviceConstraints(qubits_per_subcircuit) + + # Impose a stringent cost upper bound, insist gamma <=2. + cut_opt = CutOptimization(interface, settings, constraint_obj) + cut_opt.update_upperbound_cost((2, 4)) + state, cost = cut_opt.optimization_pass() + + # 2 LO wire cuts are still found + assert state is not None + assert cost[0] == 16 + class TestCuttingSevenQubitCircuit(unittest.TestCase): def setUp(self): From 5ae9106f9bd78ebcdcfe299cf2c4553b8478a8da Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Thu, 23 May 2024 14:36:18 -0400 Subject: [PATCH 14/21] add min reached flag. --- .../cutting/automated_cut_finding.py | 5 +++ .../tutorials/04_automatic_cut_finding.ipynb | 38 ++++++++++--------- ...-reached-finder-flag-aa6dd9021e165f80.yaml | 10 +++++ .../cut_finding/test_best_first_search.py | 2 - test/cutting/test_find_cuts.py | 1 + 5 files changed, 36 insertions(+), 20 deletions(-) create mode 100644 releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml diff --git a/circuit_knitting/cutting/automated_cut_finding.py b/circuit_knitting/cutting/automated_cut_finding.py index e7c252737..9956b9156 100644 --- a/circuit_knitting/cutting/automated_cut_finding.py +++ b/circuit_knitting/cutting/automated_cut_finding.py @@ -52,6 +52,10 @@ def find_cuts( ``data`` field. - sampling_overhead: The sampling overhead incurred from cutting the specified gates and wires. + - min_reached: A bool indicating whether or not the search conclusively found + the minimum of cost function. ``min_reached = False`` could also mean that the + cost returned was actually the lowest possible cost but that the search was + not allowed to run long enough to prove that this was the case. Raises: ValueError: The input circuit contains a gate acting on more than 2 qubits. @@ -128,6 +132,7 @@ def find_cuts( elif inst.operation.name == "cut_wire": metadata["cuts"].append(("Wire Cut", i)) metadata["sampling_overhead"] = opt_out.upper_bound_gamma() ** 2 + metadata["min_reached"] = optimizer.minimum_reached() return circ_out, metadata diff --git a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb index cb5943415..ca0a9715f 100644 --- a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb +++ b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -26,7 +26,7 @@ "
" ] }, - "execution_count": 4, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -60,6 +60,7 @@ "output_type": "stream", "text": [ "Found solution using 2 cuts with a sampling overhead of 127.06026169907257.\n", + "Lowest cost solution found: True.\n", "Wire Cut at circuit instruction index 19\n", "Gate Cut at circuit instruction index 28\n" ] @@ -71,7 +72,7 @@ "
" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -92,7 +93,8 @@ "cut_circuit, metadata = find_cuts(circuit, optimization_settings, device_constraints)\n", "print(\n", " f'Found solution using {len(metadata[\"cuts\"])} cuts with a sampling '\n", - " f'overhead of {metadata[\"sampling_overhead\"]}.'\n", + " f'overhead of {metadata[\"sampling_overhead\"]}.\\n'\n", + " f'Lowest cost solution found: {metadata[\"min_reached\"]}.'\n", ")\n", "for cut in metadata[\"cuts\"]:\n", " print(f\"{cut[0]} at circuit instruction index {cut[1]}\")\n", @@ -108,17 +110,17 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABDAAAAHECAYAAADPr9q+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACNq0lEQVR4nOzdeVwU5R8H8M8enHIJCIuAggeeKOJJ3pmpaWrelleXlZpHavkr8+gwTcszzay0vK88MjMVb1PxAvECUVFAlkPumz1+f2CrK7cuO7Pweb9evoRnnpn5zMLMzn6ZeUai1Wq1ICIiIiIiIiISManQAYiIiIiIiIiISsMCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkejJhQ5AZCyBo+cjPVIpdAzYeinQ7bcZz7UMsWwLYJjtISIiMgaxvH/yvZNMCfeb8hPLawaY1utWFixgUJWRHqlESni00DEMojJtCxERkbHw/ZOo/LjflB9fs4rDW0iIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9DuJJ9JQOS8aj3tCuAACNWo3suBTEnr6KS/M2IkuZJHA6IiIiqmg8FyAqP+43ZAy8AoOoCMqz17G12TvY0eoDnBi/BE5NvdDlp6lCxyIiIiIj4bkAUflxv6GKxgIGURE0eSpkJ6QgS5mEuLM3ELbhMFxaN4CZjZXQ0YiIiMgIeC5AVH7cb6iisYBBVAor1+rw6tMOGpUaWrVG6DhERERkZDwX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VmPisqBWFz2Ou7mZFNsWvYhXOnpWVNRyaTZpAEJX7BI6BhERERE9paTztHpDuuDe/nNQ5+SXeR4iIiGxgGFkzRs44dLW/ujV4dme++xbvzrOrH8Vr3XzMmywZ+TRzR8PQ24jNzlD6ChERERE9ISSztNkFmaoM6AjIrYcKfM8RERCqzRPITEl7q7V8NcPL2Pz/jtY9FsoLt8s/fK8Wm7VMH5oY0we2QTmZjIjpCwbx6ZeULzQBC6tG8ChYS3Y1a2Jo28vLLh1hIiIiIgEU9J5mk0tF5jbV8NL6/8HcwcbWLk4oO7gzqhW04nndkQkWixgCEQikeD13nUx/JU6CApNwD//xuDCtUSE3kpC5IOCineHFq54wc8FnVu5occL7pDJxHfBzJWlf+DK0j8AAB2WjEfY7wfh2MQL5u1tcHfXKfiMeAl1B3eGfT13vLx1Fk5OXI7suGR0+XkanJp6Q5WVA2f/+jg/e52wG0JERERUyZR2nrav5ycAAEVAE3j3b4/b24/r5ntyHhYviEgsWMAQmEQiQdtmLmjbzAUAEK3MhOfLWwAAmxd0hYeimpDxyuXU5B8KtYVvOIzwDYcLtR97Z5ExIhERERERij5P+4/yzDUoz1wr1zxEREIQ35/0iYiIiIiIiIiewgIGEREREREREYkeCxhEREREREREJHocA4OKZeulEDqCjpiyEBEREQlNTOdGYspSGndroRMUEEsOIlPDAgYVq9tvM4SOQERERERF4Hnas1ncVugERPQ8eAsJEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6MmFDkDiNeUcEJMldIoC7tbA4rZCpyCq3AJHz0d6pFLoGGVm66VAt99mCB2DiEgQYjpmV8TxWEzbZyr4vige/BxVcVjAoGLFZAF30oVOQUTGkh6pREp4tNAxiIioDCr7Mbuybx9VbvwcVXF4CwkRERERERERiR4LGEREREREREQkeixgEBEREREREZHosYBBRERERERERKLHAgYRERER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gUFERESCGjt2LMaOHQsAuH37Nvr3749p06ahevXqRbY/acGCBVi7tuAxyRYWFti1axd+/PHHItezZ88eWFhY4MSJE7h48SJmzJiBjRs3ok2bNjh27BgAYMmSJcjOzgYAODo6wt7eHlevXkXTpk0rYtOJiIioHHgFBhEREYlCfn4+RowYgVWrVqF69eqltqelpSE1NRVOTk4AAJlMBoWi+NHSw8PD0apVKwCAv78/Tp48WajPpk2bMHz4cN33vXr1wo4dO55724iIiOj5sYBBREREojBjxgz07t0bHTp0KFN7WFgYvL29y7x8X19f/PPPP9Bqtfjnn38QHx+vNz08PBzm5ubw8vLStdWtWxehoaHl3xgiIiIyON5CQkRERILbv38/QkJCcPDgwTK1P4tevXrh7Nmz6Nq1K5o3b45mzZrpTd+4cSNef/31514PERERVQwWMIiIiEhQsbGxmD59Og4fPgypVFpq+398fHxw586dcq1r7ty5AIDAwEBYWFjoTdu2bVuh20pu377N8S+IiIhEggUMIiIiEtRXX32FtLQ0vbEnXnzxRcTFxRXZPmvWLACAvb097O3t8fDhQ904GAMHDsTly5dRrVo1nDt3DosXLwYAjBo1Ct9//z0GDRoEuVyOWrVqYfny5brlnjt3DnXq1IGzs7Netr///hvvv/9+hW07ERERlR0LGERERCSoH374AT/88EOx00ryySef4Mcff9Q9XnXnzp1F9vv9998BQPe0kae1bdsWf/31l15bUlISUlNT4evrW2IGIiIiMg4WMIiIiMhkdejQodDgnobi6OiIDRs2VMiyiYiIqPz4FBIiIiIiIiIiEj0WMIiIiIiIiIhI9FjAICIiIiIiIiLRYwGDiIiIiIiIiESPg3hSsaacA2KyhE5RwN0aWNxW6BRERERkygJHz0d6pFLoGLD1UqDbbzOEjkFEZHJYwKBixWQBd9KFTkFERERkGOmRSqSERwsdg4iInhFvISEiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9joFBREREREREJKC8fDWOX1DiwrVEXL75EMlpuZBIABdHK/g3ckJbXxcENHeBVCoROqqgWMAgIiIiIiIiEkBCUjaWbbqONTvDEPcwu8g+G/+6DQCo62mLD4Y0wvuDG6KatZkxY4oGbyEhIiIiIiIiMrJt/9xB49f+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WlZCLGAQERERERERGYmNtRn2r3wZn7/n90xPJqlmJcfKz17Ar190hFxetT7SV62tJSIiIiIiIhKYuZkMX4xviaCNfdH/xdqQSksvZFiYyzC6b32E7hyAD4Y2KtM8lU2lGcSTiIiIiIiIyJT4N3bGriUvIUqZge0H7+LCtUScv5qIiKg0AECjOg5o61sDbZrWwJAe3nByqNrPImcBg4iIiIiIiEhAngobfDSq4Nnj0cpMeL68BQBw8Mee8FBUEzKaqPAWEiIiIiIiIiISPRYwiIiIiIiIiEj0WMAgIiIiIiIiItHjGBhULHdroRM8JqYsRERE5WHrpRA6gsmpqNdMLD8LseQgIjI1LGBQsRa3FToBERGR6ev22wyhI9Aj/FkQEZk23kJCRERERERERKLHAgYRERERERERiR4LGEREREREREQkeixgEBEREREREZHosYBBRERERERERKLHAgYRERERERERiR4LGEREREREREQkeixgEBEREREREZHosYBBRERERERERKLHAgYRERERERERiR4LGEREREREREQkeixgEBEREREREZHosYBBRERERERERKLHAgYRERERERERiR4LGEREREREREQkenKhAxAZy5RzQEyW0CkAd2tgcVuhUxBVPYGj5yM9UvnM82tUat3X/wyeA6lc9szLsvVSoNtvM555fiKiyuR5j89UPL7fUGXDAgZVGTFZwJ10oVMQkVDSI5VICY82yLLS7sQaZDlERGTY4zMRVW68hYSIiIiIiIiIRI8FDCIiIiIiIiISPRYwiIiIiIiIiEj0WMAgIiIiIiIiItHjIJ5ERERP6bBkPOoN7QoA0KjVyI5LQezpq7g0byOylEkCpyMiIiKqmngFBhERURGUZ69ja7N3sKPVBzgxfgmcmnqhy09ThY5FREREVGWxgEFERFQETZ4K2QkpyFImIe7sDYRtOAyX1g1gZmMldDQiIiKiKokFDCIiolJYuVaHV5920KjU0Ko1QschIiIiqpIq9RgYSUlJmDdvHnbv3o3o6GjY2tqiadOm+OKLL9CxY0eh4xERkYgpXmiCNyLWQyKVQm5lAQC4umovVNm5AIBavdrA76PBevPY+3gg6PO1CPv9oNHzEhEREVV2lbaAce/ePXTp0gUZGRl4++234ePjg9TUVFy5cgUxMTFCxyMSVH5Gtu7r7IQUVKvpJGAa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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABDAAAAHECAYAAADPr9q+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACNq0lEQVR4nOzdeVwU5R8H8M8enHIJCIuAggeeKOJJ3pmpaWrelleXlZpHavkr8+gwTcszzay0vK88MjMVb1PxAvECUVFAlkPumz1+f2CrK7cuO7Pweb9evoRnnpn5zMLMzn6ZeUai1Wq1ICIiIiIiIiISManQAYiIiIiIiIiISsMCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkeixgEFEREREREREoscCBhERERERERGJHgsYRERERERERCR6LGAQERERERERkejJhQ5AZCyBo+cjPVIpdAzYeinQ7bcZz7UMsWwLYJjtISIiMgaxvH/yvZNMCfeb8hPLawaY1utWFixgUJWRHqlESni00DEMojJtCxERkbHw/ZOo/LjflB9fs4rDW0iIiIiIiIiISPRYwCAiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9DuJJ9JQOS8aj3tCuAACNWo3suBTEnr6KS/M2IkuZJHA6IiIiqmg8FyAqP+43ZAy8AoOoCMqz17G12TvY0eoDnBi/BE5NvdDlp6lCxyIiIiIj4bkAUflxv6GKxgIGURE0eSpkJ6QgS5mEuLM3ELbhMFxaN4CZjZXQ0YiIiMgIeC5AVH7cb6iisYBBVAor1+rw6tMOGpUaWrVG6DhERERkZDwX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VmPisqBWFz2Ou7mZFNsWvYhXOnpWVNRyaTZpAEJX7BI6BhERERE9paTztHpDuuDe/nNQ5+SXeR4iIiGxgGFkzRs44dLW/ujV4dme++xbvzrOrH8Vr3XzMmywZ+TRzR8PQ24jNzlD6ChERERE9ISSztNkFmaoM6AjIrYcKfM8RERCqzRPITEl7q7V8NcPL2Pz/jtY9FsoLt8s/fK8Wm7VMH5oY0we2QTmZjIjpCwbx6ZeULzQBC6tG8ChYS3Y1a2Jo28vLLh1hIiIiIgEU9J5mk0tF5jbV8NL6/8HcwcbWLk4oO7gzqhW04nndkQkWixgCEQikeD13nUx/JU6CApNwD//xuDCtUSE3kpC5IOCineHFq54wc8FnVu5occL7pDJxHfBzJWlf+DK0j8AAB2WjEfY7wfh2MQL5u1tcHfXKfiMeAl1B3eGfT13vLx1Fk5OXI7suGR0+XkanJp6Q5WVA2f/+jg/e52wG0JERERUyZR2nrav5ycAAEVAE3j3b4/b24/r5ntyHhYviEgsWMAQmEQiQdtmLmjbzAUAEK3MhOfLWwAAmxd0hYeimpDxyuXU5B8KtYVvOIzwDYcLtR97Z5ExIhERERERij5P+4/yzDUoz1wr1zxEREIQ35/0iYiIiIiIiIiewgIGEREREREREYkeCxhEREREREREJHocA4OKZeulEDqCjpiyEBEREQlNTOdGYspSGndroRMUEEsOIlPDAgYVq9tvM4SOQERERERF4Hnas1ncVugERPQ8eAsJEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6LGAQURERERERESixwIGEREREREREYkeCxhEREREREREJHosYBARERERERGR6MmFDkDiNeUcEJMldIoC7tbA4rZCpyCq3AJHz0d6pFLoGGVm66VAt99mCB2DiEgQYjpmV8TxWEzbZyr4vige/BxVcVjAoGLFZAF30oVOQUTGkh6pREp4tNAxiIioDCr7Mbuybx9VbvwcVXF4CwkRERERERERiR4LGEREREREREQkeixgEBEREREREZHosYBBRERERERERKLHAgYRERER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gUFERESCGjt2LMaOHQsAuH37Nvr3749p06ahevXqRbY/acGCBVi7tuAxyRYWFti1axd+/PHHItezZ88eWFhY4MSJE7h48SJmzJiBjRs3ok2bNjh27BgAYMmSJcjOzgYAODo6wt7eHlevXkXTpk0rYtOJiIioHHgFBhEREYlCfn4+RowYgVWrVqF69eqltqelpSE1NRVOTk4AAJlMBoWi+NHSw8PD0apVKwCAv78/Tp48WajPpk2bMHz4cN33vXr1wo4dO55724iIiOj5sYBBREREojBjxgz07t0bHTp0KFN7WFgYvL29y7x8X19f/PPPP9Bqtfjnn38QHx+vNz08PBzm5ubw8vLStdWtWxehoaHl3xgiIiIyON5CQkRERILbv38/QkJCcPDgwTK1P4tevXrh7Nmz6Nq1K5o3b45mzZrpTd+4cSNef/31514PERERVQwWMIiIiEhQsbGxmD59Og4fPgypVFpq+398fHxw586dcq1r7ty5AIDAwEBYWFjoTdu2bVuh20pu377N8S+IiIhEggUMIiIiEtRXX32FtLQ0vbEnXnzxRcTFxRXZPmvWLACAvb097O3t8fDhQ904GAMHDsTly5dRrVo1nDt3DosXLwYAjBo1Ct9//z0GDRoEuVyOWrVqYfny5brlnjt3DnXq1IGzs7Netr///hvvv/9+hW07ERERlR0LGERERCSoH374AT/88EOx00ryySef4Mcff9Q9XnXnzp1F9vv9998BQPe0kae1bdsWf/31l15bUlISUlNT4evrW2IGIiIiMg4WMIiIiMhkdejQodDgnobi6OiIDRs2VMiyiYiIqPz4FBIiIiIiIiIiEj0WMIiIiIiIiIhI9FjAICIiIiIiIiLRYwGDiIiIiIiIiESPg3hSsaacA2KyhE5RwN0aWNxW6BRERERkygJHz0d6pFLoGLD1UqDbbzOEjkFEZHJYwKBixWQBd9KFTkFERERkGOmRSqSERwsdg4iInhFvISEiIiIiIiIi0WMBg4iIiIiIiIhEjwUMIiIiIiIiIhI9joFBREREREREJKC8fDWOX1DiwrVEXL75EMlpuZBIABdHK/g3ckJbXxcENHeBVCoROqqgWMAgIiIiIiIiEkBCUjaWbbqONTvDEPcwu8g+G/+6DQCo62mLD4Y0wvuDG6KatZkxY4oGbyEhIiIiIiIiMrJt/9xB49f+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WlZCLGAQERERERERGYmNtRn2r3wZn7/n90xPJqlmJcfKz17Ar190hFxetT7SV62tJSIiIiIiIhKYuZkMX4xviaCNfdH/xdqQSksvZFiYyzC6b32E7hyAD4Y2KtM8lU2lGcSTiIiIiIiIyJT4N3bGriUvIUqZge0H7+LCtUScv5qIiKg0AECjOg5o61sDbZrWwJAe3nByqNrPImcBg4iIiIiIiEhAngobfDSq4Nnj0cpMeL68BQBw8Mee8FBUEzKaqPAWEiIiIiIiIiISPRYwiIiIiIiIiEj0WMAgIiIiIiIiItHjGBhULHdroRM8JqYsRERE5WHrpRA6gsmpqNdMLD8LseQgIjI1LGBQsRa3FToBERGR6ev22wyhI9Aj/FkQEZk23kJCRERERERERKLHAgYRERERERERiR4LGEREREREREQkeixgEBEREREREZHosYBBRERERERERKLHAgYRERERERERiR4LGEREREREREQkeixgEBEREREREZHosYBBRERERERERKLHAgYRERERERERiR4LGEREREREREQkeixgEBEREREREZHosYBBRERERERERKLHAgYRERERERERiR4LGEREREREREQkenKhAxAZy5RzQEyW0CkAd2tgcVuhUxBVPYGj5yM9UvnM82tUat3X/wyeA6lc9szLsvVSoNtvM555fiKiyuR5j89UPL7fUGXDAgZVGTFZwJ10oVMQkVDSI5VICY82yLLS7sQaZDlERGTY4zMRVW68hYSIiIiIiIiIRI8FDCIiIiIiIiISPRYwiIiIiIiIiEj0WMAgIiIiIiIiItHjIJ5ERERP6bBkPOoN7QoA0KjVyI5LQezpq7g0byOylEkCpyMiIiKqmngFBhERURGUZ69ja7N3sKPVBzgxfgmcmnqhy09ThY5FREREVGWxgEFERFQETZ4K2QkpyFImIe7sDYRtOAyX1g1gZmMldDQiIiKiKokFDCIiolJYuVaHV5920KjU0Ko1QschIiIiqpIq9RgYSUlJmDdvHnbv3o3o6GjY2tqiadOm+OKLL9CxY0eh4xERkYgpXmiCNyLWQyKVQm5lAQC4umovVNm5AIBavdrA76PBevPY+3gg6PO1CPv9oNHzEhEREVV2lbaAce/ePXTp0gUZGRl4++234ePjg9TUVFy5cgUxMTFCxyMSVH5Gtu7r7IQUVKvpJGAa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", "text/plain": [ "
" ] }, - "execution_count": 3, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -140,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -166,7 +168,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -176,7 +178,7 @@ " 1: PauliList(['ZIII', 'IIII', 'IIII'])}" ] }, - "execution_count": 5, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -187,17 +189,17 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwYAAAD2CAYAAABsvJBQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQHklEQVR4nO3dd1gUV9sG8HsXdinSRKSIKFiwoohRUYM1GkuiaFSMJur7BX3tJSTRGLuGaBKjYgtqXmtii7HEFhVL1KhYwFAURQEBQVBEgWVpu98fxtUNbRHYYdn7d11cF3vOmdlnmNlhnp0z54iUSqUSRERERESk18RCB0BERERERMJjYkBEREREREwMiIiIiIiIiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERATAUOgCqHoJGL0VGbLLQYQAAzJ3t0XPrLKHDqDK4b0hbqsqxxuNMODwGqi7uG9IEEwOqEBmxyUi/kyB0GFQE7hvSFh5rxGOg6uK+IU2wKxERERERETExICIiIiIiJgZERERERAQmBkREREREBD58TAJ4e+UkNPLpDgBQFBQg+1E6ki6G44b/z5AlpwkcHRFVNp4DiMcAUdXEOwYkiOTLkdjdyhe/vjUBf05aiVotndFtg5/QYRGRlvAcQDwGiKoeJgYkCEVuPrJT0yFLTsOjy7cQteMUbNs1gcTMROjQiEgLeA4gHgNEVQ8TAxKciV1NOL/nCUV+AZQFCqHDISIt4zmAeAwQVQ3V/hkDhUKBVatWITAwELGxsahduzaGDRuGRYsWoUaNGkKHp7fsO7XAyOjtEInFMDQxAgCErz+E/OwcAEC3jX54eO4m7uw4BQCwbumCLuum4fden6MgJ0+wuImoYpR2DjC1t0a/w1/j8LszIX/yHAYmUgw8tRynP/kO6bcfCBk6VZDSjoF6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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwYAAAD2CAYAAABsvJBQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABQHklEQVR4nO3dd1gUV9sG8HsXdinSRKSIKFiwoohRUYM1GkuiaFSMJur7BX3tJSTRGLuGaBKjYgtqXmtii7HEFhVL1KhYwFAURQEBQVBEgWVpu98fxtUNbRHYYdn7d11cF3vOmdlnmNlhnp0z54iUSqUSRERERESk18RCB0BERERERMJjYkBEREREREwMiIiIiIiIiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERgYkBERERERGBiQEREREREYGJARERERERATAUOgCqHoJGL0VGbLLQYQAAzJ3t0XPrLKHDqDK4b0hbqsqxxuNMODwGqi7uG9IEEwOqEBmxyUi/kyB0GFQE7hvSFh5rxGOg6uK+IU2wKxERERERETExICIiIiIiJgZERERERAQmBkREREREBD58TAJ4e+UkNPLpDgBQFBQg+1E6ki6G44b/z5AlpwkcHRFVNp4DiMcAUdXEOwYkiOTLkdjdyhe/vjUBf05aiVotndFtg5/QYRGRlvAcQDwGiKoeJgYkCEVuPrJT0yFLTsOjy7cQteMUbNs1gcTMROjQiEgLeA4gHgNEVQ8TAxKciV1NOL/nCUV+AZQFCqHDISIt4zmAeAwQVQ3V/hkDhUKBVatWITAwELGxsahduzaGDRuGRYsWoUaNGkKHp7fsO7XAyOjtEInFMDQxAgCErz+E/OwcAEC3jX54eO4m7uw4BQCwbumCLuum4fden6MgJ0+wuImoYpR2DjC1t0a/w1/j8LszIX/yHAYmUgw8tRynP/kO6bcfCBk6VZDSjoF6fdvD/dOhastYutZF8NzNiNp2QuvxEumDap8YzJgxAwEBARg0aBD8/Pxw69YtBAQEICQkBKdOnYJYzJsmQki9cRcXpq2BgZEEzgM6oY5XK4Qs26mqD567GX0PLkbc0SvIeZqJjkvH4srsn5gUEL0mX5aDJ+ExUOTlw6xubZjXtxM6JI2Vdg6QJachMvAw2i0cg/OTA+DuNwxxx64wKahGSjsGHhwLxoNjwarX9fq0g8eXIxC996wA0RLph2qdGERERGD16tUYPHgw9u3bpyp3cXHB1KlTsWvXLowYMULACPVXgTwXGbHJAIDQ73bD3NkeHb7+BH999iOAFxcFEYGH8dbcj/E4JBrP7ich6UKYkCHrJQNjKVpNHQyXgZ1h6mD9Yr/FPcK9X//ErZ+OCh2e3pKnZeDvlb/i7q4zyMuQqcrtO7WA2+RBcOzuLlxwGirtHAAAt346hveOL0Mz336o368DDvX8TKhwqRJocgy8ZOpgjQ7+vjg10h8F2bnaDlWv9frlK0jMTHHMey6UilfdvKzdXND/sD/+nBSAuMOXBIyQKpLOfl1+8+ZNDBw4EJaWlrCwsIC3tzeSkpJgbm6O4cOHAwB27twJpVKJ6dOnqy07duxYmJqaYseOHQJETkUJ/X43Gvl0R63WDVVltzcfh1UTJ7hN9sbVhVsFjE5/dVw6Fg2HdsW1xdtwoOsMHB+yALc3H4fUwlTo0PSWLOUpjrw3G5Ebj6glBQCQ/FcETo78Gre3/iFQdG+uqHOAUqHA1flb0GHx/+Ha4u2qLiZUPRV1DAAARCJ0WTMNYWsO4OmtOGGC02MXpq+FRQN7uE0dpCozMJaiy5qpuP/beSYF1YxOJgZBQUHw9PREVFQU5syZA39/fyQkJKBv377IzMyEu7s7AODq1asQi8Vo37692vLGxsZwd3fH1atXBYieipIRk4z4k9fgMevDV4VKJaK2nURC0A3kPHkuXHB6rF6f9ghfdxAPjl9FZnwKnkbGIXrPWdxc8avQoemtPyetQkZMUgktlLj85SY8Do3WWkwVochzAADHnm0gS05Dzab1BIqMtKW4Y6D19A+QmyHD7f8dEygy/Zadko6/PvsRrWcMUSVtbb/6CGKpBFfm/E/g6Kii6VxikJqaCh8fH3h4eCAkJASff/45Jk+ejKCgIDx48KLv6cvE4OHDh7CxsYGRkVGh9Tg6OuLx48fIzeUtyaoifN0hOHZzh33HFq8KFQooFUrhgtJzspSncOzeBlIrM6FDIQBpEbFIvhBeciMlAKVSJ7t6/fscYNW0Hur1aY/DfWeh8YieMKtnK3CEVNn+fQzYtmuCxiN64uKMtQJHpt8eHL+K6D1n0WXNVDj1fgtNRvXC+ckByM+SCx0aVTCde8Zg2bJlePr0KTZv3gwTk1djHVtaWsLDwwNBQUGqxEAmkxWZFAAv7hq8bCOVSisktvz8fCQnJ1fIunRNXl6+xm0vTC/6BJ96LQpbHIZUSCwJCQnlXk91UZZ9829/+a1Hl3XTMTz8J6RHJSD1xh0kBt3Ag+NvdreN+6Z87m7T/BvT+wcuor7fQIgNDSoxInWaHmuangM6LhuHq/O3QJachpBvd6HD158g6ONvNIqDx5kwKvIYkFqYwmv1VFyYtgY5TzPLHAePAXXl+V8AAFfnbcH7J79D9/99jr9X7EPq9TtvHAf3jXbY29vD0LBsl/o6lxjs2rULXl5ecHV1LbLezs4O9vb2AABTU1OkpKQU2U4ul6vavJSfnw8/Pz9s374dCoUCH3zwAdauXatKIkqTnJwMJyensmxOtbGkVi84SiyEDgMAcOfOHQzT0/1QlPLsm5SrUdjnOQk2bRrDtq0r7Dybo9vGz5B4OgRBo5eWeX3cN+XzfxZt4WXqrFFbZX4BmjdojCyl9kbyqsjzQOOR70D++BkSgm4AAO7tPYfGH/ZAvX4d8ODolRKX5XEmnIo8BpqMfhcmtlZov3CMWnn03nOI3HC4xGV5DBRW3n2Tn52D8PWH0HHpWNxc+ebdSblvtCc+Ph5169Yt0zI6lRgkJycjMTERPj4+heoUCgXCwsLQpk0bVVmdOnUQGRmJnJycQncOEhMTYWNjo3a3wN/fH2fOnEFYWBikUikGDBiAL774AgEBAZW3UVSi6D1nEb3nrNBh6DVlgQKp16KQei0KEYG/o8EHXuiyZhrsOjbHo0uRQoenV7LLcJGvUCqRoyyoxGgq192fT+Huz6fUyo4Pni9QNCSEsNX7EbZ6v9Bh0GuU/9x14CR01ZdOJQZZWVkAAJFIVKju4MGDSElJUXUjAoB27drhxIkTCA4OhpeXl6pcLpcjNDQUXbp0UVvHpk2b8O2338LR0REAsGDBAgwdOhQrVqyAgUHpt+Pt7e0RHx//Jpum8y4NW4qsmKrRjcrV1RXxe/hA1EsVvW+e3U0EABjXsizzstw35ZN2/S5ujNesr7WtVwvErFhVyRGpqyrnAR5nwuExUHVx3+iflz1oykKnEgMnJycYGBjg3LlzauVxcXGYMmUKAKglBj4+PvD398fKlSvVEoONGzdCJpNh5MiRqrL09HTEx8erLe/h4YGMjAzExsaiYcN/DZ9WBENDwzLfsqkuJJKqcyhJJPq7H4pSnn3T57eFiDlwEY9v3oP8yTNYODvA48sRyEnPRPJfpTwEW0ws3DdvztHREfd/OIj0O6X3z3Uf7631v3VVOQ/wOBMOj4Gqi/uGNFE1jhINSaVSjBo1Cps3b8bAgQPRv39/xMfHY+PGjbCzs0NiYqLahb2bmxsmTZqENWvWYPDgwejXr59q5uOuXbuqTW6WkZEBALCyslKVvfz9ZR2Rvkk8HYIGg73g/rkPpGYmyH7yDI8u38KFGWuRk8bPhbaJRCJ0/XEGjnnPRe5zWRENACiB5mP7w7FHm8L1REREJdCpxAAAAgICIJFIcPDgQZw+fRodO3bE/v37sWjRIkRHRxd6KHnlypVwdnbGhg0bcOTIEdjY2GDKlClYtGgRxOJXo7Wam5sDAJ49e6a69ZKenq5WR6RvwtYcQNiaA0KHQa+p2aw++v3uj+B5m/Hw3E21OpPaNdFy0kA0H9u/yC6XRETlwef+qj+dSwzMzMwQGBiIwMBAtfLw8HC4ubmpXewDgIGBAfz8/ODn51fieq2srODk5ITQ0FA0adIEABASEgJzc3M4OztX6DYQEZWHlWtd9N41F8mXI3F80DwAQOcVk9DwAy+Iq0h3ASIi0j3V4j9Ieno6EhIS0L9//3Ktx9fXF9988w28vLwgkUiwYMECjBkzRqMHj6l4jUf0ROPhPaBUKnBp5kak336gqnPq/RZaTR2Mgrx83Nl+Evd/Ow8A6PT9eFg0rIMCeS4u+q2H7OETNBrWDa0/HYqsxMcAgJMjv0aBnBPUkf4yr2en+r1Ol1Y6lRSY1a2NLuumQ5GfD5GBAS7P2oint+JU9V5rpsK8nh1EBmLc3nIc9/aeK2FtpCtK2+8GJlJ0WPx/MKtnB7GBGKc+8oeZU210/O6/UCqUUOYX4KLfemQ+KHoociIqH935L1KCsLAwAOoPHr+J2bNn4/Hjx2jRogUUCgWGDBmCZcuWVUCE+ktqZYYmo3vjSP/ZMK9vh45Lx+KPoQtfVIpEaPvVSBzu+yUKcnLR57eFiD95HQ6dW6AgJw/HB81DrVYN0Parj3B+0ovRVe7sOMmuLUTVQFbSExwdOAdQKmHfuSVaTR2McxNWqOpDl+9BRkwyxFJDDDz9A2IOXISinBM0kfBK2+/unw7D/f0XkHzx1eAG8ifPceqjb5CXIYNjd3e0njEEF2esEyJ8omqPicFrDA0NERAQwHkLKlDtNo2Q/FcElPkFeH7vIYysLQCRCFAqYWxtDvnj58iXvZhs7ln0Q9T2aAyLBnXw5OY9AMCTv+/DrkNT1foa+XRH3V5t8eD4VUSsPyTINhFR+b0+DrrU3ARpkbFq9Rn/DKuoyM0HlEoolUpthkeVpLT9bt+5BQyMDOH+6VA8PP83/l65D/Inz1X1irwCjqFPVInEpTep+iZOnAilUglPT0+hQ6F/kVqZIfdZlup1XmY2pBYvZpuWP3kOYxsLmNhawbCGMew6NIORlRme3n6AOt3cAQCO3d1h8s94+Q+OB+NA1xn4Y8hC2HdsAYe33bS+PURUcaxbOKPf71+jw9e+SDofVmSblpO8EXvkMpT5ujtZG6krab9bN3dG4plQHB+yALXcGsC+YwtVnYGxFO6fD0PkpqPaDplIb1SLxICqrtxnWZBa1FC9lpiZqA2zeGnmBnRZOw1d189AelQ8ZI/SkHg6BM/vP0SffQvh2KMN0v7pf5r7XAalQgFFXj7ijl6BtZuL1reHiCpOWkQsjr7/FYLGLEUH/08K1bsM7Ixabi4IWbZLgOiospS03+Vpz5F49iagVOLhuZuo2bw+AEBkIEaXddMQsf6Q2nNqRFSxmBhQpUq9cRd2ns0gMhDD3NkeOWnPgde6BDy6fAt/DF2Ic+NXwNDUCKnX7wIAQr/fg+MfzEf8H9eQ/FcEAEBibqpazr5jc2TEJGl3Y4iowoilr3qy5j2XoSBbfSCBOt1ao/GHPXB+6mq1cwbpttL2+6PLt1CrVQMAQK1WDfD8n/N85+UT8PDsTTw4flV7wRLpoWrxjAFVXbnpmbj7SxD67l8MpVKBy19ugmN3d0itzBCz/wLemj8KtdwaQJFfgBvf/AJFXj6MrM3RfeNnUOQXICvxMa589RMAoMX49+HYzR1KhQKPQ+/xHwSRDrNt1xTunw2DskABkUiE4AVb1M4NXqsmQ/boKXrvnAsAODd+BbJT04UNmsqttP1+3X8HOn8/AQbGUqRHxSPxdAgcu7vDeUAnmDnZwmVgZ6RFxCB43hahN4WoWmJiQJXuzo5TuLPjlOr108hXQ9NdW7itUPuctAwc/2B+ofLQ73Yj9LvdlRMkEWlV8sVwHH9t5Jl/2916rBajIW0pbb9nJTzGieGL1coSz4RiR4ORlR0aEYFdiYiIiIiICEwMiIiIiIgI7EpEFcTc2b5cyyvyC/D8/ouHzCwaOEBs+OazTZc3luqG+4a0paocazzOhFOevz3PNZWrqvxNqkocVDSRkrPGUBWQ9fAJ9rb9LwBg6PVA1KhTS+CI6CXum6qruu2b6rY9VDbc/0TCY1ciIiIiIiJiYkBEREREREwMiIiIiIgITAyIiIiIiAhMDIiIiIiICEwMiIiIiIgITAyIiIiIiAhMDIiIiIiICEwMiIiIiIgITAyIiIiIiAhMDIiIiIiICEwMiIiIiIgITAyIiIiIiAhMDIiIiIiICEwMiIiIiIgIgKHQAeizGVeARJnQUQCOpsCKDkJHQVRY0OilyIhNFjoMjZk726Pn1llCh0EVoCodezyu9E9VOv50QWV9RvTxOo2JgYASZcD9DKGjIKq6MmKTkX4nQegwSA/x2CMh8firGvTxOo1diYiIiIiIiIkBERERERExMSAiIiIiIjAxICIiIiIiMDEgIiIiIiIwMSAiIiqXt1dOwpikXzEm6VeMStiNodcD8XbAFJjaWwsdGlGZ9dm3EJ2+H1+o3KxubYxJ+hW27ZsKEFXVF/VVN8Su9i1UnvMoFtcHipAZeUGAqMqOiQEREVE5JV+OxO5Wvvj1rQn4c9JK1GrpjG4b/IQOi4ioTJgYEBERlZMiNx/ZqemQJafh0eVbiNpxCrbtmkBiZiJ0aEREGtOLxEChUGDFihVo2rQpjI2N4eTkBD8/P2RlZQkdGhERVTMmdjXh/J4nFPkFUBYohA6HiEhjejHz8YwZMxAQEIBBgwbBz88Pt27dQkBAAEJCQnDq1CmIxXqRHxERUSWx79QCI6O3QyQWw9DECAAQvv4Q8rNzAADdNvrh4bmbuLPjFADAuqULuqybht97fY6CnDzB4iZ6U332L4LUzAQiiSFSrtzC5S83QalgIlyamJWj8fzGMRha2qLF6nChwymk2icGERERWL16NQYPHox9+/apyl1cXDB16lTs2rULI0aMEDBCqk6UCgWSLoQjevcZZD18AgNjKRy7tkYjn24wqmkudHhEVElSb9zFhWlrYGAkgfOATqjj1Qohy3aq6oPnbkbfg4sRd/QKcp5mouPSsbgy+ycmBaSzgj7+BnmZ2QCAbps+g/P7HRFz8KLAUVV9Nu/8H+zen4aYlaOEDqVIOv1V+c2bNzFw4EBYWlrCwsIC3t7eSEpKgrm5OYYPHw4A2LlzJ5RKJaZPn6627NixY2FqaoodO3YIEHn5KHKykfjzXISPb4wbQ00QOtIat/zaIeX3AKFD02tZSU/w+7szccJnEe7/dh6PrtzCw7OhuLpwK3a3GYfoPWeFDrHasPNshh6bZ2LI1fUYk/QrWk3/QOiQSM8VyHOREZuM9Kh4hH63GxnxKejw9SeqellyGiICD+OtuR+jyce98Ox+EpIuhAkYMVHRcp/LILWoUahcavmi7GUy+zIpEBkawEBiCKVSqb0gqyADU0sUyJ4VKi/ISgcAiCTGAADzll1hYFZ1RyzT2cQgKCgInp6eiIqKwpw5c+Dv74+EhAT07dsXmZmZcHd3BwBcvXoVYrEY7du3V1ve2NgY7u7uuHr1qgDRl8+DHycg7cw21B3zHVqsiYTrkjOo3W8S8v85+Ej7ctIz8ceQBUgLj3lV+NpJUpGbjwvT1vDblApiaGqM9LvxuLZ4O2SPngodDlEhod/vRiOf7qjVuqGq7Pbm47Bq4gS3yd64unCrgNERFe9ZdCJqtWoA0b+6Wdu0aQRFfgEyYpJUZe/+ugAfhv8PeZnZiDt8WduhVinGdZtCdu86lAUFauVZd4MBsQGMHBoJFFnZ6GRikJqaCh8fH3h4eCAkJASff/45Jk+ejKCgIDx48AAAVInBw4cPYWNjAyMjo0LrcXR0xOPHj5Gbm6vN8Mst/coB2A36HFae3jCyc4GpS2vY9ByDOsPnCR2a3rq9+Tie308qvoFSCYiA4HlboMjL115g1VTi6RDc8P8FsYf+giKXXTGo6smISUb8yWvwmPXhq0KlElHbTiIh6AZynjwXLjiiEtzeehzGtS3ReeUk1GrVAOb17eDi3RltvhiO6N1nkPtcpmr7x5AF2O0+FgYmUti/3VLAqIVXu+9E5Kc/QmzAf5AVfR05SfeQ9udOPPx5Lmx6/geGZlZCh6gRnXzGYNmyZXj69Ck2b94ME5NXQ8FZWlrCw8MDQUFBqsRAJpMVmRQAL+4avGwjlUrLHVd+fj6Sk5M1bp+XZwdAUub3kdR0wPMbx2HdZQQMzct/OyovLw8JCY/KvZ7ykD9KV/2elJQEY0W2cMGUkbJAgcjNxwARgJLupCqB7JSnCNn5B+x6tNZWeOUm5L7J07EkKi8vHwkJCVp7P13+3BSlKm1PRRx74esOof/vX8O+YwskX4p4UahQQKkoW5cLbR9XQqlK+19oQp77shIe4+j7X8Fj5ofouXUWJBamyIx7hPB1hxC56Uih9gXyXDw4Fox677ZD0p9/CxBx5X1GynKdZmRbH02W/YWHP8/BvSXvo0D2DFL7BrAb9Dns3p9Wzjje7DrN3t4ehoZlu9TXycRg165d8PLygqura5H1dnZ2sLe3BwCYmpoiJSWlyHZyuVzV5qU9e/YgICAAoaGhsLGxQWxsrMZxJScnw8nJSeP2zVeHw6ReC43bv1R/8ibELB+Bm6Nqw8SpBWo08YRl236w7DAQIpGozOu7c+cOnN4VNtOvKTbBD7b9AADt27fHUx36h2AlNsYK2/4at186aRZ+zax6IxEUR8h9s6RWLzhKLLT2fuV1584dDCvDOaC8dPlzU5SqtD1lOfYuTF9bZHnqtShscRhS7li0fVwJpSrtf6EJfe57GhmHoNFLi62XmJtCLDVEzpPnEBmI4dTrLST/FaHFCNVV1mekrNdppi6t0WjO7xUex5tep8XHx6Nu3bplWkbnEoPk5GQkJibCx8enUJ1CoUBYWBjatGmjKqtTpw4iIyORk5NT6M5BYmIibGxs1O4W1KxZE5MnT8ajR4+wYsWKytuQcjBr1hktA+8h604wsqIuISPiT9xbNgSWbfui4VeH3ig5oDcnRtn+3mLuHyIi0mFSS1N03/Q5xBJDiAzESPrzJqK2nxA6LJ1wb9lQZN66gPznj/H3/9WF/ZDZsO03UeiwVHQuMXg5KVlRF78HDx5ESkqKqhsRALRr1w4nTpxAcHAwvLy8VOVyuRyhoaHo0qWL2jp69eoFADhw4ECZY7O3t0d8fLzG7adE2iFeXua3AQCIDAxh1qwTzJp1gp23H56c3YHYFR8jM+JPmLfsWqZ1ubq64o8yxF0Z5I/SceG9BQCA4OBgGNtZCRpPWShy8/Hnu3OQn6nZzvz0m3lYPtCzkqOqOELum0vDliIrRvPueUJzdXVF/J7/ae39dPlzU5SqtD2VdexF7zlb5hHKtH1cCaUq7X+hVfVzX1bCYxzuM1PoMFQq6zNSnuu04jScubfMy7zpddrL3jNloXOJgZOTEwwMDHDu3Dm18ri4OEyZMgUA1BIDHx8f+Pv7Y+XKlWqJwcaNGyGTyTBy5MgKi83Q0LBMt2wkdwFU0AFnXLcZACD/WdHdpkqMQyIp862mipYlfvWsiIODA2rUqSVgNGXnOuIdRG44XGo7iZkJPP7zHiSmxlqIqmIIuW8kEt06RUkkZTsHlJeuf27+rSptT1U69rR9XAmlKu1/oVWl408XVNZnpCKv08pDm9dpOnfkSaVSjBo1Cps3b8bAgQPRv39/xMfHY+PGjbCzs0NiYqJaYuDm5oZJkyZhzZo1GDx4MPr166ea+bhr1646OblZ1OyusPb6EKaN3oKhZW3kJEUjcftsGNSwgrlbd6HD00vNffsjes9Z5D7LLPEBZLepg3UqKaiqDE2NYeHy4psQscQQJrWtYN3CGXlZcmTEVt1v2YiIiKoynUsMACAgIAASiQQHDx7E6dOn0bFjR+zfvx+LFi1CdHR0oYeSV65cCWdnZ2zYsAFHjhyBjY0NpkyZgkWLFkEs1r0RWy09+iLtz5/xcOc8FMiew9DSFuYtusB56mYYWtgIHZ5eMnOqjd475+DkyK+Rk5ZR5AhFLScOhNtkbyHCq3ZsWjdEn98Wql43+7++aPZ/fZH8VwSOfzBfwMiIiIh0l04mBmZmZggMDERgYKBaeXh4ONzc3Apd7BsYGMDPzw9+fn7aDLPS2A+ZBfshs4QOg/7Fxr0RBl9cjeg9Z3Fn+0k8i04EADgP6ISWEwbAxl03JjfRBcmXIipktBciIiJ6RScTg6Kkp6cjISEB/ftrPmxkUQoKCpCXl4e8vDwolUrI5XKIRKJi50Igep2RlRlajHsPzu91xN62/wUAtJs/Wq/7yhLpA7O6tdFl3XQo8vMhMjDA5Vkb8fRWnKrea81UmNezg8hAjNtbjuPe3nMlrI2oMIsGDvA+uwLHvOci9cZdtTqzerbo/MNEiCWGeHAsGBE/HoKBiRTv7pkPq8Z1cWnmBsQcvFji+o1qWcDz609gXMsC+dm5CBr1jVp987H94TLobSjyCpAWdh9X5pT8sG/rGUNQp1trFMjzcGH6GsiS0kp9P7HEEF3WToOJrRVEBmJc+eonPPn7PlrPGAKHt90AAOYu9ghfexC3fjqq6Z+u0t0Yaooaru0BALbvTUPNjoMKtYn6qhuMHZui/sQfVWXyxDuImNICTb45D7MmVWNQkmqTGISFhQFQf/D4TWzfvh3/+c9/VK9NTExQv379Ms1nQERE+iUr6QmODpwDKJWw79wSraYOxrkJr4a8Dl2+BxkxyRBLDTHw9A+IOXCRs6BTmbSeMQTJlyKLrHtrzse48c0vSL1+B31+W4i4I5eRlfgYZ/7vOzQZ1Vuj9bebPxqh3+/Gs+iHRdbHn7yOyI0vJjjrun4G7Do2x6Ni4rFyrQvb9k1xbOBcOHRpBY+ZHxaa76Oo93PwckNuhgxnxy2HTZvGaDXtA5z55DvcXPErbq74FQDw/olvEXfkskbbpC3S2vXQ5OuzxdanXz0MAxPzQuVJexbDvEXZRpKsbLrXwb4YFZUYjBkzBkqlUu2HSQEREZVEWaAAlC8eLJKamyAtMlatPuOfoScVufnAP/9biDRl06YxslPSIUt6UmS9ZWNHpF6/AwBIOHUDdp7NoFQokJ2artH6RWIxrJrUhdvkQejz20I0HtGzUJvXB3ZQ5Oe/OOaLYefZHPEnrwMAkv78G7VaNdDo/TJik2Fg9GKmYamlKeRPnqktZ+VaF7nPsiBLVr/7ILS8tIeImt0V978bjrx09dEhlQoFUo+uRe1+k9TKs6KuQGJlD6lN1RpxrNokBhMnToRSqYSnZ9W4FUNERPrFuoUz+v3+NTp87Yuk82FFtmk5yRuxRy5DmV+g5ehIl7WaNhhha/YXWy8Sv5rbKedZFoxqFv52uiTGNhawbu6M8PWHcGL4YjQe3gPm9e2KbGvbvilM7a2REny72PVJrcxejNL3Mj4D9cvN4t4vMyEVhiZGGHR+FTr/MBG3Nql3F2rwQRfc33+hTNumDW4b7qOJ/zlYtR+AhM3qz7M+Ob0VVh0HQyxRH5Ewae/XsP+g6j0vWm0SAyIiIiGlRcTi6PtfIWjMUnTw/6RQvcvAzqjl5oKQZbsEiI50Vd2eHnhy8x5ynmYW2+b1G1BSC1PkPM0o03vkPstC1sPHSI+KhyI3H48uR8KqiVOhdpaNHfHWnI9x9r8/lLy+9ExILWq8iu9fdxeKe79Gw7ohMz4F+72m4diAOej8g/qMwPX7dUDc4Utl2jZteDkiZM23h0F2P0RVrsiVI+3cz7Dp+R+19s+uHXkx5LxF1Xv+kIkBEVV7b6+chDFJv2JM0q8YlbAbQ68H4u2AKTC1txY6NKomxNJXj+zlPZehIDtXrb5Ot9Zo/GEPnJ+6Wv0qjqgU1i2dYd+pBXr98hUcurRCu4VjYGJrpdbm2Z0E1ch3dXt64NGVW8Wuz7CGMaQWpmplBTl5yEp4rDonWrdqgOf/mhOmhqMN3l41GX9OWvViWO5/mNpbQ/Sv0SAfXY6EY482AAD7zi3x5O/7mr2fSAT5P+vOeZYFyWtx2rZvivS7Cch9Lit224RQIM+CsuDFHcCMiD9h5PBqBMKcRzEoyEpH9OL3kLD1Czy7fhRPTm+D7H4oMsPP4u6CPngeehIJP81AXlqSUJugpto8fExEVJLky5E4N+4HiAzEMHe2g6e/L7pt8MPRAV8JHRpVA7btmsL9s2FQFiggEokQvGALHLu7Q2plhpj9F+C1ajJkj56i9865AIBz41do3P+b9Nvfq37D36t+A/DiS46obSeQnZKudnxd9/8ZnZdPgMjQAPF/XEXmgxf93Ltt+gy1WrogXyaHjUdjXJ2/BS7eb8PQWFpoVJ/g+VvQZd00iA0NkXAmBM/uJMCkthWa//c9XF+yA2/N+RjG1hZ4e+WLvvJha/Yj8UwouqyfjtOjl6pdsKffScCT0Hvoe3AxCnLycXHGiwePGw3rhszEx0i+GF7k+2XFp6LLuuno89tCGJoYIWTZTtU6Gwz2wv3fql43InnCbcStHQsDYzOIDCWoNzEQz24cR0FGGqy7jkCzH64BADLCziLt/C7U6jEKAOAw7MX/nthVY2DTZzwk1g5CbYIaJgZEpBcUufmqCzFZchqidpyC59efQGJmgrzMbGGDI52XfDEcxy+GF1u/u/VYLUZD1dXrI/sknglV/Z4Rm1zk5I5nfb8vVFazqRNurtxXqDwtPAbHB6uvIzs1HdeX7AAAtVG2XhIZGiDzQUqR3+KHLt+D0OV71Mqi95wt8f3ys3Nw+j/LCq0LAC7P2lhkudBqNGqL5ituqJUZOxSet8jcrRvM3boVKneetqWSInszTAyISO+Y2NWE83ueUOQXlDiyBhFRdRM8d3OFrUuZX4AL09ZU2PpIeHzGgIj0gn2nFhgZvR0f3f8ZPqEbYd+xBSI3HkF+dg6AF/1kh1xbD+NaFgAAAxMpBl9cDaum9UqsIyIiqi6YGBCRXki9cReH3vkch/vOQugPe5FyNUqt/6osOQ2RgYfRbuEYAIC73zDEHbuC9NsPSqwjIiKqLtiVSECOpqW30YaqEgdRZSqQ56om6An9bjfMne3R4etP8Ndnr6anv/XTMbx3fBma+fZD/X4dcKjnZxrVUfVj7mxfruUV+QV4fv/FKCMWDRwgNjQQLBbSPdznZVNZf6+qcn2kzTiYGAhoRQehIyDSX6Hf78agP1chavtJPLl5D8CLGSqvzt+CPr8txOn/+1bVzai0Oqp+em4t38RDWQ+fYG/b/wIA3t27ADXqVL3xyqnqKu/xRxVDH6/T2JWIiPRSRkwy4k9eg8esD9XKHXu2gSw5DTWLeH6gpDoiIiJdx8SAiPRW+LpDcOzmDvuOLQAAVk3roV6f9jjcdxYaj+gJs3q2qrYl1REREVUHTAyIqNq7MH0tTvgsKlSeei0KWxyGIPlSBACg47JxuDp/C2TJaQj5dhc6fP2Jqm1JdURERNUBEwMiIgCNR74D+eNnSAh6MVHNvb3nIKlhjHr9OpRYR0REVF3w4WMiIgB3fz6Fuz+fUit7fVbOkuqIiIiqA94xICIiIiIiJgZERERERMTEgIiIiIiIwMSAiIiIiIjAxICIiIiIiMDEgIiIiIiIwMSAiIiIiIjAeQyISE9YudZFx+/+C6VCCWV+AS76rUfmgxRVvbvfMDQa3h3P7ibg5IivNVqGiEjXvPPOO6hbty62bNkidCjFksvlmDBhAkJDQxEREYF69eohOjpa6LD0Au8YEJFekD95jlMffYPjg+YhfN1BtJ4xRK0+avsJHP9gfpmWISKiwnJzc8u1fEFBAaRSKcaNG4fhw4dXUFSkCSYGRKQX5E+eIy9DBgBQ5BVAWaBQq89OSQcUyjItQ0QkhLVr16J58+YwMjKCra0tPvjgAwCAs7MzlixZotbW19cX3bp1AwCMGTMGQUFB2Lp1K0QiEUQiEc6ePVvq++Xn52PhwoVo2LAhjIyM4OjoiClTpqjqRSIRAgICMGLECFhaWuLjjz/GmDFjVO/x+s+CBQtKfb8aNWogMDAQEyZMQIMGDTT+u1D5sSsRURGCRi9FRmzyGy+vyC9Q/f7H0AUQGxq80XrMne3Rc+usN46DCjMwlsL982G4NHNjpS5DRFQZ5s+fj+XLl2Pp0qXo3bs3MjMzcezYMY2WXbVqFe7fvw8HBwesWrUKAGBtbV3qcp988gmOHTuG5cuXo1OnTkhNTcWlS5fU2ixcuBALFy7E4sWLoVAoYGtri6VLl6rqDx06hIkTJ8LLy6sMW0vaxsSAqAgZsclIv5NQIet6fj+pQtZD5ScyEKPLummIWH8I6bcfVNoyRESVISsrC99++y0WL16MyZMnq8o9PDw0Wt7S0hJSqRQmJiawt7fXaJno6Ghs27YNe/fuxZAhL7pTNmzYEJ6enmrtvL291WJ6+X4AEBoaik8//RQBAQHo2bOnRu9LwmBXIiLSG52XT8DDszfx4PjVSl2GiKgyREREQC6Xo3fv3lp7zxs3bgBAqe/Zvn37IsuTkpLw/vvvw9fXFxMnTqzw+Khi8Y4BEekFx+7ucB7QCWZOtnAZ2BlpETFIPBMKqZUZYvZfgOtH76Dh0K6wbOSI3rvn4fzU1bBuXr/QMsHztgi9KURERRKLxVAq1Z+VysvL08p716hRo1CZTCbDgAED0KZNG/zwww9aiYPKh4kBEemFxDOh2NFgZLH1d3acwp0dp9SXefS0xGWIiLSpefPmMDY2xokTJ9CqVatC9ba2tnj48KFaWUhIiNpzBFKpFAUFBf9etFgvuymdOHFC1ZVIE0qlEqNGjUJ+fj527twJsZidVHQBEwMiIiIiHWBmZgY/Pz8sWLAAJiYm6NWrF7Kzs3H06FF8+eWXeOedd7Bu3ToMGjQI9evXx48//oi4uDi1xMDFxQVnzpzBvXv3YGlpCUtLS0gkkmLfs1GjRhg5ciQmTpwIuVyOjh07Ii0tDX/99RemTZtW7HILFy7E6dOncfLkSWRkZCAjI0O1DWZmZqVua2RkJHJzc5GcnIzc3FyEhoYCeJEcSaVSDf9iVFZMDIjK4e2Vk9DIpzsAQFFQgOxH6Ui6GI4b/j9DlpwmcHRERFTdLF68GLVr10ZAQABmzJiBmjVrokuXLgCAmTNnIi4uDj4+PpBIJJg4cSKGDh2qNjmYn58fwsLC0Lp1a2RlZeHMmTOq4UyLs3nzZixatAhz5szBw4cPYWtrW+rdg7Nnz+Lp06d466231Mrnz5+v0ZCl/fr1Q1xcnOp1mzZtAAAxMTFwdnYudXl6M0wMiMop+XIkzo37ASIDMcyd7eDp74tuG/xwdMBXQodGRETVjEgkwrRp04r8tt7c3Bzbt28vcfkGDRrgzz//LNN7SiQSLF68GIsXLy6y/t/PNQDQaH6EksTGxpZreXoz7PBFVE6K3Hxkp6ZDlpyGR5dvIWrHKdi2awKJmYnQoRERERFpjIkBUQUysasJ5/c8ocjnLLlERFT1+fv7q/r9F/VTGUp6P39//0p5T9KMXnQlUigUWLVqFQIDAxEbG4vatWtj2LBhWLRoUZHDaxGVhX2nFhgZvR0isRiGJkYAgPD1h5CfnQMAqNe3Pdw/Haq2jKVrXQTP3YyobSe0Hi8REdFL48ePR9OmTYutv3r11Rwuubm52LJlC8aMGVPqA8Dt2rUrtu7lg8RF0WQmZqo8epEYzJgxAwEBARg0aBD8/Pxw69YtBAQEICQkBKdOneIQWlVAfnau6vespCeoUaeWgNGUTeqNu7gwbQ0MjCRwHtAJdbxaIWTZTlX9g2PBeHAsWPW6Xp928PhyBKL3nhUgWqKqKzMhVfV7QY52xl6nqkOpeHWXNf1uAkwdrCESiQSMSD9YW1vDyclJo7a5ubnYtGkTRowYUa6RgRo1avTGy1LlqvaJQUREBFavXo3Bgwdj3759qnIXFxdMnToVu3btwogRIwSMUL/JnzzH36v24e7O06qyo+/NhkOXVmg1ZRAc3nYTMDrNFMhzkRGbDAAI/W43zJ3t0eHrT/DXZz8WamvqYI0O/r44NdIfBa8lQ1R2jj3aoO2XI2DZuC6yU54i8qejiAw8LHRY9AbiT11H+NoDeHT5lqrscN+ZcP24F1pNGQSpBe/sVmdKhQK3Nx9HxIZXn9+TwxfDokEdNPPti6aj34WIX+ARaYVOf9Ju3ryJgQMHwtLSEhYWFvD29kZSUhLMzc0xfPhwAMDOnTuhVCoxffp0tWXHjh0LU1NT7NixQ4DICQBkj57iyHuzEbnxCPIys9Xqkv78G3/4LMLdXaeLWbrqCv1+Nxr5dEet1g3VK0QidFkzDWFrDuDprbiiFyaN1GrdED23zETCmRAc6vUZQr/fg7azRqDJqN5Ch0ZlFLnxCII+/kYtKQCA3OdZCF9zAEcHzoE8LUOg6KiyKQoKcG7iSlyZ8z9kxqeo1T2PeYgrs3/C+ckBancTiKjy6GxiEBQUBE9PT0RFRWHOnDnw9/dHQkIC+vbti8zMTLi7uwN40TdOLBajffv2assbGxvD3d1dre8cade5CStU37QXSQn85fcjnoTHaC+oCpARk4z4k9fgMetDtfLW0z9AboYMt/93TKDIqo8W497D49B7uOH/C57dTUT0nrO49b9jcJvsLXRoVAaPLkcieN5moKjeIv+Mfph+Ox4XZ6zValykPeHrDiH24F8vXvx7xMt/Xt/ffwERP/6u1bioaIaGhhgwYAAMDat9hxO9pZOJQWpqKnx8fODh4YGQkBB8/vnnmDx5MoKCgvDgwQMAUCUGDx8+hI2NDYyMjAqtx9HREY8fP0ZuLrt0aNuTv+/j0aXIkhsplapbzLomfN0hOHZzh33HFgAA23ZN0HhET17gVBDb9k2ReCZErSzxTCjMnGxh6sAH13RF5KajL34pPAS6mvgT1/A8JqnyAyKtUuTl49amo0Unhq8TiRC56SgU+QVaiYuKZ2xsjDlz5sDY2FjoUKiS6GTKt2zZMjx9+hSbN2+GicmrseItLS3h4eGBoKAgVWIgk8mKTAoAqA5smUxWIdNr5+fnIzm5hG/ASeXONs2/Nb+37xzqTeuv1T6meXn5GrW7ML3oC/3Ua1HY4vBiVkiphSm8Vk/FhWlrkPM0s8xxJCQklGmZiiZ/lK76PSkpCcaK7OIbV7Di9oOJrRWyU9PVyrJTnv5TVxOyJGFmndb2/hJy35RXQXYO4o5d0bh96NajaOD7biVGVLF0ed9oy5MrUarPbYmUSsiSniD8yJ+wbtu48gPTQ1lZWRq1y8nJQUBAAKZOnVrstdVLQv/vIsDe3r7Md3d0MjHYtWsXvLy84OrqWmS9nZ0d7O3tAQCmpqZISUkpsp1cLle1AV4c8C/vPKSmpsLBwQFTpkzBlClTNIorOTlZ4yf79Z2v5VvobFJfo7aKnHy4OjeEXKnZxXpFWFKrFxwlFhWyriaj34WJrRXaLxyjVh699xwiN5T8sOydO3cwTOBjqqbYBD/Y9gMAtG/fHk+1eIFTkftBG7S9v4TcN+X1euya2PDDavy80LcSI6pYurxvtKWDcV2Mt+qgcXvf4R/jqjyxEiPSX76+mn22cnNzcfToUdjY2JT6heqmTZsqIjQqh/j4eNStW7dMy+hcYpCcnIzExET4+PgUqlMoFAgLC0ObNm1UZXXq1EFkZCRycnIKZbeJiYlqB3d+fj7s7e1x4sQJNGjQAH///Tfeffdd2NnZYdiwYZW7YXpGrtD8Il+hVCJHi0lBRQtbvR9hq/cLHUa1kp2SDpPaVmplxv+81ugbSBJcWRN9bX4xQNpR5mOgDP83iOjN6Fxi8PJ2V1FjGx88eBApKSmqbkTAiwk2Tpw4geDgYHh5eanK5XI5QkND0aVLF1VZjRo1sHjxYtVrd3d3DBgwABcuXNAoMbC3t0d8fPybbJbeeXIlCiGT12vU1q6bGx58v6qSI1J3adhSZMUI3y3M1dUV8Xv+J2gM8kfpuPDeAgBAcHAwjO2stPbexe2HlODbqNPNHTdX/Koqc+zujsz4FMG6EQHa319C7puKcO2/q5F+455GbRf+GoiVLTS7y1gV6Pq+0YZ8WQ7O95mHgn8mgyyJQQ1j/H7+LxgYl7/bLxUWHR2tUbusrCxs27YNw4YNK3WC2Pnz51dEaFQOL3vPlIXOJQZOTk4wMDDAuXPn1Mrj4uJUXX5eTwx8fHzg7++PlStXqiUGGzduhEwmw8iRI4t9r7y8PJw/fx6fffaZRrEZGhqW+ZaNvnKsUwf3fjiI5zEPS33wsM2EQaij5b+rRFI1PhoSifDHVJb41XM8Dg4OWp18rrj9ELHhMPr//jXazPoQ9389B5s2jdHs//ri6oKtWoutKNreX0Lum4qQP8EbZ8cuL7VdrdYN0bx3J52a7ErX9422PBrRE7d+OlpquyYj30H9Rg20EJF+SkrS7OF+iUQCX19fWFlZldqVSOj/XfRmdG5UIqlUilGjRuHatWsYOHAgNmzYgLlz56JDhw6oVevFiff1xMDNzQ2TJk3Cb7/9hsGDB2PTpk3w8/PDp59+iq5du5Y4udnkyZNhbm6OUaNGVfZm6R2RWIyugTNgWKOYkQ3++f/fYvz7qNO1tfYCI53w5OY9nP7Pt3B6py0GnFqONl8Mx41lOxG17YTQoVEZ1O/vicYjer54Ucw1v1FNM3RZM1WnkgLSnMesD1HLreQL/lqtG6LNF4W7D5P2SaVSjBs3rkIGbKGqqWp8LVpGAQEBkEgkOHjwIE6fPo2OHTti//79WLRoEaKjows9lLxy5Uo4Oztjw4YNOHLkCGxsbDBlyhQsWrQI4mJGuvn0009x6dIlnD59mh+ASlKrpQv6H/oawfM2I+lCuFqdSe2acJvijWafaP5wIumXhKAbSAi6IXQYVA4ikQidvvsvzJ3tEfHjIeT8ayIzx+7u6LDkE1g0cBAoQqpsEjMTvLtvAa4u2Ip7v/4JRW6eqk5sJEGjIV3RbsFoSGqYlLAW0pbs7Gx88cUX+Pbbb9VGhaTqQycTAzMzMwQGBiIwMFCtPDw8HG5uboUu9g0MDODn5wc/Pz+N1j99+nQEBQXh9OnTsLGxqbC4qbCazerj3b0LkH4nAY8uR6IgNw/m9ezg2N0d4irSnYeIKo9ILEarKYPQYtx7SAi6gayHj2FgJIWDlxssnMveP5Z0j9TcFJ2XT0Dbrz5CwqnryH2WBallDTj1agujmuZCh0evKSgowJUrV1BQwDklqqtqc+WVnp6OhIQE9O/fv1zrmTp1Kk6fPo0zZ86gdu3aFRQdlcbKtS6sXHWvP+JH93/G45AXD21FbjqCB8eCVXVea6bCvJ4dRAZi3N5yHPf2noOVa110/O6/UCqUUOYX4KLfemQ+KHo4XSJ9YmAkQf1+mg9dSdWPsbU5Gg3rJnQYRHqt2iQGYWFhANSfLyiruLg4rF69GkZGRnBxcVGVe3l54dgxzSfkIv2RlfgYxz8oeuSF0OV7kBGTDLHUEANP/4CYAxchf/Icpz76BnkZMjh2d0frGUNwccY6LUdNREREVBgTg9fUr18fSmUpQ+QQvcbErib6/LYQ2Y/ScWXOT5A/ea6qy/hnmE1Fbj6gVEKpVKrVK/IKoCxQaD1mIiKiN2FkZITZs2eXOusx6S6dG5WoOBMnToRSqYSnp6fQoZAe2ec5CccHz8eDE1fRbsHoItu0nOSN2COXocx/1SfTwFgK98+HIXJT6cP0ERERVQUSiQTe3t6QSCRCh0KVpNokBkRCeDmKSuyhv2Dd0qVQvcvAzqjl5oKQZbtUZSIDMbqsm4aI9YeQfvuB1mIlIiIqD5lMBh8fH8hkMqFDoUrCxIDoDRmaGEH0zwhYdp7NkRGrPkNvnW6t0fjDHjg/dTXwWhe1zssn4OHZm3hw/KpW4yUiIioPhUKBmJgYKBTsBltdVZtnDIi0zbKxIzp9Px55WXIo8gpw6YtAOHZ3h9TKDDH7L8Br1WTIHj1F751zAQDnxq+AdUtnOA/oBDMnW7gM7Iy0iBgEz9si7IYQERERgYkB0Rt78vd9/N77C7Wy1+8a7G49ttAyiWdCsaPByEqPjYiIiKis2JWIiIiIiEplbGyMVatWwdjYWOhQqJLwjgERERERlcrQ0BAdO3YUOgyqREwMiIpg7mwvdAgAqk4cQtG17de1eImIyiIzMxPvv/8+fv/9d5iZmQkdDlUCJgZERei5dZbQIRC4H4iIqpqsrCyhQ6BKxGcMiIiIiIiIiQERERERETExICIiIiINmJiYYOfOnTAxMRE6FKokTAyIiIiIqFRisRh2dnYQi3n5WF1xzxIRERFRqbKystCjRw8+gFyNMTEgIiIiIiImBkRERERExHkMiIiIiPRau3btNGqXk5OD+fPno1OnTjAyMqrkqEgITAyIiIiIqFRGRkZYsGCB0GFQJWJXIiIiIiIiYmJARERERERMDIiIiIiICEwMiIiIiIgITAyIiIhIQ++88w7GjBkjdBhadeXKFXTq1AnGxsZwcHDAl19+iYKCAqHDIqoUTAyIiIiIihAfH49evXqhSZMmuH79OtavX4/AwEB89dVXQodGVCk4XClViBlXgESZ0FG84GgKrOggdBREpQsavRQZsclvvLwi/9W3ln8MXQCxocEbr8vc2R49t8564+VJd6xduxZr167FvXv3YGlpCS8vL+zbtw/Ozs7w9fXFnDlzVG19fX0RHR2Ns2fPYsyYMQgKCgIAbN26FQBw5swZdOvWrcT3c3Z2xscff4zHjx9j586dkEqlmDdvHsaOHYvPPvsMO3bsgKmpKb788ktMnjxZtVxSUhJmzJiB48ePIycnBx06dMD333+Pt956CwqFAs7Ozhg/fjxmz56tWiYnJwf29vb47rvv4OvrCwBYvXo11q5di9jYWDg5OWHMmDGYOXMmDA1LvwRav349LCws8NNPP0EsFqNFixZITEzEF198gblz56JGjRoa/92JdAETA6oQiTLgfobQURDplozYZKTfSaiQdT2/n1Qh66Hqbf78+Vi+fDmWLl2K3r17IzMzE8eOHdNo2VWrVuH+/ftwcHDAqlWrAADW1tYaLbt69WrMmzcP165dw65duzBlyhQcPXoU77zzDq5evYq9e/di6tSp6NGjB5o3bw6lUglvb2/k5OTg8OHDsLS0xJIlS9CrVy/cvXsXNjY2+Oijj7B9+3a1xODgwYOQy+UYOnQoAGDBggXYvHkzVq5cCXd3d9y6dQvjx4+HXC7H4sWLS4374sWL6N27N8TiVx0s+vTpg8mTJyMkJARvv/22RttPpCvYlYiIiEgPZGVl4dtvv8WCBQswefJkuLq6wsPDQ+NuMZaWlpBKpTAxMYG9vT3s7e0hlUo1WrZbt2749NNP0ahRI8yePRvm5uYwMDBQlc2cOROWlpY4ffo0AOD06dMIDg7GL7/8grfffhtubm7Ytm0bjI2NsW7dOgDAqFGjcPv2bVy9elX1Ptu2bYO3tzcsLS0hk8nw7bffIjAwEIMGDYKLiwv69euHJUuWYPXq1RrFnZSUBHt7e7Wyl6+TkpiMU/XDOwZERER6ICIiAnK5HL1799b6e7du3Vr1u1gsRu3atdGqVSu1MltbW6SkpKhirVWrFpo3b65qY2RkhA4dOiAiIgIA0LRpU7Rv3x7bt29Hu3btkJKSgj/++AOHDh1SrSM7OxsffPABRCKRaj0FBQWQy+VITU1F7dq1K3W7iXQNEwMiIiKCWCyGUqlUK8vLy6uQdUskErXXIpGoyDKFQlGm9Y4aNQoLFy7E8uXL8csvv8DGxkaV+Lxc1969e+Hq6lpoWU26QTk4OCA5Wf05oEePHqnqiKobdiUiIiLSA82bN4exsTFOnDhRZL2trS0ePnyoVhYSEqL2WiqVamWozhYtWuDJkyeIjIxUleXk5ODKlSto2bKlquzDDz/Es2fPcPz4cWzbtg0jR46EgYGBah3Gxsa4f/8+GjVqVOjnZbuSdO7cGSdPnlRLWI4fPw5TU1O0adOmAreYqGpgYkBERKQHzMzM4OfnhwULFmDt2rW4c+cObt68iW+++QbAizkKdu/ejRMnTiAqKgozZsxAXFyc2jpcXFxw/fp13Lt3D48fP66wOwr/1qNHD7Rv3x4jRozAxYsXER4ejlGjRkEul2PChAmqdtbW1ujfvz/mzZuHkJAQjB49Wm17Z8+ejdmzZ2Pt2rWIiopCREQEdu3ahZkzZ2oUx4QJE/Ds2TOMHTsWEREROHToEObOnYspU6ZwRCKqltiViIhIB7y9chIa+XQHACgKCpD9KB1JF8Nxw/9nyJLTBI6OdMXixYtRu3ZtBAQEYMaMGahZsya6dOkCAJg5cybi4uLg4+MDiUSCiRMnYujQoYiOjlYt7+fnh7CwMLRu3RpZWVkaDVf6JkQiEQ4cOIAZM2agf//+yMnJQfv27XHy5EnY2NiotR09ejS8vb3h7u4ONzc3tbq5c+fCwcEBa9asgZ+fH0xMTODq6qrxJG1OTk44ceIEPv30U7Rt2xZWVlYYN24clixZUlGbSlSliJT/7lBI9AaGnak6w5U2MAf2dBc6iuoj6+ET7G37XwDA0OuBqFGnlsARVR8Huk7XeLjSt1dOgll9O5wb9wNEBmKYO9vB098XeZlyHB1Q/smWrFzrwvvcynKvh17g54aIdBG7EhER6QhFbj6yU9MhS07Do8u3ELXjFGzbNYHEzETo0IiIqBrQi65ECoUCq1atQmBgIGJjY1G7dm0MGzYMixYtYh9BItJJJnY14fyeJxT5BVAWlG0kF6KK4u/vD39//2LrMzMzVb+/Pt9AcXJzc7FlyxaMGTNGozkS2rVrp1mgRTh//jz69u1bbP2xY8fg5eX1xusn0kV6kRjMmDEDAQEBGDRoEPz8/HDr1i0EBAQgJCQEp06dUpvRkIioqrLv1AIjo7dDJBbD0MQIABC+/hDys3MAAPX6tof7p0PVlrF0rYvguZsRta3okWiIymP8+PEYNmxYha0vNzcXmzZtwogRIzSePO1NvfXWWwgNDS223tHRsVLfn6gqqvaJQUREBFavXo3Bgwdj3759qnIXFxdMnToVu3btwogRIwSMkKjqkj95jttb/1C9vrpoG5p/0he132qiNmEQaUfqjbu4MG0NDIwkcB7QCXW8WiFk2U5V/YNjwXhwLFj1ul6fdvD4cgSi954VIFr9JU/LUEvEri7Ygmaf9INt+6bV7nNjbW2t0XwAVZGJiQkaNWokdBhEVYpOf1V+8+ZNDBw4EJaWlrCwsIC3tzeSkpJgbm6O4cOHAwB27twJpVKJ6dOnqy07duxYmJqaYseOHQJETq9T5GQj8ee5CB/fGDeGmiB0pDVu+bVDyu8BQoem125vOY49HuMQFvCbqiz24EUcHTAHf3ywAPK0KvK0uR4pkOciIzYZ6VHxCP1uNzLiU9Dh60+KbGvqYI0O/r44N34lCrJztRyp/orafhJ72ozF36tefREV+/slHPOei2OD5kH++JmA0RERlUxnE4OgoCB4enoiKioKc+bMgb+/PxISEtC3b19kZmbC3d0dwIs+jWKxGO3bt1db3tjYGO7u7hr1eaTK9eDHCUg7sw11x3yHFmsi4brkDGr3m4T8rHShQ9NbUdtP4vKXm6DIyy+yPvlSBE5+uBj5shwtR0avC/1+Nxr5dEet1g3VK0QidFkzDWFrDuDprbiiF6YKd3fXaVz6IrDYz03KlVv4Y/hi5GVlazky3WFoaIgBAwbA0LDad2ggqpJ08pOXmpoKHx8feHh44NSpUzAxeTEix8cffwwXFxcAUCUGDx8+hI2NDYyMjAqtx9HREX/99Rdyc3MrvS8jFS/9ygHUGbkEVp7eqjJTl9bCBaTn8mRyXFu8DRABKGEw4yd/30f03rNoOvpdrcVG6jJikhF/8ho8Zn2Ikx++Gle99fQPkJshw+3/HRMwOv2Sn52Dq/O3lPq5eRoRi7s7T6O5b39thaZTjI2NMWfOHKHDINJbOpkYLFu2DE+fPsXmzZtVSQEAWFpawsPDA0FBQarEQCaTFZkUAC9OQC/bVERikJ+fj+Tk5HKvRxfl5dkBkLzRspKaDnh+4zisu4yAoXn5+6rm5eUhIeFRudejrxIPXEJehgbfaIqAsA2/w6xni8oPqprKK+ab5bIIX3cI/X//GvYdWyD5UgRs2zVB4xE98Xvvz8scS0KCZnMqUGEPDwcj97ms9IYiIHzjYZi/26raPW9QmqysrFLb5OTkICAgAFOnTi32f/freMwSFc/e3r7Md990MjHYtWsXvLy84OrqWmS9nZ0d7O3tAQCmpqZISUkpsp1cLle1eWnixIn4/fff8ezZM5ibm2Po0KH49ttvNUockpOT4eTkVNbNqRaarw6HSb03u0CsP3kTYpaPwM1RtWHi1AI1mnjCsm0/WHYY+Eb/OO/cuQOnd1u+USwEjLbwQDdTl9IbKoGs+8lo4FQfeeBwmW9iSa1ecJRYaNT2wvS1RZanXovCFochAACphSm8Vk/FhWlrkPM0s8j2xblz5w6G6en5qyJ8ZO6OnjUalt5QCcgepMK1fgPIleVPDHWJr69vqW1yc3Nx9OhR2NjYaPR/d9OmTRURGlG1FB8fj7p165ZpGZ17xiA5ORmJiYlo27ZtoTqFQoGwsDDV3QIAqFOnDh4/foycnMJ9oRMTEwudfCZPnozbt2/j+fPnuHnzJm7evFniGM1UfmbNOqNl4D008T+PWj1GIy/9Ee4tG4J7Xw8AJ+bWvrKeFAxEOncaqbaajH4XJrZWaL9wDAac/E7103zce0KHVu2Jy/glhhj6dbeAiHSDzt0xeHkrsqhvkg8ePIiUlBS1xKBdu3Y4ceIEgoOD1SYqkcvlCA0NRZcuXdTW0bx5c9XvSqUSYrEYd+/e1Sg2e3t7xMfHl2Vzqo0pkXaIl7/58iIDQ5g16wSzZp1g5+2HJ2d3IHbFx8iM+BPmLbuWaV2urq74Q0/3Q0WI3X4a0QGHSm8oAqS1LHAn+L7edYmoKJeGLUVWTMV1PwxbvR9hq/e/0bKurq6I3/O/CotF3zz45SzurDhQekMRILEyw+0r0RDp2Rw60dHRpbbJysrCtm3bMGzYMI0mIJ0/f35FhEZULb3sPVMWOpcYODk5wcDAAOfOnVMrj4uLw5QpUwBALTHw8fGBv78/Vq5cqZYYbNy4ETKZDCNHjiz0HkuXLsWSJUuQlZWFWrVqYenSpRrFZmhoWOZbNtWF5C6AciQG/2ZctxkAIP9Z0d3ASoxFItHb/VARao0diPvrj0CRV1ByQyXQ4j999bb7XEWQSKrOKVgi0d/zV0Ww8R2I6LWHocgtpXuQEmg+pg+c6tXTTmBVSFJSUqltJBIJfH19YWVlpVFXIh6zRBVL576ukEqlGDVqFK5du4aBAwdiw4YNmDt3Ljp06IBatWoBUE8M3NzcMGnSJPz2228YPHgwNm3aBD8/P3z66afo2rVrkZObzZo1C5mZmYiMjMT48ePh4OCgrc3TS1GzuyL12I/IunsNOSlxeH4zCA9+nAiDGlYwd+sudHh6x8TGEs00GDHFxNYKrqN6ayEioqrP2NocLca9X3IjEWBsY4kmYziSV3GkUinGjRvHkQKJBKJziQEABAQEYNy4cbhy5Qr8/Pxw5coV7N+/H3Xq1IGpqWmhh5JXrlyJ77//HhEREZg0aRJ27dqFKVOm4PDhwxCXcCu3WbNmaN26NT7++OPK3iS9ZunRF2l//ozoxf0QMbEJYgP+A+M6jdFk6UUYWtgIHZ5eavvVSDQe0bNwxT9dhkztrdF7z3yY2FhqOTKiqsvjyw/RpKhk+Z+edia1rdB791yY2tbUbmA6JDs7G1OmTEF2Nud6IBKCSFmNnu50cnKCo6MjLl++XGHr/OWXX/D5558jMTGxwtZZHQ07A9yvIhPhNjAH9vBGQ7kplUqkXLmF21v/QNKFcBTk5MGsni1cR/ZEwyFdITU3LX0lVKIDXacj/U7VGG7RyrUuvM+tFDoMnadUKpFyNQpRW47j4YUwFMjzYOZUG64jeqLh0K6QWpTeb7660mRC0czMTPTo0QOnT5+GmZlZqe3btWtXEaER0T+qTgfXckpPT0dCQgL693/zSWOePXuG/fv3w9vbG5aWlggLC8OSJUvw7ru87Uv6RyQSwc6zOew8m5femCqNlWtddPzuv1AqlFDmF+Ci33pkPij87E2ffQvxLDoRl2ZugIGJFO/umQ+rxnVxaeYGxBy8KEDk+kkkEsGufVPYtW8qdChERGWmk12JihIWFgZA/fmCshKJRNixYwcaNGgAc3NzeHt7o1+/fli9enUFRUlEVDbyJ89x6qNvcHzQPISvO4jWM4YUalP3nbbIy3zV9UKRk48z//cdIjce0WaoRESk46rNHYOKSAwsLCxw6tSpCoqIiKj85E+eq35X5BVAWfCvyeREIjT9Tx/c2nQE9fq0BwAoFQpkp6ZrMUqiimFkZITZs2drNOsxEVW8anPHYOLEiVAqlfD09BQ6FCKiCmdgLIX758MQuemoWnmjYd0Qd/QKCuR5AkVGVHEkEgm8vb0hkUiEDoVIL1WbxICIqLoSGYjRZd00RKw/hPTbD1TlBkYSNBjshehdpwWMjqjiyGQy+Pj4QCaTCR0KkV6qNl2JiIiqq87LJ+Dh2Zt4cFx9VBezeraQWtbAO9u/hNTKDCa2Vmg4tCvu7T1XzJqIqjaFQoGYmBgoFIrSGxNRhWNiQERUhTl2d4fzgE4wc7KFy8DOSIuIQeKZUEitzBCz/wIO95kJALDv2AIu3p1VSUG3TZ+hVksX5MvksPFojKvztwi4FUREpAuYGBARVWGJZ0Kxo8HIUtslX4pA8qUI1euzvt9XZlhERFQN8RkDIiIiqhKMjY2xatUqGBsbCx0KkV7iHQMiIiKqEgwNDdGxY0ehwyDSW7xjQERERFVCZmYmunfvjszMTKFDIdJLvGNAFcLRVOgIXqlKsRCVxNzZXugQVKpSLKTfsrKyhA6BSG8xMaAKsaKD0BEQ6Z6eW2cJHQIREZEKuxIRERERERETAyIiIqoaTExMsHPnTpiYmAgdCpFeYmJAREREVYJYLIadnR3EYl6eEAmBnzwiIiKqErKystCjRw8+gEwkECYGRERERETExICIiIiIiJgYEBERERERAJFSqVQKHQQRERGRUqlERkYGzM3NIRKJhA6HSO8wMSAiIiIiInYlIiIiIiIiJgZERERERAQmBkREREREBCYGREREREQEJgZERERERAQmBkREREREBCYGREREREQEJgZERERERAQmBkREREREBCYGREREREQEJgZERERERAQmBkREREREBCYGREREREQE4P8BK0zHs9vKHGAAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, - "execution_count": 6, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -208,17 +210,17 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { - "image/png": "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XugUREQ1S7c2dhj1RkPsPByh0e262Jvj63EeGt2mrqo2RVtQUBCAyk1CEh0djbVr18LIyAguLi6q9i5duuCvv/6qbEQiIiIiohppzcwOOH0lHrEP0ovt8+LMki/PEPkysViErQu7wMxEqtGcuopF2wucnJygLG6KQSIiIiIiqpBaFkY49uOr6P7BESQ9KXq66bLOLCkSAVu/6YJubew0HVNniUvvoh8mTpwIpVKJDh06CB2FiIiIiIhe0rRBLfy9rT8aO1tWeBvmplL88m1PjB7QSIPJdF+1KdqIiIiIiEi3veJihev7vPHl++7lngyub0d7BP/+Ngb3dSm9czXDoo2IiIiIiKqMzFiC5VPbIeroEHw9riXq1TUptq+JsQSj3miIi7vexNENr6K+nVkVJtUd1eaaNiIiIiIi0h+OcjMsmtwGCye1RtyDDBz7JxZj558DAPjM7IBe7euhsbMlDAx4nolFGxERERERCUYkEsFBbopXOzqo2t7q6QwHuamAqXQLy1YiIiIiIiIdxqKNiIiIiIhIh3F4JBFphH3x1xBXOV3KQkTaZ+4sFzqC3tHW30xXHgtdyUGkKSzaiEgjVrUXOgER1VS9ts8UOgL9h48FkXZweCQREREREZEOY9FGRERERESkw1i0ERERERER6TAWbURERERERDqMRRsREREREZEOY9FGRERERESkw1i0ERERERER6TAWbURERERERDqMRRsREREREZEOY9FGRERERESkw1i0ERERERER6TAWbURERERERDqMRRsREREREZEOY9FGOqd3794YM2aM0DGq1KVLl9CxY0cYGxvDzs4OX331FfLz84WORUREREQ6gEUbkcBiYmLQp08fNG7cGFevXsWGDRuwceNGfP3110JHIyIiIiIdIBE6AFVP69atw7p16xAZGQlLS0t06dIF+/fvh7OzM8aOHYvZs2er+o4dOxYRERHw9/fHmDFj4OfnBwDYvn07AOD06dPo3r17iftzdnbGqFGj8PDhQ+zZsweGhoaYO3cuxo0bh88//xy7du2CiYkJvvrqK0yaNEm1Xnx8PKZOnYqjR48iOzsb7du3x3fffYc2bdpAoVDA2dkZEyZMwKxZs1TrZGdnQy6X49tvv8XYsWMBAGvXrsW6desQFRUFR0dHjBkzBjNmzIBEUvpTbMOGDbCwsMCWLVsgFovRrFkz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", + "image/png": "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XugUREQ1S7c2dhj1RkPsPByh0e262Jvj63EeGt2mrqo2RVtQUBCAyk1CEh0djbVr18LIyAguLi6q9i5duuCvv/6qbEQiIiIiohppzcwOOH0lHrEP0ovt8+LMki/PEPkysViErQu7wMxEqtGcuopF2wucnJygLG6KQSIiIiIiqpBaFkY49uOr6P7BESQ9KXq66bLOLCkSAVu/6YJubew0HVNniUvvoh8mTpwIpVKJDh06CB2FiIiIiIhe0rRBLfy9rT8aO1tWeBvmplL88m1PjB7QSIPJdF+1KdqIiIiIiEi3veJihev7vPHl++7lngyub0d7BP/+Ngb3dSm9czXDoo2IiIiIiKqMzFiC5VPbIeroEHw9riXq1TUptq+JsQSj3miIi7vexNENr6K+nVkVJtUd1eaaNiIiIiIi0h+OcjMsmtwGCye1RtyDDBz7JxZj558DAPjM7IBe7euhsbMlDAx4nolFGxERERERCUYkEsFBbopXOzqo2t7q6QwHuamAqXQLy1YiIiIiIiIdxqKNiIiIiIhIh3F4JBFphH3x1xBXOV3KQkTaZ+4sFzqC3tHW30xXHgtdyUGkKSzaiEgjVrUXOgER1VS9ts8UOgL9h48FkXZweCQREREREZEOY9FGRERERESkw1i0ERERERER6TAWbURERERERDqMRRsREREREZEOY9FGRERERESkw1i0ERERERER6TAWbURERERERDqMRRsREREREZEOY9FGRERERESkw1i0ERERERER6TAWbURERERERDqMRRsREREREZEOY9FGOqd3794YM2aM0DGq1KVLl9CxY0cYGxvDzs4OX331FfLz84WORUREREQ6gEUbkcBiYmLQp08fNG7cGFevXsWGDRuwceNGfP3110JHIyIiIiIdIBE6AFVP69atw7p16xAZGQlLS0t06dIF+/fvh7OzM8aOHYvZs2er+o4dOxYRERHw9/fHmDFj4OfnBwDYvn07AOD06dPo3r17iftzdnbGqFGj8PDhQ+zZsweGhoaYO3cuxo0bh88//xy7du2CiYkJvvrqK0yaNEm1Xnx8PKZOnYqjR48iOzsb7du3x3fffYc2bdpAoVDA2dkZEyZMwKxZs1TrZGdnQy6X49tvv8XYsWMBAGvXrsW6desQFRUFR0dHjBkzBjNmzIBEUvpTbMOGDbCwsMCWLVsgFovRrFkz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", "text/plain": [ "
" ] }, - "execution_count": 7, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -236,7 +238,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 12, "metadata": {}, "outputs": [ { diff --git a/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml b/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml new file mode 100644 index 000000000..34115cec8 --- /dev/null +++ b/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml @@ -0,0 +1,10 @@ +--- +features: + - | + A new ``min_reached`` field has been added to the metadata outputted by :func:`circuit_knitting.cutting.find_cuts` to check if the cut-finder found + a cut scheme that minimized the sampling overhead. Note that the search algorithm employed by the cut-finder is guaranteed to find + the optimal solution, that is, the solution with the minimum sampling overhead, provided it is allowed to run long enough. + The user is free to time-restrict the search by passing in suitable values for ``max_backjumps`` and/or ``max_gamma`` to + :class:`~OptimizationParameters`. If the search is terminated prematurely in this way, the metadata may indicate that the minimum + was not reached, even though the returned solution was actually the optimal solution. This would mean that the search that was performed was not + exhaustive enough to prove that the return solution was optimal. diff --git a/test/cutting/cut_finding/test_best_first_search.py b/test/cutting/cut_finding/test_best_first_search.py index efe27b6c9..59a07fa40 100644 --- a/test/cutting/cut_finding/test_best_first_search.py +++ b/test/cutting/cut_finding/test_best_first_search.py @@ -92,8 +92,6 @@ def test_best_first_search(test_circuit: SimpleGateList): op = CutOptimization(test_circuit, settings, constraint_obj) out, _ = op.optimization_pass() - - print(get_actions_list(out.actions)) assert op.search_engine.get_stats(penultimate=True) is not None assert op.search_engine.get_stats() is not None assert op.get_upperbound_cost() == (27, inf) diff --git a/test/cutting/test_find_cuts.py b/test/cutting/test_find_cuts.py index d681602f8..a3df52d2d 100644 --- a/test/cutting/test_find_cuts.py +++ b/test/cutting/test_find_cuts.py @@ -47,6 +47,7 @@ def test_find_cuts(self): assert len(metadata["cuts"]) == 2 assert {"Wire Cut", "Gate Cut"} == cut_types assert np.isclose(127.06026169, metadata["sampling_overhead"], atol=1e-8) + assert metadata["min_reached"] with self.subTest("Cut both wires instance"): qc = EfficientSU2(4, entanglement="linear", reps=2).decompose() From 0bd425036039b79a6a10937d3b6aa4c75468355a Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Thu, 23 May 2024 14:47:11 -0400 Subject: [PATCH 15/21] edit release note --- .../notes/min-reached-finder-flag-aa6dd9021e165f80.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml b/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml index 34115cec8..a464823a3 100644 --- a/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml +++ b/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml @@ -2,9 +2,9 @@ features: - | A new ``min_reached`` field has been added to the metadata outputted by :func:`circuit_knitting.cutting.find_cuts` to check if the cut-finder found - a cut scheme that minimized the sampling overhead. Note that the search algorithm employed by the cut-finder is guaranteed to find + a cut scheme that minimized the sampling overhead. Note that the search algorithm employed by the cut-finder is `guaranteed` to find the optimal solution, that is, the solution with the minimum sampling overhead, provided it is allowed to run long enough. The user is free to time-restrict the search by passing in suitable values for ``max_backjumps`` and/or ``max_gamma`` to :class:`~OptimizationParameters`. If the search is terminated prematurely in this way, the metadata may indicate that the minimum - was not reached, even though the returned solution was actually the optimal solution. This would mean that the search that was performed was not - exhaustive enough to prove that the return solution was optimal. + was not reached, even though the returned solution `was` actually the optimal solution. This would mean that the search that was performed was not + exhaustive enough to prove that the returned solution was optimal. From f041356b63c32f2576d1fcb9a19a861908d2751f Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Thu, 23 May 2024 19:51:32 -0400 Subject: [PATCH 16/21] Change to upper case in doc string --- circuit_knitting/cutting/cut_finding/optimization_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circuit_knitting/cutting/cut_finding/optimization_settings.py b/circuit_knitting/cutting/cut_finding/optimization_settings.py index 54275373a..25a814230 100644 --- a/circuit_knitting/cutting/cut_finding/optimization_settings.py +++ b/circuit_knitting/cutting/cut_finding/optimization_settings.py @@ -38,7 +38,7 @@ class OptimizationSettings: If None is used as the random seed, then a seed is obtained using an operating-system call to achieve an unrepeatable randomized initialization. - NOTE: The current release only supports LO gate and wire cuts. locc + NOTE: The current release only supports LO gate and wire cuts. LOCC flags have been incorporated with an eye towards future releases. """ From c8b78589776f1a24236256c09bc68217e1f40727 Mon Sep 17 00:00:00 2001 From: Ibrahim Shehzad <75153717+ibrahim-shehzad@users.noreply.github.com> Date: Wed, 29 May 2024 19:38:44 -0400 Subject: [PATCH 17/21] Italicize Co-authored-by: Jim Garrison --- .../notes/min-reached-finder-flag-aa6dd9021e165f80.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml b/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml index a464823a3..607dccb45 100644 --- a/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml +++ b/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml @@ -2,7 +2,7 @@ features: - | A new ``min_reached`` field has been added to the metadata outputted by :func:`circuit_knitting.cutting.find_cuts` to check if the cut-finder found - a cut scheme that minimized the sampling overhead. Note that the search algorithm employed by the cut-finder is `guaranteed` to find + a cut scheme that minimized the sampling overhead. Note that the search algorithm employed by the cut-finder is *guaranteed* to find the optimal solution, that is, the solution with the minimum sampling overhead, provided it is allowed to run long enough. The user is free to time-restrict the search by passing in suitable values for ``max_backjumps`` and/or ``max_gamma`` to :class:`~OptimizationParameters`. If the search is terminated prematurely in this way, the metadata may indicate that the minimum From 6b04f2aa61133ce5ec2630118e99755c2a347d90 Mon Sep 17 00:00:00 2001 From: Ibrahim Shehzad <75153717+ibrahim-shehzad@users.noreply.github.com> Date: Wed, 29 May 2024 19:39:17 -0400 Subject: [PATCH 18/21] Edit bool in release note Co-authored-by: Jim Garrison --- ...new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml b/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml index 7b3deae5c..18a757327 100644 --- a/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml +++ b/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml @@ -3,4 +3,4 @@ features: - | When specifying instances of :class:`~OptimizationParameters` that are inputted to :meth:`circuit_knitting.cutting.find_cuts()`, the user can now control whether the cut-finder looks only for gate cuts, only for wire cuts, or both, by setting the bools ``gate_lo`` and ``wire_lo`` appropriately. The default value - of both of these is set to `True` and so the default search considers the possibility of both gate and wire cuts. + of both of these is set to ``True`` and so the default search considers the possibility of both gate and wire cuts. From 645c58d88753fc3472b6be2475d3cd171c435b25 Mon Sep 17 00:00:00 2001 From: Ibrahim Shehzad <75153717+ibrahim-shehzad@users.noreply.github.com> Date: Wed, 29 May 2024 19:40:02 -0400 Subject: [PATCH 19/21] Update reference in release note Co-authored-by: Jim Garrison --- .../notes/min-reached-finder-flag-aa6dd9021e165f80.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml b/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml index 607dccb45..d56e9f936 100644 --- a/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml +++ b/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml @@ -5,6 +5,6 @@ features: a cut scheme that minimized the sampling overhead. Note that the search algorithm employed by the cut-finder is *guaranteed* to find the optimal solution, that is, the solution with the minimum sampling overhead, provided it is allowed to run long enough. The user is free to time-restrict the search by passing in suitable values for ``max_backjumps`` and/or ``max_gamma`` to - :class:`~OptimizationParameters`. If the search is terminated prematurely in this way, the metadata may indicate that the minimum + :class:`.OptimizationParameters`. If the search is terminated prematurely in this way, the metadata may indicate that the minimum was not reached, even though the returned solution `was` actually the optimal solution. This would mean that the search that was performed was not exhaustive enough to prove that the returned solution was optimal. From 3517b31ae965b472449022fd585636005de3c859 Mon Sep 17 00:00:00 2001 From: Ibrahim Shehzad <75153717+ibrahim-shehzad@users.noreply.github.com> Date: Wed, 29 May 2024 19:40:32 -0400 Subject: [PATCH 20/21] Edit reference in release note Co-authored-by: Jim Garrison --- ...new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml b/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml index 18a757327..9872748e8 100644 --- a/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml +++ b/releasenotes/notes/new-flags-to-control-cut-finder-search-e499e1ea49abb0bc.yaml @@ -1,6 +1,6 @@ --- features: - | - When specifying instances of :class:`~OptimizationParameters` that are inputted to :meth:`circuit_knitting.cutting.find_cuts()`, the user can now control whether the + When specifying instances of :class:`.OptimizationParameters` that are inputted to :meth:`circuit_knitting.cutting.find_cuts()`, the user can now control whether the cut-finder looks only for gate cuts, only for wire cuts, or both, by setting the bools ``gate_lo`` and ``wire_lo`` appropriately. The default value of both of these is set to ``True`` and so the default search considers the possibility of both gate and wire cuts. From 4c4d4bbdac96ce48500554a88cf83150136f0147 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Wed, 29 May 2024 21:40:19 -0400 Subject: [PATCH 21/21] pull changes --- circuit_knitting/cutting/automated_cut_finding.py | 6 +++--- .../tutorials/04_automatic_cut_finding.ipynb | 6 +++--- .../notes/min-reached-finder-flag-aa6dd9021e165f80.yaml | 2 +- test/cutting/test_find_cuts.py | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/circuit_knitting/cutting/automated_cut_finding.py b/circuit_knitting/cutting/automated_cut_finding.py index 9956b9156..aa15a802b 100644 --- a/circuit_knitting/cutting/automated_cut_finding.py +++ b/circuit_knitting/cutting/automated_cut_finding.py @@ -52,8 +52,8 @@ def find_cuts( ``data`` field. - sampling_overhead: The sampling overhead incurred from cutting the specified gates and wires. - - min_reached: A bool indicating whether or not the search conclusively found - the minimum of cost function. ``min_reached = False`` could also mean that the + - minimum_reached: A bool indicating whether or not the search conclusively found + the minimum of cost function. ``minimum_reached = False`` could also mean that the cost returned was actually the lowest possible cost but that the search was not allowed to run long enough to prove that this was the case. @@ -132,7 +132,7 @@ def find_cuts( elif inst.operation.name == "cut_wire": metadata["cuts"].append(("Wire Cut", i)) metadata["sampling_overhead"] = opt_out.upper_bound_gamma() ** 2 - metadata["min_reached"] = optimizer.minimum_reached() + metadata["minimum_reached"] = optimizer.minimum_reached() return circ_out, metadata diff --git a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb index ca0a9715f..c77bb832d 100644 --- a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb +++ b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -72,7 +72,7 @@ "
" ] }, - "execution_count": 6, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -94,7 +94,7 @@ "print(\n", " f'Found solution using {len(metadata[\"cuts\"])} cuts with a sampling '\n", " f'overhead of {metadata[\"sampling_overhead\"]}.\\n'\n", - " f'Lowest cost solution found: {metadata[\"min_reached\"]}.'\n", + " f'Lowest cost solution found: {metadata[\"minimum_reached\"]}.'\n", ")\n", "for cut in metadata[\"cuts\"]:\n", " print(f\"{cut[0]} at circuit instruction index {cut[1]}\")\n", diff --git a/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml b/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml index d56e9f936..3cbd9cf65 100644 --- a/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml +++ b/releasenotes/notes/min-reached-finder-flag-aa6dd9021e165f80.yaml @@ -1,7 +1,7 @@ --- features: - | - A new ``min_reached`` field has been added to the metadata outputted by :func:`circuit_knitting.cutting.find_cuts` to check if the cut-finder found + A new ``minimum_reached`` field has been added to the metadata outputted by :func:`circuit_knitting.cutting.find_cuts` to check if the cut-finder found a cut scheme that minimized the sampling overhead. Note that the search algorithm employed by the cut-finder is *guaranteed* to find the optimal solution, that is, the solution with the minimum sampling overhead, provided it is allowed to run long enough. The user is free to time-restrict the search by passing in suitable values for ``max_backjumps`` and/or ``max_gamma`` to diff --git a/test/cutting/test_find_cuts.py b/test/cutting/test_find_cuts.py index a3df52d2d..559869ba1 100644 --- a/test/cutting/test_find_cuts.py +++ b/test/cutting/test_find_cuts.py @@ -47,7 +47,7 @@ def test_find_cuts(self): assert len(metadata["cuts"]) == 2 assert {"Wire Cut", "Gate Cut"} == cut_types assert np.isclose(127.06026169, metadata["sampling_overhead"], atol=1e-8) - assert metadata["min_reached"] + assert metadata["minimum_reached"] is True with self.subTest("Cut both wires instance"): qc = EfficientSU2(4, entanglement="linear", reps=2).decompose()