From f29b1db8a21df2f1b7b5c4e4edbc3d40be6f8c5f Mon Sep 17 00:00:00 2001 From: Michael Papadopoulos Date: Sat, 28 Jan 2023 13:42:02 -0500 Subject: [PATCH 01/13] Task 1 .9 ratio --- ...Hack-challenge-2023-task1-checkpoint.ipynb | 434 ++++++++++++++++++ iQuHack-challenge-2023-task1.ipynb | 39 +- obj/__entrypoint__.dll | Bin 0 -> 217088 bytes obj/__entrypoint__snippets__.dll | Bin 0 -> 66048 bytes obj/__snippets__.dll | Bin 0 -> 65536 bytes 5 files changed, 447 insertions(+), 26 deletions(-) create mode 100644 .ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb create mode 100644 obj/__entrypoint__.dll create mode 100644 obj/__entrypoint__snippets__.dll create mode 100644 obj/__snippets__.dll diff --git a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb new file mode 100644 index 0000000..6a0f1d3 --- /dev/null +++ b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb @@ -0,0 +1,434 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "# MIT iQuHack Microsoft Challenge: Optimizing Quantum Oracles, Task 1\n", + "\n", + "To work on this task,\n", + "1. Use the notebook for this task. Each of the notebooks in the repository has the code of the corresponding task.\n", + "2. Update your team name and Slack ID variables in the next code cell (you can use different Slack IDs for different tasks if different team members work on them, but make sure to use the same team name throughout the Hackathon). Do not change the task variable!\n", + "3. Work on your task in the cell that contains operation `Task1`! Your goal is to rewrite the code so that it maintains its correctness, but requires as few resources as possible. See `evaluate_results` function for details on how your absolute score for the task is calculated.\n", + "4. Submit your task using qBraid. Use the Share Notebook feature on qBraid (See File > Share Notebook) and enter the email rickyyoung@qbraid.com. Once you click submit, if the share notebook feature works correctly, it should show that you receive no errors and the email you entered will disappear. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "Log in to Azure (once per session, don't need to do it if running from Azure workspace)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "!az login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 1. Write the code" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Run this code cell to import the modules required to work with Q# and Azure\n", + "import qsharp\n", + "from qsharp import azure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "teamname=\"SAMYL\" # Update this field with your team name\n", + "task=[\"task1\"]\n", + "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# You don't need to run this cell, it defines Q# operations as Python types to keep IntelliSense happy\n", + "Task1_DumpMachineWrapper : qsharp.QSharpCallable = None\n", + "Task1_ResourceEstimationWrapper : qsharp.QSharpCallable = None" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "**The complete code for Task 1 should be in this cell.** \n", + "This cell can include additional open statements and helper operations and functions if your solution needs them. \n", + "If you define helper operations in other cells, they will not be picked up by the grader!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "microsoft": { + "language": "qsharp" + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "%%qsharp\n", + "open Microsoft.Quantum.Canon;\n", + "open Microsoft.Quantum.Diagnostics;\n", + "\n", + "// Task 1. Warm up with simple bit manipulation\n", + "// (input will contain 3 qubits)\n", + "operation Task1(input : Qubit[], target : Qubit) : Unit is Adj {\n", + " use aux = Qubit();\n", + " within {\n", + " CNOT(input[0], aux);\n", + " CNOT(input[1], aux);\n", + " CNOT(input[0], input[2]);\n", + " CNOT(input[1], input[0]);\n", + " CNOT(input[2], input[0]);\n", + " } apply {\n", + " Controlled X([aux, input[0]], target);\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "microsoft": { + "language": "qsharp" + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "%%qsharp\n", + "// Wrapper operation that allows you to observe the effects of the marking oracle by running it on a simulator.\n", + "operation Task1_DumpMachineWrapper() : Unit {\n", + " let N = 3;\n", + " use (input, target) = (Qubit[N], Qubit());\n", + " // Prepare an equal superposition of all input states in the input register.\n", + " ApplyToEach(H, input);\n", + " // Apply the oracle.\n", + " Task1(input, target);\n", + " // Print the state of the system after the oracle application.\n", + " DumpMachine();\n", + " ResetAll(input + [target]);\n", + "}\n", + "\n", + "// Wrapper operation that allows to run resource estimation for the task.\n", + "// This operation only allocates the qubits and applies the oracle once, not using any additional gates or measurements.\n", + "operation Task1_ResourceEstimationWrapper() : Unit {\n", + " let N = 3;\n", + " use (input, target) = (Qubit[N], Qubit());\n", + " Task1(input, target);\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 2. Run the code on a simulator to see what it does\n", + "You can also write your own code to explore the effects of the oracle (for example, applying it to different basis states and measuring the results)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", + "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", + "qsharp.config[\"dump.phaseDisplayStyle\"]=\"None\"\n", + "# Uncomment the following line if you want to see only the entries with non-zero amplitudes\n", + "# qsharp.config[\"dump.truncateSmallAmplitudes\"]=True\n", + "Task1_DumpMachineWrapper.simulate()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 3. Evaluate the code using resource estimation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", + "# If you're using this notebook in qBraid, keep it\n", + "qsharp.azure.connect(\n", + " resourceId=\"/subscriptions/6d61051a-6e40-4845-a03a-3c5160bb5629/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/iQuHack-Workspace-micpap25\",\n", + " location=\"East US\",\n", + " credential=\"CLI\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "qsharp.azure.target(\"microsoft.estimator\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", + "result = qsharp.azure.execute(Task1_ResourceEstimationWrapper, jobName=\"RE for the task 1\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", + "# result = qsharp.azure.output(\"...\")\n", + "result" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# The function that extracts the relevant resource information from the resource estimation job results and produces your absolute score.\n", + "def evaluate_results(res) : \n", + " width = res['physicalCounts']['breakdown']['algorithmicLogicalQubits']\n", + " depth = res['physicalCounts']['breakdown']['algorithmicLogicalDepth']\n", + " print(f\"Logical algorithmic qubits = {width}\")\n", + " print(f\"Algorithmic depth = {depth}\")\n", + " print(f\"Score = {width * depth}\")\n", + " return width * depth\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "evaluate_results(result)" + ] + } + ], + "metadata": { + "kernel_info": { + "name": "python3" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/iQuHack-challenge-2023-task1.ipynb b/iQuHack-challenge-2023-task1.ipynb index 6042c2b..6a0f1d3 100644 --- a/iQuHack-challenge-2023-task1.ipynb +++ b/iQuHack-challenge-2023-task1.ipynb @@ -36,7 +36,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -69,7 +68,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -91,7 +89,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -104,16 +101,15 @@ }, "outputs": [], "source": [ - "teamname=\"msft_is_the_best\" # Update this field with your team name\n", + "teamname=\"SAMYL\" # Update this field with your team name\n", "task=[\"task1\"]\n", - "slack_id=\"myslackid\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -150,7 +146,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -173,15 +168,15 @@ "// Task 1. Warm up with simple bit manipulation\n", "// (input will contain 3 qubits)\n", "operation Task1(input : Qubit[], target : Qubit) : Unit is Adj {\n", - " let N = Length(input);\n", - " use aux = Qubit[N - 1];\n", + " use aux = Qubit();\n", " within {\n", - " for i in 0 .. N - 2 {\n", - " CNOT(input[i], aux[i]);\n", - " CNOT(input[i + 1], aux[i]);\n", - " }\n", + " CNOT(input[0], aux);\n", + " CNOT(input[1], aux);\n", + " CNOT(input[0], input[2]);\n", + " CNOT(input[1], input[0]);\n", + " CNOT(input[2], input[0]);\n", " } apply {\n", - " Controlled X(aux, target);\n", + " Controlled X([aux, input[0]], target);\n", " }\n", "}" ] @@ -190,7 +185,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -247,7 +241,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -285,7 +278,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -301,8 +293,8 @@ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", "qsharp.azure.connect(\n", - " resourceId=\"...\",\n", - " location=\"...\",\n", + " resourceId=\"/subscriptions/6d61051a-6e40-4845-a03a-3c5160bb5629/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/iQuHack-Workspace-micpap25\",\n", + " location=\"East US\",\n", " credential=\"CLI\")" ] }, @@ -310,7 +302,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -330,7 +321,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -351,7 +341,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -373,7 +362,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -400,7 +388,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -422,7 +409,7 @@ "name": "python3" }, "kernelspec": { - "display_name": "Python 3 [Default]", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -436,7 +423,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.10" + "version": "3.10.9" }, "nteract": { "version": "nteract-front-end@1.0.0" diff --git a/obj/__entrypoint__.dll b/obj/__entrypoint__.dll new file mode 100644 index 0000000000000000000000000000000000000000..82a7decc6c5322460d7ab04b1c4dc70443a79409 GIT binary patch literal 217088 zcmeEv2|!%eb@qJ&0)zw-NR}+G&j{N{0xUq1Em@Y00a+;8LAGp<3-?&-+@0@$z$_xxJ zAV7ok?wfP>cb9X|IrrRici-}uC=fyv;`!b0g!nMt^miS*V>_o1Tz>IK%f$-|zk11s zwOwDmq;nvW(1*-;zZn|Tdqc5UJgN5>x|xdUk(l1Pw?iL{hmHEOveIgm^}aSCc4-08 zar-~^TBW@ts`N$LdIX?m0qOgOBlxZ3_bIBaSjxWn)yf(iDj6?xm>o-+3#L zyzsXb`R3&aIip_!WsgvP!Tch&|9YE}qQD#Y6JOk^^I zR~fx73XA|OTw4_=ILSZYLH)-b`~x1Si}c_h@Ibdp5B{+!@Y|wFA&L?!QNmh+me~-h zx@>)cFs&*F0yXC%*4Gh3t67C#ag@5QW&siiD{Q$Ph6=2!DRzf#LVL(`sLQ&Vh3>Eh zI~}UEu4WO1t-YuqF{p{6wWS4XRb5atwPS?{6ci@Trz)WIb*1YNNu0mFNPGc-D7Zot zTsm?gf=fp(g1ZRiBHN<)#Q+wsECYyvR8+L$_P7q8lEfu&<5h4jQz0uehNv_}=gJrv zlUkXNj-XPejet%rimygR&V3YJtX;aIi3)YE>1#6o(zzcuqMR6zk_7CtNx;PJwgMMcJ)9`yI9*ju-qjB(6!1H1p#MhuP z@`Hf~1A5mz9_~gTzXOkdJUj@$cjK|f1L05L4-76KPBbUs&xpdGz#bAA@(*A~WF|fM z2RwkmqzC^X1PMG*lvsxhktyNF8`Ze8ai9-B0%vB#j~K^J7zV7uk0^Xy%>@+3WdwlG zEWF3FBaX@_tS5l?3dAvl1F2SsRkxQS6Cm@VqIfOMqe2NW>Z>SRB(WbbXHjv93z0Yz z^D<1#1r-ZwFOYR9DvsAt+i}H4&(b1v3{bDoP+1|W#mcKik(`^=;^G!@8Tp=Penho4 zkgjY?{y}Ytyj5G?VK*PXLp1}Ut*ZfE;ATKuk8TI7A$B`ZIMzv`Td+RVpzI>qSoQb- zULv*xYA_1c)qoDddo2wN^|LWhgB7TBq!G?q3uq#sbop9S6u5#9qD46_1s`0CJh51< zs{x|2@>D;O%|>{RVAHlaI#_N6Q8KOtNUC); zTL7sqQ$JCQtKm7a6%KtF1J}5LZ3O%=6>LY`kKFBu`%y3h6mdU&FqWouHP-@CMX8_2 z{W^G#G*gBaa6JL{Q0{iv-T0>SQ388VIA>Z;nYI8@nW~>O#{vR#2$U4}Yb&B$T32}4 z@^uU1_-5I&rI;w$#6#tmP&sW*IqE0syB(e*H^8CFGq8gI$``bRRlXfCsuDa->`bWh z?6~}epqbazv^yoMpT2tUM1)aU`{JZ+1AH6M#JZZ-IVGr{vJF8zSl_VADWfKBUfGm4 zi8yJ$4fO^Ex~^uoQ*ZSX-LMCqBj6^uPZ-!oz_RrVM3417=ROL$?)*zvxMHgYtnn8J zYD&eTY-Frbr<>gE{?3~Hh{AY-JJzlVO%A&z`?DT*SQXaQ96*+8e5;@M#twLnbi$!= z$G|}X=o?W5*=No-+Ofy{Mmw9aKFQ9CKFLnOV|6*z7Au=oTlEtayoqXiNY$2so87=I z1n^vR%^8kHA@166(=y(%v!r_1S>6P^V<+TFokNwn71^jJR6kLvAUsD7Q_0QaFC@g}q&0~C?^kO7Lw%hXCLDhx;!rGAQ0c-}yqQNsmw zMHj5A>2oqrKS!nCnJ&Grf2K7K>bi>R+V9j={X|m^z;gstC^sbox4VHO1aO-y5U+F{f@3{V)i0oIRoH75Y6Hc&rN)I}6B?1ZSF z$o&p@j*P&eq8PZ-4V)x^2eBQI%C#d>w=h5vxe}l(*45kvNL51pL`UqTynO9Pe&hAS zw8lZ>=v3q1b84)9qCHN*bL4KSwgucn0QZ9(M(CRX3cHD@{YxlAAR(&>)KBDb8lEHf zQXUp?9|2DgwQq;ry&CKxGGz}6XAfq+?gxZ+JX zBz$u%!i$tF@eu@MTF2A6~w@J8qmqb)a6AypD>#RI=&(>LgA%FZ3XZM z;6X=Hhlq7W__uD|-W6*D=Wren9gI-+HGhDtxJgeg0vK4yp)0Luo>GGeZ#@_R)lQ;{L>!=#Omv#anN4;7Z8QoO)KBIXdx;uUelULK!W6ABOV&x zXf<&H9uMKY9S=TO+>M8#Z^QFEp1;7e1JBKPC@sbe$(jU)8UEhBko>4)K34KlS&{fI zyFV&^Ul|zfa?0uVO6rPBMGw1gVfR=W`RwH1?-F&zMdBvyTd3l9@w-$kTS{)>0&;IE zpwKTBQ_jyL&m!?FxaH!p;-?GB#UR{L@gq+4g9?h-%K2PSNWVWP?kq17?^r@P|0S35 zW^otdhc(LiIZpLD{{3+deLK_ zhQ5VdC|#JL3l}|GS`TPIrc+^2hQ6=z9AfB0OJpudh7OlKTiS?pCm6b1#k`B5uP%7D zbQ8kvVd#6Me^a^z&;tw|Tk6LvLB!zGyq3zhUSbMeU1r0{Rp~YfIY~QM-JOp(4a2=t~U! zW|4%x#?TTK_98={*4h{CLCkM5^ff>S0R10^E?WG}MK=Qa5kuFMez1T_|2KwqD(L47 zU8SJ^WT>sYv-B3ke3hY1fNlfyTZRfMuV2^$D4~e! zYGvrLicgjG0Y`K&)K(;+Lk#_U$%^885Ef+U_6iAgGxUFoBot<-qHskq!jc*9Kl<_`M8&uH^fHe*+AxuHZm{gufzT@zDS+#YJN0C3s;5JRkTS$3LLp z7XwRy)r!R-hTklHwP+>a5^;jzyG5N?3wV(@#mmUuqL<;t;;~C9KdZgU#9JA*+N)f= zQ^B&m%Eg~BY_(Up_zMNg_9_=2Rj_QYCE`;GmhH7fd|AP-YFDE^OT|AZI1t#w@b?&| z_UHjzA$}@h_5BsX`rhaHdmUJQf2G)W8GR3Z{~*#Y6GIH&El!COfS3Ee_Z;8%t`JKv zr}Qr`l;68TtYr9f$+pG6hx9AN#R@*M_#uXAzXbiE>bp{GlCY}pN?&~)Sl0Jkafstv z^<5=SFnl*gF4gxu@dpf3|4{#*FaE@a-;D6{#S0QHNiBQ^@CD+N3cgptR`{#J8$P5- z_-h>h<%R!Kz7zRhApTya7k|9uInM9r5?1A3Bz|MV??L!QqNIkt|GtthaDEqya}@ld zf~yq#3k6@H;MM{v|6)76te=x!*6(6rrGM0y{!bO`t^dVhtIQwu{|M)wl(4G*YVmp- z{w%^*i#MqHoLl-6z}4cd3jX8r|6=%g1%FV%R{U3mH~x_3jsK{Ez4faWAC&o_egWXk zYViXJtNL9oes05;A^dXjD^>ohq8V_FC|V=idq|`5YlJud8nH}E8b?8NBPx?KeJ&I<=2W2Nw`Gz zf1UWWf`>FB@$1Cb8Mf+ICw?Wv@qPDj_=>gM9_st95SQBU!wA1ZtY_Ftzus5B^}g?0 z@B6;>qSKSU!I!>4oUqHI?`shE+wkM11V80T-{?!<=qta`SAL`Tj3<4QFMX3QeUmSJ zllWIp`VGGH8-%z0Hu&0ag8)yBKdb#V`qFO{>p9%QPaDOxHvIee{*7X%gwel$1bCCU zNx?(f^9+X>w({R3UX=3(PzW| zgYfIbQ3;o{EFpZ{EbdZpr-C0-@OlMX@#TDN7VlKyLt617O7F!-&EkDB9Q9es;okmi z@%3km_`1q(<0AULR`G3yt@dyA^>3?h{I~k@YZbrtq;K=3Z}X*Z^QCVSI`*WT@xR@d ze!DOIc3=AKqScfB24DIceCcoSrN2Q8c+&6irQhL8zr&Y)hj_%3zTKC;UA&*et@+z7 zK4HTbqQBb3mn2;BbTN&;o#I;xE?+3&R}{RYoW{>iJN~P}8()s!ox+MQ*Ylme@v>9= zhs+P-Wev*TDb6Rdo#|7;ue-%s8~#86!B;VCjgLLP@7p7Sc6>^|M;x)?Cgi`zSN>jK z`n^8t-zc2lMU;6#N^!vr%deR^8r9a?Hf54ai zfOy4|zQdQkLzJv{w||FNX~WylejTDp!oZ*V0C$Qj6g;He$naJLKdJ>8-o>!hU!CH+ zG93Ng!{G}cNOt=BCb8UxO@!YhE|#z=?~tffuq^M8*sNe#-XXDF!GFr-9}=AmTjd`T z3mdsSlz%_+KO~wZtng(}?6cvwB0MN=m2k<&D&7hBun043<#*WEeusVI_popL9u^OH z(%G`sQ!g zSO2i+vg1?wu!!04cac6Uh9z9`9~Cqa3~`@=e^nykCl&njMH05+zY5yY9e+sk#(z}7 z-tRNSGcrGX-;YtgA-*JGHQolqcWihm@*nVhU&Qx)5#Rid_~v&+yrSy=sRcw&-!6X2 zur*$9_vLrHFTdM;`Q7fz?}%8s0oAnW!y~@@j`;FB;>+)dFTbeR;K?uQ%P;E7FY3!L z>dS9X9P;Eh=*w?V+{xkA_#PAw+wgy&e+I>yC0z0puXi!=M+&}3!B)6j@0@VC-oCylHi~M6g{(i{E-w)aR{f8IR`g+vn@1Iw&m%n$yCI5WXSN>5Se}B~X{R!Xq zC+zQkwUE~Hr2YLnmrB_C{Z6?2{-m$`r0@Ha;;VLh)BHRpzGuS)iwXX*YVQv(t^j;o z{8GWsE7%HuRd~aPGzoj>-*KVQR*WF}cqQj|nS?R_NM1NB8W^_ZUw4SB6fEUIcZh2l zK3yW^d3T5#6fEU=cZhuqlRRiO@*femDL7Cd;XVcbB(Q z*O&fYU;6ue>F@KUzt5NcK41F#ed+J_egFNw@4w$}&o8jN`2k;k5BTzXK)l8N{x{+K z9}v$mY~kw%#edu3??U*4g11U-{QHo&n6^%tUe@q_NNi#FWi5sMFCiWlTNV7)ik~6E z!{Usu4&0$-(bdqB5qLb~rnnt*sy1xeO_yoCJ!5EdUK(^C*Y{&bopAnu?a zsEOMrfSUY1LJP$U8AC^>l0I(Nou}J>?BAJEjrMo@$U4iM-Tq^j*B)Rjd9x<5<1fYjieJJ1X02=~rMp?%&sgx+VsF_(;HikVm$BYaq^I!3 z$d{;y#elcqJ*;ggxDM}T?fnbd@cs+&fhBwJUXJiLGW@GWzt8Y%;`97YYG20tY4M2) z!p0Y9A71!fysK6GTI~}RzXH5L3ltUui*AK~72d7Nf0vf3Xb1c((jUP4lj3KEhw$!H z{uikF1y%j1oaa@1lBR@JK2K|}6n!6XHRAsa@2Iw?fZ8Fc$$BO=SM z@YCAk+8SsPo!0(btHXPPivNg;|CEaVl#2h9ioaFGdz*^)oQn6Hir1>bUr^z@6#Q`o ze@4asjEdi>!oQ-zg9`qJg2M{_o`PRd>0eRlBjPPfjx0bssCYkB@qVe|{ZhqCs_ufl+Aufl+Ak2_Vo#R1u_%T>JPD&A=oet`BOM;ytC{x2g9A z<-b*>->TAYRq3Bo@mf{9T`Jx#6>pb{w<{p~?>#Dhr;7iAf`bYUtMp-&{^KhAGwK~x z@scWDQpHQEa=xPCeM7zPRPj%%_@`C;@2T)dRQOXW{3#Xw3c_g~zAYf<;d6oS2cpG7 zyvK%r5_k-7wd%iW)qgLj^e?FVI@LV;IMUI4{Y*g4zptor3o(yqek@n@S&n1vG*5o2 z;J?S4@WQj&iv>+3w(d~StjsaCVs&0^TluZy;>BP zlmBXQV7Yw%;d%1C=@R+=R;_&R1wBUbJ_2gv3x)93;F&* zp~mH14vbFaZdxhd-IvPuT}|@+SIzRB?3C|dSiawzl<%t3^8NG2^ z%l8|P$oK6@`F`C~^j;_WpP_e?*!eCAFL<|v?|Q#{cYi?oKlp-#w|`8+`d>@<`ESa% z{vG*#D;5OGFZKNZc3b55X;$N>1*_?c7)SJO{9ypnI2j&N;l1#G0{*9z|K0Xmj=$F< z{67)?jPifhe#`K`Rq!Y6xAcEW!7tly=`S={zGlCrzpmg*?6>s4PQl&keO*AN?^f@Z z)LRrte_g$=Q}1r|K4tkA%6NaP-Y=>5GYh2ur;Dx@%l|nb==~-2KJ|)(H$k)WpNnO@ zmvC5%=BZdC-}+klzD~VG{SncFaJ~M|INo*YeM-HbQSZN1@0ZkDTp{BRBkK?0c>=iP z>v#&V)_f57>2L5{4!m(Co~!W??OFh8s1TIi0^o=uP;qc(2_J@|IegYQ7Co!uUgmdEfqajbz9{gjO1BXB zc6531#mm|MhXENryzpX%A5`zxgoKlte1E2VHHUvi!QWKxU#j=l7@O8~FVZ^?prA|D-1UA6IWH-D{$S<0my4&+_-boqBX~e1CYh@N42`Ro-oB z^Krtx7ILFN*T}H6i_zn)H8Mlm1qHZdfAQ@sN6NP;cjZ$aD);1U}-hQ7b{1(;zRqFkk@V38I&c_$aet3_1JLAFIKd%+a^m~@dcjo-w%I)-?#q#}{ zknf}>-&VPPJmcV_XE}XQfqega-~$YwS0LY?Un1Mh%4fXyR}>!16z`^`U*-JYxAaB4 zN!C@s&jPrGSTi)NAI11xgmpv1FX$>`6=+{1?K7Z3?)TVhssk%~*}l%i#vFZd?j? zJ)i*Ahc$2;v3>-wM%2OGfVCrlwV?s-X7~lLK5T@0HP(y()(9ypxf;JoZVJ7fV)o|gxiT-<^Wc{ zo8e-=7w%#F3t-Lbg4+YCDj@o>^BBOYXTXhN6%1g-i@-gGRSxHBg zaRXR2ABFq-2oH$2U>yxWV(=u~wQWf*Z}OMy&LXFAZrPTkBUEo`!UE|0^;N1eQ^I4Qj3823{G?e#1|l!35c&C zT|j&tDFWgfh#L^!7Jm)*JK_^?{|Qou08W;C8txCoXW_miJ`eY0@kO{l6kmq>&p5de z5I+`w2lrpa-^2Z>_y@SZ5dR4Gm*QJ+{|EU6#IKN3K)eQB{ebviw^;iL+!F0)a2IO-4!2bM54h#pf5ENP{u}Nx?f=1Dsr?G>x!V82 zy+Hd7+zYke!M#M&w1B9B_BzI@wgB$sS~1)jZ6Vw>+9J4XwKBN%+7h@|XcchRYs=s^ zXy?Ff)K ztTBK&j#E2ui!mlw0c$)1cOgzLtpe6~KiowaIjev*J_EN5qh%H7&~Lz9g0ncQK#RTt z7kb@rE78lVkgL#EfhJuH_Z*?aU4b@S1-!Bq?zxa|5q8-H_dL-F_k5gCSOxqNhI=7S zQ>_A>dJ68v;sLn2cnt0(;w^Bi#4~VLi|651ix0uQRD2HZW#a2_FUN_WRlq?n!CfQ% z74BN`KXBIpVXnfLFNa$vE`VDvE`tkQQn>5I7Pt+f6>g*Ggxe&-aG_ZVccVBBcawN1 zPyzRmz%t;f_rT{W@dDh<;^T0)K#s5qSnMlsw~BAVy+(Ww?l$of+-t=vfeYdOOWk4Ao;7&3;tApz#Pg4M{tM4<@l+H-?;FpJcuwN^D4uWP`8l4& z;CwE^vlh>lcv|or#M6W4K0Ht2`BOX}#q$k3ui*J#JS7mPoQLN+JRNwB;dunlb9nw5 z&)4z%C!XKoIR{*oj%Nd&7Cd|K9L94T&p+b%S3JMNa{)N6!c+Jr-`}V4oyf-iYeu|& ze3$$?-}-^`c0&9=JEGU0bTR194#w{e#Fx|_g?QudMSbY+8ephx7+KfC-6(ECO*V=k zyCHUm;BFRw#J`WBPMgJpa5svN^Y72Y?GmrBy8x}-B^ua$hTY$=yBw|AB^ue?#_mpb zN7#KEyPsqC7wlHx6S~Bu>|Vic54(TJ?t9q%0lPnDw*+6(B^I-LIo!?SUHrQWUyr}7 z{YJ8@tLyrBc(|);TTfS4!}_lEX?z>f`8GB=zAf=s(u_x=M%b0tMkl;Ee0w|+OFDs# zu0Y4P;VL9)Z;Pb{4KvgeHM$!_yGp9S{hg^H_CMI#d3`8BF*-wuBNS03OU6xt_BWem zXqbK-j75?mlYUan20`E4o-_s#?!>yrYsE$(aPxVBSiEZJou12vv73=M86zwgcXq4;NC~gczQ--W(qu4uy zPobO;$tt;#OZG%;vICnqu*sdv20L&A2W}8scgMr2sIg7#Z)<7cQ0UTjbnveZ(Xpp} z-@dj^(YB}az|H&iw(sc_EqnHMa_Av;xh1-~L;_!9{ifPcH07;+lJ6nqMQ?%+7*PXl zuY4Vd!kVKnKN?C}fiAGCYk%T^(bv?~)oS#{2Z!Q`2(?Q`QpR?Icem{B+>Ne6{#{*z z>{8RW$M|PNzS_~N3>z4E!$UN>?3jB~^qXp9jco<^hpF=RjLuO}(}ivi^H8B!kq)A5em15#nx@nuC54LEfR{_ zo*dtvyQ0+?G7ajzu-JcNJc2}OaBM?oTp#K^f|J_YBSsVfa(ImP#~2yyX%CUnLCydf z9j3-{ml~o6j6^(T_8M)8WMq)%)JW+ z+8ydgOQgbvGjT<8PatY<|Oge^RVYCl=DHe^y46(P5nv6SrpJ@z*%ygfrnwlFWO|#LA zP2=rr%``FgcMOEgA(^e31J<;64XAoKwhUp-1v!o57`2fYCL_jJPpZG)Ft0b`$9V|y zIKzx?=<33tMvNBV(@4}X8G+FJZB7DT^rY;>)JJ|lSB6dyRz|E>ag&SK9qJuGBRZj0 zO?E`WVI$`FcksmAMVKFm%<;G85-@%=B-cSFkUA!9K*x~L3oI46gL6w8MSd`cqhUiQ z_*cToTlFYKLr_m78c7a2p)_DxqM-!vX(&o@sG-P{mu_*47I22!2Sfd$6SEMQ(TL%b zlQ2Kgd!#Ma8%N*tr|I&}kco`ahwTm}2UOoOxkQT`!!nT#9xy^tEPd{ktv(!$ie8DS zWzDdpcx$Hm9$m-ljW^I4tIg5=I4>A!Dt`cYCO*jd?*mrjAA92XaR4j!F~c0*9>cs6 z`v$Q3?}{XoQKKyuj)Y?3`bfX}HG1i426|##%RlRU?f)V>>MYRJNz19qi3*!VA31Z}dmEnP%Js-oSFo zxyc@;HONd!pFQzpM`~y&Zeq5!o#-`C4=Od%Z!H{n%Q;N`&g$UvCft9*<2Sl8Euk2) zpz)27mB3HT4j>hbVPo%*;K58kEY!IhkpQ;P5+BDK^8;n{;{XmKsKt`NjwktFf znpsEQ74N5sdBEsL6R46}jaVGZETJYjESX0j$VK>D$Tba3Rc}QDB6KKzdl)$5O0JAd zJ8T0%mUP&Pbh*27^+mSVV|!kTdLkMfj(}JP@=)}lwFvE@FN^dhEPp@T8UgVVCvqc^ zW)8SReHlxfX_y^`c`VXvB-FYBTm^0dAPtZ``%@?!!01sV>6C;x5XX{(G09i}piS5) zkFDD_baf>MBI)wL5K9gi352P-NlFw|s3%I(_I7n3S8G=vwG|4LwLIW}qwDGKN{1Xr zZxiE|=G(?dL#?9HaRc2DGJ8N+yS+NmB2l+TJC=$QE{_Ao(Nx4V27%G3^fZ{s69bbS zNK)+WxgFSpC#u35L;<=8Jpfdtwi8A#Q+^W3uwQdeJe5>%l9wc_#a&Hn&k2medQjKM zk1LHL`$DN`Qh;?n7BV9sDBNfgF)6Sub}VAXWAst7NV6X!7l7(ocR`A=aTl2VBvcGd zx_qtaM;|aov?&!&O*}^4?kc#WZr#?{)zvF`F|-w!)P2OH%BGUy5T~cGP?wjUP7l;4x((W0{iJOk2L;j0+|35bd_?L9wfxO7`B~p-?YKBFtVMnTeLr zP)JfqBo|uLiG7y@c2{tG@B9wz+O%W0W*_!7Do@?baY{?e)$ddH7M9}gatnO0fU+(nhsvoq z^{D6f1$GuzEjYN06QLmFUwP{B#dfUH%FV^n*Lv3=uBt_4Yh|qm+Ki9juu~5fR30ir zPL@Yqpp*(MEw$n!25tdTU&M`}3Z>tt-n7h>(W%pwryi(0^~eg#@7}^n%MadGt)I5i z$kydgD#O=Ng^+2PtK{cbc@UY>CRBTMZ3I3Es}FNIiw>$^Idr2)$Z)>RI$& zfSTto&`X6n_F~|10dl5ZTS(o95N!MCqVm*xRWpXDw<~Y1Jg4$-!0H0Zu@V6R?SgZW zP36rcf^x4o^~sX;nsyOVKU-L;RqiHde|afB=b&A!5(#3I6vN-pDnpCi*%l+yW!SV^ zw7!6YFA7|wRhAZ1mbfEThL#qi)@XRD$i@H$TR{;%rf8W))!C@RQ1fNDe}+<0G>pKL z{0W>YgeF;raKt@G`Ow$PTFQ)<32J~ZB8b}V!es(2Ad}k#qvq}plQ~fHp}{s56rq+@ zxRnH5f0$=RCAGpZH;NsGuUuS-S#wTtF^_TnG#QFC3w5NRFD}I|>nG)Mk~1tp>ZO#r zuoz8>a-{cyr5bjQsLgpWQ`OKU*2pL=Et39=D1w@q7)3O06tvL(h1Lz=DX8YS<4oJj zR3_s@t3vMML|G;4ZgszF_MdNkMw+md?1yirHglyZ_r_g-0eb3j9*IZMwCM3c@>r5@fkNd#yCA%D1eHXGmGuVi^Q1i~qnRvRDc7N@0gc zG%0ZmBBop@r<72{VQdpG)6VtcQz}*_SuW#P{~16<#kZ71mcbR&ydD!w~Ww)XHhRhZYqFDo_1dj$7;~mJ}3gB@2LRPW`&% z&Y#}(swgb-AzCD^UwX|4#K8yU&2Vywamz1TGj|#QhB3VmOgQ* zu2o*+{%Ti~1?Uo5ohom(nu?-^+);VW@P5HEF3szwdL3DXN(lqVT&W!Lp?b=1 zUc_nTZ>}{>+ET30rL-t6EnQl=m||F%c@bzd@}z&4%7AfDX)%=rbjVHTkXx&D*ly$i zcIgW-m`gptd0YUd9s)TkIXuHkmm*h>@3~Z4ub0f87E)l>Qk55>QuOEM68UwNo4I49 zTf>ckYzdoEtX6Vr7gE&9)}@uTuJFya@8)u=9VAwyG>6cDWlYgLzL-9=^3c+-!ZQV+s;ne6s6Ly?X(gwYoI}W{Yyp0N+>p^rOBp=P z?gQ*T!tT?m7>Z6kK!tf)-|_Ia9f&^^K+SSNi3U|I`n!ni9d`y+&`#x^c+3{`LhgmV z91Zb`q2vQ~n|4jy*D_Lt{a$QXMvO3RW>sw&siJoR%sPOo(XuYunX0PgNC>w#II2$8 zIzXao%dI0-wAs=grW{)!yhmi->OflF&y{f|S5|Emwhj8ZvMTF6*wL#xdGau7A&X5P z0d-U&BdQjwWVq@_QVdx~WJ7_C_>RN!XOk};l|tW4(Kc{qiQTCr?Riyg=?g^@Ms3xO zP=dCnAf{s#4{JZCcUZ+xsW-ZEPSZkmC3j(4tZGX`Z55QOAqEzad#(PmuFv{O_dG@fr1yj} zOibdDs^(ru_W75Zj7pZP{Amcv&D!nQF9sTD-4YCjg29GhFoFN69^AJK-2wbQnxMVw zI#X&PAk6Fy1|2zhFeta{oZY%$kg!qx(F8hipHl8|kMj-o*U~ue7#{42N9_@nd17rw zWYufw=G9g7MLho<)JCYoLJ9Pyi>)Ul0a4(qH{sK@*CP)s*?lZ{A<{91D6*OJYiah|KSWb;|HmW)5jc`bP}){@7j zxRyvwy!<*cch-?cFRkV2cFuhDcr(wvYeJ zUmj;VC8Z=k4=cfuE!oPYOq?as>10<_C}hdDkSeoKb&otJGYjOQqecFiYuyQ+ybrqy zdJIiW967NsBdcu6`f;4DgEFlS;V6`@ldNew3+Bgo;%pu!ECqG#@i<~mTiWd#GgVS(Ndqc(J1Kb) zI8V=}P18b0rW0G(-79zCaw!03Eaw)kjbJYkO5)&ECOleBY}b6I{GJUFpV!#O0 z5OljML5GHtIu7Xf9!U@h+TEzH)0?^}R`L69lx5>|QItgs*c|$i zSo}CPKRB~QE%E9hX5)u-#z>^+$Q(WA_&RrF9fmr#=zhdkt9Qm>%_SPKQDLoaS%pco zfjb8$fs>&2S37HfB$OwImFaVBtW3Zdc$tE;!pszL>bRM5IY|!cS4DL9{R5h~zb7|z zcRI^1c{+UV(BVyaIvf;OIudPcox5X^5cZ@Zy#u886N*AH6=o+Q#|$Za?1d+gol-Up znoQ9RhK9+Lby9gdD;f`xftYkMMhH9@lTz?d%EUgek=IY1kxkwS5?4*rLR>Y@u()n) zeN~I9%Z-FbI(d5p7%+8R&M5i>e{WgWIrKD;@52IM4UIS{LhPdH-Na~26l8tKRr?N8uXUz&40 zjT@A3#A(~{4(5z6MQX<+pBt^yM8`KWw@wpIJ!QQqIpuYiD79%{c@+tlQDQR@{7w}H z#+G7q0>;JgDg}#B9{GkQ9{JjY2|G|zu$_sFY|_rM=j*o4c=l0xSbCKWIeo~C_b4l4 z*lQ*== z-kG@$H{I%EikMG=Q2}Tnz{W5eFm|adw~=;k2TWs74w(Z+Mj3KzoGf%O}bD;CMqw)+I*;nBW zgwfRYM0vFIWZjrNS9)?`%p{qXA!5@W`2sedJ~d@FEp4sxd>UT^m}ct<_wvw{W_bo} z>_scjpiS14@bn&lKfAUk@_UN7ozzPU&68=HX<^LsXKd4%c4wx|c5`<8S<{uaT2c;; zIHy&K&jEjieIb~k2X<`9?>bp$&_`R{8EfnAOtfI0qp>*}7hO67tW4U4b@H6de}R+v z*_1h%Olv}(nHi6n!P$tQiOXsuNw~v$0{186PdMZ^pm6MvRV<(xF;@(H<@uZWN&%l; zJ)2f4H($GU?rlD8n3jV@O)&E@9SUI}jLrmgP8(hGN2~4(HDaE{8O7p&T7^stW?y{t z>a65@(js!+zPTSv&)pMddOF!c4pCd4Hr939GZf#4WB(Mq#6 z42e;iTmSNx`thZHdDANx%@a4h!Uj}efPpXdgOvbvM+VzqRu%$yTEI$!v{2P+O^?WY zHli|}Wby%n8kuS`Q}k8_0IvVTLH1oB?o%sz(?D?)yT>0em5!!0;_aS1SN zcw(OV4wu*!&U|cUW)5q(Zo|b*lsf`=Q zY^f`8CX3ItI0JO*b`W4CA`vHbx;fB3S2d2=K37e|5&{hjT1c|EPNlA4fF(G|Zqy}UBMx_M_v%=Tk03Y!`;T#5`buIo=CYzo7tyFm1IuGf%PO{IFw{E$ z3w3#VbSCch%Yq)A7Rhg8I+IckwU%>9>P%XC%zA>*LN&E1Ld)3`t2FV%vI#F|%{Z)z z8=Jxg|G>PJ7tOeYY<*D}eZ-=+4`!^5#I!7JnY3n8gJ8Ugo}Xd9TYjoeJs86ESVvPv ztd}iz4~5KR1O^yQ!)g`WQ2-;DRwK$^Rx8e5+%+$yE!W4BuxD(Vq2Yu+n1TgOh(vIY z8oD1n9yMb9$$@%(PdrJM-f=|*`h74IgZWLG7Se=f9~<5rqKTr1dgw+pGPVhUi;26@ zk|Crdp$nL>r0$QTRy`RD0vOL8vCp0c{Ut$KZRezZ+S zbA|MRXZwYO%`}ucXcWx?12dzwBjtLXPJY=8)JXG*rV$VL1mjc(dpffu2$Qw;G?@iM znI%~y#e(t0TMtV~O_R$O%cO;7cE)+tB3y$vS7u))@1@MQ>4!}KdzEr8K>7I>imHoM za09jx3xoa}wk#(}T;RSlZhDU{0r~8Xhrv?g^c^7}#Sc0c``~%m@s>T!SuYrxR$rP0+n3tT%@}SejFs+OluDda6QM)eKxnSWnu4ZWSinl z?Q^&(0l#QE+qz@?X0jbNGn*hTn^faitinAIIhX8n6I$qe&bA@$-5A5_mn#%Tq_emB zl{>yyN&0zx_gu{C8NvDl2t<;Scu7RQsmt4)<7ddb0+|-Q(fbo~o+l*H(EZ=WjaM(` zUNjU3OPd!Av5+7E8G6*HJDP%So^Gm!$;*Z;je#3OxjB&Q>>SRpM9?wr4iO-j7AWA5 zHVxf=H70`#!4PiEfs$eZ*XH0Fzz|vZhGd7YWl2A1aEZ&U`VI9v>h)dmV$)UuSE3OEcCnCq{<7WRAp`OGQ4OgzevVQ%>rp*n9X94LxO*i4rH9EL) zdUj0GT|AmS={LhWD%n=-Fp+trJLKI7*m5h~?(SU2q-P{h(odzaW%Hv~`!14chA zECY|TG#?y(JWTTT7_OpDMEYaE*XnFBjUw!kp>^sY3PAJVme#Og*3*q2K~paI$I+mO z7dB4l-Rrw`D>oAV6qX1Bh(XijKYvm7yxbC12$Yt=oS@LrtN9crDzB}(v9{ijleHCR=<*9|`h~S8(m$zHbs*9| zkY84vO@KMiVf$vQJ!RyYdVPLP?PUvBPLEIDwomqJ>a?)94e4wVXSsHrRcmTm+?mya znicjOcSX&5j?!}aD9pA#I&rhD&Guk)SXGt+xasb*LMc&xu(eqFnN*fF@8903_kiGYE0N1f2)BD+ag1Jf@8*YPTTwR>R|AQksLX3vf8?*+becpsRA|{NRB{~1tp&d zn$;(eLUNpR5;P_GO(+fWV5o%#{(upq?Bhd*8A`@+cy!Ph!D!jlc2XZzsJj?f&WIi~ z^P`I{@0rx-I%9hmKFVqo_LLNs^gipztmza{&7#XjTSBpTtR7Q%7O1dQ?d|J>+A`@f zkw6A_MUV>CP?2Z?!-&8>653Th;MRHJL%{sijpHrin6k3sd4$N zNv_x`-|?HghHq*0fN2VYceCW8-{mbMPGzy55v-Ax@`Mt!^GB z3qx{?E2FOQEWf9ihYCKC)yEy7YrdyKe8Eem8>KUL_spo4yX@;g@!94o(%9E&oXBm+ z)zzpmzfUG)vu@zgG+=P(eAV~s-1X9=4`3)19g z2(Swj(ipGUbA)l%SAe@dmpk0mF&qn@bdvz~nHRg?eL7 z#j;f#%guZtRF-DO5H`E76{g*`)?jFe^`pIL zi%b`JjpTIi!*S#Y5FRiZ?>FL%SVCseE6H4<)$}k9(ex&vX3hEKQQetGb<;wtHQ*5M zC|Yg18d#Xa+nsCI)WPg2Tt)38P90v#rbouw*SBRMV`E|--h_zHfC}$?X}Ae56;nh- zyjV;C8PO{8V6!G3ygGNQNE;t9*?V?~ybl<3>XEi_>Bx({4(P`RBE19l`4}9B98kQy z&G1931uKff%3A@oFgHocFSK^x5aqE*7;6UI5OoaUU+CT=NFj ztENq3)ra=SlSwqeK0@w~f~2MCb0aSvdp%NOeym1WE?{1#|IZT@mB;3tp#^j7{EsT8xCqEwKVN;)Id$x>+Y{`58b{}18Y#0pAq1-w`SBpnii1+0(eaQQLTLOoiin6DtWwB^aw58DvI`ZZ z&%9I-G4s?xO+2+Xcf^b(liZD6!?T>Ekp|V(^>&~z)JCc#RXqEnYS*+*?Ie&uh)6=c zCmQcPGJi>m={((V#ttUYbam8XyK8(4wSLVu-I^n7x48j5@(#X5Lr zr%`f8k}Db~k|rualFM$Z*4_FsGJNM$-I8Crlmf7Y391wS{2df)h)w?}uT6Hm>eQ&|4)wI+PNUng-(b$53kO$>z0p`fYbFKXbb z7*ITtC`7T=(2^cC^n!{REVcJw*}B6pZ!nM(pKqwSRc1li(BG}RQGH9T?s>N##(8iV zLAo*;KFJg9mcvf0!?k)>t*%PG36}0Ua^1|Y;w-J(J)mZPBvUQ#tds=j>ng?d}g)o@R}^FnKJiB#pj6s zqpTFiI7JSSa>@x0s2a^7kgP>`Jd%ZKFnOYdQjbNp@b_6{3jy>uCBntZL{cPUkS^&X zjwW8*@x~xuC>jVbyyzE9O&f-;SV+B2p9EW%{sgseHLtfZ1@Dn=#~$f*xf3hyZ)<5e zD~?@wH{lIBOfgC>6p5Js3GuF-n&`@S3*rv&*qXyQN{+X+Rg%u^IJ61hdZ;h1G zW{}dIjyBJx*NKR86#En@KS^qRI=&&BaWmV$VFDu$y}_f;D}o+%QN`5OCL%^Av^o(T z@lcs29xBcq9nsR!an_L$dP^vZs~vhmu_F-LbqvH!dL@le%+PDlAZz4iqlc;p!a}J- zR(Si3LdK>n5j1^yi1jCcrTxI-Dm!&bYGFmD6)Psu7AE zek&t+0wmUtJ85isM_sV$UI?dSDa(Eta2Dh;G&!;5boAQUM+iByVD^!v+0W(4 zNJ%F{ClFCLB}#!Z$c|PZa_|i`ns`Iigvr6(q2vGxBK-@fUv4Lr798I``v^g7sp7j~ zLOYfk?7<~rQcZ{2e^Bopy5eYez1|*68vO|B9>RT3pyO!cSROnyqS6M4N|a1tdz&?m zx{p#+sn#Y>6RN0e{DU&!xbv6Vn@;@@8na==8D|!vC@aC~BfwaVIy36BPHdAQY)+VI zGt3b8RvHxwGsbqrj-&}qFBmk%&V1Azw`va#r1Eb4EZ8%*%`Z=+-u6ULm|+$SRVIR{ z3mU7oka=kO+2rbtaj0q8S-^0gSMNzWTbVcgfKD%0t zSbR`g`O(!2Qs5K>ABfxAqnF_NH2t5@sp5$pg~@;-+Y$>SxOh(6MhE;T5aItYTujmSHf{lFO zUH6{(c)N7tH<5!z=Ryl@ptDf4FuAyCR|{=~>IJtD4><4QHl{+?D0vZSB>~cv>=a_89RdfFg%Woy-S;gL9 zFq^H!#_6#rfc=?Kdrad<;Xph3b`vch#@1(mQM6Yukovy;GOKE5oKbY`8qT&o#aYuv zu8qSqZR85gZ!2OG(zUM8wxkOjz045f_{7IF@x%uw%sB2HN=61Fcku2Q${|{T?1081 z$7okS3FFUBxOMf^S#Zak>p&T)iQ;S!ZkMBmkIVKT%W@$-WjB*~?qPduCE321(Pr$bn9VI zY$HtOoVC0l&(%4`1#+FSOpq;pY08wA4Qo-L$wy~Vc=5o_?wS9%{A|n5wlLwFsy+Kt zh8Z!S`!=V#&&B+9V4u_L@^L|=R zpf^oIz1!Xow>6_i`iaz9`vniO2SG(AlRNZ`v)O$GHh+ z0kbg&1yYXT)btv(nBr4Wu^mg*8wb{9&*{~B*$#S7JQ|L}B2t}R(*TE$DFlN<1Cf(! zpr3lgNR9wXL{0{SJ!VM#t`3^GewlP$aAlo76f%<$9Ikf_4!&$dsU&e`)zC1Hlbi^5 zgs|Q9AsAxR6G_OsV3FNj&TLRMpMyhcE^Na$4-G|!9V9x(c*17)0GD&97L%yDR*%qu zAG%XUT{GjkA{!R=acK>f$pqgJQ0LaxQ&R)8Mc$-Mmo~;}PViwgHJ|8W>{L%;DAa4< z^pQ-@rj1b_buTrp$gwj}6O(i3hqwTQlL3SIU7P_V5|Ik3do{iE$4gPYZ|I zxG{~^K$iCqjH6s&^MW=bo8^s;?m=m%1rMKOg#ebBx8PO}n9qSQE0K)!x()Ip9&GBk zY>3!7bTDF|3$D|JHi!9!D>~Z@>lAK_6=NoAiN}&AF151K5vh<-kNu2Zp3O^=_tSlc zxkoJse)cRsF3$Y8$T+xW=8#0za+O9)a=^1Wd)_$YS|A;+CL;qpdd%umrwlMlKzoza z*-JEMPZ>BlOrADS-|TQFs8MeC1*%={I0nki&odC8|JYtlJk~ySK7VgdG;%BwPbK6+ zdDgM{pkJA}X9IO{t1)!C*o)6M%U^wwUe@cG1w`c>M3;DnYdasmfiZRP~! zgpEYR1V;nirX;TE)T<9xlMTHPIKzk$uEim%M6xacJ9;3s!j#nJaj4uLgEXUXaFzuJ z77j>4HqjNz%MFO$Vm1*fcB5}Q@h*rindV@~JVHXw86Shr(&F6e0bvk?OM9h2D8U`; z77n4K6Y}!D!JcqPhRE*M5Bj84T?u_1yb?#vkTBzYTLp z71A4yCt>%Iis$QR)wQ$M`1g!BSuxCmxWoJNG;$AXWDtrC!(up32~T=UqSl4!ahwDM z4r;}^CM$}05#v02LJ71~Uo_O;FXanr>9dA?&?LG+TCRa84ub$(ie;G6PYl4AgS&03 z>zU|CNb{B1r*?h7{6+t>ok{x$Wk!P78&%di4Bf*+m zHlYrQ1G~E|oX+HBf#Zm5vh3jehya-gLvHPf>?Jy+VlYuwc*2ywVi~>EEUzh2=AD7Q zBo0pUyVm;Zq4P%3mrndMOks}AB0F>pRk*sET>3j>^o&!Dxkb}Zz0WXJ!-@k5C=Lux zU7*lGdpdbxf~oknA(+hrp-Q~({G}eJQ_tRuZfBfv%Sw3A90LO*ZR$s0#_0rc?j&g- zMn+!Es#o__k109eW#Bl(4;VLbs0&bXOMq}Rg{#+b$RrbAl^Cn3yLn1BlnEFbd_WIK(A?7`}q)f z^&82IBX;tV0QuE4moluGIF!Y6(4xjNN(E$7WReQdZL5Prp+th@5OIhtETSzje`njQ z7XobDG%Z4abZ7f>BLwiB|Id;G%(M7&mBr8Zw+Snsw9hls47^;SywvuT81^h_I^y0W zcb|@1pCVN^aSmK@-|3cU|6W24=!f(y_ne_2#^AhXfQlfd`;jkc;*rlxo#}3+eGptA z!wOq@4jh-3(S37acdO+2@n{P6798RD2p{#B@Fwc);KwcM-nEw>aVs5L)H?WRGS`sj zt6^W6w6(g4FW0sa^lj3y$z)-?yTZ%hA3v)`+=HKrkR&))6$WZpQ8 zV0vQ0;p}onOk~T>&G?cv1|yW+qD8#SgKyBpgAe3@mx(}I6qNf}x`(KT)%VwtDHcab z|BTy|nI5uW9&a6j8pVG|5)_ldtcZPn5?7@iylt?W8PyO}8c&c8FmyCod`7y$(9Mj6 zafmn;kJZJDe)u1w%}BY;SUot8b%19*sd(k|*chGysW^`6SzazZNx8H#O)%F~4fFjy z$^M=UF`8+`&O~)iaa|x{ZM>C%=&^_H(!@h2rcRI1A>2qTb@m<+gGPka0(qLu)~%kK z;^T4V9u#5@)&zrLBbp59$u;^G_d%PQfet^kDU7Ay@ zPQr4=@c{#RUDhEmKgCzebDHCz5_T2ji7_t?2rZkax{@ici_+ZNYa|j?BxLJ|r_5es zdjvKHwp6ul2?lX!ssX2>@ITcv7!Rjl;3^nYH!kjqz{C$(>kJ05Ult38%rN4ybwfT6 zIE$3=T&l}ev~&75+lQ1Gp3P}nNpY} zEl9LpPF5t!Xew(GS0wvYiRjPAH*4bYrU}!Z`y7RN6sm5~*iGUQ)@yJF1Lrp-r33eXchZ4Vn5N3ykCjBny^$A!zD>O$}~7d7j)- zVzDGi{UNg_gqzMSdG`FJ9;Q>O*kKsW(L{Xahr;M{?)y?^qz|?PoavF@KF&Ek=)yST zSrKcTmP@Le(&;CUBk((zFw9n?FM=x+*shm{#u(dpg6n(7LBI!$qbXRpka{I!VMcpn zdNe_j8$xFapWAH0C;{vUU{BIsZgxeI$*9p53r9k+G3UAcVcG8WPBZ~;j4Bg?cG|OR zd!L)&3|yAy8{NM9@}@B2reT6*wu(2~43{-bgF*N`pz$$HeLZC3nls%v+1rE11`sJj zxa{C5Ef&H6_`=bA;`nw4ksC-Jj}-B*{i4qn)!G^Fm`M)@PWoVTHGs zkDeK{;<^nW%}olf(1uNuyDMPQEET4c+Js5NR4HbkFASiFxP#KSnCKltMlX@>@~WLg z5?QNC^-5Fxl)(YDK+Bx8mLTRZh*A*g+W(UUg| zNJQx?y`e4!f2;i7xX}l5cM(z+)>Cx+5d}+Q4=5M8a;cOdGoM!04w})Mq48iVG7xWC zt4rg|7C&k;pb&cN;Sfaa7Dpy)7h>+>^=rDe9ODXG4>rXWW#!DWR+wI1-&a{DLMP{_|-Rop^@hStdpyjkZ{7um^_2Fy(l#07A~hm zm}|O)hsB)apikKkNhTpcC=n z7%grzZX$>VuDU*m)v;i!D*<*fq(iGq?=$0r7}hv2Z08mv-ceh!wa1%;5D&aO$1WVtvRT4C7ungaNxK@`E%3BYwp>qN}l~^8ttkuO~ z{MB`J`gYVB$EKjC)N4>-hQ2S9iblYR;51c#&^&bLW@%B$#k}k5>o@AhQ9{6v<6k^X@sx4!iqR4X@v;F?jT{_Z}i zQzt%BnraT3s^MHsgfLtaC9O@PN9-PTI?g)X3;dSn(co;-*=EcPNC2f-N)Q{=iUKH6)Qz#ZsDoIsXH%{~#LzrvZ5%Bx?#ZzD!DEcM=qY@9HXZ#zL( zG0;xJ4C}NVB=SbzdICs!%V?SSSpB?BQa_S=iG#X=Y=0=CAL?qvvr)gfYcng%yXlIM zGz-(+-F-BHd+mmTCN>HrDSZ(T@dPM)Wn~WXHJB)Anikco#&kzA z#}NpQ6Fj!2kQ5)fx3P8Jv#a%lq*+rb(ABmm zlUmDe-|@6Erc$icJF3iySjDi|#-Yix%_IQH3FAx|O@(zvddh;>KzZGdVgkuC$NV#8 znNtp$GR!#-O_@%Ci>BmLXrSQlOh3W0M(Uvr|yhiJg;H3+JU<2=c=DIV88~gyf-SD$R-}rS10qaJ(;QN`*VVb=M}Af~LJ6t67K;YvG-^5Z1Qj#Wv7uOD4t< zK3OsiN0c#zb4*SVSMrR_zwnStmtWZUrIJP?w3-6ADSrts{}G$ zo=)j0;NG-MTo#ok?}=erB?FfwV>LU9F%#jloW$94TIy?Da-I3x~S2Y)O)BY^Rki2$VR-lIx{uOrzP6M=_A0_klCLi1y0w+7&iUd!J3$` z8v(W5D5j-NqE|KBD~yBp+y;Bxx(d*N4B63Pw#tm0kd~mw8bH-Ms=b4Vb9Y~E;=h@! zJHhI5X+|0;M_6MG5@sCzO$^0h27~Ui1@oUe5s5}<^h&Xvb+GbeSBS6CgyL!>0cB5l zt!OaVWAsO2BcW)dKL%zMb`@cAZ)81U2ZM211rvIES7HqrTs%T&H~j&?tUHid5E64c zlWMwOMJm<0FI@*ypGKyMgQy|X3}Ldl&iN?;rX_%MzR8wSpy@FGq@pj(HKIUW-xE*L zoxJ!$5_lp8DFP!~WzI1kgH*)25gnaHM?z62JIhFdGEq}HP2;h2HH+H%d(ux>#@8=PCOHh}5v7#{42 zM{U}Gj&(xq%sO<};2bwgW2wRw+L-P@YHoykS<28H*;6*629B?Bto6P)3_H`bgBT>V1yhF9lZc@ExeRh++<0`XxSgY;f zFT$?Qr*k6NvNxYQ_!Q#VC)?_cM-@v#e6asGo{?Za{U%He5{ZC$jze3Gx#FPdN}A%M zAR(o>%o_zK82R-ZrZfgc{I<(JmM1k>>`)>Bp$r?T!hzBwvH0;=UPv|>A(^ArYty)1 z<23fxV~z!6?do82!aI)Syy}KrhwWNh!WAQwh(OjN#|_3tX5B|7eiHS&;_)M?q3x*{ zv(MY~KJ_a~X(U~luMzPLG7l(FfDb}~4G3S`8(YSTUEwxq^Bq{LrOJN^!HIJHwxbET~(qvYTs zXwuU{=wBkK(~(2u?@B*mg2slSnK z6LBM(xp)hB4tBpCq zQis`j$jmgQQ_;-v_K)ZLu%Kq#{h4u* z)0z6vNf5{rBh%EDgZD5Hj+~~X0LOJKk(X6PYzJ52-()5b6!&*2q>St znw&g_WS_6`6A08ub5Ko=sy(6eoL)3S%-{pB)5HU9IbjCdED_&XD&lmG;_;rC!;ae$ zPU|R|v`}f^lz>xkApR42I0el&bx_Qkg-f-~fFZZAbIStRr=e{#K0h7A0X%h5v>=^p+FR zY`)94;1VzhW1*@{m(-kDaqjrb36_7N06KyGN3SRpl8ZHk^2ugZA!6dq-I{pwEjb}3 zI-%-e2`!QiQ+>9Zgmw156KTxnu@1d5ijy{GT9Y`LRid4CcUcMU9WcVFs4?0atn13F z|KHxV^fqo?VX0}+F1kp8uDW70PCG$H8a+JYN7?`xkJ}iXx7~J%kw>N^TIN_1HKde@ zYq&@TLDB$OWSdoh{)M)SqW_}ZH0`44rhg;-&gH$Aq(o7qMB0)}V+OV;J}xgW&+|Lq zp|)8m8|)IqzDc(5VkJ1EGqS;2eCbg0v>p*EI3_Zgy8;f@68wbdfXQtQ6ZY`WB~Ns&>1yFgfQ71`&b_v;MO4D!9c+GEj;*Q0VExfRqOt)e zWCYSs&X*WCE@O~JPCpc3VXY=OOR!iYZgY_KO_U_q4pT=;R68%B;|5ZM`O`PEnNMGj zCBp2O8(>q1(R7)raX_Gg7AB~;Y=LTp637U$NdSx5B*qM;UWmRHWGN~#&I3zpvIb!C z3*QbdHjm48TcbmX+?-{n>1wJ;p+pp~(|H(kZ3qc09XeL_{x-;BX)K!BIAV7|2@cI_ zn0g(fWak_zGacrcA>ke3vT|*3C<9&i#gUGy(p}j3d?f0TwwFnK^nl?*Fg3NUbO)U} zkf;(4#Q0@q-FCaFv6{kR ze2RGhQr2*8od5%dp$gC0c!>FKrKvPwx=ArRQ$8EXR?N2$<$*=7Z&v-efhI{{Tc=N! z!Pt*>4I_q0xqjZyWoV?(E0j1&kwq-n1JOJNTTgA8}35WMQto{7>oD6`=OJHefu5UBKYzY04Pi?M|} zx8*5ZTjmB%`*Tsu<59+A%Zk?%2_IIHE8YnSnQ*Mkqz*`nfzChX84oBUsTC1<&816- zJgMl7mZvtf{jm(_S2DFZM{d{D1|1z7qe(}nTfDM+Kl{z;lj-+uBpD-rw`MNM!eSDqBFDW&}-?yEWI3uMqow^98YaE~SU}A8>quH4&4Q8`u;U#2cecp>B0b@0%-0a28&gf% z*Dby2vy);Ckl&{2t}&oo4kkI`@I%2zgb@rra5S zSw7^*S9KjXa#6Z3F?8hr>qh?wpV^IDm_R@U(7vvzTh9z^UEcJ^M0;b0DAKxWJ9mai z%C0dm8`{rxPGZH%SGhN6V}ZCdFU_{A8+SRd8@KD*a`Ehpw3TaaC#mVl6ST)9-h#|e*=Mo3CaAK` zCy1@K+eQP;HoJZH^5iz3Ft)lu2id+8(!?=o2b_w|MtXi`1wki@pdwtCo>@zbzqFs8 za9uf~svy(m%l~9EUw##bX|oGpds|~&7q;3ubhg>N9F`4GeRh$9Xk0~|X<^f_(j`UA zh0-#OL2r5WGjt3?T`e8y`!f z)>5CIB3RmPpRHWuJg{?o35M!GGc4Zq|-o;5O^5Du6hmVq6E^x3wmfLM; z}}V(+6#+J%Y3o0S|}EZ*PBMe zy3WnfytF#=LUq-%suOVaV+z0!B7 z^H1xJ4ks2qtZU!g_8dIfDB~sbyJx&WTn6zJyNqRJdquI1j6oZPk$`5YI=pB4wq+B% zAuehVo|nNrUfSAd``=1;Iz2DO=McQ@}AGBxe+)u zu5U}LQF6!;^Kkyv3m2U2;e%pQQX%h*QW(mWD+);z>`T+9A1w5heIP z`%yOY*$?AL@H^PW+rYtfdK_H?$W&juBq&C9uhg9nwlw$#U9+Hoz6UXF5c|BxK~Dm- zHwP|M?*8E+ppGo$44DGFlVg__p|iJ)4kKx#9Z(e5#oalZDE__G#>4h*gbBK=8GlM( zFp2=>$Y?k1u8NHTmN2jq-Fs6N7i3 z;5y#YTYlan{6jbTF|kWrlpp#4Z#oqAkeeNRn_}WG8pi4Z4X=`bCri@hl)1kaCbr}K z&yHigBc)%|37lmq&e5dbplHwdNxzxIq(8dslfE82=^J9wnLwEUNS@Bn;|9K$O^LZO zv6&O(Ld0TFkZ7Nz*wZKhpwiuA!Wy{M*I8l__mvn~hhhCxm zm|Ekz#g`6`biZbWVjgKYL3hY3a__Lym1Rpz1DDVt3L5T2 z!giTwT-|LXzE!c31L;# zteVRVfpr|sg$2bzg3g3VAc<>rb&y{6Yt3S#eq*g%&esns8~N4MjbeUdy?7(PRxFkp zH?>NoTrZBr7dV9DWC+D&T$ETqN=TeA#)ULN$Hor4rNDB3h%VjsEL@T+$NG%tgk8;y z2t?OW$sHVhVYP>Vd15NWYc{04rvhBNtvW7og;Wls{?=$XW8*Jn7;-dXIV17Rpj{~H zH-&tX=4py5!Hzp3STsfZ^jxPkU?;?t!mcalDGg9-%Mr!#8N|^#IgVfCv)asG!)E^1 zh~brh&3xWBJkG2RX({geSk4K^@wiNDTaNpg)-QjO&Afcg=Lx^lWHchNI!5V3wnG74 zWgYq<-wY1m->jTLE)GBBoY%Z`@{$iN{)iQ;r!{n_-{0BEObROU*Py^ccu*dh%*TJr zWRb2RrBRVCtPkWKJP_#jnOJ_0Cf7Z0<`Ip`~N<&KheQjrGIgdVck0xtL#F zTd(KW>slk}M3{(VGw zC1A(K8p)1kq()GsLFQ|m3q7=H6Dr9uY}(M1{o>Lr>)!pnG+L~WG7_ZG;t=d}aoA8IjFm=Y6GRMC#CiQPOXG7d@AP_YFlO?sg=nvphs0E_lH7cQ@wF1ihYFru-6U=_Mu@h= zy-SmP&|XZ@IX`SP`_fu^_Y~2BR`-lLd>O1^n*qMnj&@4Vn<&qa&N?!+_UY!&*gp0# zb!;{D_pzm<{8%Z<|5fp0(l+NivAN2&i~UPDJ^zv0*)gKsn7GU}u|ba2wE5Lc;{{0i zf!J=aVm15?{$Fquf+>u(o1=cb0AxQOsNMdcLxAmu*6UkJYXJJDImpNP;9%w*#Q#X6 zZhi!eIp_7djm-OdYMb!-eST)#NO+Z9MkJSD$d${r)w@PMHt^7c17e z@J#q9?rGki_fEGr@PpjV3&?>#>jgs$@bzkIPlo*@IYlzprbNH^+hLhGp5pYw8%{{R z3B%6Gfr>5i#PJ~%`C42+X*%z37f(4a7KF&o45aVYRKSRF9&R$4Yu2#t*e(FJVURZm zAnELAg85%Z9}1Qk1ILF-jVQn~q60V$K6&&B@RW_=Gl}D|ao`GQ(Ybhx!~!xQJXT_D zL52Hv0Wck*PYIYYga@8Olu2m<5XUYLag;! zutLbgxCz&04J;6np%+Gk_C^qD9`H`z9BA0ra-!3lhico>d~+T|F5m=&l$k;_{-sRb zKmaBXJrNb+E1wV!aQ5^D1;lnbixUE%FoE#)-Fx^43WoO>4H@|D!LBC0usd4H5CUx; zYH~@N;)x^hi51oyaeD|kifc?Z_8Covu(d$E!E{rA0V7E#gfFgmy<@sF=^fJtu~^6X z$NT^W4|(|>a74Y4JWK)^wk3FD$K~~=&qWO<^e)iEacZ)tEll_fAW6cp;8c`hf}@xfv^ZGF^T1z52YqU1-5K z3Dvpb2WkmGbvmoh57-%?VhZHC+RFTYSlM6u2vz6Ysd)9Z#g|&M&)otK05FGI=ikm| zGMU3{MxC_xn>*b%e=2v%%l14nG?XXaf&30RS|`+rI*%|>jk&Pa+s#_7oXLETu0=n! zY~~)yzNnwDRqg1Fo{AWfb=)_4q6=lUTr5{=@^V$9{;XQ7IVI+`8ZR}lYPCYM-KMjC z7yo}ie!ft!wwg|pb}|!t zoH|y&@7(+Ep1pgq*j<8;Kzqo09{>5zfBy6T|M|~3_pvzfOaD-{D5Y9)z4@k6Uq;IC zh>ojAS5Vz`-@oco|8mv0wtm?<{;jQ3=aV@*ll9JJoq0Rqq|;vBo^kDLA#Eqq_R&+5 z_PjUi4z5|#d4E9q^te*Tt(ZFV?4Km0w`;1;UTqC2^>aXCKJ<%QETwGZZKO)A(|Od9 zZw5)#Bd8DBw5UfuKve!Or9qJ(gjvu%`+f%RSetIaw~SEah`#X1ajS3g*btDT)K7#7AAQz%n!-75AXvYj4y-PO5E#aVy%P+a{xq!>iE zy6f3aFaR#%ajzGcy{&%9TaQ9_>*_l;twBA^Hy-PUCgbh74XF4qn7!NEh};7)>Nwus zk%MSEy*qsnL>c!x4samWc>AW0pa*OF#*SBWcLA?|Gh5uv7V6L952%f6e!lt79#E@# z+q&C!Z$YmZS-job0)(K@;oZZ6Qa@0ddT)G}>egejfTh&^YVKE692DV2?pNtwR}T=n zIa~0J?+bzPVKlxa=?v@y+VTN90|5H)0Xjp&0VOdU+Rfu6%pkTAvKz2d(pAWA?ltQ| z`nOrPGg^n>*3e;#y2S2FI>fLI9kNue!}|a!Q&Y6iA>oqHSy)u)BJ)jeE6M!6F<<7K z`xqz0he_XN>ABy{1j2>=`@+>30AN5qKxY8JEbsw30|4yF2j~p-aS)v4Fr?0%EFCJA zAQS2*i&Te2^s@^MinMBM@I{?>7U%Z%O@ir9^Y${&KyE!urcPl< zkSqH2v4Vjufwj~i%V<@K&##V2isTg zgKj^K3vNvLK1nIU-w)WUxZneIpdEY*S68nBE%i6n z9t9jUR~RFD!?^+1+i-zvg?$Q_KlKh=7_+`87g&|9g8+0}wj&K*5EQ~_JM)z8XX2+i z;_53p-W0#LW3BSAbatxu#6RBFsV?hyO$YPGbpC%S=3k33{(miuA3{E^e%3}h|Gn*A z#JfPJOZ}kj#aNg6F5*u0dEILBD&nV+kE=gb=h{2f?`rse((ysm#??0gkE>VJi=fl7 zia4IGeL=T+MkPS4t(BOWHezmUJ=fl&KCV8|zEQPV?D1ta+_6y|Y-hj!46Qb*wSaF_ z>k)IzJUCDm{I^d1QG2@;FP8qNE_J9ob=_A~yVa>yL!L2UrXlVwwN@QQ-Hw(I#Vpm; z@=?T}ZTT4D{}}ru;?KuEi`dbS@s{61-o*54O~?;pe*m1HqU~v$T)li}d&g6t|88CS z;i?O*?0Y6C{fRCmb?N;bSFCTvV(Ma0`l$8CD7`l*&061&wWybZQr7xYls*)c{#*Rd zW3B3AL1|6<8z}u&P#U!UGS;U4aZuWC{RE}gg3?CIYKf~a1f@P}JxX5*N?mP#9&1-$ z4@z%udjq9!2c^$g{Vg5pdqL?n>i|mEbm{9IvDl+6tJMGXOX@G6iB;-rTNT3B)z_@E zsFTuBI8*QyTeB(NfNP!j9Zx}Zc!tW$UCl0Twu)$f<|h`Nho z;D|~kj;Kd{SY!Gl>Q$f9rK_0Hvn}hjZxEZtwmpu`bvQZEK2j%btm2SMp!>q5(&>Z3tv!g?=Cp9)G-u!+0WD?#Zg*u-7xcXf%Q z{neJu>PtastuB4TFX^#wR>!uJYijeez%;daw>qusIQD# z@jBEn9!0!CJ*hqkOL$UQZ4as>AaS*Tc$ae2k0GTykberNy!MU@>ZfX3?4q)){?<$C zt7`44Ush+-U$y)PUC3%x}Gqam&_GO=nco8B=@I;cbqFI2w`wR$guJfvUkzeHuIaprkq2AH*L3_$3n5o@{ECiW*YPzSt5(*&uH#4An14pc zS9JV}j$haDH65$CrmthwuJbznn);FYwlxLYwqVn%Vb9&LXYNoAxBjR_saJITG3yQF zFIj(qxV!zY5FfUFg7^W88=A2;LVnNcMLr(uL%dj9AHO=z32Oipp3(H$=|+An zV(uGyk?%$vQ$1<};=8b3#nfh`G1&0ksNI4%rtZN%3um5tkiQTAEM+5(VW+nhaX&0N zhIzjo@lNbWEVWDTOLhZh!B^}6oR)5>UqBpFLx5TE5cDb|fW=_R!-(I8l%pe`aq!iG z+O>%HBHyY`Bj2jdBHxBPCY!*`usWh<)GDjr+Gm}z^46!VH>|(5er~OaJsA6Yv8Q9L zSD?YngqLE4Ha}~^F2aj5n6U3b`(fA@gSPadO1*|wZQy#V z`W0Ls!S(C7K8foUT%U);{tK>uWNlTiS=$x8y?W@Jo1dPZKH|+TOiw>NGd(@BXL_g- zx@T_*Iy(ETmrUo4Ci_a2CFt-$Kqto2g?TsY%%t3BhSfySG$@{#Dr7YLXkk8c!bzM@ zrinG0$)pyhym0_fnsRa%*!0Y3HtQ@f_s(=O?_`-}9RPWEepnqVq!Z7KsEIKrmD2P_ z)ZR+>0COQ$+-EPuAhMDifv96m}eiN|DaH&-~e{aN#wmO zY($sYCA3LJ>Fg}alM6Y>b?|gHc?qK#9P_g7@#Ktv$GlX^O;7>3!AIS+n@uLviDV+{ z<-EE4;F*Gx&KKqfC%}0!okQK|?5yr;%mavRXVsa%%VW+_)a z>gHKGmi6WXNJJOO`9exhF|GT-;#3?w>CC$k%AQ=b0gbZmM#l=NRNal(Q?Vfn#c|c3 zFYO%aYCs`INForpmRm%1NKg?NXC}`(*^J*lFk&SZtB$%eg>&cJ?2)YZT#mjG#*lZ_ zm^YtErrfNajR4G!<}vwZ3aIj15H$=lsFbQEy+StO9;X+>{4T-8ppLqUl;eBfQsrdE zO(dOE^1ZrIB#O_WuE(I9=XEYuA`ysO7S(11s?2z} z-)Lt$IGal8zPZ)}J`i(nan&933YegjUj&Zk0DWD|QO(nIx6?CTdUpEK@bvWHOb(48 z3*~!8!=XHpb>RH7K?RuBiW-OKnb%!O{UDutX^G@oNpHW54srmwh(1CSV6e3Gz`@NV^L4i2JP+Dod4bicQ!~$E zaiW`3*ju1p>3XffU^!IDbf%E^cPDD1xSa?VMsCc8r*Ov1sS9dYO{=4-pypLZod7JM z&f_GSR<3#iPnaA)Gsxpv)99o+sV1=3JdL}xQ`oiEP2ufki?g7b!(GAxXeW>#M=6h< z=g}uq4?Ki8I8}{<2I#FW@uTiuoHoVvx6i%!2VeTNV<$iTv-nRhfAR50RjX}T9W6Ev z?#Og^v)I*Pw_07@_jGi0Z0Ok@>)Fw>0|;Fj;n2DbJr}JF-S3QT=y}rWIni?hfI=Cd z!&V!57Es3qJq~ENnns%)v$ovXYAe8$)pO-)_mvNH3|ZE_3i;Mft7nwaIHQ4%PHRKY z1nDz#ri^|UK~GEnJ387?Oj_VE-m_!%P>U|z8@t!)=xpifAoCmA+dGBZpcxoiWdoB# z=p;)Rh8`39^ug_5w^#L2E z=t|-{O!mP>z=sys337c0xke{$tgP1^dgK#Y7?gYuPy@DoRrKsw*B+OV_MC`elr8aI zh06-S=%W|UBuSPOx?~`l+zudVnNxv&H$Jgm1(r+wY6VY#5L9oX`5Nz4S|c<7&|?Dm z_TpfNVX}0OpLD$Me}CY6U-_MdU+Z|}=r*8oyd zK1(IWsK`+*#!+U+b#|QD0i7KPIPW>(OT9SQ@-BL{O3Gnflu4=IwHl>V?qs!Z=1_gl zaL2U~wLN$pJvp$JZdA(1fT;uCVtPG@Dgsdo+S?|}FUH9zJl&NRjGQ^V{gnRj)uH( zJ^p;c&2Y)Z3WTkZ1w8+0(98eAQZIk*a^Ei|)3betFZYe%?ACXj=Ohx-T*gTdGdNK8?bc8L7F(K0skmjy^&NiqdrdpbDH&Fd?&Gk?t9^dr@@oYL^J|8&Yr`u zKAq>V_3_&fQt8xfvW#(s5&cJl$CG&+%u^;VWsnx=x|*HJg)rf1!BVj;i?TJJOH27=gK57RtF z{2gO?B0cA3v+k_z6!IQ-gpg8d!Jb*L^XFYV5u6VOZ~ds2vIBjShbC*95lk+y>!O*| z04a90{MOWWYHkiU3bd8NT!;G(4;8I@2v&%53?~(4_+`49G$wEfMDrg@dASe}vvqeL zcGL7kS>19pft|L_1*1Re&N+otK7hY~j{Ni5F&zHjnZ^!3^;B?^XgYD=P~za+(7}Pd z`$vWb_8vGmGjMRmO$;Q49LJg2H*@IFA$Ra%4pKf1PUty}!Hkp*W^!SE#!D3)NOAHX z$4$Pz!^0eHsxXiC!^7YxnB$lGDysMFBgf)!w4#lPdM4*X4Cm-OjmhM>w39DnwR@vw zoW=ok-i5D$Xei4fMOsbC#q;K(HY9X<)&+sIE=40?{&-pcB&A8gtKY0x zv(DsrOO_pTATnyxK741V8M_6efhjrJU@0+IwZ>P_r*DpdKZY}_n_VsgkJ9MN{~EiH zFH~ssx_2Rq-Un!IMv^OJGol^NtzWn6+CYh8Z0<&Ie$cPY^}W#CjWoI&8Qx#qRd8>$ zT-%YoBhBrIen7Y6cI5lmj{I@O;w%MRvLGaVMMP-BP)U9hd-a;wJqY z+s2)hKK%r=@9E%Pf^mOCzni6Rlo;rx&iRNIds(!TX;yLbqk)^Y<}IjzZMl_E%c=YT z+3{~JN8ENA!9I^1mj>bAX}V4c`VW_*M5v!PSG_-U(?zsrZ&eZP9nvDwUZT<4ZA;v^ zt<|ndS_({!wzhn?@9_EoUR31$yD0NEUTR#z$glSf-!*Kh|8vF0>jrG8Z}x!ey9rpa zQ+&G09lvGt|!&f4B(H?I$))=m@w+GRSY#5igDO@8z_&TDNzz>cYLP2Pq~eby2CwftV{{%u65a&wu&W z0MhjZuj(SVSW_VZlp;B;7y=p%CeM{Lq!zz{qXU;A21HJuj4(P)3w z`UvwX7Qu1t3|B5uW*hS&I?MPysECDDzX8u78lSyL>v}i_g(XA%TufDCfxlA`4(uYV zu*LAI(GJtCUT)MRs#9IMmZLQTM=mqggx8WMEz>y&ZKlzCwBj2yM0u>1J{H4SZVibH z$e3Kxx0IPOSV2b0`~?;U{M1!hTh^C3Od>TJ8aEhW6F)wu1AZ1xhZ}A5^^3IeF$O~_ zCNgFjBYy9u7+6=IXRGQ{igcqgVk*TtlaV4YB10zW(#5R{3J1ixci^&5XWb0m*s`6p zjdzNjl$|T!6QfMYV zWgGKiGnS2gCnte^>zZ|qhQ(&QsF;1y@K3T`zsoF*ER|{1|SH$p|-85`*|*zqCYL;Yez2E%FXK z5|&xVyCt^X$!W*n;kDV6dqW%ocj1+{ZH#XgsTSjlNpdGLLw4B$X*R;kR5cD{aSh{K z-vGj`#c;#DEMHlAl%8bju!kEWxazD6JA!4hBe1BH?RW$aTRn%xx`%LK`NYpMXsg$Y zBiBoQY?0GHo?tt3SQ(8uVdMMV6h6z~tM)f!ek`$N=5X+ill}z?WE&2Pt)q>uoAojh zRw>6tCsa=$4Y}Bk`P*pilbb#iwHyw}W<5cMCn?)9f3w$4Q4Q}MGBj=`{RlAjOhFEWH^r zX^3G`!5qqU+<`=EO~NEk7=w8i(uY*W?0z1X9sCG_?a40$!T&mWo?`G#sJ-A7?7U}t zGdcW-fva7!J2!_P3&@GD=AwrAHCic@8EMQqJN{0_zi}|jw0r8Xb9DYUahVkwoHRFML`-; zX37vweW<@Z6FLH`H6=~9t@VT}bfb7HP830EG;MTAD2Yhce^QdIpop(guBx|}S}`Ko z=SpwY4MtiE-&6--0%y9&1eFeIO>1LBR%)9r|AIRsv=0;j( zK!hDE2@xn;7*|F z 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 aazf2g?GjjL>9761{7~&pnwTp`0{f literal 0 HcmV?d00001 diff --git a/obj/__snippets__.dll b/obj/__snippets__.dll new file mode 100644 index 0000000000000000000000000000000000000000..dc6c84a8caf0c0e59aec8802e91f228284544f20 GIT binary patch literal 65536 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 E4<)oNy8r+H literal 0 HcmV?d00001 From 9673fdf5e217e5bf044984334b7f31b7157f8494 Mon Sep 17 00:00:00 2001 From: Michael Papadopoulos Date: Sat, 28 Jan 2023 14:00:59 -0500 Subject: [PATCH 02/13] Task 1 .75 ratio --- ...Hack-challenge-2023-task1-checkpoint.ipynb | 1697 ++++++++++++++++- iQuHack-challenge-2023-task1.ipynb | 1697 ++++++++++++++++- obj/__entrypoint__.dll | Bin 217088 -> 216576 bytes obj/__entrypoint__snippets__.dll | Bin 66048 -> 54784 bytes obj/__snippets__.dll | Bin 65536 -> 54272 bytes 5 files changed, 3342 insertions(+), 52 deletions(-) diff --git a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb index 6a0f1d3..9c06fd1 100644 --- a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb +++ b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "jupyter": { "outputs_hidden": false, @@ -46,7 +46,47 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + " {\n", + " \"cloudName\": \"AzureCloud\",\n", + " \"homeTenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", + " \"id\": \"6d61051a-6e40-4845-a03a-3c5160bb5629\",\n", + " \"isDefault\": true,\n", + " \"managedByTenants\": [\n", + " {\n", + " \"tenantId\": \"d0ecd01b-d782-448e-bae0-c3cad0e0543a\"\n", + " },\n", + " {\n", + " \"tenantId\": \"94c4857e-1130-4ab8-8eac-069b40c9db20\"\n", + " },\n", + " {\n", + " \"tenantId\": \"f702a9dc-ae48-4dc7-8f0a-8155a6dfa4e5\"\n", + " }\n", + " ],\n", + " \"name\": \"Azure for Students\",\n", + " \"state\": \"Enabled\",\n", + " \"tenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", + " \"user\": {\n", + " \"name\": \"papadm2@rpi.edu\",\n", + " \"type\": \"user\"\n", + " }\n", + " }\n", + "]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.\n" + ] + } + ], "source": [ "!az login" ] @@ -66,7 +106,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "jupyter": { "outputs_hidden": false, @@ -87,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "jupyter": { "outputs_hidden": false, @@ -108,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "jupyter": { "outputs_hidden": false, @@ -144,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "metadata": { "jupyter": { "outputs_hidden": false, @@ -168,22 +208,19 @@ "// Task 1. Warm up with simple bit manipulation\n", "// (input will contain 3 qubits)\n", "operation Task1(input : Qubit[], target : Qubit) : Unit is Adj {\n", - " use aux = Qubit();\n", " within {\n", - " CNOT(input[0], aux);\n", - " CNOT(input[1], aux);\n", - " CNOT(input[0], input[2]);\n", - " CNOT(input[1], input[0]);\n", " CNOT(input[2], input[0]);\n", + " CNOT(input[2], input[1]);\n", + " CNOT(input[1], input[0]);\n", " } apply {\n", - " Controlled X([aux, input[0]], target);\n", + " Controlled X([input[1], input[0]], target);\n", " }\n", "}" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": { "jupyter": { "outputs_hidden": false, @@ -239,7 +276,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 59, "metadata": { "jupyter": { "outputs_hidden": false, @@ -251,7 +288,462 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "{\"diagnostic_kind\":\"state-vector\",\"qubit_ids\":[0,1,2,3],\"n_qubits\":4,\"amplitudes\":{\"0\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"1\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"2\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"3\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"4\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"5\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"6\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"7\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"8\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"9\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"10\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"11\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"12\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"13\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"14\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"15\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0}}}", + "text/html": [ + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Qubit IDs0, 1, 2, 3
Basis state (bitstring)AmplitudeMeas. Pr.
$\\left|0000\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0010\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0100\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0110\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1000\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1010\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1100\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1101\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1110\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1111\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
" + ], + "text/plain": [ + "|0000⟩\t0.35355339059327384 + 0𝑖\n", + "|0001⟩\t0 + 0𝑖\n", + "|0010⟩\t0.35355339059327384 + 0𝑖\n", + "|0011⟩\t0 + 0𝑖\n", + "|0100⟩\t0.35355339059327384 + 0𝑖\n", + "|0101⟩\t0 + 0𝑖\n", + "|0110⟩\t0.35355339059327384 + 0𝑖\n", + "|0111⟩\t0 + 0𝑖\n", + "|1000⟩\t0.35355339059327384 + 0𝑖\n", + "|1001⟩\t0 + 0𝑖\n", + "|1010⟩\t0.35355339059327384 + 0𝑖\n", + "|1011⟩\t0 + 0𝑖\n", + "|1100⟩\t0 + 0𝑖\n", + "|1101⟩\t0.35355339059327384 + 0𝑖\n", + "|1110⟩\t0 + 0𝑖\n", + "|1111⟩\t0.35355339059327384 + 0𝑖" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "()" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", @@ -276,7 +768,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "metadata": { "jupyter": { "outputs_hidden": false, @@ -288,7 +780,56 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "\"Connecting to Azure Quantum...\"", + "text/plain": [ + "Connecting to Azure Quantum..." + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Connected to Azure Quantum workspace iQuHack-Workspace-micpap25 in location eastus.\r\n" + ] + }, + { + "data": { + "text/plain": [ + "[{'id': 'ionq.qpu', 'current_availability': {}, 'average_queue_time': 265936},\n", + " {'id': 'ionq.qpu.aria-1', 'current_availability': {}, 'average_queue_time': 338807},\n", + " {'id': 'ionq.simulator', 'current_availability': {}, 'average_queue_time': 3},\n", + " {'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s1', 'current_availability': {}, 'average_queue_time': 257411},\n", + " {'id': 'quantinuum.hqs-lt-s1-apival', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s2', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s2-apival', 'current_availability': {}, 'average_queue_time': 1},\n", + " {'id': 'quantinuum.hqs-lt-s1-sim', 'current_availability': {}, 'average_queue_time': 4312},\n", + " {'id': 'quantinuum.hqs-lt-s2-sim', 'current_availability': {}, 'average_queue_time': 140},\n", + " {'id': 'quantinuum.hqs-lt', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.qpu.h1-1', 'current_availability': {}, 'average_queue_time': 257411},\n", + " {'id': 'quantinuum.sim.h1-1sc', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.qpu.h1-2', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.sim.h1-2sc', 'current_availability': {}, 'average_queue_time': 1},\n", + " {'id': 'quantinuum.sim.h1-1e', 'current_availability': {}, 'average_queue_time': 4312},\n", + " {'id': 'quantinuum.sim.h1-2e', 'current_availability': {}, 'average_queue_time': 140},\n", + " {'id': 'quantinuum.qpu.h1', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'rigetti.sim.qvm', 'current_availability': {}, 'average_queue_time': 5},\n", + " {'id': 'rigetti.qpu.aspen-11', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'rigetti.qpu.aspen-m-2', 'current_availability': {}, 'average_queue_time': 5},\n", + " {'id': 'rigetti.qpu.aspen-m-3', 'current_availability': {}, 'average_queue_time': 5}]" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", @@ -300,7 +841,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 61, "metadata": { "jupyter": { "outputs_hidden": false, @@ -312,14 +853,33 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading package Microsoft.Quantum.Providers.Core and dependencies...\r\n", + "Active target is now microsoft.estimator\r\n" + ] + }, + { + "data": { + "text/plain": [ + "{'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0}" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "qsharp.azure.target(\"microsoft.estimator\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 62, "metadata": { "jupyter": { "outputs_hidden": false, @@ -331,7 +891,21 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Submitting Task1_ResourceEstimationWrapper to target microsoft.estimator...\n", + "Job successfully submitted.\n", + " Job name: RE for the task 1\n", + " Job ID: 804f1a1a-674a-4880-a21c-cc7008a5b18f\n", + "Waiting up to 30 seconds for Azure Quantum job to complete...\n", + "[1:52:36 PM] Current job status: Executing\n", + "[1:52:41 PM] Current job status: Succeeded\n" + ] + } + ], "source": [ "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", "result = qsharp.azure.execute(Task1_ResourceEstimationWrapper, jobName=\"RE for the task 1\")" @@ -339,7 +913,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "metadata": { "jupyter": { "outputs_hidden": false, @@ -351,7 +925,1051 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "{\"errorBudget\":{\"logical\":0.0005,\"rotations\":0.0,\"tstates\":0.0005},\"jobParams\":{\"errorBudget\":0.001,\"qecScheme\":{\"crossingPrefactor\":0.03,\"errorCorrectionThreshold\":0.01,\"logicalCycleTime\":\"(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\",\"name\":\"surface_code\",\"physicalQubitsPerLogicalQubit\":\"2 * codeDistance * codeDistance\"},\"qubitParams\":{\"instructionSet\":\"GateBased\",\"name\":\"qubit_gate_ns_e3\",\"oneQubitGateErrorRate\":0.001,\"oneQubitGateTime\":\"50 ns\",\"oneQubitMeasurementErrorRate\":0.001,\"oneQubitMeasurementTime\":\"100 ns\",\"tGateErrorRate\":0.001,\"tGateTime\":\"50 ns\",\"twoQubitGateErrorRate\":0.001,\"twoQubitGateTime\":\"50 ns\"}},\"logicalCounts\":{\"ccixCount\":0,\"cczCount\":1,\"measurementCount\":0,\"numQubits\":4,\"rotationCount\":0,\"rotationDepth\":0,\"tCount\":0},\"logicalQubit\":{\"codeDistance\":9,\"logicalCycleTime\":3600.0,\"logicalErrorRate\":3.0000000000000015E-07,\"physicalQubits\":162},\"physicalCounts\":{\"breakdown\":{\"algorithmicLogicalDepth\":3,\"algorithmicLogicalQubits\":15,\"cliffordErrorRate\":0.001,\"logicalDepth\":13,\"numTfactories\":4,\"numTfactoryRuns\":1,\"numTsPerRotation\":null,\"numTstates\":4,\"physicalQubitsForAlgorithm\":2430,\"physicalQubitsForTfactories\":15680,\"requiredLogicalQubitErrorRate\":2.564102564102564E-06,\"requiredLogicalTstateErrorRate\":0.000125},\"physicalQubits\":18110,\"runtime\":46800},\"physicalCountsFormatted\":{\"codeDistancePerRound\":\"7\",\"errorBudget\":\"1.00e-3\",\"errorBudgetLogical\":\"5.00e-4\",\"errorBudgetRotations\":\"0.00e0\",\"errorBudgetTstates\":\"5.00e-4\",\"logicalCycleTime\":\"3us 600ns\",\"logicalErrorRate\":\"3.00e-7\",\"numTsPerRotation\":\"No rotations in algorithm\",\"numUnitsPerRound\":\"2\",\"physicalQubitsForTfactoriesPercentage\":\"86.58 %\",\"physicalQubitsPerRound\":\"3920\",\"requiredLogicalQubitErrorRate\":\"2.56e-6\",\"requiredLogicalTstateErrorRate\":\"1.25e-4\",\"runtime\":\"46us 800ns\",\"tfactoryRuntime\":\"36us 400ns\",\"tfactoryRuntimePerRound\":\"36us 400ns\",\"tstateLogicalErrorRate\":\"2.13e-5\",\"unitNamePerRound\":\"15-to-1 space efficient logical\"},\"reportData\":{\"assumptions\":[\"_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._\",\"**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.\",\"**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.\",\"**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).\",\"**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.\",\"**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.\",\"**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.\"],\"groups\":[{\"alwaysVisible\":true,\"entries\":[{\"description\":\"Number of physical qubits\",\"explanation\":\"This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.\",\"label\":\"Physical qubits\",\"path\":\"physicalCounts/physicalQubits\"},{\"description\":\"Total runtime\",\"explanation\":\"This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/runtime\"}],\"title\":\"Physical resource estimates\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits for the algorithm after layout\",\"explanation\":\"Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 4$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 15$ logical qubits.\",\"label\":\"Logical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalQubits\"},{\"description\":\"Number of logical cycles for the algorithm\",\"explanation\":\"To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.\",\"label\":\"Algorithmic depth\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalDepth\"},{\"description\":\"Number of logical cycles performed\",\"explanation\":\"This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\"label\":\"Logical depth\",\"path\":\"physicalCounts/breakdown/logicalDepth\"},{\"description\":\"Number of T states consumed by the algorithm\",\"explanation\":\"To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.\",\"label\":\"Number of T states\",\"path\":\"physicalCounts/breakdown/numTstates\"},{\"description\":\"Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime\",\"explanation\":\"The total number of T factories 4 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{4\\\\;\\\\text{T states} \\\\cdot 36us 400ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 46us 800ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$\",\"label\":\"Number of T factories\",\"path\":\"physicalCounts/breakdown/numTfactories\"},{\"description\":\"Number of times all T factories are invoked\",\"explanation\":\"In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.\",\"label\":\"Number of T factory invocations\",\"path\":\"physicalCounts/breakdown/numTfactoryRuns\"},{\"description\":\"Number of physical qubits for the algorithm after layout\",\"explanation\":\"The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.\",\"label\":\"Physical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForAlgorithm\"},{\"description\":\"Number of physical qubits for the T factories\",\"explanation\":\"Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\\\cdot 4$ qubits.\",\"label\":\"Physical T factory qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForTfactories\"},{\"description\":\"The minimum logical qubit error rate required to run the algorithm within the error budget\",\"explanation\":\"The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.\",\"label\":\"Required logical qubit error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalQubitErrorRate\"},{\"description\":\"The minimum T state error rate required for distilled T states\",\"explanation\":\"The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.\",\"label\":\"Required logical T state error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalTstateErrorRate\"},{\"description\":\"Number of T states to implement a rotation with an arbitrary angle\",\"explanation\":\"The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.\",\"label\":\"Number of T states per rotation\",\"path\":\"physicalCountsFormatted/numTsPerRotation\"}],\"title\":\"Resource estimates breakdown\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Name of QEC scheme\",\"explanation\":\"You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.\",\"label\":\"QEC scheme\",\"path\":\"jobParams/qecScheme/name\"},{\"description\":\"Required code distance for error correction\",\"explanation\":\"The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.000002564102564102564)}{\\\\log(0.01/0.001)} - 1$\",\"label\":\"Code distance\",\"path\":\"logicalQubit/codeDistance\"},{\"description\":\"Number of physical qubits per logical qubit\",\"explanation\":\"The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.\",\"label\":\"Physical qubits\",\"path\":\"logicalQubit/physicalQubits\"},{\"description\":\"Duration of a logical cycle in nanoseconds\",\"explanation\":\"The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.\",\"label\":\"Logical cycle time\",\"path\":\"physicalCountsFormatted/logicalCycleTime\"},{\"description\":\"Logical qubit error rate\",\"explanation\":\"The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{9 + 1}{2}$\",\"label\":\"Logical qubit error rate\",\"path\":\"physicalCountsFormatted/logicalErrorRate\"},{\"description\":\"Crossing prefactor used in QEC scheme\",\"explanation\":\"The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.\",\"label\":\"Crossing prefactor\",\"path\":\"jobParams/qecScheme/crossingPrefactor\"},{\"description\":\"Error correction threshold used in QEC scheme\",\"explanation\":\"The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.\",\"label\":\"Error correction threshold\",\"path\":\"jobParams/qecScheme/errorCorrectionThreshold\"},{\"description\":\"QEC scheme formula used to compute logical cycle time\",\"explanation\":\"This is the formula that is used to compute the logical cycle time 3us 600ns.\",\"label\":\"Logical cycle time formula\",\"path\":\"jobParams/qecScheme/logicalCycleTime\"},{\"description\":\"QEC scheme formula used to compute number of physical qubits per logical qubit\",\"explanation\":\"This is the formula that is used to compute the number of physical qubits per logical qubits 162.\",\"label\":\"Physical qubits formula\",\"path\":\"jobParams/qecScheme/physicalQubitsPerLogicalQubit\"}],\"title\":\"Logical qubit parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of physical qubits for a single T factory\",\"explanation\":\"This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.\",\"label\":\"Physical qubits\",\"path\":\"tfactory/physicalQubits\"},{\"description\":\"Runtime of a single T factory\",\"explanation\":\"The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/tfactoryRuntime\"},{\"description\":\"Number of output T states produced in a single run of T factory\",\"explanation\":\"The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.\",\"label\":\"Number of output T states per run\",\"path\":\"tfactory/numTstates\"},{\"description\":\"Number of physical input T states consumed in a single run of a T factory\",\"explanation\":\"This value includes the physical input T states of all copies of the distillation unit in the first round.\",\"label\":\"Number of input T states per run\",\"path\":\"tfactory/numInputTstates\"},{\"description\":\"The number of distillation rounds\",\"explanation\":\"This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.\",\"label\":\"Distillation rounds\",\"path\":\"tfactory/numRounds\"},{\"description\":\"The number of units in each round of distillation\",\"explanation\":\"This is the number of copies for the distillation units per round.\",\"label\":\"Distillation units per round\",\"path\":\"physicalCountsFormatted/numUnitsPerRound\"},{\"description\":\"The types of distillation units\",\"explanation\":\"These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.\",\"label\":\"Distillation units\",\"path\":\"physicalCountsFormatted/unitNamePerRound\"},{\"description\":\"The code distance in each round of distillation\",\"explanation\":\"This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.\",\"label\":\"Distillation code distances\",\"path\":\"physicalCountsFormatted/codeDistancePerRound\"},{\"description\":\"The number of physical qubits used in each round of distillation\",\"explanation\":\"The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.\",\"label\":\"Number of physical qubits per round\",\"path\":\"physicalCountsFormatted/physicalQubitsPerRound\"},{\"description\":\"The runtime of each distillation round\",\"explanation\":\"The runtime of the T factory is the sum of the runtimes in all rounds.\",\"label\":\"Runtime per round\",\"path\":\"physicalCountsFormatted/tfactoryRuntimePerRound\"},{\"description\":\"Logical T state error rate\",\"explanation\":\"This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.\",\"label\":\"Logical T state error rate\",\"path\":\"physicalCountsFormatted/tstateLogicalErrorRate\"}],\"title\":\"T factory parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits in the input quantum program\",\"explanation\":\"We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.\",\"label\":\"Logical qubits (pre-layout)\",\"path\":\"logicalCounts/numQubits\"},{\"description\":\"Number of T gates in the input quantum program\",\"explanation\":\"This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.\",\"label\":\"T gates\",\"path\":\"logicalCounts/tCount\"},{\"description\":\"Number of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.\",\"label\":\"Rotation gates\",\"path\":\"logicalCounts/rotationCount\"},{\"description\":\"Depth of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.\",\"label\":\"Rotation depth\",\"path\":\"logicalCounts/rotationDepth\"},{\"description\":\"Number of CCZ-gates in the input quantum program\",\"explanation\":\"This is the number of CCZ gates.\",\"label\":\"CCZ gates\",\"path\":\"logicalCounts/cczCount\"},{\"description\":\"Number of CCiX-gates in the input quantum program\",\"explanation\":\"This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].\",\"label\":\"CCiX gates\",\"path\":\"logicalCounts/ccixCount\"},{\"description\":\"Number of single qubit measurements in the input quantum program\",\"explanation\":\"This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.\",\"label\":\"Measurement operations\",\"path\":\"logicalCounts/measurementCount\"}],\"title\":\"Pre-layout logical resources\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Total error budget for the algorithm\",\"explanation\":\"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\"label\":\"Total error budget\",\"path\":\"physicalCountsFormatted/errorBudget\"},{\"description\":\"Probability of at least one logical error\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"Logical error probability\",\"path\":\"physicalCountsFormatted/errorBudgetLogical\"},{\"description\":\"Probability of at least one faulty T distillation\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"T distillation error probability\",\"path\":\"physicalCountsFormatted/errorBudgetTstates\"},{\"description\":\"Probability of at least one failed rotation synthesis\",\"explanation\":\"This is one third of the total error budget 1.00e-3.\",\"label\":\"Rotation synthesis error probability\",\"path\":\"physicalCountsFormatted/errorBudgetRotations\"}],\"title\":\"Assumed error budget\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Some descriptive name for the qubit model\",\"explanation\":\"You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or ¬µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).\",\"label\":\"Qubit name\",\"path\":\"jobParams/qubitParams/name\"},{\"description\":\"Underlying qubit technology (gate-based or Majorana)\",\"explanation\":\"When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.\",\"label\":\"Instruction set\",\"path\":\"jobParams/qubitParams/instructionSet\"},{\"description\":\"Operation time for single-qubit measurement (t_meas) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.\",\"label\":\"Single-qubit measurement time\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementTime\"},{\"description\":\"Operation time for single-qubit gate (t_gate) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.\",\"label\":\"Single-qubit gate time\",\"path\":\"jobParams/qubitParams/oneQubitGateTime\"},{\"description\":\"Operation time for two-qubit gate in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.\",\"label\":\"Two-qubit gate time\",\"path\":\"jobParams/qubitParams/twoQubitGateTime\"},{\"description\":\"Operation time for a T gate\",\"explanation\":\"This is the operation time in nanoseconds to execute a T gate.\",\"label\":\"T gate time\",\"path\":\"jobParams/qubitParams/tGateTime\"},{\"description\":\"Error rate for single-qubit measurement\",\"explanation\":\"This is the probability in which a single-qubit measurement in the Pauli basis may fail.\",\"label\":\"Single-qubit measurement error rate\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementErrorRate\"},{\"description\":\"Error rate for single-qubit Clifford gate (p)\",\"explanation\":\"This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.\",\"label\":\"Single-qubit error rate\",\"path\":\"jobParams/qubitParams/oneQubitGateErrorRate\"},{\"description\":\"Error rate for two-qubit Clifford gate\",\"explanation\":\"This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.\",\"label\":\"Two-qubit error rate\",\"path\":\"jobParams/qubitParams/twoQubitGateErrorRate\"},{\"description\":\"Error rate to prepare single-qubit T state or apply a T gate (p_T)\",\"explanation\":\"This is the probability in which executing a single T gate may fail.\",\"label\":\"T gate error rate\",\"path\":\"jobParams/qubitParams/tGateErrorRate\"}],\"title\":\"Physical qubit parameters\"}]},\"status\":\"success\",\"tfactory\":{\"codeDistancePerRound\":[7],\"logicalErrorRate\":2.133500000000001E-05,\"numInputTstates\":30,\"numRounds\":1,\"numTstates\":1,\"numUnitsPerRound\":[2],\"physicalQubits\":3920,\"physicalQubitsPerRound\":[3920],\"runtime\":36400.0,\"runtimePerRound\":[36400.0],\"unitNamePerRound\":[\"15-to-1 space efficient logical\"]}}", + "text/html": [ + "\r\n", + "
\r\n", + " \r\n", + " Physical resource estimates\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Physical qubits18110\r\n", + "

Number of physical qubits

\n", + "
\r\n", + "
\r\n", + "

This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.

\n", + "\r\n", + "
Runtime46us 800ns\r\n", + "

Total runtime

\n", + "
\r\n", + "
\r\n", + "

This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Resource estimates breakdown\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Logical algorithmic qubits15\r\n", + "

Number of logical qubits for the algorithm after layout

\n", + "
\r\n", + "
\r\n", + "

Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the \\(Q_{\\rm alg} = 4\\) logical qubits in the input algorithm, we require in total $2 \\cdot Q_{\\rm alg} + \\lceil \\sqrt{8 \\cdot Q_{\\rm alg}}\\rceil + 1 = 15$ logical qubits.

\n", + "\r\n", + "
Algorithmic depth3\r\n", + "

Number of logical cycles for the algorithm

\n", + "
\r\n", + "
\r\n", + "

To execute the algorithm using Parallel Synthesis Sequential Pauli Computation (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.

\n", + "\r\n", + "
Logical depth13\r\n", + "

Number of logical cycles performed

\n", + "
\r\n", + "
\r\n", + "

This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.

\n", + "\r\n", + "
Number of T states4\r\n", + "

Number of T states consumed by the algorithm

\n", + "
\r\n", + "
\r\n", + "

To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.

\n", + "\r\n", + "
Number of T factories4\r\n", + "

Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime

\n", + "
\r\n", + "
\r\n", + "

The total number of T factories 4 that are executed in parallel is computed as \\(\\left\\lceil\\dfrac{4\\;\\text{T states} \\cdot 36us 400ns\\;\\text{T factory duration}}{1\\;\\text{T states per T factory} \\cdot 46us 800ns\\;\\text{algorithm runtime}}\\right\\rceil\\)

\n", + "\r\n", + "
Number of T factory invocations1\r\n", + "

Number of times all T factories are invoked

\n", + "
\r\n", + "
\r\n", + "

In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.

\n", + "\r\n", + "
Physical algorithmic qubits2430\r\n", + "

Number of physical qubits for the algorithm after layout

\n", + "
\r\n", + "
\r\n", + "

The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.

\n", + "\r\n", + "
Physical T factory qubits15680\r\n", + "

Number of physical qubits for the T factories

\n", + "
\r\n", + "
\r\n", + "

Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\cdot 4$ qubits.

\n", + "\r\n", + "
Required logical qubit error rate2.56e-6\r\n", + "

The minimum logical qubit error rate required to run the algorithm within the error budget

\n", + "
\r\n", + "
\r\n", + "

The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.

\n", + "\r\n", + "
Required logical T state error rate1.25e-4\r\n", + "

The minimum T state error rate required for distilled T states

\n", + "
\r\n", + "
\r\n", + "

The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.

\n", + "\r\n", + "
Number of T states per rotationNo rotations in algorithm\r\n", + "

Number of T states to implement a rotation with an arbitrary angle

\n", + "
\r\n", + "
\r\n", + "

The number of T states to implement a rotation with an arbitrary angle is \\(\\lceil 0.53 \\log_2(0 / 0) + 5.3\\rceil\\) [arXiv:2203.10064]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Logical qubit parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
QEC schemesurface_code\r\n", + "

Name of QEC scheme

\n", + "
\r\n", + "
\r\n", + "

You can load pre-defined QEC schemes by using the name surface_code or floquet_code. The latter only works with Majorana qubits.

\n", + "\r\n", + "
Code distance9\r\n", + "

Required code distance for error correction

\n", + "
\r\n", + "
\r\n", + "

The code distance is the smallest odd integer greater or equal to \\(\\dfrac{2\\log(0.03 / 0.000002564102564102564)}{\\log(0.01/0.001)} - 1\\)

\n", + "\r\n", + "
Physical qubits162\r\n", + "

Number of physical qubits per logical qubit

\n", + "
\r\n", + "
\r\n", + "

The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.

\n", + "\r\n", + "
Logical cycle time3us 600ns\r\n", + "

Duration of a logical cycle in nanoseconds

\n", + "
\r\n", + "
\r\n", + "

The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.

\n", + "\r\n", + "
Logical qubit error rate3.00e-7\r\n", + "

Logical qubit error rate

\n", + "
\r\n", + "
\r\n", + "

The logical qubit error rate is computed as $0.03 \\cdot \\left(\\dfrac{0.001}{0.01}\\right)^\\frac{9 + 1}{2}$

\n", + "\r\n", + "
Crossing prefactor0.03\r\n", + "

Crossing prefactor used in QEC scheme

\n", + "
\r\n", + "
\r\n", + "

The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.

\n", + "\r\n", + "
Error correction threshold0.01\r\n", + "

Error correction threshold used in QEC scheme

\n", + "
\r\n", + "
\r\n", + "

The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.

\n", + "\r\n", + "
Logical cycle time formula(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\r\n", + "

QEC scheme formula used to compute logical cycle time

\n", + "
\r\n", + "
\r\n", + "

This is the formula that is used to compute the logical cycle time 3us 600ns.

\n", + "\r\n", + "
Physical qubits formula2 * codeDistance * codeDistance\r\n", + "

QEC scheme formula used to compute number of physical qubits per logical qubit

\n", + "
\r\n", + "
\r\n", + "

This is the formula that is used to compute the number of physical qubits per logical qubits 162.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " T factory parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Physical qubits3920\r\n", + "

Number of physical qubits for a single T factory

\n", + "
\r\n", + "
\r\n", + "

This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.

\n", + "\r\n", + "
Runtime36us 400ns\r\n", + "

Runtime of a single T factory

\n", + "
\r\n", + "
\r\n", + "

The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.

\n", + "\r\n", + "
Number of output T states per run1\r\n", + "

Number of output T states produced in a single run of T factory

\n", + "
\r\n", + "
\r\n", + "

The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.

\n", + "\r\n", + "
Number of input T states per run30\r\n", + "

Number of physical input T states consumed in a single run of a T factory

\n", + "
\r\n", + "
\r\n", + "

This value includes the physical input T states of all copies of the distillation unit in the first round.

\n", + "\r\n", + "
Distillation rounds1\r\n", + "

The number of distillation rounds

\n", + "
\r\n", + "
\r\n", + "

This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.

\n", + "\r\n", + "
Distillation units per round2\r\n", + "

The number of units in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

This is the number of copies for the distillation units per round.

\n", + "\r\n", + "
Distillation units15-to-1 space efficient logical\r\n", + "

The types of distillation units

\n", + "
\r\n", + "
\r\n", + "

These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.

\n", + "\r\n", + "
Distillation code distances7\r\n", + "

The code distance in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.

\n", + "\r\n", + "
Number of physical qubits per round3920\r\n", + "

The number of physical qubits used in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.

\n", + "\r\n", + "
Runtime per round36us 400ns\r\n", + "

The runtime of each distillation round

\n", + "
\r\n", + "
\r\n", + "

The runtime of the T factory is the sum of the runtimes in all rounds.

\n", + "\r\n", + "
Logical T state error rate2.13e-5\r\n", + "

Logical T state error rate

\n", + "
\r\n", + "
\r\n", + "

This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Pre-layout logical resources\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Logical qubits (pre-layout)4\r\n", + "

Number of logical qubits in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.

\n", + "\r\n", + "
T gates0\r\n", + "

Number of T gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.

\n", + "\r\n", + "
Rotation gates0\r\n", + "

Number of rotation gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.

\n", + "\r\n", + "
Rotation depth0\r\n", + "

Depth of rotation gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.

\n", + "\r\n", + "
CCZ gates1\r\n", + "

Number of CCZ-gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of CCZ gates.

\n", + "\r\n", + "
CCiX gates0\r\n", + "

Number of CCiX-gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of CCiX gates, which applies \\(-iX\\) controlled on two control qubits [1212.5069].

\n", + "\r\n", + "
Measurement operations0\r\n", + "

Number of single qubit measurements in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Assumed error budget\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Total error budget1.00e-3\r\n", + "

Total error budget for the algorithm

\n", + "
\r\n", + "
\r\n", + "

The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget \\(\\epsilon = \\epsilon_{\\log} + \\epsilon_{\\rm dis} + \\epsilon_{\\rm syn}\\) is uniformly distributed and applies to errors \\(\\epsilon_{\\log}\\) to implement logical qubits, an error budget \\(\\epsilon_{\\rm dis}\\) to produce T states through distillation, and an error budget \\(\\epsilon_{\\rm syn}\\) to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets \\(\\epsilon_{\\rm dis}\\) and \\(\\epsilon_{\\rm syn}\\) are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.

\n", + "\r\n", + "
Logical error probability5.00e-4\r\n", + "

Probability of at least one logical error

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", + "\r\n", + "
T distillation error probability5.00e-4\r\n", + "

Probability of at least one faulty T distillation

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", + "\r\n", + "
Rotation synthesis error probability0.00e0\r\n", + "

Probability of at least one failed rotation synthesis

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Physical qubit parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Qubit namequbit_gate_ns_e3\r\n", + "

Some descriptive name for the qubit model

\n", + "
\r\n", + "
\r\n", + "

You can load pre-defined qubit parameters by using the names qubit_gate_ns_e3, qubit_gate_ns_e4, qubit_gate_us_e3, qubit_gate_us_e4, qubit_maj_ns_e4, or qubit_maj_ns_e6. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).

\n", + "\r\n", + "
Instruction setGateBased\r\n", + "

Underlying qubit technology (gate-based or Majorana)

\n", + "
\r\n", + "
\r\n", + "

When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either gate-based or Majorana. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.

\n", + "\r\n", + "
Single-qubit measurement time100 ns\r\n", + "

Operation time for single-qubit measurement (t_meas) in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.

\n", + "\r\n", + "
Single-qubit gate time50 ns\r\n", + "

Operation time for single-qubit gate (t_gate) in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.

\n", + "\r\n", + "
Two-qubit gate time50 ns\r\n", + "

Operation time for two-qubit gate in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.

\n", + "\r\n", + "
T gate time50 ns\r\n", + "

Operation time for a T gate

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to execute a T gate.

\n", + "\r\n", + "
Single-qubit measurement error rate0.001\r\n", + "

Error rate for single-qubit measurement

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a single-qubit measurement in the Pauli basis may fail.

\n", + "\r\n", + "
Single-qubit error rate0.001\r\n", + "

Error rate for single-qubit Clifford gate (p)

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.

\n", + "\r\n", + "
Two-qubit error rate0.001\r\n", + "

Error rate for two-qubit Clifford gate

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.

\n", + "\r\n", + "
T gate error rate0.001\r\n", + "

Error rate to prepare single-qubit T state or apply a T gate (p_T)

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which executing a single T gate may fail.

\n", + "\r\n", + "
\r\n", + "
\r\n" + ], + "text/plain": [ + "{'errorBudget': {'logical': 0.0005, 'rotations': 0.0, 'tstates': 0.0005},\n", + " 'jobParams': {'errorBudget': 0.001,\n", + " 'qecScheme': {'crossingPrefactor': 0.03,\n", + " 'errorCorrectionThreshold': 0.01,\n", + " 'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',\n", + " 'name': 'surface_code',\n", + " 'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance'},\n", + " 'qubitParams': {'instructionSet': 'GateBased',\n", + " 'name': 'qubit_gate_ns_e3',\n", + " 'oneQubitGateErrorRate': 0.001,\n", + " 'oneQubitGateTime': '50 ns',\n", + " 'oneQubitMeasurementErrorRate': 0.001,\n", + " 'oneQubitMeasurementTime': '100 ns',\n", + " 'tGateErrorRate': 0.001,\n", + " 'tGateTime': '50 ns',\n", + " 'twoQubitGateErrorRate': 0.001,\n", + " 'twoQubitGateTime': '50 ns'}},\n", + " 'logicalCounts': {'ccixCount': 0,\n", + " 'cczCount': 1,\n", + " 'measurementCount': 0,\n", + " 'numQubits': 4,\n", + " 'rotationCount': 0,\n", + " 'rotationDepth': 0,\n", + " 'tCount': 0},\n", + " 'logicalQubit': {'codeDistance': 9,\n", + " 'logicalCycleTime': 3600.0,\n", + " 'logicalErrorRate': 3.0000000000000015e-07,\n", + " 'physicalQubits': 162},\n", + " 'physicalCounts': {'breakdown': {'algorithmicLogicalDepth': 3,\n", + " 'algorithmicLogicalQubits': 15,\n", + " 'cliffordErrorRate': 0.001,\n", + " 'logicalDepth': 13,\n", + " 'numTfactories': 4,\n", + " 'numTfactoryRuns': 1,\n", + " 'numTsPerRotation': None,\n", + " 'numTstates': 4,\n", + " 'physicalQubitsForAlgorithm': 2430,\n", + " 'physicalQubitsForTfactories': 15680,\n", + " 'requiredLogicalQubitErrorRate': 2.564102564102564e-06,\n", + " 'requiredLogicalTstateErrorRate': 0.000125},\n", + " 'physicalQubits': 18110,\n", + " 'runtime': 46800},\n", + " 'physicalCountsFormatted': {'codeDistancePerRound': '7',\n", + " 'errorBudget': '1.00e-3',\n", + " 'errorBudgetLogical': '5.00e-4',\n", + " 'errorBudgetRotations': '0.00e0',\n", + " 'errorBudgetTstates': '5.00e-4',\n", + " 'logicalCycleTime': '3us 600ns',\n", + " 'logicalErrorRate': '3.00e-7',\n", + " 'numTsPerRotation': 'No rotations in algorithm',\n", + " 'numUnitsPerRound': '2',\n", + " 'physicalQubitsForTfactoriesPercentage': '86.58 %',\n", + " 'physicalQubitsPerRound': '3920',\n", + " 'requiredLogicalQubitErrorRate': '2.56e-6',\n", + " 'requiredLogicalTstateErrorRate': '1.25e-4',\n", + " 'runtime': '46us 800ns',\n", + " 'tfactoryRuntime': '36us 400ns',\n", + " 'tfactoryRuntimePerRound': '36us 400ns',\n", + " 'tstateLogicalErrorRate': '2.13e-5',\n", + " 'unitNamePerRound': '15-to-1 space efficient logical'},\n", + " 'reportData': {'assumptions': ['_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._',\n", + " '**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.',\n", + " '**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.',\n", + " '**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).',\n", + " '**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.',\n", + " '**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.',\n", + " '**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.'],\n", + " 'groups': [{'alwaysVisible': True,\n", + " 'entries': [{'description': 'Number of physical qubits',\n", + " 'explanation': 'This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'physicalCounts/physicalQubits'},\n", + " {'description': 'Total runtime',\n", + " 'explanation': 'This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.',\n", + " 'label': 'Runtime',\n", + " 'path': 'physicalCountsFormatted/runtime'}],\n", + " 'title': 'Physical resource estimates'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of logical qubits for the algorithm after layout',\n", + " 'explanation': 'Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 4$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 15$ logical qubits.',\n", + " 'label': 'Logical algorithmic qubits',\n", + " 'path': 'physicalCounts/breakdown/algorithmicLogicalQubits'},\n", + " {'description': 'Number of logical cycles for the algorithm',\n", + " 'explanation': 'To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.',\n", + " 'label': 'Algorithmic depth',\n", + " 'path': 'physicalCounts/breakdown/algorithmicLogicalDepth'},\n", + " {'description': 'Number of logical cycles performed',\n", + " 'explanation': \"This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\n", + " 'label': 'Logical depth',\n", + " 'path': 'physicalCounts/breakdown/logicalDepth'},\n", + " {'description': 'Number of T states consumed by the algorithm',\n", + " 'explanation': 'To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.',\n", + " 'label': 'Number of T states',\n", + " 'path': 'physicalCounts/breakdown/numTstates'},\n", + " {'description': \"Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime\",\n", + " 'explanation': 'The total number of T factories 4 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{4\\\\;\\\\text{T states} \\\\cdot 36us 400ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 46us 800ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$',\n", + " 'label': 'Number of T factories',\n", + " 'path': 'physicalCounts/breakdown/numTfactories'},\n", + " {'description': 'Number of times all T factories are invoked',\n", + " 'explanation': 'In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.',\n", + " 'label': 'Number of T factory invocations',\n", + " 'path': 'physicalCounts/breakdown/numTfactoryRuns'},\n", + " {'description': 'Number of physical qubits for the algorithm after layout',\n", + " 'explanation': 'The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.',\n", + " 'label': 'Physical algorithmic qubits',\n", + " 'path': 'physicalCounts/breakdown/physicalQubitsForAlgorithm'},\n", + " {'description': 'Number of physical qubits for the T factories',\n", + " 'explanation': 'Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\\\cdot 4$ qubits.',\n", + " 'label': 'Physical T factory qubits',\n", + " 'path': 'physicalCounts/breakdown/physicalQubitsForTfactories'},\n", + " {'description': 'The minimum logical qubit error rate required to run the algorithm within the error budget',\n", + " 'explanation': 'The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.',\n", + " 'label': 'Required logical qubit error rate',\n", + " 'path': 'physicalCountsFormatted/requiredLogicalQubitErrorRate'},\n", + " {'description': 'The minimum T state error rate required for distilled T states',\n", + " 'explanation': 'The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.',\n", + " 'label': 'Required logical T state error rate',\n", + " 'path': 'physicalCountsFormatted/requiredLogicalTstateErrorRate'},\n", + " {'description': 'Number of T states to implement a rotation with an arbitrary angle',\n", + " 'explanation': 'The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.',\n", + " 'label': 'Number of T states per rotation',\n", + " 'path': 'physicalCountsFormatted/numTsPerRotation'}],\n", + " 'title': 'Resource estimates breakdown'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Name of QEC scheme',\n", + " 'explanation': 'You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.',\n", + " 'label': 'QEC scheme',\n", + " 'path': 'jobParams/qecScheme/name'},\n", + " {'description': 'Required code distance for error correction',\n", + " 'explanation': 'The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.000002564102564102564)}{\\\\log(0.01/0.001)} - 1$',\n", + " 'label': 'Code distance',\n", + " 'path': 'logicalQubit/codeDistance'},\n", + " {'description': 'Number of physical qubits per logical qubit',\n", + " 'explanation': 'The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'logicalQubit/physicalQubits'},\n", + " {'description': 'Duration of a logical cycle in nanoseconds',\n", + " 'explanation': 'The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.',\n", + " 'label': 'Logical cycle time',\n", + " 'path': 'physicalCountsFormatted/logicalCycleTime'},\n", + " {'description': 'Logical qubit error rate',\n", + " 'explanation': 'The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{9 + 1}{2}$',\n", + " 'label': 'Logical qubit error rate',\n", + " 'path': 'physicalCountsFormatted/logicalErrorRate'},\n", + " {'description': 'Crossing prefactor used in QEC scheme',\n", + " 'explanation': 'The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.',\n", + " 'label': 'Crossing prefactor',\n", + " 'path': 'jobParams/qecScheme/crossingPrefactor'},\n", + " {'description': 'Error correction threshold used in QEC scheme',\n", + " 'explanation': 'The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.',\n", + " 'label': 'Error correction threshold',\n", + " 'path': 'jobParams/qecScheme/errorCorrectionThreshold'},\n", + " {'description': 'QEC scheme formula used to compute logical cycle time',\n", + " 'explanation': 'This is the formula that is used to compute the logical cycle time 3us 600ns.',\n", + " 'label': 'Logical cycle time formula',\n", + " 'path': 'jobParams/qecScheme/logicalCycleTime'},\n", + " {'description': 'QEC scheme formula used to compute number of physical qubits per logical qubit',\n", + " 'explanation': 'This is the formula that is used to compute the number of physical qubits per logical qubits 162.',\n", + " 'label': 'Physical qubits formula',\n", + " 'path': 'jobParams/qecScheme/physicalQubitsPerLogicalQubit'}],\n", + " 'title': 'Logical qubit parameters'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of physical qubits for a single T factory',\n", + " 'explanation': 'This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'tfactory/physicalQubits'},\n", + " {'description': 'Runtime of a single T factory',\n", + " 'explanation': 'The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.',\n", + " 'label': 'Runtime',\n", + " 'path': 'physicalCountsFormatted/tfactoryRuntime'},\n", + " {'description': 'Number of output T states produced in a single run of T factory',\n", + " 'explanation': 'The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.',\n", + " 'label': 'Number of output T states per run',\n", + " 'path': 'tfactory/numTstates'},\n", + " {'description': 'Number of physical input T states consumed in a single run of a T factory',\n", + " 'explanation': 'This value includes the physical input T states of all copies of the distillation unit in the first round.',\n", + " 'label': 'Number of input T states per run',\n", + " 'path': 'tfactory/numInputTstates'},\n", + " {'description': 'The number of distillation rounds',\n", + " 'explanation': 'This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.',\n", + " 'label': 'Distillation rounds',\n", + " 'path': 'tfactory/numRounds'},\n", + " {'description': 'The number of units in each round of distillation',\n", + " 'explanation': 'This is the number of copies for the distillation units per round.',\n", + " 'label': 'Distillation units per round',\n", + " 'path': 'physicalCountsFormatted/numUnitsPerRound'},\n", + " {'description': 'The types of distillation units',\n", + " 'explanation': 'These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.',\n", + " 'label': 'Distillation units',\n", + " 'path': 'physicalCountsFormatted/unitNamePerRound'},\n", + " {'description': 'The code distance in each round of distillation',\n", + " 'explanation': 'This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.',\n", + " 'label': 'Distillation code distances',\n", + " 'path': 'physicalCountsFormatted/codeDistancePerRound'},\n", + " {'description': 'The number of physical qubits used in each round of distillation',\n", + " 'explanation': 'The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.',\n", + " 'label': 'Number of physical qubits per round',\n", + " 'path': 'physicalCountsFormatted/physicalQubitsPerRound'},\n", + " {'description': 'The runtime of each distillation round',\n", + " 'explanation': 'The runtime of the T factory is the sum of the runtimes in all rounds.',\n", + " 'label': 'Runtime per round',\n", + " 'path': 'physicalCountsFormatted/tfactoryRuntimePerRound'},\n", + " {'description': 'Logical T state error rate',\n", + " 'explanation': 'This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.',\n", + " 'label': 'Logical T state error rate',\n", + " 'path': 'physicalCountsFormatted/tstateLogicalErrorRate'}],\n", + " 'title': 'T factory parameters'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of logical qubits in the input quantum program',\n", + " 'explanation': 'We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.',\n", + " 'label': 'Logical qubits (pre-layout)',\n", + " 'path': 'logicalCounts/numQubits'},\n", + " {'description': 'Number of T gates in the input quantum program',\n", + " 'explanation': 'This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.',\n", + " 'label': 'T gates',\n", + " 'path': 'logicalCounts/tCount'},\n", + " {'description': 'Number of rotation gates in the input quantum program',\n", + " 'explanation': 'This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.',\n", + " 'label': 'Rotation gates',\n", + " 'path': 'logicalCounts/rotationCount'},\n", + " {'description': 'Depth of rotation gates in the input quantum program',\n", + " 'explanation': 'This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.',\n", + " 'label': 'Rotation depth',\n", + " 'path': 'logicalCounts/rotationDepth'},\n", + " {'description': 'Number of CCZ-gates in the input quantum program',\n", + " 'explanation': 'This is the number of CCZ gates.',\n", + " 'label': 'CCZ gates',\n", + " 'path': 'logicalCounts/cczCount'},\n", + " {'description': 'Number of CCiX-gates in the input quantum program',\n", + " 'explanation': 'This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].',\n", + " 'label': 'CCiX gates',\n", + " 'path': 'logicalCounts/ccixCount'},\n", + " {'description': 'Number of single qubit measurements in the input quantum program',\n", + " 'explanation': 'This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.',\n", + " 'label': 'Measurement operations',\n", + " 'path': 'logicalCounts/measurementCount'}],\n", + " 'title': 'Pre-layout logical resources'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Total error budget for the algorithm',\n", + " 'explanation': \"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\n", + " 'label': 'Total error budget',\n", + " 'path': 'physicalCountsFormatted/errorBudget'},\n", + " {'description': 'Probability of at least one logical error',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", + " 'label': 'Logical error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetLogical'},\n", + " {'description': 'Probability of at least one faulty T distillation',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", + " 'label': 'T distillation error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetTstates'},\n", + " {'description': 'Probability of at least one failed rotation synthesis',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3.',\n", + " 'label': 'Rotation synthesis error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetRotations'}],\n", + " 'title': 'Assumed error budget'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Some descriptive name for the qubit model',\n", + " 'explanation': 'You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).',\n", + " 'label': 'Qubit name',\n", + " 'path': 'jobParams/qubitParams/name'},\n", + " {'description': 'Underlying qubit technology (gate-based or Majorana)',\n", + " 'explanation': 'When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.',\n", + " 'label': 'Instruction set',\n", + " 'path': 'jobParams/qubitParams/instructionSet'},\n", + " {'description': 'Operation time for single-qubit measurement (t_meas) in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.',\n", + " 'label': 'Single-qubit measurement time',\n", + " 'path': 'jobParams/qubitParams/oneQubitMeasurementTime'},\n", + " {'description': 'Operation time for single-qubit gate (t_gate) in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.',\n", + " 'label': 'Single-qubit gate time',\n", + " 'path': 'jobParams/qubitParams/oneQubitGateTime'},\n", + " {'description': 'Operation time for two-qubit gate in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.',\n", + " 'label': 'Two-qubit gate time',\n", + " 'path': 'jobParams/qubitParams/twoQubitGateTime'},\n", + " {'description': 'Operation time for a T gate',\n", + " 'explanation': 'This is the operation time in nanoseconds to execute a T gate.',\n", + " 'label': 'T gate time',\n", + " 'path': 'jobParams/qubitParams/tGateTime'},\n", + " {'description': 'Error rate for single-qubit measurement',\n", + " 'explanation': 'This is the probability in which a single-qubit measurement in the Pauli basis may fail.',\n", + " 'label': 'Single-qubit measurement error rate',\n", + " 'path': 'jobParams/qubitParams/oneQubitMeasurementErrorRate'},\n", + " {'description': 'Error rate for single-qubit Clifford gate (p)',\n", + " 'explanation': 'This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.',\n", + " 'label': 'Single-qubit error rate',\n", + " 'path': 'jobParams/qubitParams/oneQubitGateErrorRate'},\n", + " {'description': 'Error rate for two-qubit Clifford gate',\n", + " 'explanation': 'This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.',\n", + " 'label': 'Two-qubit error rate',\n", + " 'path': 'jobParams/qubitParams/twoQubitGateErrorRate'},\n", + " {'description': 'Error rate to prepare single-qubit T state or apply a T gate (p_T)',\n", + " 'explanation': 'This is the probability in which executing a single T gate may fail.',\n", + " 'label': 'T gate error rate',\n", + " 'path': 'jobParams/qubitParams/tGateErrorRate'}],\n", + " 'title': 'Physical qubit parameters'}]},\n", + " 'status': 'success',\n", + " 'tfactory': {'codeDistancePerRound': [7],\n", + " 'logicalErrorRate': 2.133500000000001e-05,\n", + " 'numInputTstates': 30,\n", + " 'numRounds': 1,\n", + " 'numTstates': 1,\n", + " 'numUnitsPerRound': [2],\n", + " 'physicalQubits': 3920,\n", + " 'physicalQubitsPerRound': [3920],\n", + " 'runtime': 36400.0,\n", + " 'runtimePerRound': [36400.0],\n", + " 'unitNamePerRound': ['15-to-1 space efficient logical']}}" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", "# result = qsharp.azure.output(\"...\")\n", @@ -360,7 +1978,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 64, "metadata": { "jupyter": { "outputs_hidden": false, @@ -386,7 +2004,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, "metadata": { "jupyter": { "outputs_hidden": false, @@ -398,10 +2016,37 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logical algorithmic qubits = 15\n", + "Algorithmic depth = 3\n", + "Score = 45\n" + ] + }, + { + "data": { + "text/plain": [ + "45" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "evaluate_results(result)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/iQuHack-challenge-2023-task1.ipynb b/iQuHack-challenge-2023-task1.ipynb index 6a0f1d3..9c06fd1 100644 --- a/iQuHack-challenge-2023-task1.ipynb +++ b/iQuHack-challenge-2023-task1.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "jupyter": { "outputs_hidden": false, @@ -46,7 +46,47 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + " {\n", + " \"cloudName\": \"AzureCloud\",\n", + " \"homeTenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", + " \"id\": \"6d61051a-6e40-4845-a03a-3c5160bb5629\",\n", + " \"isDefault\": true,\n", + " \"managedByTenants\": [\n", + " {\n", + " \"tenantId\": \"d0ecd01b-d782-448e-bae0-c3cad0e0543a\"\n", + " },\n", + " {\n", + " \"tenantId\": \"94c4857e-1130-4ab8-8eac-069b40c9db20\"\n", + " },\n", + " {\n", + " \"tenantId\": \"f702a9dc-ae48-4dc7-8f0a-8155a6dfa4e5\"\n", + " }\n", + " ],\n", + " \"name\": \"Azure for Students\",\n", + " \"state\": \"Enabled\",\n", + " \"tenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", + " \"user\": {\n", + " \"name\": \"papadm2@rpi.edu\",\n", + " \"type\": \"user\"\n", + " }\n", + " }\n", + "]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.\n" + ] + } + ], "source": [ "!az login" ] @@ -66,7 +106,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "jupyter": { "outputs_hidden": false, @@ -87,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "jupyter": { "outputs_hidden": false, @@ -108,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "jupyter": { "outputs_hidden": false, @@ -144,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "metadata": { "jupyter": { "outputs_hidden": false, @@ -168,22 +208,19 @@ "// Task 1. Warm up with simple bit manipulation\n", "// (input will contain 3 qubits)\n", "operation Task1(input : Qubit[], target : Qubit) : Unit is Adj {\n", - " use aux = Qubit();\n", " within {\n", - " CNOT(input[0], aux);\n", - " CNOT(input[1], aux);\n", - " CNOT(input[0], input[2]);\n", - " CNOT(input[1], input[0]);\n", " CNOT(input[2], input[0]);\n", + " CNOT(input[2], input[1]);\n", + " CNOT(input[1], input[0]);\n", " } apply {\n", - " Controlled X([aux, input[0]], target);\n", + " Controlled X([input[1], input[0]], target);\n", " }\n", "}" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": { "jupyter": { "outputs_hidden": false, @@ -239,7 +276,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 59, "metadata": { "jupyter": { "outputs_hidden": false, @@ -251,7 +288,462 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "{\"diagnostic_kind\":\"state-vector\",\"qubit_ids\":[0,1,2,3],\"n_qubits\":4,\"amplitudes\":{\"0\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"1\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"2\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"3\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"4\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"5\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"6\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"7\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"8\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"9\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"10\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"11\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"12\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"13\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"14\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"15\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0}}}", + "text/html": [ + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Qubit IDs0, 1, 2, 3
Basis state (bitstring)AmplitudeMeas. Pr.
$\\left|0000\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0010\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0100\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0110\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1000\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1010\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1100\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1101\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1110\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1111\\right\\rangle$$0.3536 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
" + ], + "text/plain": [ + "|0000⟩\t0.35355339059327384 + 0𝑖\n", + "|0001⟩\t0 + 0𝑖\n", + "|0010⟩\t0.35355339059327384 + 0𝑖\n", + "|0011⟩\t0 + 0𝑖\n", + "|0100⟩\t0.35355339059327384 + 0𝑖\n", + "|0101⟩\t0 + 0𝑖\n", + "|0110⟩\t0.35355339059327384 + 0𝑖\n", + "|0111⟩\t0 + 0𝑖\n", + "|1000⟩\t0.35355339059327384 + 0𝑖\n", + "|1001⟩\t0 + 0𝑖\n", + "|1010⟩\t0.35355339059327384 + 0𝑖\n", + "|1011⟩\t0 + 0𝑖\n", + "|1100⟩\t0 + 0𝑖\n", + "|1101⟩\t0.35355339059327384 + 0𝑖\n", + "|1110⟩\t0 + 0𝑖\n", + "|1111⟩\t0.35355339059327384 + 0𝑖" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "()" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", @@ -276,7 +768,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "metadata": { "jupyter": { "outputs_hidden": false, @@ -288,7 +780,56 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "\"Connecting to Azure Quantum...\"", + "text/plain": [ + "Connecting to Azure Quantum..." + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Connected to Azure Quantum workspace iQuHack-Workspace-micpap25 in location eastus.\r\n" + ] + }, + { + "data": { + "text/plain": [ + "[{'id': 'ionq.qpu', 'current_availability': {}, 'average_queue_time': 265936},\n", + " {'id': 'ionq.qpu.aria-1', 'current_availability': {}, 'average_queue_time': 338807},\n", + " {'id': 'ionq.simulator', 'current_availability': {}, 'average_queue_time': 3},\n", + " {'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s1', 'current_availability': {}, 'average_queue_time': 257411},\n", + " {'id': 'quantinuum.hqs-lt-s1-apival', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s2', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s2-apival', 'current_availability': {}, 'average_queue_time': 1},\n", + " {'id': 'quantinuum.hqs-lt-s1-sim', 'current_availability': {}, 'average_queue_time': 4312},\n", + " {'id': 'quantinuum.hqs-lt-s2-sim', 'current_availability': {}, 'average_queue_time': 140},\n", + " {'id': 'quantinuum.hqs-lt', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.qpu.h1-1', 'current_availability': {}, 'average_queue_time': 257411},\n", + " {'id': 'quantinuum.sim.h1-1sc', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.qpu.h1-2', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.sim.h1-2sc', 'current_availability': {}, 'average_queue_time': 1},\n", + " {'id': 'quantinuum.sim.h1-1e', 'current_availability': {}, 'average_queue_time': 4312},\n", + " {'id': 'quantinuum.sim.h1-2e', 'current_availability': {}, 'average_queue_time': 140},\n", + " {'id': 'quantinuum.qpu.h1', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'rigetti.sim.qvm', 'current_availability': {}, 'average_queue_time': 5},\n", + " {'id': 'rigetti.qpu.aspen-11', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'rigetti.qpu.aspen-m-2', 'current_availability': {}, 'average_queue_time': 5},\n", + " {'id': 'rigetti.qpu.aspen-m-3', 'current_availability': {}, 'average_queue_time': 5}]" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", @@ -300,7 +841,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 61, "metadata": { "jupyter": { "outputs_hidden": false, @@ -312,14 +853,33 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading package Microsoft.Quantum.Providers.Core and dependencies...\r\n", + "Active target is now microsoft.estimator\r\n" + ] + }, + { + "data": { + "text/plain": [ + "{'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0}" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "qsharp.azure.target(\"microsoft.estimator\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 62, "metadata": { "jupyter": { "outputs_hidden": false, @@ -331,7 +891,21 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Submitting Task1_ResourceEstimationWrapper to target microsoft.estimator...\n", + "Job successfully submitted.\n", + " Job name: RE for the task 1\n", + " Job ID: 804f1a1a-674a-4880-a21c-cc7008a5b18f\n", + "Waiting up to 30 seconds for Azure Quantum job to complete...\n", + "[1:52:36 PM] Current job status: Executing\n", + "[1:52:41 PM] Current job status: Succeeded\n" + ] + } + ], "source": [ "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", "result = qsharp.azure.execute(Task1_ResourceEstimationWrapper, jobName=\"RE for the task 1\")" @@ -339,7 +913,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "metadata": { "jupyter": { "outputs_hidden": false, @@ -351,7 +925,1051 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "{\"errorBudget\":{\"logical\":0.0005,\"rotations\":0.0,\"tstates\":0.0005},\"jobParams\":{\"errorBudget\":0.001,\"qecScheme\":{\"crossingPrefactor\":0.03,\"errorCorrectionThreshold\":0.01,\"logicalCycleTime\":\"(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\",\"name\":\"surface_code\",\"physicalQubitsPerLogicalQubit\":\"2 * codeDistance * codeDistance\"},\"qubitParams\":{\"instructionSet\":\"GateBased\",\"name\":\"qubit_gate_ns_e3\",\"oneQubitGateErrorRate\":0.001,\"oneQubitGateTime\":\"50 ns\",\"oneQubitMeasurementErrorRate\":0.001,\"oneQubitMeasurementTime\":\"100 ns\",\"tGateErrorRate\":0.001,\"tGateTime\":\"50 ns\",\"twoQubitGateErrorRate\":0.001,\"twoQubitGateTime\":\"50 ns\"}},\"logicalCounts\":{\"ccixCount\":0,\"cczCount\":1,\"measurementCount\":0,\"numQubits\":4,\"rotationCount\":0,\"rotationDepth\":0,\"tCount\":0},\"logicalQubit\":{\"codeDistance\":9,\"logicalCycleTime\":3600.0,\"logicalErrorRate\":3.0000000000000015E-07,\"physicalQubits\":162},\"physicalCounts\":{\"breakdown\":{\"algorithmicLogicalDepth\":3,\"algorithmicLogicalQubits\":15,\"cliffordErrorRate\":0.001,\"logicalDepth\":13,\"numTfactories\":4,\"numTfactoryRuns\":1,\"numTsPerRotation\":null,\"numTstates\":4,\"physicalQubitsForAlgorithm\":2430,\"physicalQubitsForTfactories\":15680,\"requiredLogicalQubitErrorRate\":2.564102564102564E-06,\"requiredLogicalTstateErrorRate\":0.000125},\"physicalQubits\":18110,\"runtime\":46800},\"physicalCountsFormatted\":{\"codeDistancePerRound\":\"7\",\"errorBudget\":\"1.00e-3\",\"errorBudgetLogical\":\"5.00e-4\",\"errorBudgetRotations\":\"0.00e0\",\"errorBudgetTstates\":\"5.00e-4\",\"logicalCycleTime\":\"3us 600ns\",\"logicalErrorRate\":\"3.00e-7\",\"numTsPerRotation\":\"No rotations in algorithm\",\"numUnitsPerRound\":\"2\",\"physicalQubitsForTfactoriesPercentage\":\"86.58 %\",\"physicalQubitsPerRound\":\"3920\",\"requiredLogicalQubitErrorRate\":\"2.56e-6\",\"requiredLogicalTstateErrorRate\":\"1.25e-4\",\"runtime\":\"46us 800ns\",\"tfactoryRuntime\":\"36us 400ns\",\"tfactoryRuntimePerRound\":\"36us 400ns\",\"tstateLogicalErrorRate\":\"2.13e-5\",\"unitNamePerRound\":\"15-to-1 space efficient logical\"},\"reportData\":{\"assumptions\":[\"_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._\",\"**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.\",\"**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.\",\"**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).\",\"**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.\",\"**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.\",\"**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.\"],\"groups\":[{\"alwaysVisible\":true,\"entries\":[{\"description\":\"Number of physical qubits\",\"explanation\":\"This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.\",\"label\":\"Physical qubits\",\"path\":\"physicalCounts/physicalQubits\"},{\"description\":\"Total runtime\",\"explanation\":\"This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/runtime\"}],\"title\":\"Physical resource estimates\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits for the algorithm after layout\",\"explanation\":\"Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 4$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 15$ logical qubits.\",\"label\":\"Logical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalQubits\"},{\"description\":\"Number of logical cycles for the algorithm\",\"explanation\":\"To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.\",\"label\":\"Algorithmic depth\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalDepth\"},{\"description\":\"Number of logical cycles performed\",\"explanation\":\"This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\"label\":\"Logical depth\",\"path\":\"physicalCounts/breakdown/logicalDepth\"},{\"description\":\"Number of T states consumed by the algorithm\",\"explanation\":\"To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.\",\"label\":\"Number of T states\",\"path\":\"physicalCounts/breakdown/numTstates\"},{\"description\":\"Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime\",\"explanation\":\"The total number of T factories 4 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{4\\\\;\\\\text{T states} \\\\cdot 36us 400ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 46us 800ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$\",\"label\":\"Number of T factories\",\"path\":\"physicalCounts/breakdown/numTfactories\"},{\"description\":\"Number of times all T factories are invoked\",\"explanation\":\"In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.\",\"label\":\"Number of T factory invocations\",\"path\":\"physicalCounts/breakdown/numTfactoryRuns\"},{\"description\":\"Number of physical qubits for the algorithm after layout\",\"explanation\":\"The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.\",\"label\":\"Physical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForAlgorithm\"},{\"description\":\"Number of physical qubits for the T factories\",\"explanation\":\"Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\\\cdot 4$ qubits.\",\"label\":\"Physical T factory qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForTfactories\"},{\"description\":\"The minimum logical qubit error rate required to run the algorithm within the error budget\",\"explanation\":\"The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.\",\"label\":\"Required logical qubit error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalQubitErrorRate\"},{\"description\":\"The minimum T state error rate required for distilled T states\",\"explanation\":\"The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.\",\"label\":\"Required logical T state error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalTstateErrorRate\"},{\"description\":\"Number of T states to implement a rotation with an arbitrary angle\",\"explanation\":\"The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.\",\"label\":\"Number of T states per rotation\",\"path\":\"physicalCountsFormatted/numTsPerRotation\"}],\"title\":\"Resource estimates breakdown\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Name of QEC scheme\",\"explanation\":\"You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.\",\"label\":\"QEC scheme\",\"path\":\"jobParams/qecScheme/name\"},{\"description\":\"Required code distance for error correction\",\"explanation\":\"The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.000002564102564102564)}{\\\\log(0.01/0.001)} - 1$\",\"label\":\"Code distance\",\"path\":\"logicalQubit/codeDistance\"},{\"description\":\"Number of physical qubits per logical qubit\",\"explanation\":\"The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.\",\"label\":\"Physical qubits\",\"path\":\"logicalQubit/physicalQubits\"},{\"description\":\"Duration of a logical cycle in nanoseconds\",\"explanation\":\"The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.\",\"label\":\"Logical cycle time\",\"path\":\"physicalCountsFormatted/logicalCycleTime\"},{\"description\":\"Logical qubit error rate\",\"explanation\":\"The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{9 + 1}{2}$\",\"label\":\"Logical qubit error rate\",\"path\":\"physicalCountsFormatted/logicalErrorRate\"},{\"description\":\"Crossing prefactor used in QEC scheme\",\"explanation\":\"The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.\",\"label\":\"Crossing prefactor\",\"path\":\"jobParams/qecScheme/crossingPrefactor\"},{\"description\":\"Error correction threshold used in QEC scheme\",\"explanation\":\"The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.\",\"label\":\"Error correction threshold\",\"path\":\"jobParams/qecScheme/errorCorrectionThreshold\"},{\"description\":\"QEC scheme formula used to compute logical cycle time\",\"explanation\":\"This is the formula that is used to compute the logical cycle time 3us 600ns.\",\"label\":\"Logical cycle time formula\",\"path\":\"jobParams/qecScheme/logicalCycleTime\"},{\"description\":\"QEC scheme formula used to compute number of physical qubits per logical qubit\",\"explanation\":\"This is the formula that is used to compute the number of physical qubits per logical qubits 162.\",\"label\":\"Physical qubits formula\",\"path\":\"jobParams/qecScheme/physicalQubitsPerLogicalQubit\"}],\"title\":\"Logical qubit parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of physical qubits for a single T factory\",\"explanation\":\"This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.\",\"label\":\"Physical qubits\",\"path\":\"tfactory/physicalQubits\"},{\"description\":\"Runtime of a single T factory\",\"explanation\":\"The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/tfactoryRuntime\"},{\"description\":\"Number of output T states produced in a single run of T factory\",\"explanation\":\"The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.\",\"label\":\"Number of output T states per run\",\"path\":\"tfactory/numTstates\"},{\"description\":\"Number of physical input T states consumed in a single run of a T factory\",\"explanation\":\"This value includes the physical input T states of all copies of the distillation unit in the first round.\",\"label\":\"Number of input T states per run\",\"path\":\"tfactory/numInputTstates\"},{\"description\":\"The number of distillation rounds\",\"explanation\":\"This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.\",\"label\":\"Distillation rounds\",\"path\":\"tfactory/numRounds\"},{\"description\":\"The number of units in each round of distillation\",\"explanation\":\"This is the number of copies for the distillation units per round.\",\"label\":\"Distillation units per round\",\"path\":\"physicalCountsFormatted/numUnitsPerRound\"},{\"description\":\"The types of distillation units\",\"explanation\":\"These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.\",\"label\":\"Distillation units\",\"path\":\"physicalCountsFormatted/unitNamePerRound\"},{\"description\":\"The code distance in each round of distillation\",\"explanation\":\"This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.\",\"label\":\"Distillation code distances\",\"path\":\"physicalCountsFormatted/codeDistancePerRound\"},{\"description\":\"The number of physical qubits used in each round of distillation\",\"explanation\":\"The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.\",\"label\":\"Number of physical qubits per round\",\"path\":\"physicalCountsFormatted/physicalQubitsPerRound\"},{\"description\":\"The runtime of each distillation round\",\"explanation\":\"The runtime of the T factory is the sum of the runtimes in all rounds.\",\"label\":\"Runtime per round\",\"path\":\"physicalCountsFormatted/tfactoryRuntimePerRound\"},{\"description\":\"Logical T state error rate\",\"explanation\":\"This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.\",\"label\":\"Logical T state error rate\",\"path\":\"physicalCountsFormatted/tstateLogicalErrorRate\"}],\"title\":\"T factory parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits in the input quantum program\",\"explanation\":\"We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.\",\"label\":\"Logical qubits (pre-layout)\",\"path\":\"logicalCounts/numQubits\"},{\"description\":\"Number of T gates in the input quantum program\",\"explanation\":\"This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.\",\"label\":\"T gates\",\"path\":\"logicalCounts/tCount\"},{\"description\":\"Number of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.\",\"label\":\"Rotation gates\",\"path\":\"logicalCounts/rotationCount\"},{\"description\":\"Depth of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.\",\"label\":\"Rotation depth\",\"path\":\"logicalCounts/rotationDepth\"},{\"description\":\"Number of CCZ-gates in the input quantum program\",\"explanation\":\"This is the number of CCZ gates.\",\"label\":\"CCZ gates\",\"path\":\"logicalCounts/cczCount\"},{\"description\":\"Number of CCiX-gates in the input quantum program\",\"explanation\":\"This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].\",\"label\":\"CCiX gates\",\"path\":\"logicalCounts/ccixCount\"},{\"description\":\"Number of single qubit measurements in the input quantum program\",\"explanation\":\"This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.\",\"label\":\"Measurement operations\",\"path\":\"logicalCounts/measurementCount\"}],\"title\":\"Pre-layout logical resources\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Total error budget for the algorithm\",\"explanation\":\"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\"label\":\"Total error budget\",\"path\":\"physicalCountsFormatted/errorBudget\"},{\"description\":\"Probability of at least one logical error\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"Logical error probability\",\"path\":\"physicalCountsFormatted/errorBudgetLogical\"},{\"description\":\"Probability of at least one faulty T distillation\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"T distillation error probability\",\"path\":\"physicalCountsFormatted/errorBudgetTstates\"},{\"description\":\"Probability of at least one failed rotation synthesis\",\"explanation\":\"This is one third of the total error budget 1.00e-3.\",\"label\":\"Rotation synthesis error probability\",\"path\":\"physicalCountsFormatted/errorBudgetRotations\"}],\"title\":\"Assumed error budget\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Some descriptive name for the qubit model\",\"explanation\":\"You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or ¬µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).\",\"label\":\"Qubit name\",\"path\":\"jobParams/qubitParams/name\"},{\"description\":\"Underlying qubit technology (gate-based or Majorana)\",\"explanation\":\"When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.\",\"label\":\"Instruction set\",\"path\":\"jobParams/qubitParams/instructionSet\"},{\"description\":\"Operation time for single-qubit measurement (t_meas) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.\",\"label\":\"Single-qubit measurement time\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementTime\"},{\"description\":\"Operation time for single-qubit gate (t_gate) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.\",\"label\":\"Single-qubit gate time\",\"path\":\"jobParams/qubitParams/oneQubitGateTime\"},{\"description\":\"Operation time for two-qubit gate in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.\",\"label\":\"Two-qubit gate time\",\"path\":\"jobParams/qubitParams/twoQubitGateTime\"},{\"description\":\"Operation time for a T gate\",\"explanation\":\"This is the operation time in nanoseconds to execute a T gate.\",\"label\":\"T gate time\",\"path\":\"jobParams/qubitParams/tGateTime\"},{\"description\":\"Error rate for single-qubit measurement\",\"explanation\":\"This is the probability in which a single-qubit measurement in the Pauli basis may fail.\",\"label\":\"Single-qubit measurement error rate\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementErrorRate\"},{\"description\":\"Error rate for single-qubit Clifford gate (p)\",\"explanation\":\"This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.\",\"label\":\"Single-qubit error rate\",\"path\":\"jobParams/qubitParams/oneQubitGateErrorRate\"},{\"description\":\"Error rate for two-qubit Clifford gate\",\"explanation\":\"This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.\",\"label\":\"Two-qubit error rate\",\"path\":\"jobParams/qubitParams/twoQubitGateErrorRate\"},{\"description\":\"Error rate to prepare single-qubit T state or apply a T gate (p_T)\",\"explanation\":\"This is the probability in which executing a single T gate may fail.\",\"label\":\"T gate error rate\",\"path\":\"jobParams/qubitParams/tGateErrorRate\"}],\"title\":\"Physical qubit parameters\"}]},\"status\":\"success\",\"tfactory\":{\"codeDistancePerRound\":[7],\"logicalErrorRate\":2.133500000000001E-05,\"numInputTstates\":30,\"numRounds\":1,\"numTstates\":1,\"numUnitsPerRound\":[2],\"physicalQubits\":3920,\"physicalQubitsPerRound\":[3920],\"runtime\":36400.0,\"runtimePerRound\":[36400.0],\"unitNamePerRound\":[\"15-to-1 space efficient logical\"]}}", + "text/html": [ + "\r\n", + "
\r\n", + " \r\n", + " Physical resource estimates\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Physical qubits18110\r\n", + "

Number of physical qubits

\n", + "
\r\n", + "
\r\n", + "

This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.

\n", + "\r\n", + "
Runtime46us 800ns\r\n", + "

Total runtime

\n", + "
\r\n", + "
\r\n", + "

This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Resource estimates breakdown\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Logical algorithmic qubits15\r\n", + "

Number of logical qubits for the algorithm after layout

\n", + "
\r\n", + "
\r\n", + "

Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the \\(Q_{\\rm alg} = 4\\) logical qubits in the input algorithm, we require in total $2 \\cdot Q_{\\rm alg} + \\lceil \\sqrt{8 \\cdot Q_{\\rm alg}}\\rceil + 1 = 15$ logical qubits.

\n", + "\r\n", + "
Algorithmic depth3\r\n", + "

Number of logical cycles for the algorithm

\n", + "
\r\n", + "
\r\n", + "

To execute the algorithm using Parallel Synthesis Sequential Pauli Computation (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.

\n", + "\r\n", + "
Logical depth13\r\n", + "

Number of logical cycles performed

\n", + "
\r\n", + "
\r\n", + "

This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.

\n", + "\r\n", + "
Number of T states4\r\n", + "

Number of T states consumed by the algorithm

\n", + "
\r\n", + "
\r\n", + "

To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.

\n", + "\r\n", + "
Number of T factories4\r\n", + "

Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime

\n", + "
\r\n", + "
\r\n", + "

The total number of T factories 4 that are executed in parallel is computed as \\(\\left\\lceil\\dfrac{4\\;\\text{T states} \\cdot 36us 400ns\\;\\text{T factory duration}}{1\\;\\text{T states per T factory} \\cdot 46us 800ns\\;\\text{algorithm runtime}}\\right\\rceil\\)

\n", + "\r\n", + "
Number of T factory invocations1\r\n", + "

Number of times all T factories are invoked

\n", + "
\r\n", + "
\r\n", + "

In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.

\n", + "\r\n", + "
Physical algorithmic qubits2430\r\n", + "

Number of physical qubits for the algorithm after layout

\n", + "
\r\n", + "
\r\n", + "

The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.

\n", + "\r\n", + "
Physical T factory qubits15680\r\n", + "

Number of physical qubits for the T factories

\n", + "
\r\n", + "
\r\n", + "

Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\cdot 4$ qubits.

\n", + "\r\n", + "
Required logical qubit error rate2.56e-6\r\n", + "

The minimum logical qubit error rate required to run the algorithm within the error budget

\n", + "
\r\n", + "
\r\n", + "

The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.

\n", + "\r\n", + "
Required logical T state error rate1.25e-4\r\n", + "

The minimum T state error rate required for distilled T states

\n", + "
\r\n", + "
\r\n", + "

The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.

\n", + "\r\n", + "
Number of T states per rotationNo rotations in algorithm\r\n", + "

Number of T states to implement a rotation with an arbitrary angle

\n", + "
\r\n", + "
\r\n", + "

The number of T states to implement a rotation with an arbitrary angle is \\(\\lceil 0.53 \\log_2(0 / 0) + 5.3\\rceil\\) [arXiv:2203.10064]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Logical qubit parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
QEC schemesurface_code\r\n", + "

Name of QEC scheme

\n", + "
\r\n", + "
\r\n", + "

You can load pre-defined QEC schemes by using the name surface_code or floquet_code. The latter only works with Majorana qubits.

\n", + "\r\n", + "
Code distance9\r\n", + "

Required code distance for error correction

\n", + "
\r\n", + "
\r\n", + "

The code distance is the smallest odd integer greater or equal to \\(\\dfrac{2\\log(0.03 / 0.000002564102564102564)}{\\log(0.01/0.001)} - 1\\)

\n", + "\r\n", + "
Physical qubits162\r\n", + "

Number of physical qubits per logical qubit

\n", + "
\r\n", + "
\r\n", + "

The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.

\n", + "\r\n", + "
Logical cycle time3us 600ns\r\n", + "

Duration of a logical cycle in nanoseconds

\n", + "
\r\n", + "
\r\n", + "

The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.

\n", + "\r\n", + "
Logical qubit error rate3.00e-7\r\n", + "

Logical qubit error rate

\n", + "
\r\n", + "
\r\n", + "

The logical qubit error rate is computed as $0.03 \\cdot \\left(\\dfrac{0.001}{0.01}\\right)^\\frac{9 + 1}{2}$

\n", + "\r\n", + "
Crossing prefactor0.03\r\n", + "

Crossing prefactor used in QEC scheme

\n", + "
\r\n", + "
\r\n", + "

The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.

\n", + "\r\n", + "
Error correction threshold0.01\r\n", + "

Error correction threshold used in QEC scheme

\n", + "
\r\n", + "
\r\n", + "

The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.

\n", + "\r\n", + "
Logical cycle time formula(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\r\n", + "

QEC scheme formula used to compute logical cycle time

\n", + "
\r\n", + "
\r\n", + "

This is the formula that is used to compute the logical cycle time 3us 600ns.

\n", + "\r\n", + "
Physical qubits formula2 * codeDistance * codeDistance\r\n", + "

QEC scheme formula used to compute number of physical qubits per logical qubit

\n", + "
\r\n", + "
\r\n", + "

This is the formula that is used to compute the number of physical qubits per logical qubits 162.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " T factory parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Physical qubits3920\r\n", + "

Number of physical qubits for a single T factory

\n", + "
\r\n", + "
\r\n", + "

This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.

\n", + "\r\n", + "
Runtime36us 400ns\r\n", + "

Runtime of a single T factory

\n", + "
\r\n", + "
\r\n", + "

The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.

\n", + "\r\n", + "
Number of output T states per run1\r\n", + "

Number of output T states produced in a single run of T factory

\n", + "
\r\n", + "
\r\n", + "

The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.

\n", + "\r\n", + "
Number of input T states per run30\r\n", + "

Number of physical input T states consumed in a single run of a T factory

\n", + "
\r\n", + "
\r\n", + "

This value includes the physical input T states of all copies of the distillation unit in the first round.

\n", + "\r\n", + "
Distillation rounds1\r\n", + "

The number of distillation rounds

\n", + "
\r\n", + "
\r\n", + "

This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.

\n", + "\r\n", + "
Distillation units per round2\r\n", + "

The number of units in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

This is the number of copies for the distillation units per round.

\n", + "\r\n", + "
Distillation units15-to-1 space efficient logical\r\n", + "

The types of distillation units

\n", + "
\r\n", + "
\r\n", + "

These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.

\n", + "\r\n", + "
Distillation code distances7\r\n", + "

The code distance in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.

\n", + "\r\n", + "
Number of physical qubits per round3920\r\n", + "

The number of physical qubits used in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.

\n", + "\r\n", + "
Runtime per round36us 400ns\r\n", + "

The runtime of each distillation round

\n", + "
\r\n", + "
\r\n", + "

The runtime of the T factory is the sum of the runtimes in all rounds.

\n", + "\r\n", + "
Logical T state error rate2.13e-5\r\n", + "

Logical T state error rate

\n", + "
\r\n", + "
\r\n", + "

This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Pre-layout logical resources\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Logical qubits (pre-layout)4\r\n", + "

Number of logical qubits in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.

\n", + "\r\n", + "
T gates0\r\n", + "

Number of T gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.

\n", + "\r\n", + "
Rotation gates0\r\n", + "

Number of rotation gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.

\n", + "\r\n", + "
Rotation depth0\r\n", + "

Depth of rotation gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.

\n", + "\r\n", + "
CCZ gates1\r\n", + "

Number of CCZ-gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of CCZ gates.

\n", + "\r\n", + "
CCiX gates0\r\n", + "

Number of CCiX-gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of CCiX gates, which applies \\(-iX\\) controlled on two control qubits [1212.5069].

\n", + "\r\n", + "
Measurement operations0\r\n", + "

Number of single qubit measurements in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Assumed error budget\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Total error budget1.00e-3\r\n", + "

Total error budget for the algorithm

\n", + "
\r\n", + "
\r\n", + "

The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget \\(\\epsilon = \\epsilon_{\\log} + \\epsilon_{\\rm dis} + \\epsilon_{\\rm syn}\\) is uniformly distributed and applies to errors \\(\\epsilon_{\\log}\\) to implement logical qubits, an error budget \\(\\epsilon_{\\rm dis}\\) to produce T states through distillation, and an error budget \\(\\epsilon_{\\rm syn}\\) to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets \\(\\epsilon_{\\rm dis}\\) and \\(\\epsilon_{\\rm syn}\\) are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.

\n", + "\r\n", + "
Logical error probability5.00e-4\r\n", + "

Probability of at least one logical error

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", + "\r\n", + "
T distillation error probability5.00e-4\r\n", + "

Probability of at least one faulty T distillation

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", + "\r\n", + "
Rotation synthesis error probability0.00e0\r\n", + "

Probability of at least one failed rotation synthesis

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Physical qubit parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Qubit namequbit_gate_ns_e3\r\n", + "

Some descriptive name for the qubit model

\n", + "
\r\n", + "
\r\n", + "

You can load pre-defined qubit parameters by using the names qubit_gate_ns_e3, qubit_gate_ns_e4, qubit_gate_us_e3, qubit_gate_us_e4, qubit_maj_ns_e4, or qubit_maj_ns_e6. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).

\n", + "\r\n", + "
Instruction setGateBased\r\n", + "

Underlying qubit technology (gate-based or Majorana)

\n", + "
\r\n", + "
\r\n", + "

When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either gate-based or Majorana. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.

\n", + "\r\n", + "
Single-qubit measurement time100 ns\r\n", + "

Operation time for single-qubit measurement (t_meas) in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.

\n", + "\r\n", + "
Single-qubit gate time50 ns\r\n", + "

Operation time for single-qubit gate (t_gate) in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.

\n", + "\r\n", + "
Two-qubit gate time50 ns\r\n", + "

Operation time for two-qubit gate in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.

\n", + "\r\n", + "
T gate time50 ns\r\n", + "

Operation time for a T gate

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to execute a T gate.

\n", + "\r\n", + "
Single-qubit measurement error rate0.001\r\n", + "

Error rate for single-qubit measurement

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a single-qubit measurement in the Pauli basis may fail.

\n", + "\r\n", + "
Single-qubit error rate0.001\r\n", + "

Error rate for single-qubit Clifford gate (p)

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.

\n", + "\r\n", + "
Two-qubit error rate0.001\r\n", + "

Error rate for two-qubit Clifford gate

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.

\n", + "\r\n", + "
T gate error rate0.001\r\n", + "

Error rate to prepare single-qubit T state or apply a T gate (p_T)

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which executing a single T gate may fail.

\n", + "\r\n", + "
\r\n", + "
\r\n", + " Assumptions\r\n", + "
    \r\n", + "
  • More details on the following lists of assumptions can be found in the paper Accessing requirements for scaling quantum computers and their applications.

    \n", + "
  • \r\n", + "
  • Uniform independent physical noise. We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.

    \n", + "
  • \r\n", + "
  • Efficient classical computation. We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.

    \n", + "
  • \r\n", + "
  • Extraction circuits for planar quantum ISA. We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).

    \n", + "
  • \r\n", + "
  • Uniform independent logical noise. We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.

    \n", + "
  • \r\n", + "
  • Negligible Clifford costs for synthesis. We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.

    \n", + "
  • \r\n", + "
  • Smooth magic state consumption rate. We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.

    \n", + "
  • \r\n", + "
\r\n" + ], + "text/plain": [ + "{'errorBudget': {'logical': 0.0005, 'rotations': 0.0, 'tstates': 0.0005},\n", + " 'jobParams': {'errorBudget': 0.001,\n", + " 'qecScheme': {'crossingPrefactor': 0.03,\n", + " 'errorCorrectionThreshold': 0.01,\n", + " 'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',\n", + " 'name': 'surface_code',\n", + " 'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance'},\n", + " 'qubitParams': {'instructionSet': 'GateBased',\n", + " 'name': 'qubit_gate_ns_e3',\n", + " 'oneQubitGateErrorRate': 0.001,\n", + " 'oneQubitGateTime': '50 ns',\n", + " 'oneQubitMeasurementErrorRate': 0.001,\n", + " 'oneQubitMeasurementTime': '100 ns',\n", + " 'tGateErrorRate': 0.001,\n", + " 'tGateTime': '50 ns',\n", + " 'twoQubitGateErrorRate': 0.001,\n", + " 'twoQubitGateTime': '50 ns'}},\n", + " 'logicalCounts': {'ccixCount': 0,\n", + " 'cczCount': 1,\n", + " 'measurementCount': 0,\n", + " 'numQubits': 4,\n", + " 'rotationCount': 0,\n", + " 'rotationDepth': 0,\n", + " 'tCount': 0},\n", + " 'logicalQubit': {'codeDistance': 9,\n", + " 'logicalCycleTime': 3600.0,\n", + " 'logicalErrorRate': 3.0000000000000015e-07,\n", + " 'physicalQubits': 162},\n", + " 'physicalCounts': {'breakdown': {'algorithmicLogicalDepth': 3,\n", + " 'algorithmicLogicalQubits': 15,\n", + " 'cliffordErrorRate': 0.001,\n", + " 'logicalDepth': 13,\n", + " 'numTfactories': 4,\n", + " 'numTfactoryRuns': 1,\n", + " 'numTsPerRotation': None,\n", + " 'numTstates': 4,\n", + " 'physicalQubitsForAlgorithm': 2430,\n", + " 'physicalQubitsForTfactories': 15680,\n", + " 'requiredLogicalQubitErrorRate': 2.564102564102564e-06,\n", + " 'requiredLogicalTstateErrorRate': 0.000125},\n", + " 'physicalQubits': 18110,\n", + " 'runtime': 46800},\n", + " 'physicalCountsFormatted': {'codeDistancePerRound': '7',\n", + " 'errorBudget': '1.00e-3',\n", + " 'errorBudgetLogical': '5.00e-4',\n", + " 'errorBudgetRotations': '0.00e0',\n", + " 'errorBudgetTstates': '5.00e-4',\n", + " 'logicalCycleTime': '3us 600ns',\n", + " 'logicalErrorRate': '3.00e-7',\n", + " 'numTsPerRotation': 'No rotations in algorithm',\n", + " 'numUnitsPerRound': '2',\n", + " 'physicalQubitsForTfactoriesPercentage': '86.58 %',\n", + " 'physicalQubitsPerRound': '3920',\n", + " 'requiredLogicalQubitErrorRate': '2.56e-6',\n", + " 'requiredLogicalTstateErrorRate': '1.25e-4',\n", + " 'runtime': '46us 800ns',\n", + " 'tfactoryRuntime': '36us 400ns',\n", + " 'tfactoryRuntimePerRound': '36us 400ns',\n", + " 'tstateLogicalErrorRate': '2.13e-5',\n", + " 'unitNamePerRound': '15-to-1 space efficient logical'},\n", + " 'reportData': {'assumptions': ['_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._',\n", + " '**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.',\n", + " '**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.',\n", + " '**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).',\n", + " '**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.',\n", + " '**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.',\n", + " '**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.'],\n", + " 'groups': [{'alwaysVisible': True,\n", + " 'entries': [{'description': 'Number of physical qubits',\n", + " 'explanation': 'This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'physicalCounts/physicalQubits'},\n", + " {'description': 'Total runtime',\n", + " 'explanation': 'This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.',\n", + " 'label': 'Runtime',\n", + " 'path': 'physicalCountsFormatted/runtime'}],\n", + " 'title': 'Physical resource estimates'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of logical qubits for the algorithm after layout',\n", + " 'explanation': 'Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 4$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 15$ logical qubits.',\n", + " 'label': 'Logical algorithmic qubits',\n", + " 'path': 'physicalCounts/breakdown/algorithmicLogicalQubits'},\n", + " {'description': 'Number of logical cycles for the algorithm',\n", + " 'explanation': 'To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.',\n", + " 'label': 'Algorithmic depth',\n", + " 'path': 'physicalCounts/breakdown/algorithmicLogicalDepth'},\n", + " {'description': 'Number of logical cycles performed',\n", + " 'explanation': \"This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\n", + " 'label': 'Logical depth',\n", + " 'path': 'physicalCounts/breakdown/logicalDepth'},\n", + " {'description': 'Number of T states consumed by the algorithm',\n", + " 'explanation': 'To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.',\n", + " 'label': 'Number of T states',\n", + " 'path': 'physicalCounts/breakdown/numTstates'},\n", + " {'description': \"Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime\",\n", + " 'explanation': 'The total number of T factories 4 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{4\\\\;\\\\text{T states} \\\\cdot 36us 400ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 46us 800ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$',\n", + " 'label': 'Number of T factories',\n", + " 'path': 'physicalCounts/breakdown/numTfactories'},\n", + " {'description': 'Number of times all T factories are invoked',\n", + " 'explanation': 'In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.',\n", + " 'label': 'Number of T factory invocations',\n", + " 'path': 'physicalCounts/breakdown/numTfactoryRuns'},\n", + " {'description': 'Number of physical qubits for the algorithm after layout',\n", + " 'explanation': 'The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.',\n", + " 'label': 'Physical algorithmic qubits',\n", + " 'path': 'physicalCounts/breakdown/physicalQubitsForAlgorithm'},\n", + " {'description': 'Number of physical qubits for the T factories',\n", + " 'explanation': 'Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\\\cdot 4$ qubits.',\n", + " 'label': 'Physical T factory qubits',\n", + " 'path': 'physicalCounts/breakdown/physicalQubitsForTfactories'},\n", + " {'description': 'The minimum logical qubit error rate required to run the algorithm within the error budget',\n", + " 'explanation': 'The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.',\n", + " 'label': 'Required logical qubit error rate',\n", + " 'path': 'physicalCountsFormatted/requiredLogicalQubitErrorRate'},\n", + " {'description': 'The minimum T state error rate required for distilled T states',\n", + " 'explanation': 'The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.',\n", + " 'label': 'Required logical T state error rate',\n", + " 'path': 'physicalCountsFormatted/requiredLogicalTstateErrorRate'},\n", + " {'description': 'Number of T states to implement a rotation with an arbitrary angle',\n", + " 'explanation': 'The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.',\n", + " 'label': 'Number of T states per rotation',\n", + " 'path': 'physicalCountsFormatted/numTsPerRotation'}],\n", + " 'title': 'Resource estimates breakdown'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Name of QEC scheme',\n", + " 'explanation': 'You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.',\n", + " 'label': 'QEC scheme',\n", + " 'path': 'jobParams/qecScheme/name'},\n", + " {'description': 'Required code distance for error correction',\n", + " 'explanation': 'The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.000002564102564102564)}{\\\\log(0.01/0.001)} - 1$',\n", + " 'label': 'Code distance',\n", + " 'path': 'logicalQubit/codeDistance'},\n", + " {'description': 'Number of physical qubits per logical qubit',\n", + " 'explanation': 'The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'logicalQubit/physicalQubits'},\n", + " {'description': 'Duration of a logical cycle in nanoseconds',\n", + " 'explanation': 'The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.',\n", + " 'label': 'Logical cycle time',\n", + " 'path': 'physicalCountsFormatted/logicalCycleTime'},\n", + " {'description': 'Logical qubit error rate',\n", + " 'explanation': 'The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{9 + 1}{2}$',\n", + " 'label': 'Logical qubit error rate',\n", + " 'path': 'physicalCountsFormatted/logicalErrorRate'},\n", + " {'description': 'Crossing prefactor used in QEC scheme',\n", + " 'explanation': 'The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.',\n", + " 'label': 'Crossing prefactor',\n", + " 'path': 'jobParams/qecScheme/crossingPrefactor'},\n", + " {'description': 'Error correction threshold used in QEC scheme',\n", + " 'explanation': 'The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.',\n", + " 'label': 'Error correction threshold',\n", + " 'path': 'jobParams/qecScheme/errorCorrectionThreshold'},\n", + " {'description': 'QEC scheme formula used to compute logical cycle time',\n", + " 'explanation': 'This is the formula that is used to compute the logical cycle time 3us 600ns.',\n", + " 'label': 'Logical cycle time formula',\n", + " 'path': 'jobParams/qecScheme/logicalCycleTime'},\n", + " {'description': 'QEC scheme formula used to compute number of physical qubits per logical qubit',\n", + " 'explanation': 'This is the formula that is used to compute the number of physical qubits per logical qubits 162.',\n", + " 'label': 'Physical qubits formula',\n", + " 'path': 'jobParams/qecScheme/physicalQubitsPerLogicalQubit'}],\n", + " 'title': 'Logical qubit parameters'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of physical qubits for a single T factory',\n", + " 'explanation': 'This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'tfactory/physicalQubits'},\n", + " {'description': 'Runtime of a single T factory',\n", + " 'explanation': 'The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.',\n", + " 'label': 'Runtime',\n", + " 'path': 'physicalCountsFormatted/tfactoryRuntime'},\n", + " {'description': 'Number of output T states produced in a single run of T factory',\n", + " 'explanation': 'The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.',\n", + " 'label': 'Number of output T states per run',\n", + " 'path': 'tfactory/numTstates'},\n", + " {'description': 'Number of physical input T states consumed in a single run of a T factory',\n", + " 'explanation': 'This value includes the physical input T states of all copies of the distillation unit in the first round.',\n", + " 'label': 'Number of input T states per run',\n", + " 'path': 'tfactory/numInputTstates'},\n", + " {'description': 'The number of distillation rounds',\n", + " 'explanation': 'This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.',\n", + " 'label': 'Distillation rounds',\n", + " 'path': 'tfactory/numRounds'},\n", + " {'description': 'The number of units in each round of distillation',\n", + " 'explanation': 'This is the number of copies for the distillation units per round.',\n", + " 'label': 'Distillation units per round',\n", + " 'path': 'physicalCountsFormatted/numUnitsPerRound'},\n", + " {'description': 'The types of distillation units',\n", + " 'explanation': 'These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.',\n", + " 'label': 'Distillation units',\n", + " 'path': 'physicalCountsFormatted/unitNamePerRound'},\n", + " {'description': 'The code distance in each round of distillation',\n", + " 'explanation': 'This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.',\n", + " 'label': 'Distillation code distances',\n", + " 'path': 'physicalCountsFormatted/codeDistancePerRound'},\n", + " {'description': 'The number of physical qubits used in each round of distillation',\n", + " 'explanation': 'The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.',\n", + " 'label': 'Number of physical qubits per round',\n", + " 'path': 'physicalCountsFormatted/physicalQubitsPerRound'},\n", + " {'description': 'The runtime of each distillation round',\n", + " 'explanation': 'The runtime of the T factory is the sum of the runtimes in all rounds.',\n", + " 'label': 'Runtime per round',\n", + " 'path': 'physicalCountsFormatted/tfactoryRuntimePerRound'},\n", + " {'description': 'Logical T state error rate',\n", + " 'explanation': 'This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.',\n", + " 'label': 'Logical T state error rate',\n", + " 'path': 'physicalCountsFormatted/tstateLogicalErrorRate'}],\n", + " 'title': 'T factory parameters'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of logical qubits in the input quantum program',\n", + " 'explanation': 'We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.',\n", + " 'label': 'Logical qubits (pre-layout)',\n", + " 'path': 'logicalCounts/numQubits'},\n", + " {'description': 'Number of T gates in the input quantum program',\n", + " 'explanation': 'This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.',\n", + " 'label': 'T gates',\n", + " 'path': 'logicalCounts/tCount'},\n", + " {'description': 'Number of rotation gates in the input quantum program',\n", + " 'explanation': 'This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.',\n", + " 'label': 'Rotation gates',\n", + " 'path': 'logicalCounts/rotationCount'},\n", + " {'description': 'Depth of rotation gates in the input quantum program',\n", + " 'explanation': 'This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.',\n", + " 'label': 'Rotation depth',\n", + " 'path': 'logicalCounts/rotationDepth'},\n", + " {'description': 'Number of CCZ-gates in the input quantum program',\n", + " 'explanation': 'This is the number of CCZ gates.',\n", + " 'label': 'CCZ gates',\n", + " 'path': 'logicalCounts/cczCount'},\n", + " {'description': 'Number of CCiX-gates in the input quantum program',\n", + " 'explanation': 'This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].',\n", + " 'label': 'CCiX gates',\n", + " 'path': 'logicalCounts/ccixCount'},\n", + " {'description': 'Number of single qubit measurements in the input quantum program',\n", + " 'explanation': 'This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.',\n", + " 'label': 'Measurement operations',\n", + " 'path': 'logicalCounts/measurementCount'}],\n", + " 'title': 'Pre-layout logical resources'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Total error budget for the algorithm',\n", + " 'explanation': \"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\n", + " 'label': 'Total error budget',\n", + " 'path': 'physicalCountsFormatted/errorBudget'},\n", + " {'description': 'Probability of at least one logical error',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", + " 'label': 'Logical error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetLogical'},\n", + " {'description': 'Probability of at least one faulty T distillation',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", + " 'label': 'T distillation error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetTstates'},\n", + " {'description': 'Probability of at least one failed rotation synthesis',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3.',\n", + " 'label': 'Rotation synthesis error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetRotations'}],\n", + " 'title': 'Assumed error budget'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Some descriptive name for the qubit model',\n", + " 'explanation': 'You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).',\n", + " 'label': 'Qubit name',\n", + " 'path': 'jobParams/qubitParams/name'},\n", + " {'description': 'Underlying qubit technology (gate-based or Majorana)',\n", + " 'explanation': 'When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.',\n", + " 'label': 'Instruction set',\n", + " 'path': 'jobParams/qubitParams/instructionSet'},\n", + " {'description': 'Operation time for single-qubit measurement (t_meas) in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.',\n", + " 'label': 'Single-qubit measurement time',\n", + " 'path': 'jobParams/qubitParams/oneQubitMeasurementTime'},\n", + " {'description': 'Operation time for single-qubit gate (t_gate) in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.',\n", + " 'label': 'Single-qubit gate time',\n", + " 'path': 'jobParams/qubitParams/oneQubitGateTime'},\n", + " {'description': 'Operation time for two-qubit gate in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.',\n", + " 'label': 'Two-qubit gate time',\n", + " 'path': 'jobParams/qubitParams/twoQubitGateTime'},\n", + " {'description': 'Operation time for a T gate',\n", + " 'explanation': 'This is the operation time in nanoseconds to execute a T gate.',\n", + " 'label': 'T gate time',\n", + " 'path': 'jobParams/qubitParams/tGateTime'},\n", + " {'description': 'Error rate for single-qubit measurement',\n", + " 'explanation': 'This is the probability in which a single-qubit measurement in the Pauli basis may fail.',\n", + " 'label': 'Single-qubit measurement error rate',\n", + " 'path': 'jobParams/qubitParams/oneQubitMeasurementErrorRate'},\n", + " {'description': 'Error rate for single-qubit Clifford gate (p)',\n", + " 'explanation': 'This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.',\n", + " 'label': 'Single-qubit error rate',\n", + " 'path': 'jobParams/qubitParams/oneQubitGateErrorRate'},\n", + " {'description': 'Error rate for two-qubit Clifford gate',\n", + " 'explanation': 'This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.',\n", + " 'label': 'Two-qubit error rate',\n", + " 'path': 'jobParams/qubitParams/twoQubitGateErrorRate'},\n", + " {'description': 'Error rate to prepare single-qubit T state or apply a T gate (p_T)',\n", + " 'explanation': 'This is the probability in which executing a single T gate may fail.',\n", + " 'label': 'T gate error rate',\n", + " 'path': 'jobParams/qubitParams/tGateErrorRate'}],\n", + " 'title': 'Physical qubit parameters'}]},\n", + " 'status': 'success',\n", + " 'tfactory': {'codeDistancePerRound': [7],\n", + " 'logicalErrorRate': 2.133500000000001e-05,\n", + " 'numInputTstates': 30,\n", + " 'numRounds': 1,\n", + " 'numTstates': 1,\n", + " 'numUnitsPerRound': [2],\n", + " 'physicalQubits': 3920,\n", + " 'physicalQubitsPerRound': [3920],\n", + " 'runtime': 36400.0,\n", + " 'runtimePerRound': [36400.0],\n", + " 'unitNamePerRound': ['15-to-1 space efficient logical']}}" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", "# result = qsharp.azure.output(\"...\")\n", @@ -360,7 +1978,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 64, "metadata": { "jupyter": { "outputs_hidden": false, @@ -386,7 +2004,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, "metadata": { "jupyter": { "outputs_hidden": false, @@ -398,10 +2016,37 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logical algorithmic qubits = 15\n", + "Algorithmic depth = 3\n", + "Score = 45\n" + ] + }, + { + "data": { + "text/plain": [ + "45" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "evaluate_results(result)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/obj/__entrypoint__.dll b/obj/__entrypoint__.dll index 82a7decc6c5322460d7ab04b1c4dc70443a79409..0a8590933de774890a8c2804c93d809e44e4dd38 100644 GIT binary patch delta 20497 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 delta 21143 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
TZK}A&YEXLs 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 E4c=rf@c;k- From 6df80b8273098c88a07f408a3fd63287d008d153 Mon Sep 17 00:00:00 2001 From: Michael Papadopoulos Date: Sat, 28 Jan 2023 14:01:48 -0500 Subject: [PATCH 03/13] Clear output --- ...Hack-challenge-2023-task1-checkpoint.ipynb | 1681 +---------------- iQuHack-challenge-2023-task1.ipynb | 1681 +---------------- 2 files changed, 40 insertions(+), 3322 deletions(-) diff --git a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb index 9c06fd1..7607d81 100644 --- a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb +++ b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -46,47 +46,7 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[\n", - " {\n", - " \"cloudName\": \"AzureCloud\",\n", - " \"homeTenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", - " \"id\": \"6d61051a-6e40-4845-a03a-3c5160bb5629\",\n", - " \"isDefault\": true,\n", - " \"managedByTenants\": [\n", - " {\n", - " \"tenantId\": \"d0ecd01b-d782-448e-bae0-c3cad0e0543a\"\n", - " },\n", - " {\n", - " \"tenantId\": \"94c4857e-1130-4ab8-8eac-069b40c9db20\"\n", - " },\n", - " {\n", - " \"tenantId\": \"f702a9dc-ae48-4dc7-8f0a-8155a6dfa4e5\"\n", - " }\n", - " ],\n", - " \"name\": \"Azure for Students\",\n", - " \"state\": \"Enabled\",\n", - " \"tenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", - " \"user\": {\n", - " \"name\": \"papadm2@rpi.edu\",\n", - " \"type\": \"user\"\n", - " }\n", - " }\n", - "]\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.\n" - ] - } - ], + "outputs": [], "source": [ "!az login" ] @@ -106,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -127,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -148,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -184,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -220,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -276,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -288,462 +248,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "{\"diagnostic_kind\":\"state-vector\",\"qubit_ids\":[0,1,2,3],\"n_qubits\":4,\"amplitudes\":{\"0\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"1\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"2\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"3\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"4\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"5\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"6\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"7\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"8\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"9\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"10\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"11\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"12\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"13\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"14\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"15\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0}}}", - "text/html": [ - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Qubit IDs0, 1, 2, 3
Basis state (bitstring)AmplitudeMeas. Pr.
$\\left|0000\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0010\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0100\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0110\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1000\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1010\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1100\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1101\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1110\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1111\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
" - ], - "text/plain": [ - "|0000⟩\t0.35355339059327384 + 0𝑖\n", - "|0001⟩\t0 + 0𝑖\n", - "|0010⟩\t0.35355339059327384 + 0𝑖\n", - "|0011⟩\t0 + 0𝑖\n", - "|0100⟩\t0.35355339059327384 + 0𝑖\n", - "|0101⟩\t0 + 0𝑖\n", - "|0110⟩\t0.35355339059327384 + 0𝑖\n", - "|0111⟩\t0 + 0𝑖\n", - "|1000⟩\t0.35355339059327384 + 0𝑖\n", - "|1001⟩\t0 + 0𝑖\n", - "|1010⟩\t0.35355339059327384 + 0𝑖\n", - "|1011⟩\t0 + 0𝑖\n", - "|1100⟩\t0 + 0𝑖\n", - "|1101⟩\t0.35355339059327384 + 0𝑖\n", - "|1110⟩\t0 + 0𝑖\n", - "|1111⟩\t0.35355339059327384 + 0𝑖" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "()" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", @@ -768,7 +273,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -780,56 +285,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "\"Connecting to Azure Quantum...\"", - "text/plain": [ - "Connecting to Azure Quantum..." - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected to Azure Quantum workspace iQuHack-Workspace-micpap25 in location eastus.\r\n" - ] - }, - { - "data": { - "text/plain": [ - "[{'id': 'ionq.qpu', 'current_availability': {}, 'average_queue_time': 265936},\n", - " {'id': 'ionq.qpu.aria-1', 'current_availability': {}, 'average_queue_time': 338807},\n", - " {'id': 'ionq.simulator', 'current_availability': {}, 'average_queue_time': 3},\n", - " {'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s1', 'current_availability': {}, 'average_queue_time': 257411},\n", - " {'id': 'quantinuum.hqs-lt-s1-apival', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s2', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s2-apival', 'current_availability': {}, 'average_queue_time': 1},\n", - " {'id': 'quantinuum.hqs-lt-s1-sim', 'current_availability': {}, 'average_queue_time': 4312},\n", - " {'id': 'quantinuum.hqs-lt-s2-sim', 'current_availability': {}, 'average_queue_time': 140},\n", - " {'id': 'quantinuum.hqs-lt', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.qpu.h1-1', 'current_availability': {}, 'average_queue_time': 257411},\n", - " {'id': 'quantinuum.sim.h1-1sc', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.qpu.h1-2', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.sim.h1-2sc', 'current_availability': {}, 'average_queue_time': 1},\n", - " {'id': 'quantinuum.sim.h1-1e', 'current_availability': {}, 'average_queue_time': 4312},\n", - " {'id': 'quantinuum.sim.h1-2e', 'current_availability': {}, 'average_queue_time': 140},\n", - " {'id': 'quantinuum.qpu.h1', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'rigetti.sim.qvm', 'current_availability': {}, 'average_queue_time': 5},\n", - " {'id': 'rigetti.qpu.aspen-11', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'rigetti.qpu.aspen-m-2', 'current_availability': {}, 'average_queue_time': 5},\n", - " {'id': 'rigetti.qpu.aspen-m-3', 'current_availability': {}, 'average_queue_time': 5}]" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", @@ -841,7 +297,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -853,33 +309,14 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading package Microsoft.Quantum.Providers.Core and dependencies...\r\n", - "Active target is now microsoft.estimator\r\n" - ] - }, - { - "data": { - "text/plain": [ - "{'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0}" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "qsharp.azure.target(\"microsoft.estimator\")" ] }, { "cell_type": "code", - "execution_count": 62, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -891,21 +328,7 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Submitting Task1_ResourceEstimationWrapper to target microsoft.estimator...\n", - "Job successfully submitted.\n", - " Job name: RE for the task 1\n", - " Job ID: 804f1a1a-674a-4880-a21c-cc7008a5b18f\n", - "Waiting up to 30 seconds for Azure Quantum job to complete...\n", - "[1:52:36 PM] Current job status: Executing\n", - "[1:52:41 PM] Current job status: Succeeded\n" - ] - } - ], + "outputs": [], "source": [ "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", "result = qsharp.azure.execute(Task1_ResourceEstimationWrapper, jobName=\"RE for the task 1\")" @@ -913,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -925,1051 +348,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "{\"errorBudget\":{\"logical\":0.0005,\"rotations\":0.0,\"tstates\":0.0005},\"jobParams\":{\"errorBudget\":0.001,\"qecScheme\":{\"crossingPrefactor\":0.03,\"errorCorrectionThreshold\":0.01,\"logicalCycleTime\":\"(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\",\"name\":\"surface_code\",\"physicalQubitsPerLogicalQubit\":\"2 * codeDistance * codeDistance\"},\"qubitParams\":{\"instructionSet\":\"GateBased\",\"name\":\"qubit_gate_ns_e3\",\"oneQubitGateErrorRate\":0.001,\"oneQubitGateTime\":\"50 ns\",\"oneQubitMeasurementErrorRate\":0.001,\"oneQubitMeasurementTime\":\"100 ns\",\"tGateErrorRate\":0.001,\"tGateTime\":\"50 ns\",\"twoQubitGateErrorRate\":0.001,\"twoQubitGateTime\":\"50 ns\"}},\"logicalCounts\":{\"ccixCount\":0,\"cczCount\":1,\"measurementCount\":0,\"numQubits\":4,\"rotationCount\":0,\"rotationDepth\":0,\"tCount\":0},\"logicalQubit\":{\"codeDistance\":9,\"logicalCycleTime\":3600.0,\"logicalErrorRate\":3.0000000000000015E-07,\"physicalQubits\":162},\"physicalCounts\":{\"breakdown\":{\"algorithmicLogicalDepth\":3,\"algorithmicLogicalQubits\":15,\"cliffordErrorRate\":0.001,\"logicalDepth\":13,\"numTfactories\":4,\"numTfactoryRuns\":1,\"numTsPerRotation\":null,\"numTstates\":4,\"physicalQubitsForAlgorithm\":2430,\"physicalQubitsForTfactories\":15680,\"requiredLogicalQubitErrorRate\":2.564102564102564E-06,\"requiredLogicalTstateErrorRate\":0.000125},\"physicalQubits\":18110,\"runtime\":46800},\"physicalCountsFormatted\":{\"codeDistancePerRound\":\"7\",\"errorBudget\":\"1.00e-3\",\"errorBudgetLogical\":\"5.00e-4\",\"errorBudgetRotations\":\"0.00e0\",\"errorBudgetTstates\":\"5.00e-4\",\"logicalCycleTime\":\"3us 600ns\",\"logicalErrorRate\":\"3.00e-7\",\"numTsPerRotation\":\"No rotations in algorithm\",\"numUnitsPerRound\":\"2\",\"physicalQubitsForTfactoriesPercentage\":\"86.58 %\",\"physicalQubitsPerRound\":\"3920\",\"requiredLogicalQubitErrorRate\":\"2.56e-6\",\"requiredLogicalTstateErrorRate\":\"1.25e-4\",\"runtime\":\"46us 800ns\",\"tfactoryRuntime\":\"36us 400ns\",\"tfactoryRuntimePerRound\":\"36us 400ns\",\"tstateLogicalErrorRate\":\"2.13e-5\",\"unitNamePerRound\":\"15-to-1 space efficient logical\"},\"reportData\":{\"assumptions\":[\"_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._\",\"**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.\",\"**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.\",\"**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).\",\"**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.\",\"**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.\",\"**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.\"],\"groups\":[{\"alwaysVisible\":true,\"entries\":[{\"description\":\"Number of physical qubits\",\"explanation\":\"This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.\",\"label\":\"Physical qubits\",\"path\":\"physicalCounts/physicalQubits\"},{\"description\":\"Total runtime\",\"explanation\":\"This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/runtime\"}],\"title\":\"Physical resource estimates\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits for the algorithm after layout\",\"explanation\":\"Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 4$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 15$ logical qubits.\",\"label\":\"Logical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalQubits\"},{\"description\":\"Number of logical cycles for the algorithm\",\"explanation\":\"To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.\",\"label\":\"Algorithmic depth\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalDepth\"},{\"description\":\"Number of logical cycles performed\",\"explanation\":\"This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\"label\":\"Logical depth\",\"path\":\"physicalCounts/breakdown/logicalDepth\"},{\"description\":\"Number of T states consumed by the algorithm\",\"explanation\":\"To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.\",\"label\":\"Number of T states\",\"path\":\"physicalCounts/breakdown/numTstates\"},{\"description\":\"Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime\",\"explanation\":\"The total number of T factories 4 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{4\\\\;\\\\text{T states} \\\\cdot 36us 400ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 46us 800ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$\",\"label\":\"Number of T factories\",\"path\":\"physicalCounts/breakdown/numTfactories\"},{\"description\":\"Number of times all T factories are invoked\",\"explanation\":\"In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.\",\"label\":\"Number of T factory invocations\",\"path\":\"physicalCounts/breakdown/numTfactoryRuns\"},{\"description\":\"Number of physical qubits for the algorithm after layout\",\"explanation\":\"The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.\",\"label\":\"Physical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForAlgorithm\"},{\"description\":\"Number of physical qubits for the T factories\",\"explanation\":\"Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\\\cdot 4$ qubits.\",\"label\":\"Physical T factory qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForTfactories\"},{\"description\":\"The minimum logical qubit error rate required to run the algorithm within the error budget\",\"explanation\":\"The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.\",\"label\":\"Required logical qubit error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalQubitErrorRate\"},{\"description\":\"The minimum T state error rate required for distilled T states\",\"explanation\":\"The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.\",\"label\":\"Required logical T state error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalTstateErrorRate\"},{\"description\":\"Number of T states to implement a rotation with an arbitrary angle\",\"explanation\":\"The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.\",\"label\":\"Number of T states per rotation\",\"path\":\"physicalCountsFormatted/numTsPerRotation\"}],\"title\":\"Resource estimates breakdown\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Name of QEC scheme\",\"explanation\":\"You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.\",\"label\":\"QEC scheme\",\"path\":\"jobParams/qecScheme/name\"},{\"description\":\"Required code distance for error correction\",\"explanation\":\"The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.000002564102564102564)}{\\\\log(0.01/0.001)} - 1$\",\"label\":\"Code distance\",\"path\":\"logicalQubit/codeDistance\"},{\"description\":\"Number of physical qubits per logical qubit\",\"explanation\":\"The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.\",\"label\":\"Physical qubits\",\"path\":\"logicalQubit/physicalQubits\"},{\"description\":\"Duration of a logical cycle in nanoseconds\",\"explanation\":\"The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.\",\"label\":\"Logical cycle time\",\"path\":\"physicalCountsFormatted/logicalCycleTime\"},{\"description\":\"Logical qubit error rate\",\"explanation\":\"The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{9 + 1}{2}$\",\"label\":\"Logical qubit error rate\",\"path\":\"physicalCountsFormatted/logicalErrorRate\"},{\"description\":\"Crossing prefactor used in QEC scheme\",\"explanation\":\"The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.\",\"label\":\"Crossing prefactor\",\"path\":\"jobParams/qecScheme/crossingPrefactor\"},{\"description\":\"Error correction threshold used in QEC scheme\",\"explanation\":\"The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.\",\"label\":\"Error correction threshold\",\"path\":\"jobParams/qecScheme/errorCorrectionThreshold\"},{\"description\":\"QEC scheme formula used to compute logical cycle time\",\"explanation\":\"This is the formula that is used to compute the logical cycle time 3us 600ns.\",\"label\":\"Logical cycle time formula\",\"path\":\"jobParams/qecScheme/logicalCycleTime\"},{\"description\":\"QEC scheme formula used to compute number of physical qubits per logical qubit\",\"explanation\":\"This is the formula that is used to compute the number of physical qubits per logical qubits 162.\",\"label\":\"Physical qubits formula\",\"path\":\"jobParams/qecScheme/physicalQubitsPerLogicalQubit\"}],\"title\":\"Logical qubit parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of physical qubits for a single T factory\",\"explanation\":\"This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.\",\"label\":\"Physical qubits\",\"path\":\"tfactory/physicalQubits\"},{\"description\":\"Runtime of a single T factory\",\"explanation\":\"The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/tfactoryRuntime\"},{\"description\":\"Number of output T states produced in a single run of T factory\",\"explanation\":\"The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.\",\"label\":\"Number of output T states per run\",\"path\":\"tfactory/numTstates\"},{\"description\":\"Number of physical input T states consumed in a single run of a T factory\",\"explanation\":\"This value includes the physical input T states of all copies of the distillation unit in the first round.\",\"label\":\"Number of input T states per run\",\"path\":\"tfactory/numInputTstates\"},{\"description\":\"The number of distillation rounds\",\"explanation\":\"This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.\",\"label\":\"Distillation rounds\",\"path\":\"tfactory/numRounds\"},{\"description\":\"The number of units in each round of distillation\",\"explanation\":\"This is the number of copies for the distillation units per round.\",\"label\":\"Distillation units per round\",\"path\":\"physicalCountsFormatted/numUnitsPerRound\"},{\"description\":\"The types of distillation units\",\"explanation\":\"These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.\",\"label\":\"Distillation units\",\"path\":\"physicalCountsFormatted/unitNamePerRound\"},{\"description\":\"The code distance in each round of distillation\",\"explanation\":\"This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.\",\"label\":\"Distillation code distances\",\"path\":\"physicalCountsFormatted/codeDistancePerRound\"},{\"description\":\"The number of physical qubits used in each round of distillation\",\"explanation\":\"The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.\",\"label\":\"Number of physical qubits per round\",\"path\":\"physicalCountsFormatted/physicalQubitsPerRound\"},{\"description\":\"The runtime of each distillation round\",\"explanation\":\"The runtime of the T factory is the sum of the runtimes in all rounds.\",\"label\":\"Runtime per round\",\"path\":\"physicalCountsFormatted/tfactoryRuntimePerRound\"},{\"description\":\"Logical T state error rate\",\"explanation\":\"This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.\",\"label\":\"Logical T state error rate\",\"path\":\"physicalCountsFormatted/tstateLogicalErrorRate\"}],\"title\":\"T factory parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits in the input quantum program\",\"explanation\":\"We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.\",\"label\":\"Logical qubits (pre-layout)\",\"path\":\"logicalCounts/numQubits\"},{\"description\":\"Number of T gates in the input quantum program\",\"explanation\":\"This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.\",\"label\":\"T gates\",\"path\":\"logicalCounts/tCount\"},{\"description\":\"Number of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.\",\"label\":\"Rotation gates\",\"path\":\"logicalCounts/rotationCount\"},{\"description\":\"Depth of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.\",\"label\":\"Rotation depth\",\"path\":\"logicalCounts/rotationDepth\"},{\"description\":\"Number of CCZ-gates in the input quantum program\",\"explanation\":\"This is the number of CCZ gates.\",\"label\":\"CCZ gates\",\"path\":\"logicalCounts/cczCount\"},{\"description\":\"Number of CCiX-gates in the input quantum program\",\"explanation\":\"This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].\",\"label\":\"CCiX gates\",\"path\":\"logicalCounts/ccixCount\"},{\"description\":\"Number of single qubit measurements in the input quantum program\",\"explanation\":\"This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.\",\"label\":\"Measurement operations\",\"path\":\"logicalCounts/measurementCount\"}],\"title\":\"Pre-layout logical resources\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Total error budget for the algorithm\",\"explanation\":\"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\"label\":\"Total error budget\",\"path\":\"physicalCountsFormatted/errorBudget\"},{\"description\":\"Probability of at least one logical error\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"Logical error probability\",\"path\":\"physicalCountsFormatted/errorBudgetLogical\"},{\"description\":\"Probability of at least one faulty T distillation\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"T distillation error probability\",\"path\":\"physicalCountsFormatted/errorBudgetTstates\"},{\"description\":\"Probability of at least one failed rotation synthesis\",\"explanation\":\"This is one third of the total error budget 1.00e-3.\",\"label\":\"Rotation synthesis error probability\",\"path\":\"physicalCountsFormatted/errorBudgetRotations\"}],\"title\":\"Assumed error budget\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Some descriptive name for the qubit model\",\"explanation\":\"You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or ¬µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).\",\"label\":\"Qubit name\",\"path\":\"jobParams/qubitParams/name\"},{\"description\":\"Underlying qubit technology (gate-based or Majorana)\",\"explanation\":\"When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.\",\"label\":\"Instruction set\",\"path\":\"jobParams/qubitParams/instructionSet\"},{\"description\":\"Operation time for single-qubit measurement (t_meas) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.\",\"label\":\"Single-qubit measurement time\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementTime\"},{\"description\":\"Operation time for single-qubit gate (t_gate) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.\",\"label\":\"Single-qubit gate time\",\"path\":\"jobParams/qubitParams/oneQubitGateTime\"},{\"description\":\"Operation time for two-qubit gate in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.\",\"label\":\"Two-qubit gate time\",\"path\":\"jobParams/qubitParams/twoQubitGateTime\"},{\"description\":\"Operation time for a T gate\",\"explanation\":\"This is the operation time in nanoseconds to execute a T gate.\",\"label\":\"T gate time\",\"path\":\"jobParams/qubitParams/tGateTime\"},{\"description\":\"Error rate for single-qubit measurement\",\"explanation\":\"This is the probability in which a single-qubit measurement in the Pauli basis may fail.\",\"label\":\"Single-qubit measurement error rate\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementErrorRate\"},{\"description\":\"Error rate for single-qubit Clifford gate (p)\",\"explanation\":\"This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.\",\"label\":\"Single-qubit error rate\",\"path\":\"jobParams/qubitParams/oneQubitGateErrorRate\"},{\"description\":\"Error rate for two-qubit Clifford gate\",\"explanation\":\"This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.\",\"label\":\"Two-qubit error rate\",\"path\":\"jobParams/qubitParams/twoQubitGateErrorRate\"},{\"description\":\"Error rate to prepare single-qubit T state or apply a T gate (p_T)\",\"explanation\":\"This is the probability in which executing a single T gate may fail.\",\"label\":\"T gate error rate\",\"path\":\"jobParams/qubitParams/tGateErrorRate\"}],\"title\":\"Physical qubit parameters\"}]},\"status\":\"success\",\"tfactory\":{\"codeDistancePerRound\":[7],\"logicalErrorRate\":2.133500000000001E-05,\"numInputTstates\":30,\"numRounds\":1,\"numTstates\":1,\"numUnitsPerRound\":[2],\"physicalQubits\":3920,\"physicalQubitsPerRound\":[3920],\"runtime\":36400.0,\"runtimePerRound\":[36400.0],\"unitNamePerRound\":[\"15-to-1 space efficient logical\"]}}", - "text/html": [ - "\r\n", - "
\r\n", - " \r\n", - " Physical resource estimates\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Physical qubits18110\r\n", - "

Number of physical qubits

\n", - "
\r\n", - "
\r\n", - "

This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.

\n", - "\r\n", - "
Runtime46us 800ns\r\n", - "

Total runtime

\n", - "
\r\n", - "
\r\n", - "

This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Resource estimates breakdown\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Logical algorithmic qubits15\r\n", - "

Number of logical qubits for the algorithm after layout

\n", - "
\r\n", - "
\r\n", - "

Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the \\(Q_{\\rm alg} = 4\\) logical qubits in the input algorithm, we require in total $2 \\cdot Q_{\\rm alg} + \\lceil \\sqrt{8 \\cdot Q_{\\rm alg}}\\rceil + 1 = 15$ logical qubits.

\n", - "\r\n", - "
Algorithmic depth3\r\n", - "

Number of logical cycles for the algorithm

\n", - "
\r\n", - "
\r\n", - "

To execute the algorithm using Parallel Synthesis Sequential Pauli Computation (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.

\n", - "\r\n", - "
Logical depth13\r\n", - "

Number of logical cycles performed

\n", - "
\r\n", - "
\r\n", - "

This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.

\n", - "\r\n", - "
Number of T states4\r\n", - "

Number of T states consumed by the algorithm

\n", - "
\r\n", - "
\r\n", - "

To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.

\n", - "\r\n", - "
Number of T factories4\r\n", - "

Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime

\n", - "
\r\n", - "
\r\n", - "

The total number of T factories 4 that are executed in parallel is computed as \\(\\left\\lceil\\dfrac{4\\;\\text{T states} \\cdot 36us 400ns\\;\\text{T factory duration}}{1\\;\\text{T states per T factory} \\cdot 46us 800ns\\;\\text{algorithm runtime}}\\right\\rceil\\)

\n", - "\r\n", - "
Number of T factory invocations1\r\n", - "

Number of times all T factories are invoked

\n", - "
\r\n", - "
\r\n", - "

In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.

\n", - "\r\n", - "
Physical algorithmic qubits2430\r\n", - "

Number of physical qubits for the algorithm after layout

\n", - "
\r\n", - "
\r\n", - "

The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.

\n", - "\r\n", - "
Physical T factory qubits15680\r\n", - "

Number of physical qubits for the T factories

\n", - "
\r\n", - "
\r\n", - "

Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\cdot 4$ qubits.

\n", - "\r\n", - "
Required logical qubit error rate2.56e-6\r\n", - "

The minimum logical qubit error rate required to run the algorithm within the error budget

\n", - "
\r\n", - "
\r\n", - "

The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.

\n", - "\r\n", - "
Required logical T state error rate1.25e-4\r\n", - "

The minimum T state error rate required for distilled T states

\n", - "
\r\n", - "
\r\n", - "

The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.

\n", - "\r\n", - "
Number of T states per rotationNo rotations in algorithm\r\n", - "

Number of T states to implement a rotation with an arbitrary angle

\n", - "
\r\n", - "
\r\n", - "

The number of T states to implement a rotation with an arbitrary angle is \\(\\lceil 0.53 \\log_2(0 / 0) + 5.3\\rceil\\) [arXiv:2203.10064]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Logical qubit parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
QEC schemesurface_code\r\n", - "

Name of QEC scheme

\n", - "
\r\n", - "
\r\n", - "

You can load pre-defined QEC schemes by using the name surface_code or floquet_code. The latter only works with Majorana qubits.

\n", - "\r\n", - "
Code distance9\r\n", - "

Required code distance for error correction

\n", - "
\r\n", - "
\r\n", - "

The code distance is the smallest odd integer greater or equal to \\(\\dfrac{2\\log(0.03 / 0.000002564102564102564)}{\\log(0.01/0.001)} - 1\\)

\n", - "\r\n", - "
Physical qubits162\r\n", - "

Number of physical qubits per logical qubit

\n", - "
\r\n", - "
\r\n", - "

The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.

\n", - "\r\n", - "
Logical cycle time3us 600ns\r\n", - "

Duration of a logical cycle in nanoseconds

\n", - "
\r\n", - "
\r\n", - "

The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.

\n", - "\r\n", - "
Logical qubit error rate3.00e-7\r\n", - "

Logical qubit error rate

\n", - "
\r\n", - "
\r\n", - "

The logical qubit error rate is computed as $0.03 \\cdot \\left(\\dfrac{0.001}{0.01}\\right)^\\frac{9 + 1}{2}$

\n", - "\r\n", - "
Crossing prefactor0.03\r\n", - "

Crossing prefactor used in QEC scheme

\n", - "
\r\n", - "
\r\n", - "

The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.

\n", - "\r\n", - "
Error correction threshold0.01\r\n", - "

Error correction threshold used in QEC scheme

\n", - "
\r\n", - "
\r\n", - "

The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.

\n", - "\r\n", - "
Logical cycle time formula(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\r\n", - "

QEC scheme formula used to compute logical cycle time

\n", - "
\r\n", - "
\r\n", - "

This is the formula that is used to compute the logical cycle time 3us 600ns.

\n", - "\r\n", - "
Physical qubits formula2 * codeDistance * codeDistance\r\n", - "

QEC scheme formula used to compute number of physical qubits per logical qubit

\n", - "
\r\n", - "
\r\n", - "

This is the formula that is used to compute the number of physical qubits per logical qubits 162.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " T factory parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Physical qubits3920\r\n", - "

Number of physical qubits for a single T factory

\n", - "
\r\n", - "
\r\n", - "

This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.

\n", - "\r\n", - "
Runtime36us 400ns\r\n", - "

Runtime of a single T factory

\n", - "
\r\n", - "
\r\n", - "

The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.

\n", - "\r\n", - "
Number of output T states per run1\r\n", - "

Number of output T states produced in a single run of T factory

\n", - "
\r\n", - "
\r\n", - "

The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.

\n", - "\r\n", - "
Number of input T states per run30\r\n", - "

Number of physical input T states consumed in a single run of a T factory

\n", - "
\r\n", - "
\r\n", - "

This value includes the physical input T states of all copies of the distillation unit in the first round.

\n", - "\r\n", - "
Distillation rounds1\r\n", - "

The number of distillation rounds

\n", - "
\r\n", - "
\r\n", - "

This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.

\n", - "\r\n", - "
Distillation units per round2\r\n", - "

The number of units in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

This is the number of copies for the distillation units per round.

\n", - "\r\n", - "
Distillation units15-to-1 space efficient logical\r\n", - "

The types of distillation units

\n", - "
\r\n", - "
\r\n", - "

These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.

\n", - "\r\n", - "
Distillation code distances7\r\n", - "

The code distance in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.

\n", - "\r\n", - "
Number of physical qubits per round3920\r\n", - "

The number of physical qubits used in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.

\n", - "\r\n", - "
Runtime per round36us 400ns\r\n", - "

The runtime of each distillation round

\n", - "
\r\n", - "
\r\n", - "

The runtime of the T factory is the sum of the runtimes in all rounds.

\n", - "\r\n", - "
Logical T state error rate2.13e-5\r\n", - "

Logical T state error rate

\n", - "
\r\n", - "
\r\n", - "

This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Pre-layout logical resources\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Logical qubits (pre-layout)4\r\n", - "

Number of logical qubits in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.

\n", - "\r\n", - "
T gates0\r\n", - "

Number of T gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.

\n", - "\r\n", - "
Rotation gates0\r\n", - "

Number of rotation gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.

\n", - "\r\n", - "
Rotation depth0\r\n", - "

Depth of rotation gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.

\n", - "\r\n", - "
CCZ gates1\r\n", - "

Number of CCZ-gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of CCZ gates.

\n", - "\r\n", - "
CCiX gates0\r\n", - "

Number of CCiX-gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of CCiX gates, which applies \\(-iX\\) controlled on two control qubits [1212.5069].

\n", - "\r\n", - "
Measurement operations0\r\n", - "

Number of single qubit measurements in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Assumed error budget\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Total error budget1.00e-3\r\n", - "

Total error budget for the algorithm

\n", - "
\r\n", - "
\r\n", - "

The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget \\(\\epsilon = \\epsilon_{\\log} + \\epsilon_{\\rm dis} + \\epsilon_{\\rm syn}\\) is uniformly distributed and applies to errors \\(\\epsilon_{\\log}\\) to implement logical qubits, an error budget \\(\\epsilon_{\\rm dis}\\) to produce T states through distillation, and an error budget \\(\\epsilon_{\\rm syn}\\) to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets \\(\\epsilon_{\\rm dis}\\) and \\(\\epsilon_{\\rm syn}\\) are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.

\n", - "\r\n", - "
Logical error probability5.00e-4\r\n", - "

Probability of at least one logical error

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", - "\r\n", - "
T distillation error probability5.00e-4\r\n", - "

Probability of at least one faulty T distillation

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", - "\r\n", - "
Rotation synthesis error probability0.00e0\r\n", - "

Probability of at least one failed rotation synthesis

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Physical qubit parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Qubit namequbit_gate_ns_e3\r\n", - "

Some descriptive name for the qubit model

\n", - "
\r\n", - "
\r\n", - "

You can load pre-defined qubit parameters by using the names qubit_gate_ns_e3, qubit_gate_ns_e4, qubit_gate_us_e3, qubit_gate_us_e4, qubit_maj_ns_e4, or qubit_maj_ns_e6. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).

\n", - "\r\n", - "
Instruction setGateBased\r\n", - "

Underlying qubit technology (gate-based or Majorana)

\n", - "
\r\n", - "
\r\n", - "

When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either gate-based or Majorana. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.

\n", - "\r\n", - "
Single-qubit measurement time100 ns\r\n", - "

Operation time for single-qubit measurement (t_meas) in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.

\n", - "\r\n", - "
Single-qubit gate time50 ns\r\n", - "

Operation time for single-qubit gate (t_gate) in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.

\n", - "\r\n", - "
Two-qubit gate time50 ns\r\n", - "

Operation time for two-qubit gate in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.

\n", - "\r\n", - "
T gate time50 ns\r\n", - "

Operation time for a T gate

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to execute a T gate.

\n", - "\r\n", - "
Single-qubit measurement error rate0.001\r\n", - "

Error rate for single-qubit measurement

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a single-qubit measurement in the Pauli basis may fail.

\n", - "\r\n", - "
Single-qubit error rate0.001\r\n", - "

Error rate for single-qubit Clifford gate (p)

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.

\n", - "\r\n", - "
Two-qubit error rate0.001\r\n", - "

Error rate for two-qubit Clifford gate

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.

\n", - "\r\n", - "
T gate error rate0.001\r\n", - "

Error rate to prepare single-qubit T state or apply a T gate (p_T)

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which executing a single T gate may fail.

\n", - "\r\n", - "
\r\n", - "
\r\n", - " Assumptions\r\n", - "
    \r\n", - "
  • More details on the following lists of assumptions can be found in the paper Accessing requirements for scaling quantum computers and their applications.

    \n", - "
  • \r\n", - "
  • Uniform independent physical noise. We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.

    \n", - "
  • \r\n", - "
  • Efficient classical computation. We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.

    \n", - "
  • \r\n", - "
  • Extraction circuits for planar quantum ISA. We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).

    \n", - "
  • \r\n", - "
  • Uniform independent logical noise. We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.

    \n", - "
  • \r\n", - "
  • Negligible Clifford costs for synthesis. We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.

    \n", - "
  • \r\n", - "
  • Smooth magic state consumption rate. We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.

    \n", - "
  • \r\n", - "
\r\n" - ], - "text/plain": [ - "{'errorBudget': {'logical': 0.0005, 'rotations': 0.0, 'tstates': 0.0005},\n", - " 'jobParams': {'errorBudget': 0.001,\n", - " 'qecScheme': {'crossingPrefactor': 0.03,\n", - " 'errorCorrectionThreshold': 0.01,\n", - " 'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',\n", - " 'name': 'surface_code',\n", - " 'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance'},\n", - " 'qubitParams': {'instructionSet': 'GateBased',\n", - " 'name': 'qubit_gate_ns_e3',\n", - " 'oneQubitGateErrorRate': 0.001,\n", - " 'oneQubitGateTime': '50 ns',\n", - " 'oneQubitMeasurementErrorRate': 0.001,\n", - " 'oneQubitMeasurementTime': '100 ns',\n", - " 'tGateErrorRate': 0.001,\n", - " 'tGateTime': '50 ns',\n", - " 'twoQubitGateErrorRate': 0.001,\n", - " 'twoQubitGateTime': '50 ns'}},\n", - " 'logicalCounts': {'ccixCount': 0,\n", - " 'cczCount': 1,\n", - " 'measurementCount': 0,\n", - " 'numQubits': 4,\n", - " 'rotationCount': 0,\n", - " 'rotationDepth': 0,\n", - " 'tCount': 0},\n", - " 'logicalQubit': {'codeDistance': 9,\n", - " 'logicalCycleTime': 3600.0,\n", - " 'logicalErrorRate': 3.0000000000000015e-07,\n", - " 'physicalQubits': 162},\n", - " 'physicalCounts': {'breakdown': {'algorithmicLogicalDepth': 3,\n", - " 'algorithmicLogicalQubits': 15,\n", - " 'cliffordErrorRate': 0.001,\n", - " 'logicalDepth': 13,\n", - " 'numTfactories': 4,\n", - " 'numTfactoryRuns': 1,\n", - " 'numTsPerRotation': None,\n", - " 'numTstates': 4,\n", - " 'physicalQubitsForAlgorithm': 2430,\n", - " 'physicalQubitsForTfactories': 15680,\n", - " 'requiredLogicalQubitErrorRate': 2.564102564102564e-06,\n", - " 'requiredLogicalTstateErrorRate': 0.000125},\n", - " 'physicalQubits': 18110,\n", - " 'runtime': 46800},\n", - " 'physicalCountsFormatted': {'codeDistancePerRound': '7',\n", - " 'errorBudget': '1.00e-3',\n", - " 'errorBudgetLogical': '5.00e-4',\n", - " 'errorBudgetRotations': '0.00e0',\n", - " 'errorBudgetTstates': '5.00e-4',\n", - " 'logicalCycleTime': '3us 600ns',\n", - " 'logicalErrorRate': '3.00e-7',\n", - " 'numTsPerRotation': 'No rotations in algorithm',\n", - " 'numUnitsPerRound': '2',\n", - " 'physicalQubitsForTfactoriesPercentage': '86.58 %',\n", - " 'physicalQubitsPerRound': '3920',\n", - " 'requiredLogicalQubitErrorRate': '2.56e-6',\n", - " 'requiredLogicalTstateErrorRate': '1.25e-4',\n", - " 'runtime': '46us 800ns',\n", - " 'tfactoryRuntime': '36us 400ns',\n", - " 'tfactoryRuntimePerRound': '36us 400ns',\n", - " 'tstateLogicalErrorRate': '2.13e-5',\n", - " 'unitNamePerRound': '15-to-1 space efficient logical'},\n", - " 'reportData': {'assumptions': ['_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._',\n", - " '**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.',\n", - " '**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.',\n", - " '**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).',\n", - " '**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.',\n", - " '**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.',\n", - " '**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.'],\n", - " 'groups': [{'alwaysVisible': True,\n", - " 'entries': [{'description': 'Number of physical qubits',\n", - " 'explanation': 'This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'physicalCounts/physicalQubits'},\n", - " {'description': 'Total runtime',\n", - " 'explanation': 'This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.',\n", - " 'label': 'Runtime',\n", - " 'path': 'physicalCountsFormatted/runtime'}],\n", - " 'title': 'Physical resource estimates'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of logical qubits for the algorithm after layout',\n", - " 'explanation': 'Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 4$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 15$ logical qubits.',\n", - " 'label': 'Logical algorithmic qubits',\n", - " 'path': 'physicalCounts/breakdown/algorithmicLogicalQubits'},\n", - " {'description': 'Number of logical cycles for the algorithm',\n", - " 'explanation': 'To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.',\n", - " 'label': 'Algorithmic depth',\n", - " 'path': 'physicalCounts/breakdown/algorithmicLogicalDepth'},\n", - " {'description': 'Number of logical cycles performed',\n", - " 'explanation': \"This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\n", - " 'label': 'Logical depth',\n", - " 'path': 'physicalCounts/breakdown/logicalDepth'},\n", - " {'description': 'Number of T states consumed by the algorithm',\n", - " 'explanation': 'To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.',\n", - " 'label': 'Number of T states',\n", - " 'path': 'physicalCounts/breakdown/numTstates'},\n", - " {'description': \"Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime\",\n", - " 'explanation': 'The total number of T factories 4 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{4\\\\;\\\\text{T states} \\\\cdot 36us 400ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 46us 800ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$',\n", - " 'label': 'Number of T factories',\n", - " 'path': 'physicalCounts/breakdown/numTfactories'},\n", - " {'description': 'Number of times all T factories are invoked',\n", - " 'explanation': 'In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.',\n", - " 'label': 'Number of T factory invocations',\n", - " 'path': 'physicalCounts/breakdown/numTfactoryRuns'},\n", - " {'description': 'Number of physical qubits for the algorithm after layout',\n", - " 'explanation': 'The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.',\n", - " 'label': 'Physical algorithmic qubits',\n", - " 'path': 'physicalCounts/breakdown/physicalQubitsForAlgorithm'},\n", - " {'description': 'Number of physical qubits for the T factories',\n", - " 'explanation': 'Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\\\cdot 4$ qubits.',\n", - " 'label': 'Physical T factory qubits',\n", - " 'path': 'physicalCounts/breakdown/physicalQubitsForTfactories'},\n", - " {'description': 'The minimum logical qubit error rate required to run the algorithm within the error budget',\n", - " 'explanation': 'The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.',\n", - " 'label': 'Required logical qubit error rate',\n", - " 'path': 'physicalCountsFormatted/requiredLogicalQubitErrorRate'},\n", - " {'description': 'The minimum T state error rate required for distilled T states',\n", - " 'explanation': 'The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.',\n", - " 'label': 'Required logical T state error rate',\n", - " 'path': 'physicalCountsFormatted/requiredLogicalTstateErrorRate'},\n", - " {'description': 'Number of T states to implement a rotation with an arbitrary angle',\n", - " 'explanation': 'The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.',\n", - " 'label': 'Number of T states per rotation',\n", - " 'path': 'physicalCountsFormatted/numTsPerRotation'}],\n", - " 'title': 'Resource estimates breakdown'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Name of QEC scheme',\n", - " 'explanation': 'You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.',\n", - " 'label': 'QEC scheme',\n", - " 'path': 'jobParams/qecScheme/name'},\n", - " {'description': 'Required code distance for error correction',\n", - " 'explanation': 'The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.000002564102564102564)}{\\\\log(0.01/0.001)} - 1$',\n", - " 'label': 'Code distance',\n", - " 'path': 'logicalQubit/codeDistance'},\n", - " {'description': 'Number of physical qubits per logical qubit',\n", - " 'explanation': 'The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'logicalQubit/physicalQubits'},\n", - " {'description': 'Duration of a logical cycle in nanoseconds',\n", - " 'explanation': 'The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.',\n", - " 'label': 'Logical cycle time',\n", - " 'path': 'physicalCountsFormatted/logicalCycleTime'},\n", - " {'description': 'Logical qubit error rate',\n", - " 'explanation': 'The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{9 + 1}{2}$',\n", - " 'label': 'Logical qubit error rate',\n", - " 'path': 'physicalCountsFormatted/logicalErrorRate'},\n", - " {'description': 'Crossing prefactor used in QEC scheme',\n", - " 'explanation': 'The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.',\n", - " 'label': 'Crossing prefactor',\n", - " 'path': 'jobParams/qecScheme/crossingPrefactor'},\n", - " {'description': 'Error correction threshold used in QEC scheme',\n", - " 'explanation': 'The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.',\n", - " 'label': 'Error correction threshold',\n", - " 'path': 'jobParams/qecScheme/errorCorrectionThreshold'},\n", - " {'description': 'QEC scheme formula used to compute logical cycle time',\n", - " 'explanation': 'This is the formula that is used to compute the logical cycle time 3us 600ns.',\n", - " 'label': 'Logical cycle time formula',\n", - " 'path': 'jobParams/qecScheme/logicalCycleTime'},\n", - " {'description': 'QEC scheme formula used to compute number of physical qubits per logical qubit',\n", - " 'explanation': 'This is the formula that is used to compute the number of physical qubits per logical qubits 162.',\n", - " 'label': 'Physical qubits formula',\n", - " 'path': 'jobParams/qecScheme/physicalQubitsPerLogicalQubit'}],\n", - " 'title': 'Logical qubit parameters'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of physical qubits for a single T factory',\n", - " 'explanation': 'This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'tfactory/physicalQubits'},\n", - " {'description': 'Runtime of a single T factory',\n", - " 'explanation': 'The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.',\n", - " 'label': 'Runtime',\n", - " 'path': 'physicalCountsFormatted/tfactoryRuntime'},\n", - " {'description': 'Number of output T states produced in a single run of T factory',\n", - " 'explanation': 'The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.',\n", - " 'label': 'Number of output T states per run',\n", - " 'path': 'tfactory/numTstates'},\n", - " {'description': 'Number of physical input T states consumed in a single run of a T factory',\n", - " 'explanation': 'This value includes the physical input T states of all copies of the distillation unit in the first round.',\n", - " 'label': 'Number of input T states per run',\n", - " 'path': 'tfactory/numInputTstates'},\n", - " {'description': 'The number of distillation rounds',\n", - " 'explanation': 'This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.',\n", - " 'label': 'Distillation rounds',\n", - " 'path': 'tfactory/numRounds'},\n", - " {'description': 'The number of units in each round of distillation',\n", - " 'explanation': 'This is the number of copies for the distillation units per round.',\n", - " 'label': 'Distillation units per round',\n", - " 'path': 'physicalCountsFormatted/numUnitsPerRound'},\n", - " {'description': 'The types of distillation units',\n", - " 'explanation': 'These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.',\n", - " 'label': 'Distillation units',\n", - " 'path': 'physicalCountsFormatted/unitNamePerRound'},\n", - " {'description': 'The code distance in each round of distillation',\n", - " 'explanation': 'This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.',\n", - " 'label': 'Distillation code distances',\n", - " 'path': 'physicalCountsFormatted/codeDistancePerRound'},\n", - " {'description': 'The number of physical qubits used in each round of distillation',\n", - " 'explanation': 'The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.',\n", - " 'label': 'Number of physical qubits per round',\n", - " 'path': 'physicalCountsFormatted/physicalQubitsPerRound'},\n", - " {'description': 'The runtime of each distillation round',\n", - " 'explanation': 'The runtime of the T factory is the sum of the runtimes in all rounds.',\n", - " 'label': 'Runtime per round',\n", - " 'path': 'physicalCountsFormatted/tfactoryRuntimePerRound'},\n", - " {'description': 'Logical T state error rate',\n", - " 'explanation': 'This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.',\n", - " 'label': 'Logical T state error rate',\n", - " 'path': 'physicalCountsFormatted/tstateLogicalErrorRate'}],\n", - " 'title': 'T factory parameters'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of logical qubits in the input quantum program',\n", - " 'explanation': 'We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.',\n", - " 'label': 'Logical qubits (pre-layout)',\n", - " 'path': 'logicalCounts/numQubits'},\n", - " {'description': 'Number of T gates in the input quantum program',\n", - " 'explanation': 'This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.',\n", - " 'label': 'T gates',\n", - " 'path': 'logicalCounts/tCount'},\n", - " {'description': 'Number of rotation gates in the input quantum program',\n", - " 'explanation': 'This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.',\n", - " 'label': 'Rotation gates',\n", - " 'path': 'logicalCounts/rotationCount'},\n", - " {'description': 'Depth of rotation gates in the input quantum program',\n", - " 'explanation': 'This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.',\n", - " 'label': 'Rotation depth',\n", - " 'path': 'logicalCounts/rotationDepth'},\n", - " {'description': 'Number of CCZ-gates in the input quantum program',\n", - " 'explanation': 'This is the number of CCZ gates.',\n", - " 'label': 'CCZ gates',\n", - " 'path': 'logicalCounts/cczCount'},\n", - " {'description': 'Number of CCiX-gates in the input quantum program',\n", - " 'explanation': 'This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].',\n", - " 'label': 'CCiX gates',\n", - " 'path': 'logicalCounts/ccixCount'},\n", - " {'description': 'Number of single qubit measurements in the input quantum program',\n", - " 'explanation': 'This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.',\n", - " 'label': 'Measurement operations',\n", - " 'path': 'logicalCounts/measurementCount'}],\n", - " 'title': 'Pre-layout logical resources'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Total error budget for the algorithm',\n", - " 'explanation': \"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\n", - " 'label': 'Total error budget',\n", - " 'path': 'physicalCountsFormatted/errorBudget'},\n", - " {'description': 'Probability of at least one logical error',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", - " 'label': 'Logical error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetLogical'},\n", - " {'description': 'Probability of at least one faulty T distillation',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", - " 'label': 'T distillation error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetTstates'},\n", - " {'description': 'Probability of at least one failed rotation synthesis',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3.',\n", - " 'label': 'Rotation synthesis error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetRotations'}],\n", - " 'title': 'Assumed error budget'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Some descriptive name for the qubit model',\n", - " 'explanation': 'You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).',\n", - " 'label': 'Qubit name',\n", - " 'path': 'jobParams/qubitParams/name'},\n", - " {'description': 'Underlying qubit technology (gate-based or Majorana)',\n", - " 'explanation': 'When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.',\n", - " 'label': 'Instruction set',\n", - " 'path': 'jobParams/qubitParams/instructionSet'},\n", - " {'description': 'Operation time for single-qubit measurement (t_meas) in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.',\n", - " 'label': 'Single-qubit measurement time',\n", - " 'path': 'jobParams/qubitParams/oneQubitMeasurementTime'},\n", - " {'description': 'Operation time for single-qubit gate (t_gate) in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.',\n", - " 'label': 'Single-qubit gate time',\n", - " 'path': 'jobParams/qubitParams/oneQubitGateTime'},\n", - " {'description': 'Operation time for two-qubit gate in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.',\n", - " 'label': 'Two-qubit gate time',\n", - " 'path': 'jobParams/qubitParams/twoQubitGateTime'},\n", - " {'description': 'Operation time for a T gate',\n", - " 'explanation': 'This is the operation time in nanoseconds to execute a T gate.',\n", - " 'label': 'T gate time',\n", - " 'path': 'jobParams/qubitParams/tGateTime'},\n", - " {'description': 'Error rate for single-qubit measurement',\n", - " 'explanation': 'This is the probability in which a single-qubit measurement in the Pauli basis may fail.',\n", - " 'label': 'Single-qubit measurement error rate',\n", - " 'path': 'jobParams/qubitParams/oneQubitMeasurementErrorRate'},\n", - " {'description': 'Error rate for single-qubit Clifford gate (p)',\n", - " 'explanation': 'This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.',\n", - " 'label': 'Single-qubit error rate',\n", - " 'path': 'jobParams/qubitParams/oneQubitGateErrorRate'},\n", - " {'description': 'Error rate for two-qubit Clifford gate',\n", - " 'explanation': 'This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.',\n", - " 'label': 'Two-qubit error rate',\n", - " 'path': 'jobParams/qubitParams/twoQubitGateErrorRate'},\n", - " {'description': 'Error rate to prepare single-qubit T state or apply a T gate (p_T)',\n", - " 'explanation': 'This is the probability in which executing a single T gate may fail.',\n", - " 'label': 'T gate error rate',\n", - " 'path': 'jobParams/qubitParams/tGateErrorRate'}],\n", - " 'title': 'Physical qubit parameters'}]},\n", - " 'status': 'success',\n", - " 'tfactory': {'codeDistancePerRound': [7],\n", - " 'logicalErrorRate': 2.133500000000001e-05,\n", - " 'numInputTstates': 30,\n", - " 'numRounds': 1,\n", - " 'numTstates': 1,\n", - " 'numUnitsPerRound': [2],\n", - " 'physicalQubits': 3920,\n", - " 'physicalQubitsPerRound': [3920],\n", - " 'runtime': 36400.0,\n", - " 'runtimePerRound': [36400.0],\n", - " 'unitNamePerRound': ['15-to-1 space efficient logical']}}" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", "# result = qsharp.azure.output(\"...\")\n", @@ -1978,7 +357,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -2004,7 +383,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -2016,27 +395,7 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logical algorithmic qubits = 15\n", - "Algorithmic depth = 3\n", - "Score = 45\n" - ] - }, - { - "data": { - "text/plain": [ - "45" - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "evaluate_results(result)" ] diff --git a/iQuHack-challenge-2023-task1.ipynb b/iQuHack-challenge-2023-task1.ipynb index 9c06fd1..7607d81 100644 --- a/iQuHack-challenge-2023-task1.ipynb +++ b/iQuHack-challenge-2023-task1.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -46,47 +46,7 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[\n", - " {\n", - " \"cloudName\": \"AzureCloud\",\n", - " \"homeTenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", - " \"id\": \"6d61051a-6e40-4845-a03a-3c5160bb5629\",\n", - " \"isDefault\": true,\n", - " \"managedByTenants\": [\n", - " {\n", - " \"tenantId\": \"d0ecd01b-d782-448e-bae0-c3cad0e0543a\"\n", - " },\n", - " {\n", - " \"tenantId\": \"94c4857e-1130-4ab8-8eac-069b40c9db20\"\n", - " },\n", - " {\n", - " \"tenantId\": \"f702a9dc-ae48-4dc7-8f0a-8155a6dfa4e5\"\n", - " }\n", - " ],\n", - " \"name\": \"Azure for Students\",\n", - " \"state\": \"Enabled\",\n", - " \"tenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", - " \"user\": {\n", - " \"name\": \"papadm2@rpi.edu\",\n", - " \"type\": \"user\"\n", - " }\n", - " }\n", - "]\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.\n" - ] - } - ], + "outputs": [], "source": [ "!az login" ] @@ -106,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -127,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -148,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -184,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -220,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -276,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -288,462 +248,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "{\"diagnostic_kind\":\"state-vector\",\"qubit_ids\":[0,1,2,3],\"n_qubits\":4,\"amplitudes\":{\"0\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"1\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"2\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"3\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"4\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"5\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"6\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"7\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"8\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"9\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"10\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"11\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0},\"12\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"13\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"14\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"15\":{\"Real\":0.35355339059327384,\"Imaginary\":0.0,\"Magnitude\":0.35355339059327384,\"Phase\":0.0}}}", - "text/html": [ - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Qubit IDs0, 1, 2, 3
Basis state (bitstring)AmplitudeMeas. Pr.
$\\left|0000\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0010\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0100\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0110\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1000\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1010\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1100\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1101\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1110\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1111\\right\\rangle$$0.3536 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
" - ], - "text/plain": [ - "|0000⟩\t0.35355339059327384 + 0𝑖\n", - "|0001⟩\t0 + 0𝑖\n", - "|0010⟩\t0.35355339059327384 + 0𝑖\n", - "|0011⟩\t0 + 0𝑖\n", - "|0100⟩\t0.35355339059327384 + 0𝑖\n", - "|0101⟩\t0 + 0𝑖\n", - "|0110⟩\t0.35355339059327384 + 0𝑖\n", - "|0111⟩\t0 + 0𝑖\n", - "|1000⟩\t0.35355339059327384 + 0𝑖\n", - "|1001⟩\t0 + 0𝑖\n", - "|1010⟩\t0.35355339059327384 + 0𝑖\n", - "|1011⟩\t0 + 0𝑖\n", - "|1100⟩\t0 + 0𝑖\n", - "|1101⟩\t0.35355339059327384 + 0𝑖\n", - "|1110⟩\t0 + 0𝑖\n", - "|1111⟩\t0.35355339059327384 + 0𝑖" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "()" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", @@ -768,7 +273,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -780,56 +285,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "\"Connecting to Azure Quantum...\"", - "text/plain": [ - "Connecting to Azure Quantum..." - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected to Azure Quantum workspace iQuHack-Workspace-micpap25 in location eastus.\r\n" - ] - }, - { - "data": { - "text/plain": [ - "[{'id': 'ionq.qpu', 'current_availability': {}, 'average_queue_time': 265936},\n", - " {'id': 'ionq.qpu.aria-1', 'current_availability': {}, 'average_queue_time': 338807},\n", - " {'id': 'ionq.simulator', 'current_availability': {}, 'average_queue_time': 3},\n", - " {'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s1', 'current_availability': {}, 'average_queue_time': 257411},\n", - " {'id': 'quantinuum.hqs-lt-s1-apival', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s2', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s2-apival', 'current_availability': {}, 'average_queue_time': 1},\n", - " {'id': 'quantinuum.hqs-lt-s1-sim', 'current_availability': {}, 'average_queue_time': 4312},\n", - " {'id': 'quantinuum.hqs-lt-s2-sim', 'current_availability': {}, 'average_queue_time': 140},\n", - " {'id': 'quantinuum.hqs-lt', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.qpu.h1-1', 'current_availability': {}, 'average_queue_time': 257411},\n", - " {'id': 'quantinuum.sim.h1-1sc', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.qpu.h1-2', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.sim.h1-2sc', 'current_availability': {}, 'average_queue_time': 1},\n", - " {'id': 'quantinuum.sim.h1-1e', 'current_availability': {}, 'average_queue_time': 4312},\n", - " {'id': 'quantinuum.sim.h1-2e', 'current_availability': {}, 'average_queue_time': 140},\n", - " {'id': 'quantinuum.qpu.h1', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'rigetti.sim.qvm', 'current_availability': {}, 'average_queue_time': 5},\n", - " {'id': 'rigetti.qpu.aspen-11', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'rigetti.qpu.aspen-m-2', 'current_availability': {}, 'average_queue_time': 5},\n", - " {'id': 'rigetti.qpu.aspen-m-3', 'current_availability': {}, 'average_queue_time': 5}]" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", @@ -841,7 +297,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -853,33 +309,14 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading package Microsoft.Quantum.Providers.Core and dependencies...\r\n", - "Active target is now microsoft.estimator\r\n" - ] - }, - { - "data": { - "text/plain": [ - "{'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0}" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "qsharp.azure.target(\"microsoft.estimator\")" ] }, { "cell_type": "code", - "execution_count": 62, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -891,21 +328,7 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Submitting Task1_ResourceEstimationWrapper to target microsoft.estimator...\n", - "Job successfully submitted.\n", - " Job name: RE for the task 1\n", - " Job ID: 804f1a1a-674a-4880-a21c-cc7008a5b18f\n", - "Waiting up to 30 seconds for Azure Quantum job to complete...\n", - "[1:52:36 PM] Current job status: Executing\n", - "[1:52:41 PM] Current job status: Succeeded\n" - ] - } - ], + "outputs": [], "source": [ "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", "result = qsharp.azure.execute(Task1_ResourceEstimationWrapper, jobName=\"RE for the task 1\")" @@ -913,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -925,1051 +348,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "{\"errorBudget\":{\"logical\":0.0005,\"rotations\":0.0,\"tstates\":0.0005},\"jobParams\":{\"errorBudget\":0.001,\"qecScheme\":{\"crossingPrefactor\":0.03,\"errorCorrectionThreshold\":0.01,\"logicalCycleTime\":\"(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\",\"name\":\"surface_code\",\"physicalQubitsPerLogicalQubit\":\"2 * codeDistance * codeDistance\"},\"qubitParams\":{\"instructionSet\":\"GateBased\",\"name\":\"qubit_gate_ns_e3\",\"oneQubitGateErrorRate\":0.001,\"oneQubitGateTime\":\"50 ns\",\"oneQubitMeasurementErrorRate\":0.001,\"oneQubitMeasurementTime\":\"100 ns\",\"tGateErrorRate\":0.001,\"tGateTime\":\"50 ns\",\"twoQubitGateErrorRate\":0.001,\"twoQubitGateTime\":\"50 ns\"}},\"logicalCounts\":{\"ccixCount\":0,\"cczCount\":1,\"measurementCount\":0,\"numQubits\":4,\"rotationCount\":0,\"rotationDepth\":0,\"tCount\":0},\"logicalQubit\":{\"codeDistance\":9,\"logicalCycleTime\":3600.0,\"logicalErrorRate\":3.0000000000000015E-07,\"physicalQubits\":162},\"physicalCounts\":{\"breakdown\":{\"algorithmicLogicalDepth\":3,\"algorithmicLogicalQubits\":15,\"cliffordErrorRate\":0.001,\"logicalDepth\":13,\"numTfactories\":4,\"numTfactoryRuns\":1,\"numTsPerRotation\":null,\"numTstates\":4,\"physicalQubitsForAlgorithm\":2430,\"physicalQubitsForTfactories\":15680,\"requiredLogicalQubitErrorRate\":2.564102564102564E-06,\"requiredLogicalTstateErrorRate\":0.000125},\"physicalQubits\":18110,\"runtime\":46800},\"physicalCountsFormatted\":{\"codeDistancePerRound\":\"7\",\"errorBudget\":\"1.00e-3\",\"errorBudgetLogical\":\"5.00e-4\",\"errorBudgetRotations\":\"0.00e0\",\"errorBudgetTstates\":\"5.00e-4\",\"logicalCycleTime\":\"3us 600ns\",\"logicalErrorRate\":\"3.00e-7\",\"numTsPerRotation\":\"No rotations in algorithm\",\"numUnitsPerRound\":\"2\",\"physicalQubitsForTfactoriesPercentage\":\"86.58 %\",\"physicalQubitsPerRound\":\"3920\",\"requiredLogicalQubitErrorRate\":\"2.56e-6\",\"requiredLogicalTstateErrorRate\":\"1.25e-4\",\"runtime\":\"46us 800ns\",\"tfactoryRuntime\":\"36us 400ns\",\"tfactoryRuntimePerRound\":\"36us 400ns\",\"tstateLogicalErrorRate\":\"2.13e-5\",\"unitNamePerRound\":\"15-to-1 space efficient logical\"},\"reportData\":{\"assumptions\":[\"_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._\",\"**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.\",\"**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.\",\"**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).\",\"**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.\",\"**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.\",\"**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.\"],\"groups\":[{\"alwaysVisible\":true,\"entries\":[{\"description\":\"Number of physical qubits\",\"explanation\":\"This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.\",\"label\":\"Physical qubits\",\"path\":\"physicalCounts/physicalQubits\"},{\"description\":\"Total runtime\",\"explanation\":\"This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/runtime\"}],\"title\":\"Physical resource estimates\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits for the algorithm after layout\",\"explanation\":\"Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 4$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 15$ logical qubits.\",\"label\":\"Logical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalQubits\"},{\"description\":\"Number of logical cycles for the algorithm\",\"explanation\":\"To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.\",\"label\":\"Algorithmic depth\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalDepth\"},{\"description\":\"Number of logical cycles performed\",\"explanation\":\"This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\"label\":\"Logical depth\",\"path\":\"physicalCounts/breakdown/logicalDepth\"},{\"description\":\"Number of T states consumed by the algorithm\",\"explanation\":\"To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.\",\"label\":\"Number of T states\",\"path\":\"physicalCounts/breakdown/numTstates\"},{\"description\":\"Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime\",\"explanation\":\"The total number of T factories 4 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{4\\\\;\\\\text{T states} \\\\cdot 36us 400ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 46us 800ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$\",\"label\":\"Number of T factories\",\"path\":\"physicalCounts/breakdown/numTfactories\"},{\"description\":\"Number of times all T factories are invoked\",\"explanation\":\"In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.\",\"label\":\"Number of T factory invocations\",\"path\":\"physicalCounts/breakdown/numTfactoryRuns\"},{\"description\":\"Number of physical qubits for the algorithm after layout\",\"explanation\":\"The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.\",\"label\":\"Physical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForAlgorithm\"},{\"description\":\"Number of physical qubits for the T factories\",\"explanation\":\"Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\\\cdot 4$ qubits.\",\"label\":\"Physical T factory qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForTfactories\"},{\"description\":\"The minimum logical qubit error rate required to run the algorithm within the error budget\",\"explanation\":\"The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.\",\"label\":\"Required logical qubit error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalQubitErrorRate\"},{\"description\":\"The minimum T state error rate required for distilled T states\",\"explanation\":\"The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.\",\"label\":\"Required logical T state error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalTstateErrorRate\"},{\"description\":\"Number of T states to implement a rotation with an arbitrary angle\",\"explanation\":\"The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.\",\"label\":\"Number of T states per rotation\",\"path\":\"physicalCountsFormatted/numTsPerRotation\"}],\"title\":\"Resource estimates breakdown\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Name of QEC scheme\",\"explanation\":\"You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.\",\"label\":\"QEC scheme\",\"path\":\"jobParams/qecScheme/name\"},{\"description\":\"Required code distance for error correction\",\"explanation\":\"The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.000002564102564102564)}{\\\\log(0.01/0.001)} - 1$\",\"label\":\"Code distance\",\"path\":\"logicalQubit/codeDistance\"},{\"description\":\"Number of physical qubits per logical qubit\",\"explanation\":\"The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.\",\"label\":\"Physical qubits\",\"path\":\"logicalQubit/physicalQubits\"},{\"description\":\"Duration of a logical cycle in nanoseconds\",\"explanation\":\"The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.\",\"label\":\"Logical cycle time\",\"path\":\"physicalCountsFormatted/logicalCycleTime\"},{\"description\":\"Logical qubit error rate\",\"explanation\":\"The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{9 + 1}{2}$\",\"label\":\"Logical qubit error rate\",\"path\":\"physicalCountsFormatted/logicalErrorRate\"},{\"description\":\"Crossing prefactor used in QEC scheme\",\"explanation\":\"The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.\",\"label\":\"Crossing prefactor\",\"path\":\"jobParams/qecScheme/crossingPrefactor\"},{\"description\":\"Error correction threshold used in QEC scheme\",\"explanation\":\"The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.\",\"label\":\"Error correction threshold\",\"path\":\"jobParams/qecScheme/errorCorrectionThreshold\"},{\"description\":\"QEC scheme formula used to compute logical cycle time\",\"explanation\":\"This is the formula that is used to compute the logical cycle time 3us 600ns.\",\"label\":\"Logical cycle time formula\",\"path\":\"jobParams/qecScheme/logicalCycleTime\"},{\"description\":\"QEC scheme formula used to compute number of physical qubits per logical qubit\",\"explanation\":\"This is the formula that is used to compute the number of physical qubits per logical qubits 162.\",\"label\":\"Physical qubits formula\",\"path\":\"jobParams/qecScheme/physicalQubitsPerLogicalQubit\"}],\"title\":\"Logical qubit parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of physical qubits for a single T factory\",\"explanation\":\"This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.\",\"label\":\"Physical qubits\",\"path\":\"tfactory/physicalQubits\"},{\"description\":\"Runtime of a single T factory\",\"explanation\":\"The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/tfactoryRuntime\"},{\"description\":\"Number of output T states produced in a single run of T factory\",\"explanation\":\"The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.\",\"label\":\"Number of output T states per run\",\"path\":\"tfactory/numTstates\"},{\"description\":\"Number of physical input T states consumed in a single run of a T factory\",\"explanation\":\"This value includes the physical input T states of all copies of the distillation unit in the first round.\",\"label\":\"Number of input T states per run\",\"path\":\"tfactory/numInputTstates\"},{\"description\":\"The number of distillation rounds\",\"explanation\":\"This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.\",\"label\":\"Distillation rounds\",\"path\":\"tfactory/numRounds\"},{\"description\":\"The number of units in each round of distillation\",\"explanation\":\"This is the number of copies for the distillation units per round.\",\"label\":\"Distillation units per round\",\"path\":\"physicalCountsFormatted/numUnitsPerRound\"},{\"description\":\"The types of distillation units\",\"explanation\":\"These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.\",\"label\":\"Distillation units\",\"path\":\"physicalCountsFormatted/unitNamePerRound\"},{\"description\":\"The code distance in each round of distillation\",\"explanation\":\"This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.\",\"label\":\"Distillation code distances\",\"path\":\"physicalCountsFormatted/codeDistancePerRound\"},{\"description\":\"The number of physical qubits used in each round of distillation\",\"explanation\":\"The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.\",\"label\":\"Number of physical qubits per round\",\"path\":\"physicalCountsFormatted/physicalQubitsPerRound\"},{\"description\":\"The runtime of each distillation round\",\"explanation\":\"The runtime of the T factory is the sum of the runtimes in all rounds.\",\"label\":\"Runtime per round\",\"path\":\"physicalCountsFormatted/tfactoryRuntimePerRound\"},{\"description\":\"Logical T state error rate\",\"explanation\":\"This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.\",\"label\":\"Logical T state error rate\",\"path\":\"physicalCountsFormatted/tstateLogicalErrorRate\"}],\"title\":\"T factory parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits in the input quantum program\",\"explanation\":\"We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.\",\"label\":\"Logical qubits (pre-layout)\",\"path\":\"logicalCounts/numQubits\"},{\"description\":\"Number of T gates in the input quantum program\",\"explanation\":\"This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.\",\"label\":\"T gates\",\"path\":\"logicalCounts/tCount\"},{\"description\":\"Number of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.\",\"label\":\"Rotation gates\",\"path\":\"logicalCounts/rotationCount\"},{\"description\":\"Depth of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.\",\"label\":\"Rotation depth\",\"path\":\"logicalCounts/rotationDepth\"},{\"description\":\"Number of CCZ-gates in the input quantum program\",\"explanation\":\"This is the number of CCZ gates.\",\"label\":\"CCZ gates\",\"path\":\"logicalCounts/cczCount\"},{\"description\":\"Number of CCiX-gates in the input quantum program\",\"explanation\":\"This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].\",\"label\":\"CCiX gates\",\"path\":\"logicalCounts/ccixCount\"},{\"description\":\"Number of single qubit measurements in the input quantum program\",\"explanation\":\"This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.\",\"label\":\"Measurement operations\",\"path\":\"logicalCounts/measurementCount\"}],\"title\":\"Pre-layout logical resources\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Total error budget for the algorithm\",\"explanation\":\"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\"label\":\"Total error budget\",\"path\":\"physicalCountsFormatted/errorBudget\"},{\"description\":\"Probability of at least one logical error\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"Logical error probability\",\"path\":\"physicalCountsFormatted/errorBudgetLogical\"},{\"description\":\"Probability of at least one faulty T distillation\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"T distillation error probability\",\"path\":\"physicalCountsFormatted/errorBudgetTstates\"},{\"description\":\"Probability of at least one failed rotation synthesis\",\"explanation\":\"This is one third of the total error budget 1.00e-3.\",\"label\":\"Rotation synthesis error probability\",\"path\":\"physicalCountsFormatted/errorBudgetRotations\"}],\"title\":\"Assumed error budget\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Some descriptive name for the qubit model\",\"explanation\":\"You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or ¬µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).\",\"label\":\"Qubit name\",\"path\":\"jobParams/qubitParams/name\"},{\"description\":\"Underlying qubit technology (gate-based or Majorana)\",\"explanation\":\"When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.\",\"label\":\"Instruction set\",\"path\":\"jobParams/qubitParams/instructionSet\"},{\"description\":\"Operation time for single-qubit measurement (t_meas) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.\",\"label\":\"Single-qubit measurement time\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementTime\"},{\"description\":\"Operation time for single-qubit gate (t_gate) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.\",\"label\":\"Single-qubit gate time\",\"path\":\"jobParams/qubitParams/oneQubitGateTime\"},{\"description\":\"Operation time for two-qubit gate in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.\",\"label\":\"Two-qubit gate time\",\"path\":\"jobParams/qubitParams/twoQubitGateTime\"},{\"description\":\"Operation time for a T gate\",\"explanation\":\"This is the operation time in nanoseconds to execute a T gate.\",\"label\":\"T gate time\",\"path\":\"jobParams/qubitParams/tGateTime\"},{\"description\":\"Error rate for single-qubit measurement\",\"explanation\":\"This is the probability in which a single-qubit measurement in the Pauli basis may fail.\",\"label\":\"Single-qubit measurement error rate\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementErrorRate\"},{\"description\":\"Error rate for single-qubit Clifford gate (p)\",\"explanation\":\"This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.\",\"label\":\"Single-qubit error rate\",\"path\":\"jobParams/qubitParams/oneQubitGateErrorRate\"},{\"description\":\"Error rate for two-qubit Clifford gate\",\"explanation\":\"This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.\",\"label\":\"Two-qubit error rate\",\"path\":\"jobParams/qubitParams/twoQubitGateErrorRate\"},{\"description\":\"Error rate to prepare single-qubit T state or apply a T gate (p_T)\",\"explanation\":\"This is the probability in which executing a single T gate may fail.\",\"label\":\"T gate error rate\",\"path\":\"jobParams/qubitParams/tGateErrorRate\"}],\"title\":\"Physical qubit parameters\"}]},\"status\":\"success\",\"tfactory\":{\"codeDistancePerRound\":[7],\"logicalErrorRate\":2.133500000000001E-05,\"numInputTstates\":30,\"numRounds\":1,\"numTstates\":1,\"numUnitsPerRound\":[2],\"physicalQubits\":3920,\"physicalQubitsPerRound\":[3920],\"runtime\":36400.0,\"runtimePerRound\":[36400.0],\"unitNamePerRound\":[\"15-to-1 space efficient logical\"]}}", - "text/html": [ - "\r\n", - "
\r\n", - " \r\n", - " Physical resource estimates\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Physical qubits18110\r\n", - "

Number of physical qubits

\n", - "
\r\n", - "
\r\n", - "

This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.

\n", - "\r\n", - "
Runtime46us 800ns\r\n", - "

Total runtime

\n", - "
\r\n", - "
\r\n", - "

This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Resource estimates breakdown\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Logical algorithmic qubits15\r\n", - "

Number of logical qubits for the algorithm after layout

\n", - "
\r\n", - "
\r\n", - "

Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the \\(Q_{\\rm alg} = 4\\) logical qubits in the input algorithm, we require in total $2 \\cdot Q_{\\rm alg} + \\lceil \\sqrt{8 \\cdot Q_{\\rm alg}}\\rceil + 1 = 15$ logical qubits.

\n", - "\r\n", - "
Algorithmic depth3\r\n", - "

Number of logical cycles for the algorithm

\n", - "
\r\n", - "
\r\n", - "

To execute the algorithm using Parallel Synthesis Sequential Pauli Computation (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.

\n", - "\r\n", - "
Logical depth13\r\n", - "

Number of logical cycles performed

\n", - "
\r\n", - "
\r\n", - "

This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.

\n", - "\r\n", - "
Number of T states4\r\n", - "

Number of T states consumed by the algorithm

\n", - "
\r\n", - "
\r\n", - "

To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.

\n", - "\r\n", - "
Number of T factories4\r\n", - "

Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime

\n", - "
\r\n", - "
\r\n", - "

The total number of T factories 4 that are executed in parallel is computed as \\(\\left\\lceil\\dfrac{4\\;\\text{T states} \\cdot 36us 400ns\\;\\text{T factory duration}}{1\\;\\text{T states per T factory} \\cdot 46us 800ns\\;\\text{algorithm runtime}}\\right\\rceil\\)

\n", - "\r\n", - "
Number of T factory invocations1\r\n", - "

Number of times all T factories are invoked

\n", - "
\r\n", - "
\r\n", - "

In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.

\n", - "\r\n", - "
Physical algorithmic qubits2430\r\n", - "

Number of physical qubits for the algorithm after layout

\n", - "
\r\n", - "
\r\n", - "

The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.

\n", - "\r\n", - "
Physical T factory qubits15680\r\n", - "

Number of physical qubits for the T factories

\n", - "
\r\n", - "
\r\n", - "

Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\cdot 4$ qubits.

\n", - "\r\n", - "
Required logical qubit error rate2.56e-6\r\n", - "

The minimum logical qubit error rate required to run the algorithm within the error budget

\n", - "
\r\n", - "
\r\n", - "

The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.

\n", - "\r\n", - "
Required logical T state error rate1.25e-4\r\n", - "

The minimum T state error rate required for distilled T states

\n", - "
\r\n", - "
\r\n", - "

The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.

\n", - "\r\n", - "
Number of T states per rotationNo rotations in algorithm\r\n", - "

Number of T states to implement a rotation with an arbitrary angle

\n", - "
\r\n", - "
\r\n", - "

The number of T states to implement a rotation with an arbitrary angle is \\(\\lceil 0.53 \\log_2(0 / 0) + 5.3\\rceil\\) [arXiv:2203.10064]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Logical qubit parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
QEC schemesurface_code\r\n", - "

Name of QEC scheme

\n", - "
\r\n", - "
\r\n", - "

You can load pre-defined QEC schemes by using the name surface_code or floquet_code. The latter only works with Majorana qubits.

\n", - "\r\n", - "
Code distance9\r\n", - "

Required code distance for error correction

\n", - "
\r\n", - "
\r\n", - "

The code distance is the smallest odd integer greater or equal to \\(\\dfrac{2\\log(0.03 / 0.000002564102564102564)}{\\log(0.01/0.001)} - 1\\)

\n", - "\r\n", - "
Physical qubits162\r\n", - "

Number of physical qubits per logical qubit

\n", - "
\r\n", - "
\r\n", - "

The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.

\n", - "\r\n", - "
Logical cycle time3us 600ns\r\n", - "

Duration of a logical cycle in nanoseconds

\n", - "
\r\n", - "
\r\n", - "

The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.

\n", - "\r\n", - "
Logical qubit error rate3.00e-7\r\n", - "

Logical qubit error rate

\n", - "
\r\n", - "
\r\n", - "

The logical qubit error rate is computed as $0.03 \\cdot \\left(\\dfrac{0.001}{0.01}\\right)^\\frac{9 + 1}{2}$

\n", - "\r\n", - "
Crossing prefactor0.03\r\n", - "

Crossing prefactor used in QEC scheme

\n", - "
\r\n", - "
\r\n", - "

The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.

\n", - "\r\n", - "
Error correction threshold0.01\r\n", - "

Error correction threshold used in QEC scheme

\n", - "
\r\n", - "
\r\n", - "

The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.

\n", - "\r\n", - "
Logical cycle time formula(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\r\n", - "

QEC scheme formula used to compute logical cycle time

\n", - "
\r\n", - "
\r\n", - "

This is the formula that is used to compute the logical cycle time 3us 600ns.

\n", - "\r\n", - "
Physical qubits formula2 * codeDistance * codeDistance\r\n", - "

QEC scheme formula used to compute number of physical qubits per logical qubit

\n", - "
\r\n", - "
\r\n", - "

This is the formula that is used to compute the number of physical qubits per logical qubits 162.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " T factory parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Physical qubits3920\r\n", - "

Number of physical qubits for a single T factory

\n", - "
\r\n", - "
\r\n", - "

This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.

\n", - "\r\n", - "
Runtime36us 400ns\r\n", - "

Runtime of a single T factory

\n", - "
\r\n", - "
\r\n", - "

The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.

\n", - "\r\n", - "
Number of output T states per run1\r\n", - "

Number of output T states produced in a single run of T factory

\n", - "
\r\n", - "
\r\n", - "

The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.

\n", - "\r\n", - "
Number of input T states per run30\r\n", - "

Number of physical input T states consumed in a single run of a T factory

\n", - "
\r\n", - "
\r\n", - "

This value includes the physical input T states of all copies of the distillation unit in the first round.

\n", - "\r\n", - "
Distillation rounds1\r\n", - "

The number of distillation rounds

\n", - "
\r\n", - "
\r\n", - "

This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.

\n", - "\r\n", - "
Distillation units per round2\r\n", - "

The number of units in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

This is the number of copies for the distillation units per round.

\n", - "\r\n", - "
Distillation units15-to-1 space efficient logical\r\n", - "

The types of distillation units

\n", - "
\r\n", - "
\r\n", - "

These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.

\n", - "\r\n", - "
Distillation code distances7\r\n", - "

The code distance in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.

\n", - "\r\n", - "
Number of physical qubits per round3920\r\n", - "

The number of physical qubits used in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.

\n", - "\r\n", - "
Runtime per round36us 400ns\r\n", - "

The runtime of each distillation round

\n", - "
\r\n", - "
\r\n", - "

The runtime of the T factory is the sum of the runtimes in all rounds.

\n", - "\r\n", - "
Logical T state error rate2.13e-5\r\n", - "

Logical T state error rate

\n", - "
\r\n", - "
\r\n", - "

This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Pre-layout logical resources\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Logical qubits (pre-layout)4\r\n", - "

Number of logical qubits in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.

\n", - "\r\n", - "
T gates0\r\n", - "

Number of T gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.

\n", - "\r\n", - "
Rotation gates0\r\n", - "

Number of rotation gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.

\n", - "\r\n", - "
Rotation depth0\r\n", - "

Depth of rotation gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.

\n", - "\r\n", - "
CCZ gates1\r\n", - "

Number of CCZ-gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of CCZ gates.

\n", - "\r\n", - "
CCiX gates0\r\n", - "

Number of CCiX-gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of CCiX gates, which applies \\(-iX\\) controlled on two control qubits [1212.5069].

\n", - "\r\n", - "
Measurement operations0\r\n", - "

Number of single qubit measurements in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Assumed error budget\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Total error budget1.00e-3\r\n", - "

Total error budget for the algorithm

\n", - "
\r\n", - "
\r\n", - "

The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget \\(\\epsilon = \\epsilon_{\\log} + \\epsilon_{\\rm dis} + \\epsilon_{\\rm syn}\\) is uniformly distributed and applies to errors \\(\\epsilon_{\\log}\\) to implement logical qubits, an error budget \\(\\epsilon_{\\rm dis}\\) to produce T states through distillation, and an error budget \\(\\epsilon_{\\rm syn}\\) to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets \\(\\epsilon_{\\rm dis}\\) and \\(\\epsilon_{\\rm syn}\\) are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.

\n", - "\r\n", - "
Logical error probability5.00e-4\r\n", - "

Probability of at least one logical error

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", - "\r\n", - "
T distillation error probability5.00e-4\r\n", - "

Probability of at least one faulty T distillation

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", - "\r\n", - "
Rotation synthesis error probability0.00e0\r\n", - "

Probability of at least one failed rotation synthesis

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Physical qubit parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Qubit namequbit_gate_ns_e3\r\n", - "

Some descriptive name for the qubit model

\n", - "
\r\n", - "
\r\n", - "

You can load pre-defined qubit parameters by using the names qubit_gate_ns_e3, qubit_gate_ns_e4, qubit_gate_us_e3, qubit_gate_us_e4, qubit_maj_ns_e4, or qubit_maj_ns_e6. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).

\n", - "\r\n", - "
Instruction setGateBased\r\n", - "

Underlying qubit technology (gate-based or Majorana)

\n", - "
\r\n", - "
\r\n", - "

When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either gate-based or Majorana. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.

\n", - "\r\n", - "
Single-qubit measurement time100 ns\r\n", - "

Operation time for single-qubit measurement (t_meas) in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.

\n", - "\r\n", - "
Single-qubit gate time50 ns\r\n", - "

Operation time for single-qubit gate (t_gate) in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.

\n", - "\r\n", - "
Two-qubit gate time50 ns\r\n", - "

Operation time for two-qubit gate in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.

\n", - "\r\n", - "
T gate time50 ns\r\n", - "

Operation time for a T gate

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to execute a T gate.

\n", - "\r\n", - "
Single-qubit measurement error rate0.001\r\n", - "

Error rate for single-qubit measurement

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a single-qubit measurement in the Pauli basis may fail.

\n", - "\r\n", - "
Single-qubit error rate0.001\r\n", - "

Error rate for single-qubit Clifford gate (p)

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.

\n", - "\r\n", - "
Two-qubit error rate0.001\r\n", - "

Error rate for two-qubit Clifford gate

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.

\n", - "\r\n", - "
T gate error rate0.001\r\n", - "

Error rate to prepare single-qubit T state or apply a T gate (p_T)

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which executing a single T gate may fail.

\n", - "\r\n", - "
\r\n", - "
\r\n", - " Assumptions\r\n", - "
    \r\n", - "
  • More details on the following lists of assumptions can be found in the paper Accessing requirements for scaling quantum computers and their applications.

    \n", - "
  • \r\n", - "
  • Uniform independent physical noise. We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.

    \n", - "
  • \r\n", - "
  • Efficient classical computation. We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.

    \n", - "
  • \r\n", - "
  • Extraction circuits for planar quantum ISA. We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).

    \n", - "
  • \r\n", - "
  • Uniform independent logical noise. We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.

    \n", - "
  • \r\n", - "
  • Negligible Clifford costs for synthesis. We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.

    \n", - "
  • \r\n", - "
  • Smooth magic state consumption rate. We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.

    \n", - "
  • \r\n", - "
\r\n" - ], - "text/plain": [ - "{'errorBudget': {'logical': 0.0005, 'rotations': 0.0, 'tstates': 0.0005},\n", - " 'jobParams': {'errorBudget': 0.001,\n", - " 'qecScheme': {'crossingPrefactor': 0.03,\n", - " 'errorCorrectionThreshold': 0.01,\n", - " 'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',\n", - " 'name': 'surface_code',\n", - " 'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance'},\n", - " 'qubitParams': {'instructionSet': 'GateBased',\n", - " 'name': 'qubit_gate_ns_e3',\n", - " 'oneQubitGateErrorRate': 0.001,\n", - " 'oneQubitGateTime': '50 ns',\n", - " 'oneQubitMeasurementErrorRate': 0.001,\n", - " 'oneQubitMeasurementTime': '100 ns',\n", - " 'tGateErrorRate': 0.001,\n", - " 'tGateTime': '50 ns',\n", - " 'twoQubitGateErrorRate': 0.001,\n", - " 'twoQubitGateTime': '50 ns'}},\n", - " 'logicalCounts': {'ccixCount': 0,\n", - " 'cczCount': 1,\n", - " 'measurementCount': 0,\n", - " 'numQubits': 4,\n", - " 'rotationCount': 0,\n", - " 'rotationDepth': 0,\n", - " 'tCount': 0},\n", - " 'logicalQubit': {'codeDistance': 9,\n", - " 'logicalCycleTime': 3600.0,\n", - " 'logicalErrorRate': 3.0000000000000015e-07,\n", - " 'physicalQubits': 162},\n", - " 'physicalCounts': {'breakdown': {'algorithmicLogicalDepth': 3,\n", - " 'algorithmicLogicalQubits': 15,\n", - " 'cliffordErrorRate': 0.001,\n", - " 'logicalDepth': 13,\n", - " 'numTfactories': 4,\n", - " 'numTfactoryRuns': 1,\n", - " 'numTsPerRotation': None,\n", - " 'numTstates': 4,\n", - " 'physicalQubitsForAlgorithm': 2430,\n", - " 'physicalQubitsForTfactories': 15680,\n", - " 'requiredLogicalQubitErrorRate': 2.564102564102564e-06,\n", - " 'requiredLogicalTstateErrorRate': 0.000125},\n", - " 'physicalQubits': 18110,\n", - " 'runtime': 46800},\n", - " 'physicalCountsFormatted': {'codeDistancePerRound': '7',\n", - " 'errorBudget': '1.00e-3',\n", - " 'errorBudgetLogical': '5.00e-4',\n", - " 'errorBudgetRotations': '0.00e0',\n", - " 'errorBudgetTstates': '5.00e-4',\n", - " 'logicalCycleTime': '3us 600ns',\n", - " 'logicalErrorRate': '3.00e-7',\n", - " 'numTsPerRotation': 'No rotations in algorithm',\n", - " 'numUnitsPerRound': '2',\n", - " 'physicalQubitsForTfactoriesPercentage': '86.58 %',\n", - " 'physicalQubitsPerRound': '3920',\n", - " 'requiredLogicalQubitErrorRate': '2.56e-6',\n", - " 'requiredLogicalTstateErrorRate': '1.25e-4',\n", - " 'runtime': '46us 800ns',\n", - " 'tfactoryRuntime': '36us 400ns',\n", - " 'tfactoryRuntimePerRound': '36us 400ns',\n", - " 'tstateLogicalErrorRate': '2.13e-5',\n", - " 'unitNamePerRound': '15-to-1 space efficient logical'},\n", - " 'reportData': {'assumptions': ['_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._',\n", - " '**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.',\n", - " '**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.',\n", - " '**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).',\n", - " '**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.',\n", - " '**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.',\n", - " '**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.'],\n", - " 'groups': [{'alwaysVisible': True,\n", - " 'entries': [{'description': 'Number of physical qubits',\n", - " 'explanation': 'This value represents the total number of physical qubits, which is the sum of 2430 physical qubits to implement the algorithm logic, and 15680 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'physicalCounts/physicalQubits'},\n", - " {'description': 'Total runtime',\n", - " 'explanation': 'This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (3us 600ns) multiplied by the 3 logical cycles to run the algorithm. If however the duration of a single T factory (here: 36us 400ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.',\n", - " 'label': 'Runtime',\n", - " 'path': 'physicalCountsFormatted/runtime'}],\n", - " 'title': 'Physical resource estimates'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of logical qubits for the algorithm after layout',\n", - " 'explanation': 'Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 4$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 15$ logical qubits.',\n", - " 'label': 'Logical algorithmic qubits',\n", - " 'path': 'physicalCounts/breakdown/algorithmicLogicalQubits'},\n", - " {'description': 'Number of logical cycles for the algorithm',\n", - " 'explanation': 'To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 0 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 1 CCZ and 0 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.',\n", - " 'label': 'Algorithmic depth',\n", - " 'path': 'physicalCounts/breakdown/algorithmicLogicalDepth'},\n", - " {'description': 'Number of logical cycles performed',\n", - " 'explanation': \"This number is usually equal to the logical depth of the algorithm, which is 3. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\n", - " 'label': 'Logical depth',\n", - " 'path': 'physicalCounts/breakdown/logicalDepth'},\n", - " {'description': 'Number of T states consumed by the algorithm',\n", - " 'explanation': 'To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 1 CCZ and 0 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.',\n", - " 'label': 'Number of T states',\n", - " 'path': 'physicalCounts/breakdown/numTstates'},\n", - " {'description': \"Number of T factories capable of producing the demanded 4 T states during the algorithm's runtime\",\n", - " 'explanation': 'The total number of T factories 4 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{4\\\\;\\\\text{T states} \\\\cdot 36us 400ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 46us 800ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$',\n", - " 'label': 'Number of T factories',\n", - " 'path': 'physicalCounts/breakdown/numTfactories'},\n", - " {'description': 'Number of times all T factories are invoked',\n", - " 'explanation': 'In order to prepare the 4 T states, the 4 copies of the T factory are repeatedly invoked 1 times.',\n", - " 'label': 'Number of T factory invocations',\n", - " 'path': 'physicalCounts/breakdown/numTfactoryRuns'},\n", - " {'description': 'Number of physical qubits for the algorithm after layout',\n", - " 'explanation': 'The 2430 are the product of the 15 logical qubits after layout and the 162 physical qubits that encode a single logical qubit.',\n", - " 'label': 'Physical algorithmic qubits',\n", - " 'path': 'physicalCounts/breakdown/physicalQubitsForAlgorithm'},\n", - " {'description': 'Number of physical qubits for the T factories',\n", - " 'explanation': 'Each T factory requires 3920 physical qubits and we run 4 in parallel, therefore we need $15680 = 3920 \\\\cdot 4$ qubits.',\n", - " 'label': 'Physical T factory qubits',\n", - " 'path': 'physicalCounts/breakdown/physicalQubitsForTfactories'},\n", - " {'description': 'The minimum logical qubit error rate required to run the algorithm within the error budget',\n", - " 'explanation': 'The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 15 logical qubits and the total cycle count 13.',\n", - " 'label': 'Required logical qubit error rate',\n", - " 'path': 'physicalCountsFormatted/requiredLogicalQubitErrorRate'},\n", - " {'description': 'The minimum T state error rate required for distilled T states',\n", - " 'explanation': 'The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 4.',\n", - " 'label': 'Required logical T state error rate',\n", - " 'path': 'physicalCountsFormatted/requiredLogicalTstateErrorRate'},\n", - " {'description': 'Number of T states to implement a rotation with an arbitrary angle',\n", - " 'explanation': 'The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.',\n", - " 'label': 'Number of T states per rotation',\n", - " 'path': 'physicalCountsFormatted/numTsPerRotation'}],\n", - " 'title': 'Resource estimates breakdown'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Name of QEC scheme',\n", - " 'explanation': 'You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.',\n", - " 'label': 'QEC scheme',\n", - " 'path': 'jobParams/qecScheme/name'},\n", - " {'description': 'Required code distance for error correction',\n", - " 'explanation': 'The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.000002564102564102564)}{\\\\log(0.01/0.001)} - 1$',\n", - " 'label': 'Code distance',\n", - " 'path': 'logicalQubit/codeDistance'},\n", - " {'description': 'Number of physical qubits per logical qubit',\n", - " 'explanation': 'The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'logicalQubit/physicalQubits'},\n", - " {'description': 'Duration of a logical cycle in nanoseconds',\n", - " 'explanation': 'The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.',\n", - " 'label': 'Logical cycle time',\n", - " 'path': 'physicalCountsFormatted/logicalCycleTime'},\n", - " {'description': 'Logical qubit error rate',\n", - " 'explanation': 'The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{9 + 1}{2}$',\n", - " 'label': 'Logical qubit error rate',\n", - " 'path': 'physicalCountsFormatted/logicalErrorRate'},\n", - " {'description': 'Crossing prefactor used in QEC scheme',\n", - " 'explanation': 'The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.',\n", - " 'label': 'Crossing prefactor',\n", - " 'path': 'jobParams/qecScheme/crossingPrefactor'},\n", - " {'description': 'Error correction threshold used in QEC scheme',\n", - " 'explanation': 'The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.',\n", - " 'label': 'Error correction threshold',\n", - " 'path': 'jobParams/qecScheme/errorCorrectionThreshold'},\n", - " {'description': 'QEC scheme formula used to compute logical cycle time',\n", - " 'explanation': 'This is the formula that is used to compute the logical cycle time 3us 600ns.',\n", - " 'label': 'Logical cycle time formula',\n", - " 'path': 'jobParams/qecScheme/logicalCycleTime'},\n", - " {'description': 'QEC scheme formula used to compute number of physical qubits per logical qubit',\n", - " 'explanation': 'This is the formula that is used to compute the number of physical qubits per logical qubits 162.',\n", - " 'label': 'Physical qubits formula',\n", - " 'path': 'jobParams/qecScheme/physicalQubitsPerLogicalQubit'}],\n", - " 'title': 'Logical qubit parameters'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of physical qubits for a single T factory',\n", - " 'explanation': 'This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'tfactory/physicalQubits'},\n", - " {'description': 'Runtime of a single T factory',\n", - " 'explanation': 'The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.',\n", - " 'label': 'Runtime',\n", - " 'path': 'physicalCountsFormatted/tfactoryRuntime'},\n", - " {'description': 'Number of output T states produced in a single run of T factory',\n", - " 'explanation': 'The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.13e-5.',\n", - " 'label': 'Number of output T states per run',\n", - " 'path': 'tfactory/numTstates'},\n", - " {'description': 'Number of physical input T states consumed in a single run of a T factory',\n", - " 'explanation': 'This value includes the physical input T states of all copies of the distillation unit in the first round.',\n", - " 'label': 'Number of input T states per run',\n", - " 'path': 'tfactory/numInputTstates'},\n", - " {'description': 'The number of distillation rounds',\n", - " 'explanation': 'This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.',\n", - " 'label': 'Distillation rounds',\n", - " 'path': 'tfactory/numRounds'},\n", - " {'description': 'The number of units in each round of distillation',\n", - " 'explanation': 'This is the number of copies for the distillation units per round.',\n", - " 'label': 'Distillation units per round',\n", - " 'path': 'physicalCountsFormatted/numUnitsPerRound'},\n", - " {'description': 'The types of distillation units',\n", - " 'explanation': 'These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.',\n", - " 'label': 'Distillation units',\n", - " 'path': 'physicalCountsFormatted/unitNamePerRound'},\n", - " {'description': 'The code distance in each round of distillation',\n", - " 'explanation': 'This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.',\n", - " 'label': 'Distillation code distances',\n", - " 'path': 'physicalCountsFormatted/codeDistancePerRound'},\n", - " {'description': 'The number of physical qubits used in each round of distillation',\n", - " 'explanation': 'The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.',\n", - " 'label': 'Number of physical qubits per round',\n", - " 'path': 'physicalCountsFormatted/physicalQubitsPerRound'},\n", - " {'description': 'The runtime of each distillation round',\n", - " 'explanation': 'The runtime of the T factory is the sum of the runtimes in all rounds.',\n", - " 'label': 'Runtime per round',\n", - " 'path': 'physicalCountsFormatted/tfactoryRuntimePerRound'},\n", - " {'description': 'Logical T state error rate',\n", - " 'explanation': 'This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 1.25e-4.',\n", - " 'label': 'Logical T state error rate',\n", - " 'path': 'physicalCountsFormatted/tstateLogicalErrorRate'}],\n", - " 'title': 'T factory parameters'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of logical qubits in the input quantum program',\n", - " 'explanation': 'We determine 15 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.',\n", - " 'label': 'Logical qubits (pre-layout)',\n", - " 'path': 'logicalCounts/numQubits'},\n", - " {'description': 'Number of T gates in the input quantum program',\n", - " 'explanation': 'This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.',\n", - " 'label': 'T gates',\n", - " 'path': 'logicalCounts/tCount'},\n", - " {'description': 'Number of rotation gates in the input quantum program',\n", - " 'explanation': 'This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.',\n", - " 'label': 'Rotation gates',\n", - " 'path': 'logicalCounts/rotationCount'},\n", - " {'description': 'Depth of rotation gates in the input quantum program',\n", - " 'explanation': 'This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.',\n", - " 'label': 'Rotation depth',\n", - " 'path': 'logicalCounts/rotationDepth'},\n", - " {'description': 'Number of CCZ-gates in the input quantum program',\n", - " 'explanation': 'This is the number of CCZ gates.',\n", - " 'label': 'CCZ gates',\n", - " 'path': 'logicalCounts/cczCount'},\n", - " {'description': 'Number of CCiX-gates in the input quantum program',\n", - " 'explanation': 'This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].',\n", - " 'label': 'CCiX gates',\n", - " 'path': 'logicalCounts/ccixCount'},\n", - " {'description': 'Number of single qubit measurements in the input quantum program',\n", - " 'explanation': 'This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.',\n", - " 'label': 'Measurement operations',\n", - " 'path': 'logicalCounts/measurementCount'}],\n", - " 'title': 'Pre-layout logical resources'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Total error budget for the algorithm',\n", - " 'explanation': \"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\n", - " 'label': 'Total error budget',\n", - " 'path': 'physicalCountsFormatted/errorBudget'},\n", - " {'description': 'Probability of at least one logical error',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", - " 'label': 'Logical error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetLogical'},\n", - " {'description': 'Probability of at least one faulty T distillation',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", - " 'label': 'T distillation error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetTstates'},\n", - " {'description': 'Probability of at least one failed rotation synthesis',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3.',\n", - " 'label': 'Rotation synthesis error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetRotations'}],\n", - " 'title': 'Assumed error budget'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Some descriptive name for the qubit model',\n", - " 'explanation': 'You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).',\n", - " 'label': 'Qubit name',\n", - " 'path': 'jobParams/qubitParams/name'},\n", - " {'description': 'Underlying qubit technology (gate-based or Majorana)',\n", - " 'explanation': 'When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.',\n", - " 'label': 'Instruction set',\n", - " 'path': 'jobParams/qubitParams/instructionSet'},\n", - " {'description': 'Operation time for single-qubit measurement (t_meas) in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.',\n", - " 'label': 'Single-qubit measurement time',\n", - " 'path': 'jobParams/qubitParams/oneQubitMeasurementTime'},\n", - " {'description': 'Operation time for single-qubit gate (t_gate) in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.',\n", - " 'label': 'Single-qubit gate time',\n", - " 'path': 'jobParams/qubitParams/oneQubitGateTime'},\n", - " {'description': 'Operation time for two-qubit gate in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.',\n", - " 'label': 'Two-qubit gate time',\n", - " 'path': 'jobParams/qubitParams/twoQubitGateTime'},\n", - " {'description': 'Operation time for a T gate',\n", - " 'explanation': 'This is the operation time in nanoseconds to execute a T gate.',\n", - " 'label': 'T gate time',\n", - " 'path': 'jobParams/qubitParams/tGateTime'},\n", - " {'description': 'Error rate for single-qubit measurement',\n", - " 'explanation': 'This is the probability in which a single-qubit measurement in the Pauli basis may fail.',\n", - " 'label': 'Single-qubit measurement error rate',\n", - " 'path': 'jobParams/qubitParams/oneQubitMeasurementErrorRate'},\n", - " {'description': 'Error rate for single-qubit Clifford gate (p)',\n", - " 'explanation': 'This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.',\n", - " 'label': 'Single-qubit error rate',\n", - " 'path': 'jobParams/qubitParams/oneQubitGateErrorRate'},\n", - " {'description': 'Error rate for two-qubit Clifford gate',\n", - " 'explanation': 'This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.',\n", - " 'label': 'Two-qubit error rate',\n", - " 'path': 'jobParams/qubitParams/twoQubitGateErrorRate'},\n", - " {'description': 'Error rate to prepare single-qubit T state or apply a T gate (p_T)',\n", - " 'explanation': 'This is the probability in which executing a single T gate may fail.',\n", - " 'label': 'T gate error rate',\n", - " 'path': 'jobParams/qubitParams/tGateErrorRate'}],\n", - " 'title': 'Physical qubit parameters'}]},\n", - " 'status': 'success',\n", - " 'tfactory': {'codeDistancePerRound': [7],\n", - " 'logicalErrorRate': 2.133500000000001e-05,\n", - " 'numInputTstates': 30,\n", - " 'numRounds': 1,\n", - " 'numTstates': 1,\n", - " 'numUnitsPerRound': [2],\n", - " 'physicalQubits': 3920,\n", - " 'physicalQubitsPerRound': [3920],\n", - " 'runtime': 36400.0,\n", - " 'runtimePerRound': [36400.0],\n", - " 'unitNamePerRound': ['15-to-1 space efficient logical']}}" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", "# result = qsharp.azure.output(\"...\")\n", @@ -1978,7 +357,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -2004,7 +383,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -2016,27 +395,7 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logical algorithmic qubits = 15\n", - "Algorithmic depth = 3\n", - "Score = 45\n" - ] - }, - { - "data": { - "text/plain": [ - "45" - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "evaluate_results(result)" ] From 5bca39e50e54b81f7bce1a4b2922d8666efbf010 Mon Sep 17 00:00:00 2001 From: Michael Papadopoulos Date: Sat, 28 Jan 2023 15:19:23 -0500 Subject: [PATCH 04/13] Task 2 Improvement --- iQuHack-challenge-2023-task2.ipynb | 28 ++++++---------------------- obj/__entrypoint__.dll | Bin 216576 -> 321536 bytes obj/__entrypoint__snippets__.dll | Bin 54784 -> 74240 bytes obj/__snippets__.dll | Bin 54272 -> 73728 bytes 4 files changed, 6 insertions(+), 22 deletions(-) diff --git a/iQuHack-challenge-2023-task2.ipynb b/iQuHack-challenge-2023-task2.ipynb index 44cc5cd..5bdc2a8 100644 --- a/iQuHack-challenge-2023-task2.ipynb +++ b/iQuHack-challenge-2023-task2.ipynb @@ -36,7 +36,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -69,7 +68,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -91,7 +89,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -104,16 +101,15 @@ }, "outputs": [], "source": [ - "teamname=\"msft_is_the_best\" # Update this field with your team name\n", + "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", "task=[\"task2\"]\n", - "slack_id=\"myslackid\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -150,7 +146,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -174,10 +169,7 @@ "// (input will contain 5 qubits)\n", "operation Task2(input : Qubit[], target : Qubit) : Unit is Adj {\n", " ControlledOnInt(13, X)(input, target); // M\n", - " ControlledOnInt( 9, X)(input, target); // I\n", " ControlledOnInt(20, X)(input, target); // T\n", - "\n", - " ControlledOnInt( 9, X)(input, target); // I\n", " ControlledOnInt(17, X)(input, target); // Q\n", " ControlledOnInt(21, X)(input, target); // U\n", " ControlledOnInt( 8, X)(input, target); // H\n", @@ -191,7 +183,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -248,7 +239,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -286,7 +276,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -302,8 +291,8 @@ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", "qsharp.azure.connect(\n", - " resourceId=\"...\",\n", - " location=\"...\",\n", + " resourceId=\"/subscriptions/6d61051a-6e40-4845-a03a-3c5160bb5629/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/iQuHack-Workspace-micpap25\",\n", + " location=\"East US\",\n", " credential=\"CLI\")" ] }, @@ -311,7 +300,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -331,7 +319,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -352,7 +339,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -374,7 +360,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -401,7 +386,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -423,7 +407,7 @@ "name": "python3" }, "kernelspec": { - "display_name": "Python 3 [Default]", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -437,7 +421,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.10" + "version": "3.10.9" }, "nteract": { "version": "nteract-front-end@1.0.0" diff --git a/obj/__entrypoint__.dll b/obj/__entrypoint__.dll index 0a8590933de774890a8c2804c93d809e44e4dd38..fd4a54b3a7daf5e98a6fc4b0dcc77f02a0bf57ee 100644 GIT binary patch literal 321536 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 D;h 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 delta 23884 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 SYmVM0N1gD0>i!H((f=DgMnKyD diff --git a/obj/__entrypoint__snippets__.dll b/obj/__entrypoint__snippets__.dll index 7a5d06461311e1b213c5570f37fd1ccfe299f2a2..be36c9e910bece75825abcde7d75d0fcc96f23d1 100644 GIT binary patch literal 74240 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 delta 8401 zcmeHNYgAm-72fCGxsREFnPCQo8J-sg$PfZycqAmI5fY-1ga`sgSI{uL!YD92>oT?s zX;PyrjS44mtgRYf%WBo?nrfDJ)&brx zbTA#|Scj9kX8}g7V$=AnD378kLkou?%7Qsak__gA)I@B@f|La>mWiy4W6=qLXHKs766wc*t;* ze2yx^A&#kXmTHBdit)ik@;=D~mvc;1nS2(PgRoDM;dR)inBXpyO^{|}_*aqPDuK0r zEHR(&N?C|S=+gudZdrwvGCTv@LfH9UZh9+>WAj(J({|_-OzPqjmpGS2p8 z_!vU$hwwie90G;NbL@FVAr>qj8)|Iu9%m+4gj=@_1~7ppNQ7nB_Li_)An=i}AF)up z5z!*vf_Srd2ja6_9}(_C+0QlW#2=!pTZXtPYi`t7C|9@?wGEwa;p{ErC5ELqV293L z<}AS3E_F3IEC?{9vwHF>vh6x+A-@nr_?phz$T4JlID1kRgue;~_$FteCsiw_cSalG zx0nF~ysfjxiA^-XuXOey$q^-(u^N7#Y?KD>Z#e zX1Id0=#&y*ZumEU;_}695g?jG7brSoIdp-AvuF-o;M5t*p$oEg#&YO}MLHWMp*EzYI%T;? zgDRb|T%JY#`8w%ZtEk@;si6>yU3K4DK<5+{30s#o)M)Dau|XS zF#!oEw?Q7_7<>dC;c_q%uVDhd30C7(umttfC_ke-jq(%lN5l`|&rksuDI!?~N(h^4 zq0E>=Ho{H9QqqDQ){{1_=>p9-MDBw3#qFez%NcyIQ9js@DG4Iyk`LYSPxPD{;I^KGZyoFrV5MP31USI4fxLrqJNW~mEPRaU;JDC+k|YDb zmx&WGNl8as$?Xe>hVoj8X&xZuh$XVHhBYr3U}5KIhp5edwZRZ6NH&mA1aHJfVkcg* zhBT2bGES}`ebNh=9b>{qek;cZt~uSfFeXLGLfsHW=rHm+-dwVTdq zf%9Qo_vlt;?Ay8(Mi$6SU#IKXFXOC>u3}=ODz$;6^M>HS=y0&Fue%GH&I<;*U=?>s zCtZaGW{E;F{ekQC$WPq6MV0knVbKdR`_g<{YsdNr8~mNUfr0ML!~Vg+?qMFiFY;z) z6`^CehUS8?eww>(S{D^ z^-7l#xN3;Lnb$~sk<$EUh_tSMaP+cB&X=Zzyvp((|MJeB?&6+qUuAJcRaJL!mA|Y4 zrOKX)j*1?CMP&uO#6vS@Bks~Xa!TEvLhH?CTM$23 zkr#QT?5l>n(vI?;s*dH$iaRUHI*Kcnt>`JP>gXviURF`s>96WszM{LV4C8c1CYN^# zykm9TedzGYA?b$%u6Qt-B>HA%8ohB%5{~@vamk81h^*=^7DUufar}W~Ra>cZ?Zl!u zvRg7V0+iHd#CHY%wpNQTikez&MLg4F!{dRkx9|xbO#b!N^oH6Btg#nrZx`YlEqwMq zOw*FOf_TjXlcg%1?nszwF@!BPQc3sR-VwRFKE;S`e7&n8Gv{8KAovKaK9V`L?)OHv zsq@TzC9yy;aN@+U)p9nJ(1FmD@hgZX8>h*u3gzSG7!LhaCB=tOD8hh z`E5cJ`dD`}ee|Pj1@DM#Z>RpvnY6lBqci7vX;(uAwe^kSlxRX-0v)VZ@q5Mt&1eQA!Df*p^fB%TxmHhyCIcce_6}_(u7Gez4nHoe{FX74FsQ_08ZNk=dO^61@~XS zcrP@~U%cw@;})_6tHy;_@f})xr5X)yGRHyhzvL**{*gMbWW~zLu6H@rE>ce@Tcd>) z3LXwV$qPqq^u8vQRySv{LW(sykFU{0{0z+x{5E*fI;C&!Q1RQJUgYBrpIE`9fWFW=6hOPn>66W3%G8Wzys zziZQ1UmdmWPsc67NgIEfyJcXOUXV%WCUzk&vES3|!c4u82<$fCDi>Gk@)u6<9e&{*Ao9th)r21p2CV< zuszMJ;m@ahC?)z2|Gb5^b}8xL+F^)GiH-_G%-6{=vR(ts^k1_51NrcC61o z8VC-AuQn4mDGz_gOqNDpT_SJSCX&y4gpTJuA-va00%4n#6mh5N;muZJkLzil^?XQw zz8?~%@X7eu?mBwyxsJI<{WHXaA2`Wkp(CC^^cR*d@C?s-PQB|s=tv`XlJHSCDI{*{ z-g(N{_G-|j$i5=R)N_01{HX82|tP diff --git a/obj/__snippets__.dll b/obj/__snippets__.dll index 6dc3b9d08eff4a8060f46b1a76fe51d08b4e5866..d02be8c9d9d75f0ecb5d7c8747555574c9c9d5db 100644 GIT binary patch literal 73728 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 Date: Sat, 28 Jan 2023 15:59:54 -0500 Subject: [PATCH 05/13] TASK 2 REALLY GOOD --- iQuHack-challenge-2023-task2.ipynb | 2996 +++++++++++++++++++++++++++- obj/__entrypoint__.dll | Bin 321536 -> 322048 bytes obj/__entrypoint__snippets__.dll | Bin 74240 -> 86528 bytes obj/__snippets__.dll | Bin 73728 -> 86528 bytes 4 files changed, 2970 insertions(+), 26 deletions(-) diff --git a/iQuHack-challenge-2023-task2.ipynb b/iQuHack-challenge-2023-task2.ipynb index 5bdc2a8..78fbcd2 100644 --- a/iQuHack-challenge-2023-task2.ipynb +++ b/iQuHack-challenge-2023-task2.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "jupyter": { "outputs_hidden": false, @@ -46,7 +46,47 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + " {\n", + " \"cloudName\": \"AzureCloud\",\n", + " \"homeTenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", + " \"id\": \"6d61051a-6e40-4845-a03a-3c5160bb5629\",\n", + " \"isDefault\": true,\n", + " \"managedByTenants\": [\n", + " {\n", + " \"tenantId\": \"d0ecd01b-d782-448e-bae0-c3cad0e0543a\"\n", + " },\n", + " {\n", + " \"tenantId\": \"94c4857e-1130-4ab8-8eac-069b40c9db20\"\n", + " },\n", + " {\n", + " \"tenantId\": \"f702a9dc-ae48-4dc7-8f0a-8155a6dfa4e5\"\n", + " }\n", + " ],\n", + " \"name\": \"Azure for Students\",\n", + " \"state\": \"Enabled\",\n", + " \"tenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", + " \"user\": {\n", + " \"name\": \"papadm2@rpi.edu\",\n", + " \"type\": \"user\"\n", + " }\n", + " }\n", + "]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.\n" + ] + } + ], "source": [ "!az login" ] @@ -66,7 +106,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "jupyter": { "outputs_hidden": false, @@ -87,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "jupyter": { "outputs_hidden": false, @@ -108,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "jupyter": { "outputs_hidden": false, @@ -144,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "jupyter": { "outputs_hidden": false, @@ -168,20 +208,48 @@ "// Task 2. Celebrate MIT iQuHack!\n", "// (input will contain 5 qubits)\n", "operation Task2(input : Qubit[], target : Qubit) : Unit is Adj {\n", + " // Necessary\n", + " \n", " ControlledOnInt(13, X)(input, target); // M\n", - " ControlledOnInt(20, X)(input, target); // T\n", - " ControlledOnInt(17, X)(input, target); // Q\n", - " ControlledOnInt(21, X)(input, target); // U\n", " ControlledOnInt( 8, X)(input, target); // H\n", - " ControlledOnInt( 1, X)(input, target); // A\n", - " ControlledOnInt( 3, X)(input, target); // C\n", - " ControlledOnInt(11, X)(input, target); // K\n", + " \n", + " // Can be simplified (pairs)\n", + " \n", + " //ControlledOnInt(20, X)(input, target); // T\n", + " //ControlledOnInt(21, X)(input, target); // U\n", + " \n", + " X(input[1]);\n", + " X(input[3]);\n", + " Controlled X([input[1], input[2], input[3], input[4]], target);\n", + " X(input[1]);\n", + " X(input[3]);\n", + " \n", + " \n", + " //ControlledOnInt(17, X)(input, target); // Q\n", + " //ControlledOnInt( 1, X)(input, target); // A\n", + " \n", + " X(input[1]);\n", + " X(input[2]);\n", + " X(input[3]);\n", + " Controlled X([input[0], input[1], input[2], input[3]], target);\n", + " X(input[1]);\n", + " X(input[2]);\n", + " X(input[3]);\n", + " \n", + " //ControlledOnInt( 3, X)(input, target); // C\n", + " //ControlledOnInt(11, X)(input, target); // K\n", + " \n", + " X(input[2]);\n", + " X(input[4]);\n", + " Controlled X([input[0], input[1], input[2], input[4]], target);\n", + " X(input[2]);\n", + " X(input[4]);\n", "}" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "jupyter": { "outputs_hidden": false, @@ -237,7 +305,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "jupyter": { "outputs_hidden": false, @@ -249,7 +317,1710 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "{\"diagnostic_kind\":\"state-vector\",\"qubit_ids\":[0,1,2,3,4,5],\"n_qubits\":6,\"amplitudes\":{\"0\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"1\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"2\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"3\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"4\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"5\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"6\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"7\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"8\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"9\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"10\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"11\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"12\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"13\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"14\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"15\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"16\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"17\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"18\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"19\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"20\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"21\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"22\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"23\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"24\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"25\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"26\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"27\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"28\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"29\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"30\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"31\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"32\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"33\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"34\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"35\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"36\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"37\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"38\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"39\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"40\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"41\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"42\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"43\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"44\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"45\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"46\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"47\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"48\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"49\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"50\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"51\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"52\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"53\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"54\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"55\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"56\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"57\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"58\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"59\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"60\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"61\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"62\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"63\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0}}}", + "text/html": [ + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Qubit IDs0, 1, 2, 3, 4, 5
Basis state (bitstring)AmplitudeMeas. Pr.
$\\left|000000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|000001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|000010\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|000011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|000100\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|000101\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|000110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|000111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|001000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|001001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|001010\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|001011\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|001100\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|001101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|001110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|001111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|010000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|010001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|010010\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|010011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|010100\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|010101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|010110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|010111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|011000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|011001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|011010\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|011011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|011100\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|011101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|011110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|011111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|100000\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|100001\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|100010\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|100011\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|100100\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|100101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|100110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|100111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|101000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|101001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|101010\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|101011\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|101100\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|101101\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|101110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|101111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|110000\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|110001\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|110010\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|110011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|110100\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|110101\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|110110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|110111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|111000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|111001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|111010\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|111011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|111100\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|111101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|111110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|111111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
" + ], + "text/plain": [ + "|000000⟩\t0.17677669529663698 + 0𝑖\n", + "|000001⟩\t0 + 0𝑖\n", + "|000010⟩\t0.17677669529663698 + 0𝑖\n", + "|000011⟩\t0 + 0𝑖\n", + "|000100⟩\t0 + 0𝑖\n", + "|000101⟩\t0.17677669529663698 + 0𝑖\n", + "|000110⟩\t0.17677669529663698 + 0𝑖\n", + "|000111⟩\t0 + 0𝑖\n", + "|001000⟩\t0.17677669529663698 + 0𝑖\n", + "|001001⟩\t0 + 0𝑖\n", + "|001010⟩\t0 + 0𝑖\n", + "|001011⟩\t0.17677669529663698 + 0𝑖\n", + "|001100⟩\t0.17677669529663698 + 0𝑖\n", + "|001101⟩\t0 + 0𝑖\n", + "|001110⟩\t0.17677669529663698 + 0𝑖\n", + "|001111⟩\t0 + 0𝑖\n", + "|010000⟩\t0.17677669529663698 + 0𝑖\n", + "|010001⟩\t0 + 0𝑖\n", + "|010010⟩\t0.17677669529663698 + 0𝑖\n", + "|010011⟩\t0 + 0𝑖\n", + "|010100⟩\t0.17677669529663698 + 0𝑖\n", + "|010101⟩\t0 + 0𝑖\n", + "|010110⟩\t0.17677669529663698 + 0𝑖\n", + "|010111⟩\t0 + 0𝑖\n", + "|011000⟩\t0.17677669529663698 + 0𝑖\n", + "|011001⟩\t0 + 0𝑖\n", + "|011010⟩\t0.17677669529663698 + 0𝑖\n", + "|011011⟩\t0 + 0𝑖\n", + "|011100⟩\t0.17677669529663698 + 0𝑖\n", + "|011101⟩\t0 + 0𝑖\n", + "|011110⟩\t0.17677669529663698 + 0𝑖\n", + "|011111⟩\t0 + 0𝑖\n", + "|100000⟩\t0 + 0𝑖\n", + "|100001⟩\t0.17677669529663698 + 0𝑖\n", + "|100010⟩\t0 + 0𝑖\n", + "|100011⟩\t0.17677669529663698 + 0𝑖\n", + "|100100⟩\t0.17677669529663698 + 0𝑖\n", + "|100101⟩\t0 + 0𝑖\n", + "|100110⟩\t0.17677669529663698 + 0𝑖\n", + "|100111⟩\t0 + 0𝑖\n", + "|101000⟩\t0.17677669529663698 + 0𝑖\n", + "|101001⟩\t0 + 0𝑖\n", + "|101010⟩\t0 + 0𝑖\n", + "|101011⟩\t0.17677669529663698 + 0𝑖\n", + "|101100⟩\t0 + 0𝑖\n", + "|101101⟩\t0.17677669529663698 + 0𝑖\n", + "|101110⟩\t0.17677669529663698 + 0𝑖\n", + "|101111⟩\t0 + 0𝑖\n", + "|110000⟩\t0 + 0𝑖\n", + "|110001⟩\t0.17677669529663698 + 0𝑖\n", + "|110010⟩\t0.17677669529663698 + 0𝑖\n", + "|110011⟩\t0 + 0𝑖\n", + "|110100⟩\t0 + 0𝑖\n", + "|110101⟩\t0.17677669529663698 + 0𝑖\n", + "|110110⟩\t0.17677669529663698 + 0𝑖\n", + "|110111⟩\t0 + 0𝑖\n", + "|111000⟩\t0.17677669529663698 + 0𝑖\n", + "|111001⟩\t0 + 0𝑖\n", + "|111010⟩\t0.17677669529663698 + 0𝑖\n", + "|111011⟩\t0 + 0𝑖\n", + "|111100⟩\t0.17677669529663698 + 0𝑖\n", + "|111101⟩\t0 + 0𝑖\n", + "|111110⟩\t0.17677669529663698 + 0𝑖\n", + "|111111⟩\t0 + 0𝑖" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "()" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", @@ -274,7 +2045,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "jupyter": { "outputs_hidden": false, @@ -286,7 +2057,56 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "\"Connecting to Azure Quantum...\"", + "text/plain": [ + "Connecting to Azure Quantum..." + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Connected to Azure Quantum workspace iQuHack-Workspace-micpap25 in location eastus.\r\n" + ] + }, + { + "data": { + "text/plain": [ + "[{'id': 'ionq.qpu', 'current_availability': {}, 'average_queue_time': 270512},\n", + " {'id': 'ionq.qpu.aria-1', 'current_availability': {}, 'average_queue_time': 403929},\n", + " {'id': 'ionq.simulator', 'current_availability': {}, 'average_queue_time': 2},\n", + " {'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s1', 'current_availability': {}, 'average_queue_time': 257411},\n", + " {'id': 'quantinuum.hqs-lt-s1-apival', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s2', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s2-apival', 'current_availability': {}, 'average_queue_time': 1},\n", + " {'id': 'quantinuum.hqs-lt-s1-sim', 'current_availability': {}, 'average_queue_time': 4298},\n", + " {'id': 'quantinuum.hqs-lt-s2-sim', 'current_availability': {}, 'average_queue_time': 138},\n", + " {'id': 'quantinuum.hqs-lt', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.qpu.h1-1', 'current_availability': {}, 'average_queue_time': 257411},\n", + " {'id': 'quantinuum.sim.h1-1sc', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.qpu.h1-2', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.sim.h1-2sc', 'current_availability': {}, 'average_queue_time': 1},\n", + " {'id': 'quantinuum.sim.h1-1e', 'current_availability': {}, 'average_queue_time': 4298},\n", + " {'id': 'quantinuum.sim.h1-2e', 'current_availability': {}, 'average_queue_time': 138},\n", + " {'id': 'quantinuum.qpu.h1', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'rigetti.sim.qvm', 'current_availability': {}, 'average_queue_time': 5},\n", + " {'id': 'rigetti.qpu.aspen-11', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'rigetti.qpu.aspen-m-2', 'current_availability': {}, 'average_queue_time': 5},\n", + " {'id': 'rigetti.qpu.aspen-m-3', 'current_availability': {}, 'average_queue_time': 5}]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", @@ -298,7 +2118,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "jupyter": { "outputs_hidden": false, @@ -310,14 +2130,33 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading package Microsoft.Quantum.Providers.Core and dependencies...\n", + "Active target is now microsoft.estimator\n" + ] + }, + { + "data": { + "text/plain": [ + "{'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "qsharp.azure.target(\"microsoft.estimator\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "jupyter": { "outputs_hidden": false, @@ -329,7 +2168,21 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Submitting Task2_ResourceEstimationWrapper to target microsoft.estimator...\n", + "Job successfully submitted.\n", + " Job name: RE for the task 2\n", + " Job ID: fca65cf0-cdf4-4d26-bf0c-bd7a85c5ed0c\n", + "Waiting up to 30 seconds for Azure Quantum job to complete...\n", + "[3:58:05 PM] Current job status: Executing\n", + "[3:58:10 PM] Current job status: Succeeded\n" + ] + } + ], "source": [ "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", "result = qsharp.azure.execute(Task2_ResourceEstimationWrapper, jobName=\"RE for the task 2\")" @@ -337,7 +2190,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": { "jupyter": { "outputs_hidden": false, @@ -349,7 +2202,1051 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "{\"errorBudget\":{\"logical\":0.0005,\"rotations\":0.0,\"tstates\":0.0005},\"jobParams\":{\"errorBudget\":0.001,\"qecScheme\":{\"crossingPrefactor\":0.03,\"errorCorrectionThreshold\":0.01,\"logicalCycleTime\":\"(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\",\"name\":\"surface_code\",\"physicalQubitsPerLogicalQubit\":\"2 * codeDistance * codeDistance\"},\"qubitParams\":{\"instructionSet\":\"GateBased\",\"name\":\"qubit_gate_ns_e3\",\"oneQubitGateErrorRate\":0.001,\"oneQubitGateTime\":\"50 ns\",\"oneQubitMeasurementErrorRate\":0.001,\"oneQubitMeasurementTime\":\"100 ns\",\"tGateErrorRate\":0.001,\"tGateTime\":\"50 ns\",\"twoQubitGateErrorRate\":0.001,\"twoQubitGateTime\":\"50 ns\"}},\"logicalCounts\":{\"ccixCount\":12,\"cczCount\":5,\"measurementCount\":12,\"numQubits\":9,\"rotationCount\":0,\"rotationDepth\":0,\"tCount\":0},\"logicalQubit\":{\"codeDistance\":11,\"logicalCycleTime\":4400.0,\"logicalErrorRate\":3.000000000000002E-08,\"physicalQubits\":242},\"physicalCounts\":{\"breakdown\":{\"algorithmicLogicalDepth\":63,\"algorithmicLogicalQubits\":28,\"cliffordErrorRate\":0.001,\"logicalDepth\":63,\"numTfactories\":12,\"numTfactoryRuns\":6,\"numTsPerRotation\":null,\"numTstates\":68,\"physicalQubitsForAlgorithm\":6776,\"physicalQubitsForTfactories\":77760,\"requiredLogicalQubitErrorRate\":2.834467120181406E-07,\"requiredLogicalTstateErrorRate\":7.3529411764705884E-06},\"physicalQubits\":84536,\"runtime\":277200},\"physicalCountsFormatted\":{\"codeDistancePerRound\":\"9\",\"errorBudget\":\"1.00e-3\",\"errorBudgetLogical\":\"5.00e-4\",\"errorBudgetRotations\":\"0.00e0\",\"errorBudgetTstates\":\"5.00e-4\",\"logicalCycleTime\":\"4us 400ns\",\"logicalErrorRate\":\"3.00e-8\",\"numTsPerRotation\":\"No rotations in algorithm\",\"numUnitsPerRound\":\"2\",\"physicalQubitsForTfactoriesPercentage\":\"91.98 %\",\"physicalQubitsPerRound\":\"6480\",\"requiredLogicalQubitErrorRate\":\"2.83e-7\",\"requiredLogicalTstateErrorRate\":\"7.35e-6\",\"runtime\":\"277us 200ns\",\"tfactoryRuntime\":\"46us 800ns\",\"tfactoryRuntimePerRound\":\"46us 800ns\",\"tstateLogicalErrorRate\":\"2.17e-6\",\"unitNamePerRound\":\"15-to-1 space efficient logical\"},\"reportData\":{\"assumptions\":[\"_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._\",\"**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.\",\"**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.\",\"**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).\",\"**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.\",\"**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.\",\"**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.\"],\"groups\":[{\"alwaysVisible\":true,\"entries\":[{\"description\":\"Number of physical qubits\",\"explanation\":\"This value represents the total number of physical qubits, which is the sum of 6776 physical qubits to implement the algorithm logic, and 77760 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.\",\"label\":\"Physical qubits\",\"path\":\"physicalCounts/physicalQubits\"},{\"description\":\"Total runtime\",\"explanation\":\"This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (4us 400ns) multiplied by the 63 logical cycles to run the algorithm. If however the duration of a single T factory (here: 46us 800ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/runtime\"}],\"title\":\"Physical resource estimates\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits for the algorithm after layout\",\"explanation\":\"Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 9$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 28$ logical qubits.\",\"label\":\"Logical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalQubits\"},{\"description\":\"Number of logical cycles for the algorithm\",\"explanation\":\"To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 12 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 5 CCZ and 12 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.\",\"label\":\"Algorithmic depth\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalDepth\"},{\"description\":\"Number of logical cycles performed\",\"explanation\":\"This number is usually equal to the logical depth of the algorithm, which is 63. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\"label\":\"Logical depth\",\"path\":\"physicalCounts/breakdown/logicalDepth\"},{\"description\":\"Number of T states consumed by the algorithm\",\"explanation\":\"To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 5 CCZ and 12 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.\",\"label\":\"Number of T states\",\"path\":\"physicalCounts/breakdown/numTstates\"},{\"description\":\"Number of T factories capable of producing the demanded 68 T states during the algorithm's runtime\",\"explanation\":\"The total number of T factories 12 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{68\\\\;\\\\text{T states} \\\\cdot 46us 800ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 277us 200ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$\",\"label\":\"Number of T factories\",\"path\":\"physicalCounts/breakdown/numTfactories\"},{\"description\":\"Number of times all T factories are invoked\",\"explanation\":\"In order to prepare the 68 T states, the 12 copies of the T factory are repeatedly invoked 6 times.\",\"label\":\"Number of T factory invocations\",\"path\":\"physicalCounts/breakdown/numTfactoryRuns\"},{\"description\":\"Number of physical qubits for the algorithm after layout\",\"explanation\":\"The 6776 are the product of the 28 logical qubits after layout and the 242 physical qubits that encode a single logical qubit.\",\"label\":\"Physical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForAlgorithm\"},{\"description\":\"Number of physical qubits for the T factories\",\"explanation\":\"Each T factory requires 6480 physical qubits and we run 12 in parallel, therefore we need $77760 = 6480 \\\\cdot 12$ qubits.\",\"label\":\"Physical T factory qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForTfactories\"},{\"description\":\"The minimum logical qubit error rate required to run the algorithm within the error budget\",\"explanation\":\"The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 28 logical qubits and the total cycle count 63.\",\"label\":\"Required logical qubit error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalQubitErrorRate\"},{\"description\":\"The minimum T state error rate required for distilled T states\",\"explanation\":\"The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 68.\",\"label\":\"Required logical T state error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalTstateErrorRate\"},{\"description\":\"Number of T states to implement a rotation with an arbitrary angle\",\"explanation\":\"The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.\",\"label\":\"Number of T states per rotation\",\"path\":\"physicalCountsFormatted/numTsPerRotation\"}],\"title\":\"Resource estimates breakdown\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Name of QEC scheme\",\"explanation\":\"You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.\",\"label\":\"QEC scheme\",\"path\":\"jobParams/qecScheme/name\"},{\"description\":\"Required code distance for error correction\",\"explanation\":\"The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.0000002834467120181406)}{\\\\log(0.01/0.001)} - 1$\",\"label\":\"Code distance\",\"path\":\"logicalQubit/codeDistance\"},{\"description\":\"Number of physical qubits per logical qubit\",\"explanation\":\"The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.\",\"label\":\"Physical qubits\",\"path\":\"logicalQubit/physicalQubits\"},{\"description\":\"Duration of a logical cycle in nanoseconds\",\"explanation\":\"The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.\",\"label\":\"Logical cycle time\",\"path\":\"physicalCountsFormatted/logicalCycleTime\"},{\"description\":\"Logical qubit error rate\",\"explanation\":\"The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{11 + 1}{2}$\",\"label\":\"Logical qubit error rate\",\"path\":\"physicalCountsFormatted/logicalErrorRate\"},{\"description\":\"Crossing prefactor used in QEC scheme\",\"explanation\":\"The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.\",\"label\":\"Crossing prefactor\",\"path\":\"jobParams/qecScheme/crossingPrefactor\"},{\"description\":\"Error correction threshold used in QEC scheme\",\"explanation\":\"The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.\",\"label\":\"Error correction threshold\",\"path\":\"jobParams/qecScheme/errorCorrectionThreshold\"},{\"description\":\"QEC scheme formula used to compute logical cycle time\",\"explanation\":\"This is the formula that is used to compute the logical cycle time 4us 400ns.\",\"label\":\"Logical cycle time formula\",\"path\":\"jobParams/qecScheme/logicalCycleTime\"},{\"description\":\"QEC scheme formula used to compute number of physical qubits per logical qubit\",\"explanation\":\"This is the formula that is used to compute the number of physical qubits per logical qubits 242.\",\"label\":\"Physical qubits formula\",\"path\":\"jobParams/qecScheme/physicalQubitsPerLogicalQubit\"}],\"title\":\"Logical qubit parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of physical qubits for a single T factory\",\"explanation\":\"This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.\",\"label\":\"Physical qubits\",\"path\":\"tfactory/physicalQubits\"},{\"description\":\"Runtime of a single T factory\",\"explanation\":\"The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/tfactoryRuntime\"},{\"description\":\"Number of output T states produced in a single run of T factory\",\"explanation\":\"The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.17e-6.\",\"label\":\"Number of output T states per run\",\"path\":\"tfactory/numTstates\"},{\"description\":\"Number of physical input T states consumed in a single run of a T factory\",\"explanation\":\"This value includes the physical input T states of all copies of the distillation unit in the first round.\",\"label\":\"Number of input T states per run\",\"path\":\"tfactory/numInputTstates\"},{\"description\":\"The number of distillation rounds\",\"explanation\":\"This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.\",\"label\":\"Distillation rounds\",\"path\":\"tfactory/numRounds\"},{\"description\":\"The number of units in each round of distillation\",\"explanation\":\"This is the number of copies for the distillation units per round.\",\"label\":\"Distillation units per round\",\"path\":\"physicalCountsFormatted/numUnitsPerRound\"},{\"description\":\"The types of distillation units\",\"explanation\":\"These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.\",\"label\":\"Distillation units\",\"path\":\"physicalCountsFormatted/unitNamePerRound\"},{\"description\":\"The code distance in each round of distillation\",\"explanation\":\"This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.\",\"label\":\"Distillation code distances\",\"path\":\"physicalCountsFormatted/codeDistancePerRound\"},{\"description\":\"The number of physical qubits used in each round of distillation\",\"explanation\":\"The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.\",\"label\":\"Number of physical qubits per round\",\"path\":\"physicalCountsFormatted/physicalQubitsPerRound\"},{\"description\":\"The runtime of each distillation round\",\"explanation\":\"The runtime of the T factory is the sum of the runtimes in all rounds.\",\"label\":\"Runtime per round\",\"path\":\"physicalCountsFormatted/tfactoryRuntimePerRound\"},{\"description\":\"Logical T state error rate\",\"explanation\":\"This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 7.35e-6.\",\"label\":\"Logical T state error rate\",\"path\":\"physicalCountsFormatted/tstateLogicalErrorRate\"}],\"title\":\"T factory parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits in the input quantum program\",\"explanation\":\"We determine 28 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.\",\"label\":\"Logical qubits (pre-layout)\",\"path\":\"logicalCounts/numQubits\"},{\"description\":\"Number of T gates in the input quantum program\",\"explanation\":\"This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.\",\"label\":\"T gates\",\"path\":\"logicalCounts/tCount\"},{\"description\":\"Number of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.\",\"label\":\"Rotation gates\",\"path\":\"logicalCounts/rotationCount\"},{\"description\":\"Depth of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.\",\"label\":\"Rotation depth\",\"path\":\"logicalCounts/rotationDepth\"},{\"description\":\"Number of CCZ-gates in the input quantum program\",\"explanation\":\"This is the number of CCZ gates.\",\"label\":\"CCZ gates\",\"path\":\"logicalCounts/cczCount\"},{\"description\":\"Number of CCiX-gates in the input quantum program\",\"explanation\":\"This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].\",\"label\":\"CCiX gates\",\"path\":\"logicalCounts/ccixCount\"},{\"description\":\"Number of single qubit measurements in the input quantum program\",\"explanation\":\"This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.\",\"label\":\"Measurement operations\",\"path\":\"logicalCounts/measurementCount\"}],\"title\":\"Pre-layout logical resources\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Total error budget for the algorithm\",\"explanation\":\"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\"label\":\"Total error budget\",\"path\":\"physicalCountsFormatted/errorBudget\"},{\"description\":\"Probability of at least one logical error\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"Logical error probability\",\"path\":\"physicalCountsFormatted/errorBudgetLogical\"},{\"description\":\"Probability of at least one faulty T distillation\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"T distillation error probability\",\"path\":\"physicalCountsFormatted/errorBudgetTstates\"},{\"description\":\"Probability of at least one failed rotation synthesis\",\"explanation\":\"This is one third of the total error budget 1.00e-3.\",\"label\":\"Rotation synthesis error probability\",\"path\":\"physicalCountsFormatted/errorBudgetRotations\"}],\"title\":\"Assumed error budget\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Some descriptive name for the qubit model\",\"explanation\":\"You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or ¬µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).\",\"label\":\"Qubit name\",\"path\":\"jobParams/qubitParams/name\"},{\"description\":\"Underlying qubit technology (gate-based or Majorana)\",\"explanation\":\"When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.\",\"label\":\"Instruction set\",\"path\":\"jobParams/qubitParams/instructionSet\"},{\"description\":\"Operation time for single-qubit measurement (t_meas) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.\",\"label\":\"Single-qubit measurement time\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementTime\"},{\"description\":\"Operation time for single-qubit gate (t_gate) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.\",\"label\":\"Single-qubit gate time\",\"path\":\"jobParams/qubitParams/oneQubitGateTime\"},{\"description\":\"Operation time for two-qubit gate in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.\",\"label\":\"Two-qubit gate time\",\"path\":\"jobParams/qubitParams/twoQubitGateTime\"},{\"description\":\"Operation time for a T gate\",\"explanation\":\"This is the operation time in nanoseconds to execute a T gate.\",\"label\":\"T gate time\",\"path\":\"jobParams/qubitParams/tGateTime\"},{\"description\":\"Error rate for single-qubit measurement\",\"explanation\":\"This is the probability in which a single-qubit measurement in the Pauli basis may fail.\",\"label\":\"Single-qubit measurement error rate\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementErrorRate\"},{\"description\":\"Error rate for single-qubit Clifford gate (p)\",\"explanation\":\"This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.\",\"label\":\"Single-qubit error rate\",\"path\":\"jobParams/qubitParams/oneQubitGateErrorRate\"},{\"description\":\"Error rate for two-qubit Clifford gate\",\"explanation\":\"This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.\",\"label\":\"Two-qubit error rate\",\"path\":\"jobParams/qubitParams/twoQubitGateErrorRate\"},{\"description\":\"Error rate to prepare single-qubit T state or apply a T gate (p_T)\",\"explanation\":\"This is the probability in which executing a single T gate may fail.\",\"label\":\"T gate error rate\",\"path\":\"jobParams/qubitParams/tGateErrorRate\"}],\"title\":\"Physical qubit parameters\"}]},\"status\":\"success\",\"tfactory\":{\"codeDistancePerRound\":[9],\"logicalErrorRate\":2.165000000000001E-06,\"numInputTstates\":30,\"numRounds\":1,\"numTstates\":1,\"numUnitsPerRound\":[2],\"physicalQubits\":6480,\"physicalQubitsPerRound\":[6480],\"runtime\":46800.0,\"runtimePerRound\":[46800.0],\"unitNamePerRound\":[\"15-to-1 space efficient logical\"]}}", + "text/html": [ + "\r\n", + "
\r\n", + " \r\n", + " Physical resource estimates\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Physical qubits84536\r\n", + "

Number of physical qubits

\n", + "
\r\n", + "
\r\n", + "

This value represents the total number of physical qubits, which is the sum of 6776 physical qubits to implement the algorithm logic, and 77760 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.

\n", + "\r\n", + "
Runtime277us 200ns\r\n", + "

Total runtime

\n", + "
\r\n", + "
\r\n", + "

This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (4us 400ns) multiplied by the 63 logical cycles to run the algorithm. If however the duration of a single T factory (here: 46us 800ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Resource estimates breakdown\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Logical algorithmic qubits28\r\n", + "

Number of logical qubits for the algorithm after layout

\n", + "
\r\n", + "
\r\n", + "

Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the \\(Q_{\\rm alg} = 9\\) logical qubits in the input algorithm, we require in total $2 \\cdot Q_{\\rm alg} + \\lceil \\sqrt{8 \\cdot Q_{\\rm alg}}\\rceil + 1 = 28$ logical qubits.

\n", + "\r\n", + "
Algorithmic depth63\r\n", + "

Number of logical cycles for the algorithm

\n", + "
\r\n", + "
\r\n", + "

To execute the algorithm using Parallel Synthesis Sequential Pauli Computation (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 12 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 5 CCZ and 12 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.

\n", + "\r\n", + "
Logical depth63\r\n", + "

Number of logical cycles performed

\n", + "
\r\n", + "
\r\n", + "

This number is usually equal to the logical depth of the algorithm, which is 63. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.

\n", + "\r\n", + "
Number of T states68\r\n", + "

Number of T states consumed by the algorithm

\n", + "
\r\n", + "
\r\n", + "

To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 5 CCZ and 12 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.

\n", + "\r\n", + "
Number of T factories12\r\n", + "

Number of T factories capable of producing the demanded 68 T states during the algorithm's runtime

\n", + "
\r\n", + "
\r\n", + "

The total number of T factories 12 that are executed in parallel is computed as \\(\\left\\lceil\\dfrac{68\\;\\text{T states} \\cdot 46us 800ns\\;\\text{T factory duration}}{1\\;\\text{T states per T factory} \\cdot 277us 200ns\\;\\text{algorithm runtime}}\\right\\rceil\\)

\n", + "\r\n", + "
Number of T factory invocations6\r\n", + "

Number of times all T factories are invoked

\n", + "
\r\n", + "
\r\n", + "

In order to prepare the 68 T states, the 12 copies of the T factory are repeatedly invoked 6 times.

\n", + "\r\n", + "
Physical algorithmic qubits6776\r\n", + "

Number of physical qubits for the algorithm after layout

\n", + "
\r\n", + "
\r\n", + "

The 6776 are the product of the 28 logical qubits after layout and the 242 physical qubits that encode a single logical qubit.

\n", + "\r\n", + "
Physical T factory qubits77760\r\n", + "

Number of physical qubits for the T factories

\n", + "
\r\n", + "
\r\n", + "

Each T factory requires 6480 physical qubits and we run 12 in parallel, therefore we need $77760 = 6480 \\cdot 12$ qubits.

\n", + "\r\n", + "
Required logical qubit error rate2.83e-7\r\n", + "

The minimum logical qubit error rate required to run the algorithm within the error budget

\n", + "
\r\n", + "
\r\n", + "

The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 28 logical qubits and the total cycle count 63.

\n", + "\r\n", + "
Required logical T state error rate7.35e-6\r\n", + "

The minimum T state error rate required for distilled T states

\n", + "
\r\n", + "
\r\n", + "

The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 68.

\n", + "\r\n", + "
Number of T states per rotationNo rotations in algorithm\r\n", + "

Number of T states to implement a rotation with an arbitrary angle

\n", + "
\r\n", + "
\r\n", + "

The number of T states to implement a rotation with an arbitrary angle is \\(\\lceil 0.53 \\log_2(0 / 0) + 5.3\\rceil\\) [arXiv:2203.10064]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Logical qubit parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
QEC schemesurface_code\r\n", + "

Name of QEC scheme

\n", + "
\r\n", + "
\r\n", + "

You can load pre-defined QEC schemes by using the name surface_code or floquet_code. The latter only works with Majorana qubits.

\n", + "\r\n", + "
Code distance11\r\n", + "

Required code distance for error correction

\n", + "
\r\n", + "
\r\n", + "

The code distance is the smallest odd integer greater or equal to \\(\\dfrac{2\\log(0.03 / 0.0000002834467120181406)}{\\log(0.01/0.001)} - 1\\)

\n", + "\r\n", + "
Physical qubits242\r\n", + "

Number of physical qubits per logical qubit

\n", + "
\r\n", + "
\r\n", + "

The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.

\n", + "\r\n", + "
Logical cycle time4us 400ns\r\n", + "

Duration of a logical cycle in nanoseconds

\n", + "
\r\n", + "
\r\n", + "

The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.

\n", + "\r\n", + "
Logical qubit error rate3.00e-8\r\n", + "

Logical qubit error rate

\n", + "
\r\n", + "
\r\n", + "

The logical qubit error rate is computed as $0.03 \\cdot \\left(\\dfrac{0.001}{0.01}\\right)^\\frac{11 + 1}{2}$

\n", + "\r\n", + "
Crossing prefactor0.03\r\n", + "

Crossing prefactor used in QEC scheme

\n", + "
\r\n", + "
\r\n", + "

The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.

\n", + "\r\n", + "
Error correction threshold0.01\r\n", + "

Error correction threshold used in QEC scheme

\n", + "
\r\n", + "
\r\n", + "

The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.

\n", + "\r\n", + "
Logical cycle time formula(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\r\n", + "

QEC scheme formula used to compute logical cycle time

\n", + "
\r\n", + "
\r\n", + "

This is the formula that is used to compute the logical cycle time 4us 400ns.

\n", + "\r\n", + "
Physical qubits formula2 * codeDistance * codeDistance\r\n", + "

QEC scheme formula used to compute number of physical qubits per logical qubit

\n", + "
\r\n", + "
\r\n", + "

This is the formula that is used to compute the number of physical qubits per logical qubits 242.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " T factory parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Physical qubits6480\r\n", + "

Number of physical qubits for a single T factory

\n", + "
\r\n", + "
\r\n", + "

This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.

\n", + "\r\n", + "
Runtime46us 800ns\r\n", + "

Runtime of a single T factory

\n", + "
\r\n", + "
\r\n", + "

The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.

\n", + "\r\n", + "
Number of output T states per run1\r\n", + "

Number of output T states produced in a single run of T factory

\n", + "
\r\n", + "
\r\n", + "

The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.17e-6.

\n", + "\r\n", + "
Number of input T states per run30\r\n", + "

Number of physical input T states consumed in a single run of a T factory

\n", + "
\r\n", + "
\r\n", + "

This value includes the physical input T states of all copies of the distillation unit in the first round.

\n", + "\r\n", + "
Distillation rounds1\r\n", + "

The number of distillation rounds

\n", + "
\r\n", + "
\r\n", + "

This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.

\n", + "\r\n", + "
Distillation units per round2\r\n", + "

The number of units in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

This is the number of copies for the distillation units per round.

\n", + "\r\n", + "
Distillation units15-to-1 space efficient logical\r\n", + "

The types of distillation units

\n", + "
\r\n", + "
\r\n", + "

These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.

\n", + "\r\n", + "
Distillation code distances9\r\n", + "

The code distance in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.

\n", + "\r\n", + "
Number of physical qubits per round6480\r\n", + "

The number of physical qubits used in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.

\n", + "\r\n", + "
Runtime per round46us 800ns\r\n", + "

The runtime of each distillation round

\n", + "
\r\n", + "
\r\n", + "

The runtime of the T factory is the sum of the runtimes in all rounds.

\n", + "\r\n", + "
Logical T state error rate2.17e-6\r\n", + "

Logical T state error rate

\n", + "
\r\n", + "
\r\n", + "

This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 7.35e-6.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Pre-layout logical resources\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Logical qubits (pre-layout)9\r\n", + "

Number of logical qubits in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

We determine 28 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.

\n", + "\r\n", + "
T gates0\r\n", + "

Number of T gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.

\n", + "\r\n", + "
Rotation gates0\r\n", + "

Number of rotation gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.

\n", + "\r\n", + "
Rotation depth0\r\n", + "

Depth of rotation gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.

\n", + "\r\n", + "
CCZ gates5\r\n", + "

Number of CCZ-gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of CCZ gates.

\n", + "\r\n", + "
CCiX gates12\r\n", + "

Number of CCiX-gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of CCiX gates, which applies \\(-iX\\) controlled on two control qubits [1212.5069].

\n", + "\r\n", + "
Measurement operations12\r\n", + "

Number of single qubit measurements in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Assumed error budget\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Total error budget1.00e-3\r\n", + "

Total error budget for the algorithm

\n", + "
\r\n", + "
\r\n", + "

The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget \\(\\epsilon = \\epsilon_{\\log} + \\epsilon_{\\rm dis} + \\epsilon_{\\rm syn}\\) is uniformly distributed and applies to errors \\(\\epsilon_{\\log}\\) to implement logical qubits, an error budget \\(\\epsilon_{\\rm dis}\\) to produce T states through distillation, and an error budget \\(\\epsilon_{\\rm syn}\\) to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets \\(\\epsilon_{\\rm dis}\\) and \\(\\epsilon_{\\rm syn}\\) are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.

\n", + "\r\n", + "
Logical error probability5.00e-4\r\n", + "

Probability of at least one logical error

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", + "\r\n", + "
T distillation error probability5.00e-4\r\n", + "

Probability of at least one faulty T distillation

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", + "\r\n", + "
Rotation synthesis error probability0.00e0\r\n", + "

Probability of at least one failed rotation synthesis

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Physical qubit parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Qubit namequbit_gate_ns_e3\r\n", + "

Some descriptive name for the qubit model

\n", + "
\r\n", + "
\r\n", + "

You can load pre-defined qubit parameters by using the names qubit_gate_ns_e3, qubit_gate_ns_e4, qubit_gate_us_e3, qubit_gate_us_e4, qubit_maj_ns_e4, or qubit_maj_ns_e6. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).

\n", + "\r\n", + "
Instruction setGateBased\r\n", + "

Underlying qubit technology (gate-based or Majorana)

\n", + "
\r\n", + "
\r\n", + "

When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either gate-based or Majorana. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.

\n", + "\r\n", + "
Single-qubit measurement time100 ns\r\n", + "

Operation time for single-qubit measurement (t_meas) in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.

\n", + "\r\n", + "
Single-qubit gate time50 ns\r\n", + "

Operation time for single-qubit gate (t_gate) in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.

\n", + "\r\n", + "
Two-qubit gate time50 ns\r\n", + "

Operation time for two-qubit gate in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.

\n", + "\r\n", + "
T gate time50 ns\r\n", + "

Operation time for a T gate

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to execute a T gate.

\n", + "\r\n", + "
Single-qubit measurement error rate0.001\r\n", + "

Error rate for single-qubit measurement

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a single-qubit measurement in the Pauli basis may fail.

\n", + "\r\n", + "
Single-qubit error rate0.001\r\n", + "

Error rate for single-qubit Clifford gate (p)

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.

\n", + "\r\n", + "
Two-qubit error rate0.001\r\n", + "

Error rate for two-qubit Clifford gate

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.

\n", + "\r\n", + "
T gate error rate0.001\r\n", + "

Error rate to prepare single-qubit T state or apply a T gate (p_T)

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which executing a single T gate may fail.

\n", + "\r\n", + "
\r\n", + "
\r\n", + " Assumptions\r\n", + "
    \r\n", + "
  • More details on the following lists of assumptions can be found in the paper Accessing requirements for scaling quantum computers and their applications.

    \n", + "
  • \r\n", + "
  • Uniform independent physical noise. We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.

    \n", + "
  • \r\n", + "
  • Efficient classical computation. We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.

    \n", + "
  • \r\n", + "
  • Extraction circuits for planar quantum ISA. We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).

    \n", + "
  • \r\n", + "
  • Uniform independent logical noise. We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.

    \n", + "
  • \r\n", + "
  • Negligible Clifford costs for synthesis. We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.

    \n", + "
  • \r\n", + "
  • Smooth magic state consumption rate. We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.

    \n", + "
  • \r\n", + "
\r\n" + ], + "text/plain": [ + "{'errorBudget': {'logical': 0.0005, 'rotations': 0.0, 'tstates': 0.0005},\n", + " 'jobParams': {'errorBudget': 0.001,\n", + " 'qecScheme': {'crossingPrefactor': 0.03,\n", + " 'errorCorrectionThreshold': 0.01,\n", + " 'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',\n", + " 'name': 'surface_code',\n", + " 'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance'},\n", + " 'qubitParams': {'instructionSet': 'GateBased',\n", + " 'name': 'qubit_gate_ns_e3',\n", + " 'oneQubitGateErrorRate': 0.001,\n", + " 'oneQubitGateTime': '50 ns',\n", + " 'oneQubitMeasurementErrorRate': 0.001,\n", + " 'oneQubitMeasurementTime': '100 ns',\n", + " 'tGateErrorRate': 0.001,\n", + " 'tGateTime': '50 ns',\n", + " 'twoQubitGateErrorRate': 0.001,\n", + " 'twoQubitGateTime': '50 ns'}},\n", + " 'logicalCounts': {'ccixCount': 12,\n", + " 'cczCount': 5,\n", + " 'measurementCount': 12,\n", + " 'numQubits': 9,\n", + " 'rotationCount': 0,\n", + " 'rotationDepth': 0,\n", + " 'tCount': 0},\n", + " 'logicalQubit': {'codeDistance': 11,\n", + " 'logicalCycleTime': 4400.0,\n", + " 'logicalErrorRate': 3.000000000000002e-08,\n", + " 'physicalQubits': 242},\n", + " 'physicalCounts': {'breakdown': {'algorithmicLogicalDepth': 63,\n", + " 'algorithmicLogicalQubits': 28,\n", + " 'cliffordErrorRate': 0.001,\n", + " 'logicalDepth': 63,\n", + " 'numTfactories': 12,\n", + " 'numTfactoryRuns': 6,\n", + " 'numTsPerRotation': None,\n", + " 'numTstates': 68,\n", + " 'physicalQubitsForAlgorithm': 6776,\n", + " 'physicalQubitsForTfactories': 77760,\n", + " 'requiredLogicalQubitErrorRate': 2.834467120181406e-07,\n", + " 'requiredLogicalTstateErrorRate': 7.3529411764705884e-06},\n", + " 'physicalQubits': 84536,\n", + " 'runtime': 277200},\n", + " 'physicalCountsFormatted': {'codeDistancePerRound': '9',\n", + " 'errorBudget': '1.00e-3',\n", + " 'errorBudgetLogical': '5.00e-4',\n", + " 'errorBudgetRotations': '0.00e0',\n", + " 'errorBudgetTstates': '5.00e-4',\n", + " 'logicalCycleTime': '4us 400ns',\n", + " 'logicalErrorRate': '3.00e-8',\n", + " 'numTsPerRotation': 'No rotations in algorithm',\n", + " 'numUnitsPerRound': '2',\n", + " 'physicalQubitsForTfactoriesPercentage': '91.98 %',\n", + " 'physicalQubitsPerRound': '6480',\n", + " 'requiredLogicalQubitErrorRate': '2.83e-7',\n", + " 'requiredLogicalTstateErrorRate': '7.35e-6',\n", + " 'runtime': '277us 200ns',\n", + " 'tfactoryRuntime': '46us 800ns',\n", + " 'tfactoryRuntimePerRound': '46us 800ns',\n", + " 'tstateLogicalErrorRate': '2.17e-6',\n", + " 'unitNamePerRound': '15-to-1 space efficient logical'},\n", + " 'reportData': {'assumptions': ['_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._',\n", + " '**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.',\n", + " '**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.',\n", + " '**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).',\n", + " '**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.',\n", + " '**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.',\n", + " '**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.'],\n", + " 'groups': [{'alwaysVisible': True,\n", + " 'entries': [{'description': 'Number of physical qubits',\n", + " 'explanation': 'This value represents the total number of physical qubits, which is the sum of 6776 physical qubits to implement the algorithm logic, and 77760 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'physicalCounts/physicalQubits'},\n", + " {'description': 'Total runtime',\n", + " 'explanation': 'This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (4us 400ns) multiplied by the 63 logical cycles to run the algorithm. If however the duration of a single T factory (here: 46us 800ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.',\n", + " 'label': 'Runtime',\n", + " 'path': 'physicalCountsFormatted/runtime'}],\n", + " 'title': 'Physical resource estimates'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of logical qubits for the algorithm after layout',\n", + " 'explanation': 'Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 9$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 28$ logical qubits.',\n", + " 'label': 'Logical algorithmic qubits',\n", + " 'path': 'physicalCounts/breakdown/algorithmicLogicalQubits'},\n", + " {'description': 'Number of logical cycles for the algorithm',\n", + " 'explanation': 'To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 12 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 5 CCZ and 12 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.',\n", + " 'label': 'Algorithmic depth',\n", + " 'path': 'physicalCounts/breakdown/algorithmicLogicalDepth'},\n", + " {'description': 'Number of logical cycles performed',\n", + " 'explanation': \"This number is usually equal to the logical depth of the algorithm, which is 63. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\n", + " 'label': 'Logical depth',\n", + " 'path': 'physicalCounts/breakdown/logicalDepth'},\n", + " {'description': 'Number of T states consumed by the algorithm',\n", + " 'explanation': 'To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 5 CCZ and 12 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.',\n", + " 'label': 'Number of T states',\n", + " 'path': 'physicalCounts/breakdown/numTstates'},\n", + " {'description': \"Number of T factories capable of producing the demanded 68 T states during the algorithm's runtime\",\n", + " 'explanation': 'The total number of T factories 12 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{68\\\\;\\\\text{T states} \\\\cdot 46us 800ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 277us 200ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$',\n", + " 'label': 'Number of T factories',\n", + " 'path': 'physicalCounts/breakdown/numTfactories'},\n", + " {'description': 'Number of times all T factories are invoked',\n", + " 'explanation': 'In order to prepare the 68 T states, the 12 copies of the T factory are repeatedly invoked 6 times.',\n", + " 'label': 'Number of T factory invocations',\n", + " 'path': 'physicalCounts/breakdown/numTfactoryRuns'},\n", + " {'description': 'Number of physical qubits for the algorithm after layout',\n", + " 'explanation': 'The 6776 are the product of the 28 logical qubits after layout and the 242 physical qubits that encode a single logical qubit.',\n", + " 'label': 'Physical algorithmic qubits',\n", + " 'path': 'physicalCounts/breakdown/physicalQubitsForAlgorithm'},\n", + " {'description': 'Number of physical qubits for the T factories',\n", + " 'explanation': 'Each T factory requires 6480 physical qubits and we run 12 in parallel, therefore we need $77760 = 6480 \\\\cdot 12$ qubits.',\n", + " 'label': 'Physical T factory qubits',\n", + " 'path': 'physicalCounts/breakdown/physicalQubitsForTfactories'},\n", + " {'description': 'The minimum logical qubit error rate required to run the algorithm within the error budget',\n", + " 'explanation': 'The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 28 logical qubits and the total cycle count 63.',\n", + " 'label': 'Required logical qubit error rate',\n", + " 'path': 'physicalCountsFormatted/requiredLogicalQubitErrorRate'},\n", + " {'description': 'The minimum T state error rate required for distilled T states',\n", + " 'explanation': 'The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 68.',\n", + " 'label': 'Required logical T state error rate',\n", + " 'path': 'physicalCountsFormatted/requiredLogicalTstateErrorRate'},\n", + " {'description': 'Number of T states to implement a rotation with an arbitrary angle',\n", + " 'explanation': 'The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.',\n", + " 'label': 'Number of T states per rotation',\n", + " 'path': 'physicalCountsFormatted/numTsPerRotation'}],\n", + " 'title': 'Resource estimates breakdown'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Name of QEC scheme',\n", + " 'explanation': 'You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.',\n", + " 'label': 'QEC scheme',\n", + " 'path': 'jobParams/qecScheme/name'},\n", + " {'description': 'Required code distance for error correction',\n", + " 'explanation': 'The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.0000002834467120181406)}{\\\\log(0.01/0.001)} - 1$',\n", + " 'label': 'Code distance',\n", + " 'path': 'logicalQubit/codeDistance'},\n", + " {'description': 'Number of physical qubits per logical qubit',\n", + " 'explanation': 'The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'logicalQubit/physicalQubits'},\n", + " {'description': 'Duration of a logical cycle in nanoseconds',\n", + " 'explanation': 'The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.',\n", + " 'label': 'Logical cycle time',\n", + " 'path': 'physicalCountsFormatted/logicalCycleTime'},\n", + " {'description': 'Logical qubit error rate',\n", + " 'explanation': 'The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{11 + 1}{2}$',\n", + " 'label': 'Logical qubit error rate',\n", + " 'path': 'physicalCountsFormatted/logicalErrorRate'},\n", + " {'description': 'Crossing prefactor used in QEC scheme',\n", + " 'explanation': 'The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.',\n", + " 'label': 'Crossing prefactor',\n", + " 'path': 'jobParams/qecScheme/crossingPrefactor'},\n", + " {'description': 'Error correction threshold used in QEC scheme',\n", + " 'explanation': 'The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.',\n", + " 'label': 'Error correction threshold',\n", + " 'path': 'jobParams/qecScheme/errorCorrectionThreshold'},\n", + " {'description': 'QEC scheme formula used to compute logical cycle time',\n", + " 'explanation': 'This is the formula that is used to compute the logical cycle time 4us 400ns.',\n", + " 'label': 'Logical cycle time formula',\n", + " 'path': 'jobParams/qecScheme/logicalCycleTime'},\n", + " {'description': 'QEC scheme formula used to compute number of physical qubits per logical qubit',\n", + " 'explanation': 'This is the formula that is used to compute the number of physical qubits per logical qubits 242.',\n", + " 'label': 'Physical qubits formula',\n", + " 'path': 'jobParams/qecScheme/physicalQubitsPerLogicalQubit'}],\n", + " 'title': 'Logical qubit parameters'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of physical qubits for a single T factory',\n", + " 'explanation': 'This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'tfactory/physicalQubits'},\n", + " {'description': 'Runtime of a single T factory',\n", + " 'explanation': 'The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.',\n", + " 'label': 'Runtime',\n", + " 'path': 'physicalCountsFormatted/tfactoryRuntime'},\n", + " {'description': 'Number of output T states produced in a single run of T factory',\n", + " 'explanation': 'The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.17e-6.',\n", + " 'label': 'Number of output T states per run',\n", + " 'path': 'tfactory/numTstates'},\n", + " {'description': 'Number of physical input T states consumed in a single run of a T factory',\n", + " 'explanation': 'This value includes the physical input T states of all copies of the distillation unit in the first round.',\n", + " 'label': 'Number of input T states per run',\n", + " 'path': 'tfactory/numInputTstates'},\n", + " {'description': 'The number of distillation rounds',\n", + " 'explanation': 'This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.',\n", + " 'label': 'Distillation rounds',\n", + " 'path': 'tfactory/numRounds'},\n", + " {'description': 'The number of units in each round of distillation',\n", + " 'explanation': 'This is the number of copies for the distillation units per round.',\n", + " 'label': 'Distillation units per round',\n", + " 'path': 'physicalCountsFormatted/numUnitsPerRound'},\n", + " {'description': 'The types of distillation units',\n", + " 'explanation': 'These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.',\n", + " 'label': 'Distillation units',\n", + " 'path': 'physicalCountsFormatted/unitNamePerRound'},\n", + " {'description': 'The code distance in each round of distillation',\n", + " 'explanation': 'This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.',\n", + " 'label': 'Distillation code distances',\n", + " 'path': 'physicalCountsFormatted/codeDistancePerRound'},\n", + " {'description': 'The number of physical qubits used in each round of distillation',\n", + " 'explanation': 'The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.',\n", + " 'label': 'Number of physical qubits per round',\n", + " 'path': 'physicalCountsFormatted/physicalQubitsPerRound'},\n", + " {'description': 'The runtime of each distillation round',\n", + " 'explanation': 'The runtime of the T factory is the sum of the runtimes in all rounds.',\n", + " 'label': 'Runtime per round',\n", + " 'path': 'physicalCountsFormatted/tfactoryRuntimePerRound'},\n", + " {'description': 'Logical T state error rate',\n", + " 'explanation': 'This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 7.35e-6.',\n", + " 'label': 'Logical T state error rate',\n", + " 'path': 'physicalCountsFormatted/tstateLogicalErrorRate'}],\n", + " 'title': 'T factory parameters'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of logical qubits in the input quantum program',\n", + " 'explanation': 'We determine 28 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.',\n", + " 'label': 'Logical qubits (pre-layout)',\n", + " 'path': 'logicalCounts/numQubits'},\n", + " {'description': 'Number of T gates in the input quantum program',\n", + " 'explanation': 'This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.',\n", + " 'label': 'T gates',\n", + " 'path': 'logicalCounts/tCount'},\n", + " {'description': 'Number of rotation gates in the input quantum program',\n", + " 'explanation': 'This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.',\n", + " 'label': 'Rotation gates',\n", + " 'path': 'logicalCounts/rotationCount'},\n", + " {'description': 'Depth of rotation gates in the input quantum program',\n", + " 'explanation': 'This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.',\n", + " 'label': 'Rotation depth',\n", + " 'path': 'logicalCounts/rotationDepth'},\n", + " {'description': 'Number of CCZ-gates in the input quantum program',\n", + " 'explanation': 'This is the number of CCZ gates.',\n", + " 'label': 'CCZ gates',\n", + " 'path': 'logicalCounts/cczCount'},\n", + " {'description': 'Number of CCiX-gates in the input quantum program',\n", + " 'explanation': 'This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].',\n", + " 'label': 'CCiX gates',\n", + " 'path': 'logicalCounts/ccixCount'},\n", + " {'description': 'Number of single qubit measurements in the input quantum program',\n", + " 'explanation': 'This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.',\n", + " 'label': 'Measurement operations',\n", + " 'path': 'logicalCounts/measurementCount'}],\n", + " 'title': 'Pre-layout logical resources'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Total error budget for the algorithm',\n", + " 'explanation': \"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\n", + " 'label': 'Total error budget',\n", + " 'path': 'physicalCountsFormatted/errorBudget'},\n", + " {'description': 'Probability of at least one logical error',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", + " 'label': 'Logical error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetLogical'},\n", + " {'description': 'Probability of at least one faulty T distillation',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", + " 'label': 'T distillation error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetTstates'},\n", + " {'description': 'Probability of at least one failed rotation synthesis',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3.',\n", + " 'label': 'Rotation synthesis error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetRotations'}],\n", + " 'title': 'Assumed error budget'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Some descriptive name for the qubit model',\n", + " 'explanation': 'You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).',\n", + " 'label': 'Qubit name',\n", + " 'path': 'jobParams/qubitParams/name'},\n", + " {'description': 'Underlying qubit technology (gate-based or Majorana)',\n", + " 'explanation': 'When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.',\n", + " 'label': 'Instruction set',\n", + " 'path': 'jobParams/qubitParams/instructionSet'},\n", + " {'description': 'Operation time for single-qubit measurement (t_meas) in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.',\n", + " 'label': 'Single-qubit measurement time',\n", + " 'path': 'jobParams/qubitParams/oneQubitMeasurementTime'},\n", + " {'description': 'Operation time for single-qubit gate (t_gate) in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.',\n", + " 'label': 'Single-qubit gate time',\n", + " 'path': 'jobParams/qubitParams/oneQubitGateTime'},\n", + " {'description': 'Operation time for two-qubit gate in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.',\n", + " 'label': 'Two-qubit gate time',\n", + " 'path': 'jobParams/qubitParams/twoQubitGateTime'},\n", + " {'description': 'Operation time for a T gate',\n", + " 'explanation': 'This is the operation time in nanoseconds to execute a T gate.',\n", + " 'label': 'T gate time',\n", + " 'path': 'jobParams/qubitParams/tGateTime'},\n", + " {'description': 'Error rate for single-qubit measurement',\n", + " 'explanation': 'This is the probability in which a single-qubit measurement in the Pauli basis may fail.',\n", + " 'label': 'Single-qubit measurement error rate',\n", + " 'path': 'jobParams/qubitParams/oneQubitMeasurementErrorRate'},\n", + " {'description': 'Error rate for single-qubit Clifford gate (p)',\n", + " 'explanation': 'This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.',\n", + " 'label': 'Single-qubit error rate',\n", + " 'path': 'jobParams/qubitParams/oneQubitGateErrorRate'},\n", + " {'description': 'Error rate for two-qubit Clifford gate',\n", + " 'explanation': 'This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.',\n", + " 'label': 'Two-qubit error rate',\n", + " 'path': 'jobParams/qubitParams/twoQubitGateErrorRate'},\n", + " {'description': 'Error rate to prepare single-qubit T state or apply a T gate (p_T)',\n", + " 'explanation': 'This is the probability in which executing a single T gate may fail.',\n", + " 'label': 'T gate error rate',\n", + " 'path': 'jobParams/qubitParams/tGateErrorRate'}],\n", + " 'title': 'Physical qubit parameters'}]},\n", + " 'status': 'success',\n", + " 'tfactory': {'codeDistancePerRound': [9],\n", + " 'logicalErrorRate': 2.165000000000001e-06,\n", + " 'numInputTstates': 30,\n", + " 'numRounds': 1,\n", + " 'numTstates': 1,\n", + " 'numUnitsPerRound': [2],\n", + " 'physicalQubits': 6480,\n", + " 'physicalQubitsPerRound': [6480],\n", + " 'runtime': 46800.0,\n", + " 'runtimePerRound': [46800.0],\n", + " 'unitNamePerRound': ['15-to-1 space efficient logical']}}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", "# result = qsharp.azure.output(\"...\")\n", @@ -358,7 +3255,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "jupyter": { "outputs_hidden": false, @@ -384,7 +3281,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "jupyter": { "outputs_hidden": false, @@ -396,10 +3293,57 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logical algorithmic qubits = 28\n", + "Algorithmic depth = 63\n", + "Score = 1764\n" + ] + }, + { + "data": { + "text/plain": [ + "1764" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "evaluate_results(result)" ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "application/x-qsharp-data": "{\"Html\":\"
\"}", + "text/html": [ + "
" + ], + "text/plain": [ + "DisplayableHtmlElement { Html =
}" + ] + }, + "metadata": { + "application/x-qsharp-data": {}, + "text/html": {}, + "text/plain": {} + }, + "output_type": "display_data" + } + ], + "source": [ + "%trace Task2_ResourceEstimationWrapper" + ] } ], "metadata": { diff --git a/obj/__entrypoint__.dll b/obj/__entrypoint__.dll index fd4a54b3a7daf5e98a6fc4b0dcc77f02a0bf57ee..c60971040ddd7625dcaaf0e7b1fbe0ccddc5ee5a 100644 GIT binary patch delta 40873 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 F{{xjVl`8-M diff --git a/obj/__entrypoint__snippets__.dll b/obj/__entrypoint__snippets__.dll index be36c9e910bece75825abcde7d75d0fcc96f23d1..72829b7d0805e75cda2ebc134e528df4b5b1d280 100644 GIT binary patch delta 10309 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 delta 5001 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 diff --git a/obj/__snippets__.dll b/obj/__snippets__.dll index d02be8c9d9d75f0ecb5d7c8747555574c9c9d5db..8c1aeb63d4e3052883930e1545fe0f482ee49ecc 100644 GIT binary patch literal 86528 zcmeHw3y>Vgd0x-nd+{J}AYLR04h{r)1i&K>4^p5QipK*;ob4Qs<2|oNx7K#kxC+_tcsG@uE<3xu2e-*QdVrI zY?UMB`+DY|?VX+7+nqa*z}+-3{rLOu?!W*3|G)q4+1)$#w?C`8lv3Sze)1EgzJ`?H zK^?b_uAqADt-rNay*2R8j;~pdy|ZKLyj!;COWwIsZqCl{Zr2rH)%lWqjzS0`fNUSCA^TPUlfa zx)~%@ucJO_)1@B#I8ph(mIg(F5PtVLOP%nu@iE3*9beNLYAe-mVDzK>s8JrNI3KN` zyzMd2i#l_zf(G!jBPFNcfis#0&Yg2RiPQ)WD)o?2>?r$Jm_Gw)%cvgpt=&pJc~~hK zVehO`U+j~TMr|4G&U6if)~r&yZz`eLJd!m`wr4J**u8rw)Af?h0KoOr0G+uf^W)yN zO7)h3pWV&U4PohfDw7#TW%dtj&^C;UtcPCq4EF#ftlJsZp~F4HeXQHPy{mi=GP|=~ zn3~$KuS;z}ipJ|zrmMTWo?Sr$_GI?}3H80|MYP8M^{Q*vW#DGBmv2P8Dl-fr>%Dc& zh0Jg-GUbf`ehRspJ;3+$_UW!Z1%ht&HlylxAAfuM=P;*j{QA@QA1+$JS5OdZ7mhfG*Kj~AqPAs)w3S2ya<+=3NZy+`#!P$`Fh z)JzU36yA0q%evN4tt(;%)6?;8MYB+D7CWZ|L}=>b#G@(Mx*|qElgvj{qKQ=b^I00| zT2HjS`2<*r^?HH%M2MhyYhtcEnB8nM6W7cnHfdB7b8Z$p(6Qbu?({c{r-ID_CfVN` zbOxIRsPh3j0{|?o56~F^pcXzrX8^zk-~)690PM&+RXaoHH z4wKk345MAE8xGs)y$}*ts{=cO@i5mt!#3-*UCCf$L!I9L^ip`3d$9Xq?}FX=J=BBi z>($K{vKSm&U~jLt6D--#?U%gUP*~r+YW3zdsK;j4n;FJ_1^L*8icevm4!1zCq_?l% z-(`ah2Uf1vA2`@1VUl|LHV1oI{~KC2hrzF`2gYP?SAT*<*|g@zH~q=&YG6ap`kuYp zFe-N6-aZc;Ac-vWdzdmrN&Ppad*9HzN3F+>j=5rBrEXJaKMDCpF@t>Z7ZpZO>ZZ~! z`*Qc~Kq-jJEc*)c;Cnb`yMur4AqcbRpOwZEHn zn9zoOjcW*MjWz62&trIF4bjS2Lze2-a0HOLWr}C|UZM%pS!l|1;rZqd)_8vFxX*K{ zJxBn_)Uh6Q6tqIA*Q+g`hNph>u1%R?uqdm2uU&U_-+tqs9uLgV!VCsA^vCLIhCxi$ z_u!OzX!64kS%C+OHB!$X9N9N=VBdjJ__Yc?ZUOPPF#67)QR+c-{1y~o=VYbi7SEN5 z@fYZR9~5NgnMrjUl$ghdosXQEID+&b%C|umc0N?_W{8Y{WwM^w{Kl#Q^re1e9Za?^W;U z`1al%{Wqu*bUdr(dVjSit3IjYb^Xkr(Rok(YEQ5FpXx$iR{cxlv+9-s#@TMhcVt+* zO852`Jv-3zedsd_E5O<}fZ415i*EZxjroRp8MQCzKA%;`Gg8eH0gihk#u`+=jvY}sbP03A+N@I-!St+JqwYc7 zKkB-ivD7y*Ka2QpGJhBGcQQYRxTN8~so}qp`FTJNYRHzZFGnz0d(tK)uWrfqKaD=0 z(xvYVyx4s=#+wOBf2vEaF1^yfbKuQPMqLa_rw86b>BXS*5$m@yUFu^&Y0~-~lzvW^ ze!u^JS?^@J)t7?Ok96s)eo6fy=HIQp8~J=+Z0wFId~VR;ynL zO0QZwQTl37ddj-9YmIs{D7n@MN?!{~KkR)IEBkg(+Sd0LO8+h>eGr_uL47kQje`?6 zs6P%$JFSCV>(qCH(%sf0D1ARD-O}@BX1)6Jpme*twD(#+^X&fO61^HwJ#`<6E~?31SN9fCN-u@ z{)}!`C;gJ1(am);s+BmSZR#zJ>CfmE^(|d`S$!BY+O8_QIS0zbFLm9juISQt2ENh% zVPykuDX)+5_j_ycewsq%$NwDKno*w~;6Ahov88?&5Q!Vxn*B89qdhOwPc!`e(7QvR z>oBM~gy%3c=n$U6u(*fSfXen;*od;Qf?E-1v5eXNb!t?{V~95@SA7Mm=&E%+cdJW) z^s3hoA5a(7UxPENk$)QgMYg}H{#vcgTvh|tz1>&Tm(<|EYq0#;{(ph|JAJ>6{2!?A zA?~;Sw>qfduKL`-kJ0nz23A@3t6bj}>j?69SdXdKGKZ`w;GDFc){tLUR`&(KUmhr0 zvpU{ky*%&mLIyiG@%Od@j#rzJP-=XtkIzOiKIi1hx{L4E3vd+J)^Y7~T*$n%+qT|e4e{v+UX z)_+25_YwaQjeo%UL*!5Q5b_VL?<4-9^&`a1+WPoD&KLW8x--zHF8%Z%?got(DC|SN z7aC8Ae7OdrF2C5$k{{dDICNm6f=3edH!1E1ZrOYdI01-@B1@<-y`yW`R zDD3xwwzRfN{RUcbU3REn#Pdtw#=plrdo1Mf{CzxM#`Bi7OZ^U>L!{;Yb53P?dio)6 z_R{q912fap2M$i}YlMy-szJwQFL-XTQfo4LZ>`dRegM#kqs8i+Q_9U0oM%VXM9?%S zo|>x8Yxt4s-2Aaz{=8cx*4X@f;nI|M6abW_a^>fcjC;jO$tx6`*%QTyVuhWZ8Y`7@ zmzXhWBm>iFaBS10B{QpNR(Kw|$uMZ5j# z{$t*3wctE}EAq+X6DLm|ol;LKGDss$Pph(#C;ZU>#+2nJgECW=Pdf!CS9Stut;D*q z0&e?r6{$3eeoKr6SlBcyPEXGPI6ZwNSIJEjb=LKha?zcicPeEKn*dKjyc1RC*{>{h zP^eqW0QPV$U-3#12VLecSU9eU&d#ztd8rJBjhrmG&tnE7<6g;m%$*VNIM*pp{+34` zaf(jK&8uT>zT}m?vz3uk)m*Vsog2X_;uuy&-Pr7`9;&v+>eS<&JFD&w`2N6iAUl_T z4yU$Wb^G;1!)Ywe9Qi2SK_Nddj~JCq^J9n>L`}cHHRUYN60^ zBaRd{WFeea8*8o2Lq`qB#28Kl4A*>%sg5uz2IJJ^`CMt{tZ~I#WfJ--4)7n9)nEYSOEg^3G$lZmqGO7biQM~{mBFP6Eq(=@}=GhT6a z`uWl6>5-W-8e#s*x0r?jdZLuWrceqhK&W1vqp(zSdMK$Mq0z7HjNC#A2rRu}-ePDo zYl8+g5%#5O(kVUf=ACjNOR(hFYf%i)r_Pt0+$^9YoIp8djEK;W)V3rTwHde4VH@gp z&<@rUlB!P3T)?J9)284|pkC?vg(N0odl!1!M?22 zswtIIW%Zoe52tZb9aj_ZRZrq>bqYSNQ8!x4Ppc!Us^-+ZI)=7+bslHWqH@#|s)X`9 z{yE60vF5$C*~5p-F;An{vhpx;31d2-u&gQ=c@AST^*}>}f)lMMNYEc#+-(nh?S@z8 zRvrDyKlspJKKb2GbKR#!5pyqHx4?P!83zrh&Xs`aO2>qjM)b(GS;>&-L@J$)~~F= zD<5Bf<+c8OmbG0W-<`Dv5A|oQje`^HtPh!=vIftrHoNFU2RJ`jtM+y2>g}2B)?l`4 zu-`;No4zg~eDF+H?*@g(T1A|!-+QkfbXyOGyz&bmcks-%UcUtj8*n|aaj=@fywCKa z2mmTc)F7uiVa$Gm>f1PY<@2ZlqIJs#g-KTV}^>T6= zJ{V_CP5TDS=`N7w$E(c|&_&RPUeZyHxK37hgVJlnl?Qv6V4Mv&E}{ubw**r0(?9t5 zfBo&RUiwV`gRegK;Q#ylzx_)v4;{^{_u_pEX#b!NZ_lK{zN`gU5VEfH#x?6P3fcdN`NaIh~!;%U@6B2F;;* z*jiFkBmD-AQY&YDV#&rVdF7Kr;sDXerrr(XE@~Ka?;l2|dalew=Smcp(cB=bBlHkt zjPG~A(R8O=D_jENjS9kczH6AuY~qG^+$$daXx^FUUW}~?ev$<||E3|Z6X?Z@ECuVT89NMd)0O&oN%|d6T zJapevmxt&bPMBlpLoC|qLy(VSb{zUOp_@OYH!^IiwZTq17prc`DUavobH0m&y3@Jh zIZbCUnd9)ChhBQ=8PMbt5sv_hOXqODFIG55x;di;M`}lIlVr>*is-+Od(5riR9-M~ z!PMNvsx!3rsb@$E+wBKup7FB>jIsPK$U`C>)Z~`s zq3wt>?-Xa9V*XNq5wt#J^cyf@Zzn|a{BWI-JW)LBluFL5ovT(n`i0<9;gUUb$*!Dt z?0j%C78yvK(0eEX#)}twe-?7bmHt;TrX%T^_6B{DBb%Yg*d@b zsi5JPX;+F+;2MbHKVI<45g@d6?+|=ynw^qvIhKdNt#iTbk2q&@)j}nJzl4GOliI^L z_Q4E|-}m&>!RcjsX7--k?EcvUckRD-Hhqe2%- zm_9`eXq!dSlMPeg^fUzJ^ju%T)6j7O+#Tq^yk`i6rXu-?D(U&pm9n|Wyj-I_+xii>SH@%R#>DaUF5uT zbvNs_7x^CgDa|+Qdk(~@@ld^cd5-Ufc++g3DhEq!m+P*9ZS0eFpa%M8a6dK=d`{&v zmU{IQ4T7@RBbfQ#Cb$+&Pi1a;Dof&?Q8gBOkQ84iJ(c0oM1N*C@NLN4m3S&^dg9t2 z+G3jJr8;pPI7A~ZE>$}xu0?snrgOS<-s{o1`N}0auiUSi9WEB@n*I~GreA5;kFJ7i zx}>w|%;w(Wr|a9!XFZ=9R?>KEWWe70e=7VSMWeYcuA5vda~kvb9j z7M@l(-Zj#D2kV+#@h@;$A`Sws>KDB14Tnmd2z~zursKuU=+(KmJ&3!+)QiC992dOc zdJA5}KWo^RmYEmP{w|rwnTQDSQh5`;5XX5F-TdG+UJmTH7cis5@tnM+me+fQ)j+f+q;9x-& zzTw>TgJ(qN!%w%jctJgg>c&^o0OI59$pQx@&7?Cfu$~{z_unzcVZ_0D;(&FqR^#z& zpnN@C*PumVaiiUVp5@51z#T#h8tSSRCWz?#ax8-^L913t>--VgiSZqERj&)A%M>gB zTek||{#eSuQ5d3Wn~KAx?-%JDn}MW9$tUBYwm|Th9>-IM&}xN=+bYQ5@ifvU0iBXAfiYZ^D+j<^FI@60BN#<&!-~S ztf_PXl(0L!Fa#tGCe4j~NbM~_6}Jxta)Wi|7oiC6B(!R48XK}B>3FTih|($&!FlbD zRxVIx8}lJL%lw*O;|8fe_RT38-wl!0oluM(77U$JG1ZC$8n0;J5YYu|hS#d^Xuqw? zNkyV{uM5|5wr1eWMPp5PJ9+kH8VBi{X}oV0zF8;AqwS2*3}>lVNO(ZP1d`=tfq21C+rYvFg)kg&`;-g4O5 zlhcO5!zb%CK!h8OA#$;E`!Gx*p23O}b)9~R%U@IBgd z{Wy_Q!_JByKy52V<^xPcn22>=HezuUr~k<7lJ+31Y%)l$m~M|lMBqLEaC_k=N+w~#)hG3M}dcpL;ysBOCY;UHFZ|*zVG&^U{ z;v4d1G2L^y5`U4!_PrQ>S*%no^1Dj5Td}>OowLjSFM4>jGY`oT(TqE@u#Qi>c@DqM zNH(T#i@=1sAc9&4tSgY^ae*wq15f(4h`*^|zAb9=i*RJ1X%T2E7{pT*507|M+@#jY z9E1HQ4WxrlEl5cyWQ_@10>dhU@rQ32%{gXMd?T8 z+HT6e*jD^YmfO7@h#MnHTRo1{%03}ZGvQLlG~P+9d+qgPeb1eh-cNazgObcwZXjjP zj7q5B#m(?qm`9W@p;v4Ren&qHtn1vEwlrbQSP*67a!_=#aFDfKu zaE%;F1_S@nN0iK(=crK@5w+fvgf;RRm)nAo-XC!iYD9;28S`e{66=!Ddt+AYR#;;a z69Qv0B$V5W+`0$~4Fus79Q(M#pESWw{j!!aZXaWgf$eweT>DYdHf$#kM`ONoCbLy* zF=OAIg=CbpG@W9hql9p%sJs)_EHpF0Nm(E!j$_IrV@tUeJ*oF6+*&9l7o*;vdGESV z`)GaZRgqe`xlX;m+S}{Y`zz8M#T=zuny_Z3Cu+WuIwwg@SX42Rm^4ur=_~dA_|v_M z46PSbSe|-+Q8q8i`=jR<=lzl0+Shwjh9e}2ug7-surKCU(j@}t%)ohfdVM2&W6Hqv z8afq<>ExZic}pealH^W9>$XxWo{+o`mr>fYAwoB|p0-1Sn#o4CP!FV;xKTADoG`wP zxABz&{v~(3yv0Xw_#?LV@O;iKmG4BQ{)2{*?RR+pzPM z8^^!?!-xpOdF0L6^ zP8Fno4cOIg-l zTnQG~qEig5~-V~Tuj&TZX&N5Z7nsUiHlRwPMqsu|1i6eL` zWQR;$P%gLx3Iaa{eYF%UdXFmO#-$>tk`jmcm2~MM7kF}&X7Wki!I&`eN7^vY?SmI! z%y)K)*Ev3hhz+uZkp_7LQOZmiqAt74h4YtwG-3x4`)1oX9=6jB+fyHwnL!lsiN1Pl zhb7H$WEtb@r8a%_7~zjFMqc4XUp-2Fq*+_V)@`LWef1b&rZ8qGfJa|FCN)OvPWp}v z85E^RKXwyA{xyU zOyD9qoutxtd>g5~-V}`A97z={eoYA#iQ)RnBiK@wwU6Fon0PB>2fO<2`1Ph>ytqsi zOjMyUO%<$;Ct^#4Em0Ry;B}4KEJ)w+=u&&VDVUAv#3>j##an~uyM6mW(|7yharmRn z-|c?{-RnT!r7mc?LqZHhjYLtS3LF(xUx3<+rSEubslDD5cn78v<%-NjX3BCB1&iLJ zN`G-F$1oq_u$;bnBqx^V&n`t>_Vm@Gzt#lYCX&4N~hr>`D;4qiiFfke2Wcx&coTC5ty)&0al5eU?thqbY43q&9u^*vKQ{%}RguNJ9~oK+3uq z$g3n?Guz3-{+M4$UNGm(zUnnUHg7FmV|3pK3=h+?X0D)e4G>~Lo@=YF}IC=8u6e$k>j58g$@%x@G7v1@Jr!t-J zk5YXQy)c+RiXayi9G#3x%AfY;&(T{4(!r-bm{6gV7=p?4DlM@PVh**~Wnb)HEE*P~ z+DJ*a`LGGgE5Q%rT%$p*k4!lEkyL=i;feB?{YPPPOUSxqvR!d1^0J=OjT&Osw;R~L z{g8CQVn*m}V50*zOyakt3S6_@WGDG3k1n@ZkyL@np-4!&ZTsDr3M}?4GC*6!7ONK1 zekCbz`u=d~75-XtT}5-mkeS*Lg_)i}R5h9zxaBfm;ZtcR~cHr&gU#htOKo{^okU9l`qY8=Syl*RQTXOv72?^-*eEzWo4qRYZF zrRKaBznUt{z1DVRq02~xJqD<~EE}fB+xB=RhKoFtM_NjmDMJ$PZ{Z!m?>ibNrE8gP z;n$k+i!N7eS>z_RvK5dGQw46tp;}#1MXB}R=b9bgQUwNok}<*bUSye~Y;ULBnI0vh zHI|Of1~$4#71&_L0$Gs^@=P9SB4wrw=??7kq3w8aPP(bUl5cxx15uXG0JX@b3ar#I zH(&C~-r35?scNoRsm_f|6e}gSSa$Pd=94Yhw_w$^veQKgy;kU2rY^MD*(lrFDW?h? z$0c&be2Bwx`WX#!!Vly}QiCoM8|5*3j>1gOV3{f~r<^o&);8&a#ZcGTz(xmb_+FfW z(^tH{G70O+cX5Vf$HJSgVArQ&P=&utB}8GS7rsol@N3QZ z$x^gT%{6O@7_DT(RDq*hi7zKrlxT0wj&G>~gHy?vAWBPdmSu{vy`6GrdX$XTSUNfz z*ytivV1pS8WJNN_GkK(ml$kP^JDm@y#i;_xA*o?WU1;Hcn5GIGvckxaE9S#0meVsZIpGKLBURwUOh|X&K#tll-a$aDzc3ph;-va;L9&eV%q|_&UXJvMk|YJGz#{kHX9&m3U0e`fUbhpKP1H;te@; zts3rS>f9!kT&`CO0~ao5EwiwWE>jkZMAul+elBHkQ(g&M$)aoRi)@R#J>raH;h9o% z(pS7-LM;e;YLGT_Y?!_wYL8j6H;`xYNJ}X*WiY)VA5x2(dAkem2(>=UTvEEy{l(;> z&dc&ORKx<3E?7)woegYsz=o*;8w_cYO{yr-E>i`Las=hY?eV7fl2{i&MQ3eSk^(0& z66B^lTyo|&<7xcj;CQa+6>mUQm}qg21!cER4Xz_eO%xaq8CwwH4E>jb%>{_ z8AZ`qB~{^8T#ctF9@>e0HhYkECaj%2SCMT^<0C(C-cI`{PAjSKafu-hA(ja zYsIl#wK+?*xMGaCxblbqNSSFgNV_O}p)&hoThqJj^vcZ~BaSw+ zzBVhtWSV-H^*oYNGuI=jw273E=kmx{QfA7KdY3*Qn#7&3vPl;j+-!-Li#IKNYQ=-N zI*K9NidYhd`P924CmQa0-ur!vi_y6w)YARXGiw%cyp97UD3q9_JgSYllz%ym^LYqQ zu3GWtauqk9D-sb0WlF4>jy4%T~a-Yqz#k=l^0a|;v1_U5j| zC1}+uX|ezgc4tqC=J7!x{RR7CzK@RM51-lP$tZ> zNR`yZr6vXBC<9^4%NQI_+i0XAkd~`nmFao!JpMd>ih!V43| zJmF>_Q$*ZNcsqIaWoj1N5LTyQ1SSnhg|0SD5kD@E$r9%4bv`MLY$v0{_rb9k_fhl zK)0GxIWAm8J|?i1kB}g#kit5%d+Ea5?gSQ1+3pcMc5ooDJ)8>sGfd@tu43cB!q{CROPn(Oid z+9yk1-YJ*8(#X+|Rvi40wpR>Cxh=Mj8s5l5Zsi5H?8ul~V)0Ld``(=348`J%7jk9% zhIg(Id>BWtx5i_8#pj(;MUdjTcC`4sTk?urG(n8-Ei#D~*BH{zj##P;zL*OU&y=xJ zDR-%TMuRQpjN?zy;ZLCpo$*pK?v=t7i|;5rj!Q@J96nZ43qgD+mNSOb1zE3D9yv8W z1vPXG$hcd|S8?AUz1_Q*rp}xMOw6uIU@T{f3 Rb-CsKqgl@Ovp;9x9T0@5~eG{FEp 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 Q-AdJZUCYJp!%fcr1C%G6mH+?% From 4982ac501f7d36c3691e00c80a472c066792f037 Mon Sep 17 00:00:00 2001 From: Michael Papadopoulos Date: Sat, 28 Jan 2023 16:00:49 -0500 Subject: [PATCH 06/13] clear --- iQuHack-challenge-2023-task2.ipynb | 2951 +--------------------------- 1 file changed, 22 insertions(+), 2929 deletions(-) diff --git a/iQuHack-challenge-2023-task2.ipynb b/iQuHack-challenge-2023-task2.ipynb index 78fbcd2..bc06808 100644 --- a/iQuHack-challenge-2023-task2.ipynb +++ b/iQuHack-challenge-2023-task2.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -46,47 +46,7 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[\n", - " {\n", - " \"cloudName\": \"AzureCloud\",\n", - " \"homeTenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", - " \"id\": \"6d61051a-6e40-4845-a03a-3c5160bb5629\",\n", - " \"isDefault\": true,\n", - " \"managedByTenants\": [\n", - " {\n", - " \"tenantId\": \"d0ecd01b-d782-448e-bae0-c3cad0e0543a\"\n", - " },\n", - " {\n", - " \"tenantId\": \"94c4857e-1130-4ab8-8eac-069b40c9db20\"\n", - " },\n", - " {\n", - " \"tenantId\": \"f702a9dc-ae48-4dc7-8f0a-8155a6dfa4e5\"\n", - " }\n", - " ],\n", - " \"name\": \"Azure for Students\",\n", - " \"state\": \"Enabled\",\n", - " \"tenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", - " \"user\": {\n", - " \"name\": \"papadm2@rpi.edu\",\n", - " \"type\": \"user\"\n", - " }\n", - " }\n", - "]\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.\n" - ] - } - ], + "outputs": [], "source": [ "!az login" ] @@ -106,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -127,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -148,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -184,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -249,7 +209,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -305,7 +265,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -317,1710 +277,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "{\"diagnostic_kind\":\"state-vector\",\"qubit_ids\":[0,1,2,3,4,5],\"n_qubits\":6,\"amplitudes\":{\"0\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"1\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"2\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"3\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"4\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"5\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"6\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"7\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"8\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"9\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"10\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"11\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"12\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"13\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"14\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"15\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"16\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"17\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"18\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"19\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"20\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"21\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"22\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"23\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"24\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"25\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"26\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"27\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"28\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"29\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"30\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"31\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"32\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"33\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"34\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"35\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"36\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"37\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"38\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"39\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"40\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"41\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"42\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"43\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"44\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"45\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"46\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"47\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"48\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"49\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"50\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"51\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"52\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"53\":{\"Real\":0.17677669529663698,\"Imaginary\":0.0,\"Magnitude\":0.17677669529663698,\"Phase\":0.0},\"54\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"55\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"56\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"57\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"58\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"59\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"60\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"61\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"62\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"63\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0}}}", - "text/html": [ - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Qubit IDs0, 1, 2, 3, 4, 5
Basis state (bitstring)AmplitudeMeas. Pr.
$\\left|000000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|000001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|000010\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|000011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|000100\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|000101\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|000110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|000111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|001000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|001001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|001010\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|001011\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|001100\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|001101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|001110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|001111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|010000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|010001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|010010\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|010011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|010100\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|010101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|010110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|010111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|011000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|011001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|011010\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|011011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|011100\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|011101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|011110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|011111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|100000\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|100001\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|100010\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|100011\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|100100\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|100101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|100110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|100111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|101000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|101001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|101010\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|101011\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|101100\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|101101\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|101110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|101111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|110000\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|110001\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|110010\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|110011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|110100\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|110101\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|110110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|110111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|111000\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|111001\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|111010\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|111011\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|111100\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|111101\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|111110\\right\\rangle$$0.1768 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|111111\\right\\rangle$$0.0000 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
" - ], - "text/plain": [ - "|000000⟩\t0.17677669529663698 + 0𝑖\n", - "|000001⟩\t0 + 0𝑖\n", - "|000010⟩\t0.17677669529663698 + 0𝑖\n", - "|000011⟩\t0 + 0𝑖\n", - "|000100⟩\t0 + 0𝑖\n", - "|000101⟩\t0.17677669529663698 + 0𝑖\n", - "|000110⟩\t0.17677669529663698 + 0𝑖\n", - "|000111⟩\t0 + 0𝑖\n", - "|001000⟩\t0.17677669529663698 + 0𝑖\n", - "|001001⟩\t0 + 0𝑖\n", - "|001010⟩\t0 + 0𝑖\n", - "|001011⟩\t0.17677669529663698 + 0𝑖\n", - "|001100⟩\t0.17677669529663698 + 0𝑖\n", - "|001101⟩\t0 + 0𝑖\n", - "|001110⟩\t0.17677669529663698 + 0𝑖\n", - "|001111⟩\t0 + 0𝑖\n", - "|010000⟩\t0.17677669529663698 + 0𝑖\n", - "|010001⟩\t0 + 0𝑖\n", - "|010010⟩\t0.17677669529663698 + 0𝑖\n", - "|010011⟩\t0 + 0𝑖\n", - "|010100⟩\t0.17677669529663698 + 0𝑖\n", - "|010101⟩\t0 + 0𝑖\n", - "|010110⟩\t0.17677669529663698 + 0𝑖\n", - "|010111⟩\t0 + 0𝑖\n", - "|011000⟩\t0.17677669529663698 + 0𝑖\n", - "|011001⟩\t0 + 0𝑖\n", - "|011010⟩\t0.17677669529663698 + 0𝑖\n", - "|011011⟩\t0 + 0𝑖\n", - "|011100⟩\t0.17677669529663698 + 0𝑖\n", - "|011101⟩\t0 + 0𝑖\n", - "|011110⟩\t0.17677669529663698 + 0𝑖\n", - "|011111⟩\t0 + 0𝑖\n", - "|100000⟩\t0 + 0𝑖\n", - "|100001⟩\t0.17677669529663698 + 0𝑖\n", - "|100010⟩\t0 + 0𝑖\n", - "|100011⟩\t0.17677669529663698 + 0𝑖\n", - "|100100⟩\t0.17677669529663698 + 0𝑖\n", - "|100101⟩\t0 + 0𝑖\n", - "|100110⟩\t0.17677669529663698 + 0𝑖\n", - "|100111⟩\t0 + 0𝑖\n", - "|101000⟩\t0.17677669529663698 + 0𝑖\n", - "|101001⟩\t0 + 0𝑖\n", - "|101010⟩\t0 + 0𝑖\n", - "|101011⟩\t0.17677669529663698 + 0𝑖\n", - "|101100⟩\t0 + 0𝑖\n", - "|101101⟩\t0.17677669529663698 + 0𝑖\n", - "|101110⟩\t0.17677669529663698 + 0𝑖\n", - "|101111⟩\t0 + 0𝑖\n", - "|110000⟩\t0 + 0𝑖\n", - "|110001⟩\t0.17677669529663698 + 0𝑖\n", - "|110010⟩\t0.17677669529663698 + 0𝑖\n", - "|110011⟩\t0 + 0𝑖\n", - "|110100⟩\t0 + 0𝑖\n", - "|110101⟩\t0.17677669529663698 + 0𝑖\n", - "|110110⟩\t0.17677669529663698 + 0𝑖\n", - "|110111⟩\t0 + 0𝑖\n", - "|111000⟩\t0.17677669529663698 + 0𝑖\n", - "|111001⟩\t0 + 0𝑖\n", - "|111010⟩\t0.17677669529663698 + 0𝑖\n", - "|111011⟩\t0 + 0𝑖\n", - "|111100⟩\t0.17677669529663698 + 0𝑖\n", - "|111101⟩\t0 + 0𝑖\n", - "|111110⟩\t0.17677669529663698 + 0𝑖\n", - "|111111⟩\t0 + 0𝑖" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "()" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", @@ -2045,7 +302,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -2057,56 +314,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "\"Connecting to Azure Quantum...\"", - "text/plain": [ - "Connecting to Azure Quantum..." - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected to Azure Quantum workspace iQuHack-Workspace-micpap25 in location eastus.\r\n" - ] - }, - { - "data": { - "text/plain": [ - "[{'id': 'ionq.qpu', 'current_availability': {}, 'average_queue_time': 270512},\n", - " {'id': 'ionq.qpu.aria-1', 'current_availability': {}, 'average_queue_time': 403929},\n", - " {'id': 'ionq.simulator', 'current_availability': {}, 'average_queue_time': 2},\n", - " {'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s1', 'current_availability': {}, 'average_queue_time': 257411},\n", - " {'id': 'quantinuum.hqs-lt-s1-apival', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s2', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s2-apival', 'current_availability': {}, 'average_queue_time': 1},\n", - " {'id': 'quantinuum.hqs-lt-s1-sim', 'current_availability': {}, 'average_queue_time': 4298},\n", - " {'id': 'quantinuum.hqs-lt-s2-sim', 'current_availability': {}, 'average_queue_time': 138},\n", - " {'id': 'quantinuum.hqs-lt', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.qpu.h1-1', 'current_availability': {}, 'average_queue_time': 257411},\n", - " {'id': 'quantinuum.sim.h1-1sc', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.qpu.h1-2', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.sim.h1-2sc', 'current_availability': {}, 'average_queue_time': 1},\n", - " {'id': 'quantinuum.sim.h1-1e', 'current_availability': {}, 'average_queue_time': 4298},\n", - " {'id': 'quantinuum.sim.h1-2e', 'current_availability': {}, 'average_queue_time': 138},\n", - " {'id': 'quantinuum.qpu.h1', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'rigetti.sim.qvm', 'current_availability': {}, 'average_queue_time': 5},\n", - " {'id': 'rigetti.qpu.aspen-11', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'rigetti.qpu.aspen-m-2', 'current_availability': {}, 'average_queue_time': 5},\n", - " {'id': 'rigetti.qpu.aspen-m-3', 'current_availability': {}, 'average_queue_time': 5}]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", @@ -2118,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -2130,33 +338,14 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading package Microsoft.Quantum.Providers.Core and dependencies...\n", - "Active target is now microsoft.estimator\n" - ] - }, - { - "data": { - "text/plain": [ - "{'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0}" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "qsharp.azure.target(\"microsoft.estimator\")" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -2168,21 +357,7 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Submitting Task2_ResourceEstimationWrapper to target microsoft.estimator...\n", - "Job successfully submitted.\n", - " Job name: RE for the task 2\n", - " Job ID: fca65cf0-cdf4-4d26-bf0c-bd7a85c5ed0c\n", - "Waiting up to 30 seconds for Azure Quantum job to complete...\n", - "[3:58:05 PM] Current job status: Executing\n", - "[3:58:10 PM] Current job status: Succeeded\n" - ] - } - ], + "outputs": [], "source": [ "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", "result = qsharp.azure.execute(Task2_ResourceEstimationWrapper, jobName=\"RE for the task 2\")" @@ -2190,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -2202,1051 +377,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "{\"errorBudget\":{\"logical\":0.0005,\"rotations\":0.0,\"tstates\":0.0005},\"jobParams\":{\"errorBudget\":0.001,\"qecScheme\":{\"crossingPrefactor\":0.03,\"errorCorrectionThreshold\":0.01,\"logicalCycleTime\":\"(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\",\"name\":\"surface_code\",\"physicalQubitsPerLogicalQubit\":\"2 * codeDistance * codeDistance\"},\"qubitParams\":{\"instructionSet\":\"GateBased\",\"name\":\"qubit_gate_ns_e3\",\"oneQubitGateErrorRate\":0.001,\"oneQubitGateTime\":\"50 ns\",\"oneQubitMeasurementErrorRate\":0.001,\"oneQubitMeasurementTime\":\"100 ns\",\"tGateErrorRate\":0.001,\"tGateTime\":\"50 ns\",\"twoQubitGateErrorRate\":0.001,\"twoQubitGateTime\":\"50 ns\"}},\"logicalCounts\":{\"ccixCount\":12,\"cczCount\":5,\"measurementCount\":12,\"numQubits\":9,\"rotationCount\":0,\"rotationDepth\":0,\"tCount\":0},\"logicalQubit\":{\"codeDistance\":11,\"logicalCycleTime\":4400.0,\"logicalErrorRate\":3.000000000000002E-08,\"physicalQubits\":242},\"physicalCounts\":{\"breakdown\":{\"algorithmicLogicalDepth\":63,\"algorithmicLogicalQubits\":28,\"cliffordErrorRate\":0.001,\"logicalDepth\":63,\"numTfactories\":12,\"numTfactoryRuns\":6,\"numTsPerRotation\":null,\"numTstates\":68,\"physicalQubitsForAlgorithm\":6776,\"physicalQubitsForTfactories\":77760,\"requiredLogicalQubitErrorRate\":2.834467120181406E-07,\"requiredLogicalTstateErrorRate\":7.3529411764705884E-06},\"physicalQubits\":84536,\"runtime\":277200},\"physicalCountsFormatted\":{\"codeDistancePerRound\":\"9\",\"errorBudget\":\"1.00e-3\",\"errorBudgetLogical\":\"5.00e-4\",\"errorBudgetRotations\":\"0.00e0\",\"errorBudgetTstates\":\"5.00e-4\",\"logicalCycleTime\":\"4us 400ns\",\"logicalErrorRate\":\"3.00e-8\",\"numTsPerRotation\":\"No rotations in algorithm\",\"numUnitsPerRound\":\"2\",\"physicalQubitsForTfactoriesPercentage\":\"91.98 %\",\"physicalQubitsPerRound\":\"6480\",\"requiredLogicalQubitErrorRate\":\"2.83e-7\",\"requiredLogicalTstateErrorRate\":\"7.35e-6\",\"runtime\":\"277us 200ns\",\"tfactoryRuntime\":\"46us 800ns\",\"tfactoryRuntimePerRound\":\"46us 800ns\",\"tstateLogicalErrorRate\":\"2.17e-6\",\"unitNamePerRound\":\"15-to-1 space efficient logical\"},\"reportData\":{\"assumptions\":[\"_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._\",\"**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.\",\"**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.\",\"**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).\",\"**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.\",\"**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.\",\"**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.\"],\"groups\":[{\"alwaysVisible\":true,\"entries\":[{\"description\":\"Number of physical qubits\",\"explanation\":\"This value represents the total number of physical qubits, which is the sum of 6776 physical qubits to implement the algorithm logic, and 77760 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.\",\"label\":\"Physical qubits\",\"path\":\"physicalCounts/physicalQubits\"},{\"description\":\"Total runtime\",\"explanation\":\"This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (4us 400ns) multiplied by the 63 logical cycles to run the algorithm. If however the duration of a single T factory (here: 46us 800ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/runtime\"}],\"title\":\"Physical resource estimates\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits for the algorithm after layout\",\"explanation\":\"Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 9$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 28$ logical qubits.\",\"label\":\"Logical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalQubits\"},{\"description\":\"Number of logical cycles for the algorithm\",\"explanation\":\"To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 12 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 5 CCZ and 12 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.\",\"label\":\"Algorithmic depth\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalDepth\"},{\"description\":\"Number of logical cycles performed\",\"explanation\":\"This number is usually equal to the logical depth of the algorithm, which is 63. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\"label\":\"Logical depth\",\"path\":\"physicalCounts/breakdown/logicalDepth\"},{\"description\":\"Number of T states consumed by the algorithm\",\"explanation\":\"To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 5 CCZ and 12 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.\",\"label\":\"Number of T states\",\"path\":\"physicalCounts/breakdown/numTstates\"},{\"description\":\"Number of T factories capable of producing the demanded 68 T states during the algorithm's runtime\",\"explanation\":\"The total number of T factories 12 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{68\\\\;\\\\text{T states} \\\\cdot 46us 800ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 277us 200ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$\",\"label\":\"Number of T factories\",\"path\":\"physicalCounts/breakdown/numTfactories\"},{\"description\":\"Number of times all T factories are invoked\",\"explanation\":\"In order to prepare the 68 T states, the 12 copies of the T factory are repeatedly invoked 6 times.\",\"label\":\"Number of T factory invocations\",\"path\":\"physicalCounts/breakdown/numTfactoryRuns\"},{\"description\":\"Number of physical qubits for the algorithm after layout\",\"explanation\":\"The 6776 are the product of the 28 logical qubits after layout and the 242 physical qubits that encode a single logical qubit.\",\"label\":\"Physical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForAlgorithm\"},{\"description\":\"Number of physical qubits for the T factories\",\"explanation\":\"Each T factory requires 6480 physical qubits and we run 12 in parallel, therefore we need $77760 = 6480 \\\\cdot 12$ qubits.\",\"label\":\"Physical T factory qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForTfactories\"},{\"description\":\"The minimum logical qubit error rate required to run the algorithm within the error budget\",\"explanation\":\"The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 28 logical qubits and the total cycle count 63.\",\"label\":\"Required logical qubit error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalQubitErrorRate\"},{\"description\":\"The minimum T state error rate required for distilled T states\",\"explanation\":\"The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 68.\",\"label\":\"Required logical T state error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalTstateErrorRate\"},{\"description\":\"Number of T states to implement a rotation with an arbitrary angle\",\"explanation\":\"The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.\",\"label\":\"Number of T states per rotation\",\"path\":\"physicalCountsFormatted/numTsPerRotation\"}],\"title\":\"Resource estimates breakdown\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Name of QEC scheme\",\"explanation\":\"You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.\",\"label\":\"QEC scheme\",\"path\":\"jobParams/qecScheme/name\"},{\"description\":\"Required code distance for error correction\",\"explanation\":\"The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.0000002834467120181406)}{\\\\log(0.01/0.001)} - 1$\",\"label\":\"Code distance\",\"path\":\"logicalQubit/codeDistance\"},{\"description\":\"Number of physical qubits per logical qubit\",\"explanation\":\"The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.\",\"label\":\"Physical qubits\",\"path\":\"logicalQubit/physicalQubits\"},{\"description\":\"Duration of a logical cycle in nanoseconds\",\"explanation\":\"The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.\",\"label\":\"Logical cycle time\",\"path\":\"physicalCountsFormatted/logicalCycleTime\"},{\"description\":\"Logical qubit error rate\",\"explanation\":\"The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{11 + 1}{2}$\",\"label\":\"Logical qubit error rate\",\"path\":\"physicalCountsFormatted/logicalErrorRate\"},{\"description\":\"Crossing prefactor used in QEC scheme\",\"explanation\":\"The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.\",\"label\":\"Crossing prefactor\",\"path\":\"jobParams/qecScheme/crossingPrefactor\"},{\"description\":\"Error correction threshold used in QEC scheme\",\"explanation\":\"The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.\",\"label\":\"Error correction threshold\",\"path\":\"jobParams/qecScheme/errorCorrectionThreshold\"},{\"description\":\"QEC scheme formula used to compute logical cycle time\",\"explanation\":\"This is the formula that is used to compute the logical cycle time 4us 400ns.\",\"label\":\"Logical cycle time formula\",\"path\":\"jobParams/qecScheme/logicalCycleTime\"},{\"description\":\"QEC scheme formula used to compute number of physical qubits per logical qubit\",\"explanation\":\"This is the formula that is used to compute the number of physical qubits per logical qubits 242.\",\"label\":\"Physical qubits formula\",\"path\":\"jobParams/qecScheme/physicalQubitsPerLogicalQubit\"}],\"title\":\"Logical qubit parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of physical qubits for a single T factory\",\"explanation\":\"This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.\",\"label\":\"Physical qubits\",\"path\":\"tfactory/physicalQubits\"},{\"description\":\"Runtime of a single T factory\",\"explanation\":\"The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/tfactoryRuntime\"},{\"description\":\"Number of output T states produced in a single run of T factory\",\"explanation\":\"The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.17e-6.\",\"label\":\"Number of output T states per run\",\"path\":\"tfactory/numTstates\"},{\"description\":\"Number of physical input T states consumed in a single run of a T factory\",\"explanation\":\"This value includes the physical input T states of all copies of the distillation unit in the first round.\",\"label\":\"Number of input T states per run\",\"path\":\"tfactory/numInputTstates\"},{\"description\":\"The number of distillation rounds\",\"explanation\":\"This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.\",\"label\":\"Distillation rounds\",\"path\":\"tfactory/numRounds\"},{\"description\":\"The number of units in each round of distillation\",\"explanation\":\"This is the number of copies for the distillation units per round.\",\"label\":\"Distillation units per round\",\"path\":\"physicalCountsFormatted/numUnitsPerRound\"},{\"description\":\"The types of distillation units\",\"explanation\":\"These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.\",\"label\":\"Distillation units\",\"path\":\"physicalCountsFormatted/unitNamePerRound\"},{\"description\":\"The code distance in each round of distillation\",\"explanation\":\"This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.\",\"label\":\"Distillation code distances\",\"path\":\"physicalCountsFormatted/codeDistancePerRound\"},{\"description\":\"The number of physical qubits used in each round of distillation\",\"explanation\":\"The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.\",\"label\":\"Number of physical qubits per round\",\"path\":\"physicalCountsFormatted/physicalQubitsPerRound\"},{\"description\":\"The runtime of each distillation round\",\"explanation\":\"The runtime of the T factory is the sum of the runtimes in all rounds.\",\"label\":\"Runtime per round\",\"path\":\"physicalCountsFormatted/tfactoryRuntimePerRound\"},{\"description\":\"Logical T state error rate\",\"explanation\":\"This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 7.35e-6.\",\"label\":\"Logical T state error rate\",\"path\":\"physicalCountsFormatted/tstateLogicalErrorRate\"}],\"title\":\"T factory parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits in the input quantum program\",\"explanation\":\"We determine 28 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.\",\"label\":\"Logical qubits (pre-layout)\",\"path\":\"logicalCounts/numQubits\"},{\"description\":\"Number of T gates in the input quantum program\",\"explanation\":\"This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.\",\"label\":\"T gates\",\"path\":\"logicalCounts/tCount\"},{\"description\":\"Number of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.\",\"label\":\"Rotation gates\",\"path\":\"logicalCounts/rotationCount\"},{\"description\":\"Depth of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.\",\"label\":\"Rotation depth\",\"path\":\"logicalCounts/rotationDepth\"},{\"description\":\"Number of CCZ-gates in the input quantum program\",\"explanation\":\"This is the number of CCZ gates.\",\"label\":\"CCZ gates\",\"path\":\"logicalCounts/cczCount\"},{\"description\":\"Number of CCiX-gates in the input quantum program\",\"explanation\":\"This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].\",\"label\":\"CCiX gates\",\"path\":\"logicalCounts/ccixCount\"},{\"description\":\"Number of single qubit measurements in the input quantum program\",\"explanation\":\"This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.\",\"label\":\"Measurement operations\",\"path\":\"logicalCounts/measurementCount\"}],\"title\":\"Pre-layout logical resources\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Total error budget for the algorithm\",\"explanation\":\"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\"label\":\"Total error budget\",\"path\":\"physicalCountsFormatted/errorBudget\"},{\"description\":\"Probability of at least one logical error\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"Logical error probability\",\"path\":\"physicalCountsFormatted/errorBudgetLogical\"},{\"description\":\"Probability of at least one faulty T distillation\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"T distillation error probability\",\"path\":\"physicalCountsFormatted/errorBudgetTstates\"},{\"description\":\"Probability of at least one failed rotation synthesis\",\"explanation\":\"This is one third of the total error budget 1.00e-3.\",\"label\":\"Rotation synthesis error probability\",\"path\":\"physicalCountsFormatted/errorBudgetRotations\"}],\"title\":\"Assumed error budget\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Some descriptive name for the qubit model\",\"explanation\":\"You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or ¬µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).\",\"label\":\"Qubit name\",\"path\":\"jobParams/qubitParams/name\"},{\"description\":\"Underlying qubit technology (gate-based or Majorana)\",\"explanation\":\"When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.\",\"label\":\"Instruction set\",\"path\":\"jobParams/qubitParams/instructionSet\"},{\"description\":\"Operation time for single-qubit measurement (t_meas) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.\",\"label\":\"Single-qubit measurement time\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementTime\"},{\"description\":\"Operation time for single-qubit gate (t_gate) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.\",\"label\":\"Single-qubit gate time\",\"path\":\"jobParams/qubitParams/oneQubitGateTime\"},{\"description\":\"Operation time for two-qubit gate in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.\",\"label\":\"Two-qubit gate time\",\"path\":\"jobParams/qubitParams/twoQubitGateTime\"},{\"description\":\"Operation time for a T gate\",\"explanation\":\"This is the operation time in nanoseconds to execute a T gate.\",\"label\":\"T gate time\",\"path\":\"jobParams/qubitParams/tGateTime\"},{\"description\":\"Error rate for single-qubit measurement\",\"explanation\":\"This is the probability in which a single-qubit measurement in the Pauli basis may fail.\",\"label\":\"Single-qubit measurement error rate\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementErrorRate\"},{\"description\":\"Error rate for single-qubit Clifford gate (p)\",\"explanation\":\"This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.\",\"label\":\"Single-qubit error rate\",\"path\":\"jobParams/qubitParams/oneQubitGateErrorRate\"},{\"description\":\"Error rate for two-qubit Clifford gate\",\"explanation\":\"This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.\",\"label\":\"Two-qubit error rate\",\"path\":\"jobParams/qubitParams/twoQubitGateErrorRate\"},{\"description\":\"Error rate to prepare single-qubit T state or apply a T gate (p_T)\",\"explanation\":\"This is the probability in which executing a single T gate may fail.\",\"label\":\"T gate error rate\",\"path\":\"jobParams/qubitParams/tGateErrorRate\"}],\"title\":\"Physical qubit parameters\"}]},\"status\":\"success\",\"tfactory\":{\"codeDistancePerRound\":[9],\"logicalErrorRate\":2.165000000000001E-06,\"numInputTstates\":30,\"numRounds\":1,\"numTstates\":1,\"numUnitsPerRound\":[2],\"physicalQubits\":6480,\"physicalQubitsPerRound\":[6480],\"runtime\":46800.0,\"runtimePerRound\":[46800.0],\"unitNamePerRound\":[\"15-to-1 space efficient logical\"]}}", - "text/html": [ - "\r\n", - "
\r\n", - " \r\n", - " Physical resource estimates\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Physical qubits84536\r\n", - "

Number of physical qubits

\n", - "
\r\n", - "
\r\n", - "

This value represents the total number of physical qubits, which is the sum of 6776 physical qubits to implement the algorithm logic, and 77760 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.

\n", - "\r\n", - "
Runtime277us 200ns\r\n", - "

Total runtime

\n", - "
\r\n", - "
\r\n", - "

This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (4us 400ns) multiplied by the 63 logical cycles to run the algorithm. If however the duration of a single T factory (here: 46us 800ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Resource estimates breakdown\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Logical algorithmic qubits28\r\n", - "

Number of logical qubits for the algorithm after layout

\n", - "
\r\n", - "
\r\n", - "

Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the \\(Q_{\\rm alg} = 9\\) logical qubits in the input algorithm, we require in total $2 \\cdot Q_{\\rm alg} + \\lceil \\sqrt{8 \\cdot Q_{\\rm alg}}\\rceil + 1 = 28$ logical qubits.

\n", - "\r\n", - "
Algorithmic depth63\r\n", - "

Number of logical cycles for the algorithm

\n", - "
\r\n", - "
\r\n", - "

To execute the algorithm using Parallel Synthesis Sequential Pauli Computation (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 12 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 5 CCZ and 12 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.

\n", - "\r\n", - "
Logical depth63\r\n", - "

Number of logical cycles performed

\n", - "
\r\n", - "
\r\n", - "

This number is usually equal to the logical depth of the algorithm, which is 63. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.

\n", - "\r\n", - "
Number of T states68\r\n", - "

Number of T states consumed by the algorithm

\n", - "
\r\n", - "
\r\n", - "

To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 5 CCZ and 12 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.

\n", - "\r\n", - "
Number of T factories12\r\n", - "

Number of T factories capable of producing the demanded 68 T states during the algorithm's runtime

\n", - "
\r\n", - "
\r\n", - "

The total number of T factories 12 that are executed in parallel is computed as \\(\\left\\lceil\\dfrac{68\\;\\text{T states} \\cdot 46us 800ns\\;\\text{T factory duration}}{1\\;\\text{T states per T factory} \\cdot 277us 200ns\\;\\text{algorithm runtime}}\\right\\rceil\\)

\n", - "\r\n", - "
Number of T factory invocations6\r\n", - "

Number of times all T factories are invoked

\n", - "
\r\n", - "
\r\n", - "

In order to prepare the 68 T states, the 12 copies of the T factory are repeatedly invoked 6 times.

\n", - "\r\n", - "
Physical algorithmic qubits6776\r\n", - "

Number of physical qubits for the algorithm after layout

\n", - "
\r\n", - "
\r\n", - "

The 6776 are the product of the 28 logical qubits after layout and the 242 physical qubits that encode a single logical qubit.

\n", - "\r\n", - "
Physical T factory qubits77760\r\n", - "

Number of physical qubits for the T factories

\n", - "
\r\n", - "
\r\n", - "

Each T factory requires 6480 physical qubits and we run 12 in parallel, therefore we need $77760 = 6480 \\cdot 12$ qubits.

\n", - "\r\n", - "
Required logical qubit error rate2.83e-7\r\n", - "

The minimum logical qubit error rate required to run the algorithm within the error budget

\n", - "
\r\n", - "
\r\n", - "

The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 28 logical qubits and the total cycle count 63.

\n", - "\r\n", - "
Required logical T state error rate7.35e-6\r\n", - "

The minimum T state error rate required for distilled T states

\n", - "
\r\n", - "
\r\n", - "

The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 68.

\n", - "\r\n", - "
Number of T states per rotationNo rotations in algorithm\r\n", - "

Number of T states to implement a rotation with an arbitrary angle

\n", - "
\r\n", - "
\r\n", - "

The number of T states to implement a rotation with an arbitrary angle is \\(\\lceil 0.53 \\log_2(0 / 0) + 5.3\\rceil\\) [arXiv:2203.10064]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Logical qubit parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
QEC schemesurface_code\r\n", - "

Name of QEC scheme

\n", - "
\r\n", - "
\r\n", - "

You can load pre-defined QEC schemes by using the name surface_code or floquet_code. The latter only works with Majorana qubits.

\n", - "\r\n", - "
Code distance11\r\n", - "

Required code distance for error correction

\n", - "
\r\n", - "
\r\n", - "

The code distance is the smallest odd integer greater or equal to \\(\\dfrac{2\\log(0.03 / 0.0000002834467120181406)}{\\log(0.01/0.001)} - 1\\)

\n", - "\r\n", - "
Physical qubits242\r\n", - "

Number of physical qubits per logical qubit

\n", - "
\r\n", - "
\r\n", - "

The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.

\n", - "\r\n", - "
Logical cycle time4us 400ns\r\n", - "

Duration of a logical cycle in nanoseconds

\n", - "
\r\n", - "
\r\n", - "

The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.

\n", - "\r\n", - "
Logical qubit error rate3.00e-8\r\n", - "

Logical qubit error rate

\n", - "
\r\n", - "
\r\n", - "

The logical qubit error rate is computed as $0.03 \\cdot \\left(\\dfrac{0.001}{0.01}\\right)^\\frac{11 + 1}{2}$

\n", - "\r\n", - "
Crossing prefactor0.03\r\n", - "

Crossing prefactor used in QEC scheme

\n", - "
\r\n", - "
\r\n", - "

The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.

\n", - "\r\n", - "
Error correction threshold0.01\r\n", - "

Error correction threshold used in QEC scheme

\n", - "
\r\n", - "
\r\n", - "

The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.

\n", - "\r\n", - "
Logical cycle time formula(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\r\n", - "

QEC scheme formula used to compute logical cycle time

\n", - "
\r\n", - "
\r\n", - "

This is the formula that is used to compute the logical cycle time 4us 400ns.

\n", - "\r\n", - "
Physical qubits formula2 * codeDistance * codeDistance\r\n", - "

QEC scheme formula used to compute number of physical qubits per logical qubit

\n", - "
\r\n", - "
\r\n", - "

This is the formula that is used to compute the number of physical qubits per logical qubits 242.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " T factory parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Physical qubits6480\r\n", - "

Number of physical qubits for a single T factory

\n", - "
\r\n", - "
\r\n", - "

This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.

\n", - "\r\n", - "
Runtime46us 800ns\r\n", - "

Runtime of a single T factory

\n", - "
\r\n", - "
\r\n", - "

The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.

\n", - "\r\n", - "
Number of output T states per run1\r\n", - "

Number of output T states produced in a single run of T factory

\n", - "
\r\n", - "
\r\n", - "

The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.17e-6.

\n", - "\r\n", - "
Number of input T states per run30\r\n", - "

Number of physical input T states consumed in a single run of a T factory

\n", - "
\r\n", - "
\r\n", - "

This value includes the physical input T states of all copies of the distillation unit in the first round.

\n", - "\r\n", - "
Distillation rounds1\r\n", - "

The number of distillation rounds

\n", - "
\r\n", - "
\r\n", - "

This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.

\n", - "\r\n", - "
Distillation units per round2\r\n", - "

The number of units in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

This is the number of copies for the distillation units per round.

\n", - "\r\n", - "
Distillation units15-to-1 space efficient logical\r\n", - "

The types of distillation units

\n", - "
\r\n", - "
\r\n", - "

These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.

\n", - "\r\n", - "
Distillation code distances9\r\n", - "

The code distance in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.

\n", - "\r\n", - "
Number of physical qubits per round6480\r\n", - "

The number of physical qubits used in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.

\n", - "\r\n", - "
Runtime per round46us 800ns\r\n", - "

The runtime of each distillation round

\n", - "
\r\n", - "
\r\n", - "

The runtime of the T factory is the sum of the runtimes in all rounds.

\n", - "\r\n", - "
Logical T state error rate2.17e-6\r\n", - "

Logical T state error rate

\n", - "
\r\n", - "
\r\n", - "

This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 7.35e-6.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Pre-layout logical resources\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Logical qubits (pre-layout)9\r\n", - "

Number of logical qubits in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

We determine 28 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.

\n", - "\r\n", - "
T gates0\r\n", - "

Number of T gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.

\n", - "\r\n", - "
Rotation gates0\r\n", - "

Number of rotation gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.

\n", - "\r\n", - "
Rotation depth0\r\n", - "

Depth of rotation gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.

\n", - "\r\n", - "
CCZ gates5\r\n", - "

Number of CCZ-gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of CCZ gates.

\n", - "\r\n", - "
CCiX gates12\r\n", - "

Number of CCiX-gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of CCiX gates, which applies \\(-iX\\) controlled on two control qubits [1212.5069].

\n", - "\r\n", - "
Measurement operations12\r\n", - "

Number of single qubit measurements in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Assumed error budget\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Total error budget1.00e-3\r\n", - "

Total error budget for the algorithm

\n", - "
\r\n", - "
\r\n", - "

The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget \\(\\epsilon = \\epsilon_{\\log} + \\epsilon_{\\rm dis} + \\epsilon_{\\rm syn}\\) is uniformly distributed and applies to errors \\(\\epsilon_{\\log}\\) to implement logical qubits, an error budget \\(\\epsilon_{\\rm dis}\\) to produce T states through distillation, and an error budget \\(\\epsilon_{\\rm syn}\\) to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets \\(\\epsilon_{\\rm dis}\\) and \\(\\epsilon_{\\rm syn}\\) are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.

\n", - "\r\n", - "
Logical error probability5.00e-4\r\n", - "

Probability of at least one logical error

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", - "\r\n", - "
T distillation error probability5.00e-4\r\n", - "

Probability of at least one faulty T distillation

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", - "\r\n", - "
Rotation synthesis error probability0.00e0\r\n", - "

Probability of at least one failed rotation synthesis

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Physical qubit parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Qubit namequbit_gate_ns_e3\r\n", - "

Some descriptive name for the qubit model

\n", - "
\r\n", - "
\r\n", - "

You can load pre-defined qubit parameters by using the names qubit_gate_ns_e3, qubit_gate_ns_e4, qubit_gate_us_e3, qubit_gate_us_e4, qubit_maj_ns_e4, or qubit_maj_ns_e6. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).

\n", - "\r\n", - "
Instruction setGateBased\r\n", - "

Underlying qubit technology (gate-based or Majorana)

\n", - "
\r\n", - "
\r\n", - "

When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either gate-based or Majorana. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.

\n", - "\r\n", - "
Single-qubit measurement time100 ns\r\n", - "

Operation time for single-qubit measurement (t_meas) in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.

\n", - "\r\n", - "
Single-qubit gate time50 ns\r\n", - "

Operation time for single-qubit gate (t_gate) in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.

\n", - "\r\n", - "
Two-qubit gate time50 ns\r\n", - "

Operation time for two-qubit gate in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.

\n", - "\r\n", - "
T gate time50 ns\r\n", - "

Operation time for a T gate

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to execute a T gate.

\n", - "\r\n", - "
Single-qubit measurement error rate0.001\r\n", - "

Error rate for single-qubit measurement

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a single-qubit measurement in the Pauli basis may fail.

\n", - "\r\n", - "
Single-qubit error rate0.001\r\n", - "

Error rate for single-qubit Clifford gate (p)

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.

\n", - "\r\n", - "
Two-qubit error rate0.001\r\n", - "

Error rate for two-qubit Clifford gate

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.

\n", - "\r\n", - "
T gate error rate0.001\r\n", - "

Error rate to prepare single-qubit T state or apply a T gate (p_T)

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which executing a single T gate may fail.

\n", - "\r\n", - "
\r\n", - "
\r\n", - " Assumptions\r\n", - "
    \r\n", - "
  • More details on the following lists of assumptions can be found in the paper Accessing requirements for scaling quantum computers and their applications.

    \n", - "
  • \r\n", - "
  • Uniform independent physical noise. We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.

    \n", - "
  • \r\n", - "
  • Efficient classical computation. We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.

    \n", - "
  • \r\n", - "
  • Extraction circuits for planar quantum ISA. We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).

    \n", - "
  • \r\n", - "
  • Uniform independent logical noise. We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.

    \n", - "
  • \r\n", - "
  • Negligible Clifford costs for synthesis. We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.

    \n", - "
  • \r\n", - "
  • Smooth magic state consumption rate. We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.

    \n", - "
  • \r\n", - "
\r\n" - ], - "text/plain": [ - "{'errorBudget': {'logical': 0.0005, 'rotations': 0.0, 'tstates': 0.0005},\n", - " 'jobParams': {'errorBudget': 0.001,\n", - " 'qecScheme': {'crossingPrefactor': 0.03,\n", - " 'errorCorrectionThreshold': 0.01,\n", - " 'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',\n", - " 'name': 'surface_code',\n", - " 'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance'},\n", - " 'qubitParams': {'instructionSet': 'GateBased',\n", - " 'name': 'qubit_gate_ns_e3',\n", - " 'oneQubitGateErrorRate': 0.001,\n", - " 'oneQubitGateTime': '50 ns',\n", - " 'oneQubitMeasurementErrorRate': 0.001,\n", - " 'oneQubitMeasurementTime': '100 ns',\n", - " 'tGateErrorRate': 0.001,\n", - " 'tGateTime': '50 ns',\n", - " 'twoQubitGateErrorRate': 0.001,\n", - " 'twoQubitGateTime': '50 ns'}},\n", - " 'logicalCounts': {'ccixCount': 12,\n", - " 'cczCount': 5,\n", - " 'measurementCount': 12,\n", - " 'numQubits': 9,\n", - " 'rotationCount': 0,\n", - " 'rotationDepth': 0,\n", - " 'tCount': 0},\n", - " 'logicalQubit': {'codeDistance': 11,\n", - " 'logicalCycleTime': 4400.0,\n", - " 'logicalErrorRate': 3.000000000000002e-08,\n", - " 'physicalQubits': 242},\n", - " 'physicalCounts': {'breakdown': {'algorithmicLogicalDepth': 63,\n", - " 'algorithmicLogicalQubits': 28,\n", - " 'cliffordErrorRate': 0.001,\n", - " 'logicalDepth': 63,\n", - " 'numTfactories': 12,\n", - " 'numTfactoryRuns': 6,\n", - " 'numTsPerRotation': None,\n", - " 'numTstates': 68,\n", - " 'physicalQubitsForAlgorithm': 6776,\n", - " 'physicalQubitsForTfactories': 77760,\n", - " 'requiredLogicalQubitErrorRate': 2.834467120181406e-07,\n", - " 'requiredLogicalTstateErrorRate': 7.3529411764705884e-06},\n", - " 'physicalQubits': 84536,\n", - " 'runtime': 277200},\n", - " 'physicalCountsFormatted': {'codeDistancePerRound': '9',\n", - " 'errorBudget': '1.00e-3',\n", - " 'errorBudgetLogical': '5.00e-4',\n", - " 'errorBudgetRotations': '0.00e0',\n", - " 'errorBudgetTstates': '5.00e-4',\n", - " 'logicalCycleTime': '4us 400ns',\n", - " 'logicalErrorRate': '3.00e-8',\n", - " 'numTsPerRotation': 'No rotations in algorithm',\n", - " 'numUnitsPerRound': '2',\n", - " 'physicalQubitsForTfactoriesPercentage': '91.98 %',\n", - " 'physicalQubitsPerRound': '6480',\n", - " 'requiredLogicalQubitErrorRate': '2.83e-7',\n", - " 'requiredLogicalTstateErrorRate': '7.35e-6',\n", - " 'runtime': '277us 200ns',\n", - " 'tfactoryRuntime': '46us 800ns',\n", - " 'tfactoryRuntimePerRound': '46us 800ns',\n", - " 'tstateLogicalErrorRate': '2.17e-6',\n", - " 'unitNamePerRound': '15-to-1 space efficient logical'},\n", - " 'reportData': {'assumptions': ['_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._',\n", - " '**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.',\n", - " '**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.',\n", - " '**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).',\n", - " '**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.',\n", - " '**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.',\n", - " '**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.'],\n", - " 'groups': [{'alwaysVisible': True,\n", - " 'entries': [{'description': 'Number of physical qubits',\n", - " 'explanation': 'This value represents the total number of physical qubits, which is the sum of 6776 physical qubits to implement the algorithm logic, and 77760 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'physicalCounts/physicalQubits'},\n", - " {'description': 'Total runtime',\n", - " 'explanation': 'This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (4us 400ns) multiplied by the 63 logical cycles to run the algorithm. If however the duration of a single T factory (here: 46us 800ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.',\n", - " 'label': 'Runtime',\n", - " 'path': 'physicalCountsFormatted/runtime'}],\n", - " 'title': 'Physical resource estimates'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of logical qubits for the algorithm after layout',\n", - " 'explanation': 'Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 9$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 28$ logical qubits.',\n", - " 'label': 'Logical algorithmic qubits',\n", - " 'path': 'physicalCounts/breakdown/algorithmicLogicalQubits'},\n", - " {'description': 'Number of logical cycles for the algorithm',\n", - " 'explanation': 'To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 12 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 5 CCZ and 12 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.',\n", - " 'label': 'Algorithmic depth',\n", - " 'path': 'physicalCounts/breakdown/algorithmicLogicalDepth'},\n", - " {'description': 'Number of logical cycles performed',\n", - " 'explanation': \"This number is usually equal to the logical depth of the algorithm, which is 63. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\n", - " 'label': 'Logical depth',\n", - " 'path': 'physicalCounts/breakdown/logicalDepth'},\n", - " {'description': 'Number of T states consumed by the algorithm',\n", - " 'explanation': 'To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 5 CCZ and 12 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.',\n", - " 'label': 'Number of T states',\n", - " 'path': 'physicalCounts/breakdown/numTstates'},\n", - " {'description': \"Number of T factories capable of producing the demanded 68 T states during the algorithm's runtime\",\n", - " 'explanation': 'The total number of T factories 12 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{68\\\\;\\\\text{T states} \\\\cdot 46us 800ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 277us 200ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$',\n", - " 'label': 'Number of T factories',\n", - " 'path': 'physicalCounts/breakdown/numTfactories'},\n", - " {'description': 'Number of times all T factories are invoked',\n", - " 'explanation': 'In order to prepare the 68 T states, the 12 copies of the T factory are repeatedly invoked 6 times.',\n", - " 'label': 'Number of T factory invocations',\n", - " 'path': 'physicalCounts/breakdown/numTfactoryRuns'},\n", - " {'description': 'Number of physical qubits for the algorithm after layout',\n", - " 'explanation': 'The 6776 are the product of the 28 logical qubits after layout and the 242 physical qubits that encode a single logical qubit.',\n", - " 'label': 'Physical algorithmic qubits',\n", - " 'path': 'physicalCounts/breakdown/physicalQubitsForAlgorithm'},\n", - " {'description': 'Number of physical qubits for the T factories',\n", - " 'explanation': 'Each T factory requires 6480 physical qubits and we run 12 in parallel, therefore we need $77760 = 6480 \\\\cdot 12$ qubits.',\n", - " 'label': 'Physical T factory qubits',\n", - " 'path': 'physicalCounts/breakdown/physicalQubitsForTfactories'},\n", - " {'description': 'The minimum logical qubit error rate required to run the algorithm within the error budget',\n", - " 'explanation': 'The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 28 logical qubits and the total cycle count 63.',\n", - " 'label': 'Required logical qubit error rate',\n", - " 'path': 'physicalCountsFormatted/requiredLogicalQubitErrorRate'},\n", - " {'description': 'The minimum T state error rate required for distilled T states',\n", - " 'explanation': 'The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 68.',\n", - " 'label': 'Required logical T state error rate',\n", - " 'path': 'physicalCountsFormatted/requiredLogicalTstateErrorRate'},\n", - " {'description': 'Number of T states to implement a rotation with an arbitrary angle',\n", - " 'explanation': 'The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.',\n", - " 'label': 'Number of T states per rotation',\n", - " 'path': 'physicalCountsFormatted/numTsPerRotation'}],\n", - " 'title': 'Resource estimates breakdown'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Name of QEC scheme',\n", - " 'explanation': 'You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.',\n", - " 'label': 'QEC scheme',\n", - " 'path': 'jobParams/qecScheme/name'},\n", - " {'description': 'Required code distance for error correction',\n", - " 'explanation': 'The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.0000002834467120181406)}{\\\\log(0.01/0.001)} - 1$',\n", - " 'label': 'Code distance',\n", - " 'path': 'logicalQubit/codeDistance'},\n", - " {'description': 'Number of physical qubits per logical qubit',\n", - " 'explanation': 'The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'logicalQubit/physicalQubits'},\n", - " {'description': 'Duration of a logical cycle in nanoseconds',\n", - " 'explanation': 'The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.',\n", - " 'label': 'Logical cycle time',\n", - " 'path': 'physicalCountsFormatted/logicalCycleTime'},\n", - " {'description': 'Logical qubit error rate',\n", - " 'explanation': 'The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{11 + 1}{2}$',\n", - " 'label': 'Logical qubit error rate',\n", - " 'path': 'physicalCountsFormatted/logicalErrorRate'},\n", - " {'description': 'Crossing prefactor used in QEC scheme',\n", - " 'explanation': 'The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.',\n", - " 'label': 'Crossing prefactor',\n", - " 'path': 'jobParams/qecScheme/crossingPrefactor'},\n", - " {'description': 'Error correction threshold used in QEC scheme',\n", - " 'explanation': 'The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.',\n", - " 'label': 'Error correction threshold',\n", - " 'path': 'jobParams/qecScheme/errorCorrectionThreshold'},\n", - " {'description': 'QEC scheme formula used to compute logical cycle time',\n", - " 'explanation': 'This is the formula that is used to compute the logical cycle time 4us 400ns.',\n", - " 'label': 'Logical cycle time formula',\n", - " 'path': 'jobParams/qecScheme/logicalCycleTime'},\n", - " {'description': 'QEC scheme formula used to compute number of physical qubits per logical qubit',\n", - " 'explanation': 'This is the formula that is used to compute the number of physical qubits per logical qubits 242.',\n", - " 'label': 'Physical qubits formula',\n", - " 'path': 'jobParams/qecScheme/physicalQubitsPerLogicalQubit'}],\n", - " 'title': 'Logical qubit parameters'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of physical qubits for a single T factory',\n", - " 'explanation': 'This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'tfactory/physicalQubits'},\n", - " {'description': 'Runtime of a single T factory',\n", - " 'explanation': 'The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.',\n", - " 'label': 'Runtime',\n", - " 'path': 'physicalCountsFormatted/tfactoryRuntime'},\n", - " {'description': 'Number of output T states produced in a single run of T factory',\n", - " 'explanation': 'The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.17e-6.',\n", - " 'label': 'Number of output T states per run',\n", - " 'path': 'tfactory/numTstates'},\n", - " {'description': 'Number of physical input T states consumed in a single run of a T factory',\n", - " 'explanation': 'This value includes the physical input T states of all copies of the distillation unit in the first round.',\n", - " 'label': 'Number of input T states per run',\n", - " 'path': 'tfactory/numInputTstates'},\n", - " {'description': 'The number of distillation rounds',\n", - " 'explanation': 'This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.',\n", - " 'label': 'Distillation rounds',\n", - " 'path': 'tfactory/numRounds'},\n", - " {'description': 'The number of units in each round of distillation',\n", - " 'explanation': 'This is the number of copies for the distillation units per round.',\n", - " 'label': 'Distillation units per round',\n", - " 'path': 'physicalCountsFormatted/numUnitsPerRound'},\n", - " {'description': 'The types of distillation units',\n", - " 'explanation': 'These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.',\n", - " 'label': 'Distillation units',\n", - " 'path': 'physicalCountsFormatted/unitNamePerRound'},\n", - " {'description': 'The code distance in each round of distillation',\n", - " 'explanation': 'This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.',\n", - " 'label': 'Distillation code distances',\n", - " 'path': 'physicalCountsFormatted/codeDistancePerRound'},\n", - " {'description': 'The number of physical qubits used in each round of distillation',\n", - " 'explanation': 'The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.',\n", - " 'label': 'Number of physical qubits per round',\n", - " 'path': 'physicalCountsFormatted/physicalQubitsPerRound'},\n", - " {'description': 'The runtime of each distillation round',\n", - " 'explanation': 'The runtime of the T factory is the sum of the runtimes in all rounds.',\n", - " 'label': 'Runtime per round',\n", - " 'path': 'physicalCountsFormatted/tfactoryRuntimePerRound'},\n", - " {'description': 'Logical T state error rate',\n", - " 'explanation': 'This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 7.35e-6.',\n", - " 'label': 'Logical T state error rate',\n", - " 'path': 'physicalCountsFormatted/tstateLogicalErrorRate'}],\n", - " 'title': 'T factory parameters'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of logical qubits in the input quantum program',\n", - " 'explanation': 'We determine 28 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.',\n", - " 'label': 'Logical qubits (pre-layout)',\n", - " 'path': 'logicalCounts/numQubits'},\n", - " {'description': 'Number of T gates in the input quantum program',\n", - " 'explanation': 'This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.',\n", - " 'label': 'T gates',\n", - " 'path': 'logicalCounts/tCount'},\n", - " {'description': 'Number of rotation gates in the input quantum program',\n", - " 'explanation': 'This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.',\n", - " 'label': 'Rotation gates',\n", - " 'path': 'logicalCounts/rotationCount'},\n", - " {'description': 'Depth of rotation gates in the input quantum program',\n", - " 'explanation': 'This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.',\n", - " 'label': 'Rotation depth',\n", - " 'path': 'logicalCounts/rotationDepth'},\n", - " {'description': 'Number of CCZ-gates in the input quantum program',\n", - " 'explanation': 'This is the number of CCZ gates.',\n", - " 'label': 'CCZ gates',\n", - " 'path': 'logicalCounts/cczCount'},\n", - " {'description': 'Number of CCiX-gates in the input quantum program',\n", - " 'explanation': 'This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].',\n", - " 'label': 'CCiX gates',\n", - " 'path': 'logicalCounts/ccixCount'},\n", - " {'description': 'Number of single qubit measurements in the input quantum program',\n", - " 'explanation': 'This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.',\n", - " 'label': 'Measurement operations',\n", - " 'path': 'logicalCounts/measurementCount'}],\n", - " 'title': 'Pre-layout logical resources'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Total error budget for the algorithm',\n", - " 'explanation': \"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\n", - " 'label': 'Total error budget',\n", - " 'path': 'physicalCountsFormatted/errorBudget'},\n", - " {'description': 'Probability of at least one logical error',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", - " 'label': 'Logical error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetLogical'},\n", - " {'description': 'Probability of at least one faulty T distillation',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", - " 'label': 'T distillation error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetTstates'},\n", - " {'description': 'Probability of at least one failed rotation synthesis',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3.',\n", - " 'label': 'Rotation synthesis error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetRotations'}],\n", - " 'title': 'Assumed error budget'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Some descriptive name for the qubit model',\n", - " 'explanation': 'You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).',\n", - " 'label': 'Qubit name',\n", - " 'path': 'jobParams/qubitParams/name'},\n", - " {'description': 'Underlying qubit technology (gate-based or Majorana)',\n", - " 'explanation': 'When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.',\n", - " 'label': 'Instruction set',\n", - " 'path': 'jobParams/qubitParams/instructionSet'},\n", - " {'description': 'Operation time for single-qubit measurement (t_meas) in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.',\n", - " 'label': 'Single-qubit measurement time',\n", - " 'path': 'jobParams/qubitParams/oneQubitMeasurementTime'},\n", - " {'description': 'Operation time for single-qubit gate (t_gate) in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.',\n", - " 'label': 'Single-qubit gate time',\n", - " 'path': 'jobParams/qubitParams/oneQubitGateTime'},\n", - " {'description': 'Operation time for two-qubit gate in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.',\n", - " 'label': 'Two-qubit gate time',\n", - " 'path': 'jobParams/qubitParams/twoQubitGateTime'},\n", - " {'description': 'Operation time for a T gate',\n", - " 'explanation': 'This is the operation time in nanoseconds to execute a T gate.',\n", - " 'label': 'T gate time',\n", - " 'path': 'jobParams/qubitParams/tGateTime'},\n", - " {'description': 'Error rate for single-qubit measurement',\n", - " 'explanation': 'This is the probability in which a single-qubit measurement in the Pauli basis may fail.',\n", - " 'label': 'Single-qubit measurement error rate',\n", - " 'path': 'jobParams/qubitParams/oneQubitMeasurementErrorRate'},\n", - " {'description': 'Error rate for single-qubit Clifford gate (p)',\n", - " 'explanation': 'This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.',\n", - " 'label': 'Single-qubit error rate',\n", - " 'path': 'jobParams/qubitParams/oneQubitGateErrorRate'},\n", - " {'description': 'Error rate for two-qubit Clifford gate',\n", - " 'explanation': 'This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.',\n", - " 'label': 'Two-qubit error rate',\n", - " 'path': 'jobParams/qubitParams/twoQubitGateErrorRate'},\n", - " {'description': 'Error rate to prepare single-qubit T state or apply a T gate (p_T)',\n", - " 'explanation': 'This is the probability in which executing a single T gate may fail.',\n", - " 'label': 'T gate error rate',\n", - " 'path': 'jobParams/qubitParams/tGateErrorRate'}],\n", - " 'title': 'Physical qubit parameters'}]},\n", - " 'status': 'success',\n", - " 'tfactory': {'codeDistancePerRound': [9],\n", - " 'logicalErrorRate': 2.165000000000001e-06,\n", - " 'numInputTstates': 30,\n", - " 'numRounds': 1,\n", - " 'numTstates': 1,\n", - " 'numUnitsPerRound': [2],\n", - " 'physicalQubits': 6480,\n", - " 'physicalQubitsPerRound': [6480],\n", - " 'runtime': 46800.0,\n", - " 'runtimePerRound': [46800.0],\n", - " 'unitNamePerRound': ['15-to-1 space efficient logical']}}" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", "# result = qsharp.azure.output(\"...\")\n", @@ -3255,7 +386,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -3281,7 +412,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": { "jupyter": { "outputs_hidden": false, @@ -3293,54 +424,16 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logical algorithmic qubits = 28\n", - "Algorithmic depth = 63\n", - "Score = 1764\n" - ] - }, - { - "data": { - "text/plain": [ - "1764" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "evaluate_results(result)" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "{\"Html\":\"
\"}", - "text/html": [ - "
" - ], - "text/plain": [ - "DisplayableHtmlElement { Html =
}" - ] - }, - "metadata": { - "application/x-qsharp-data": {}, - "text/html": {}, - "text/plain": {} - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "%trace Task2_ResourceEstimationWrapper" ] From ee79630440ff10a829adb2b620175b9bb9c2ffbc Mon Sep 17 00:00:00 2001 From: Michael Papadopoulos Date: Sat, 28 Jan 2023 16:50:01 -0500 Subject: [PATCH 07/13] fix name --- .../iQuHack-challenge-2023-task1-checkpoint.ipynb | 2 +- iQuHack-challenge-2023-task1.ipynb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb index 7607d81..3dbe239 100644 --- a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb +++ b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb @@ -101,7 +101,7 @@ }, "outputs": [], "source": [ - "teamname=\"SAMYL\" # Update this field with your team name\n", + "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", "task=[\"task1\"]\n", "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" ] diff --git a/iQuHack-challenge-2023-task1.ipynb b/iQuHack-challenge-2023-task1.ipynb index 7607d81..3dbe239 100644 --- a/iQuHack-challenge-2023-task1.ipynb +++ b/iQuHack-challenge-2023-task1.ipynb @@ -101,7 +101,7 @@ }, "outputs": [], "source": [ - "teamname=\"SAMYL\" # Update this field with your team name\n", + "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", "task=[\"task1\"]\n", "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" ] From 0eae4fecf2e2e8c5694ce2f9807b7adfc2052a2f Mon Sep 17 00:00:00 2001 From: Mariia Mykhailova Date: Sat, 28 Jan 2023 09:34:45 -0800 Subject: [PATCH 08/13] Remove "planning" from qBraid URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8423dda..58743d7 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ You'll need to rewrite the code so that it maintains its correctness, but requir ## Working on qBraid and submitting the tasks -[](https://account.qbraid.com?gitHubUrl=https://github.com/iQuHACK/2023_planning_microsoft.git) +[](https://account.qbraid.com?gitHubUrl=https://github.com/iQuHACK/2023_microsoft.git) 1. If you're working on qBraid, first fork this repository and click the above `Launch on qBraid` button. It will take you to your qBraid Lab with the repository cloned. 2. Once cloned, open terminal (first icon in the **Other** column in Launcher) and `cd` into this repo. Set the repo's remote origin using the git clone url you copied in Step 1, and then create a new branch for your team: ```bash From c28bc371be7b3655a81be1fa15144c1cb9e07e27 Mon Sep 17 00:00:00 2001 From: Michael Papadopoulos Date: Sat, 28 Jan 2023 20:41:47 -0500 Subject: [PATCH 09/13] Clear --- ...Hack-challenge-2023-task1-checkpoint.ipynb | 7 +++++++ iQuHack-challenge-2023-task1.ipynb | 7 +++++++ obj/__entrypoint__.dll | Bin 322048 -> 216576 bytes obj/__entrypoint__snippets__.dll | Bin 86528 -> 54784 bytes obj/__snippets__.dll | Bin 86528 -> 54272 bytes 5 files changed, 14 insertions(+) diff --git a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb index 3dbe239..cccc2e7 100644 --- a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb +++ b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb @@ -400,6 +400,13 @@ "evaluate_results(result)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, diff --git a/iQuHack-challenge-2023-task1.ipynb b/iQuHack-challenge-2023-task1.ipynb index 3dbe239..cccc2e7 100644 --- a/iQuHack-challenge-2023-task1.ipynb +++ b/iQuHack-challenge-2023-task1.ipynb @@ -400,6 +400,13 @@ "evaluate_results(result)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, diff --git a/obj/__entrypoint__.dll b/obj/__entrypoint__.dll index c60971040ddd7625dcaaf0e7b1fbe0ccddc5ee5a..b9827133de8f3bc5e7870a5ae5b68a25e5d81091 100644 GIT binary patch delta 25627 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 literal 322048 zcmeEv31C#!)&F^KCX>k|fn*XA61E{M20~&s0)dF^in1>v3JsHF0)rugGYNtb3yM}- zv}$R!N?Y7)OS(+S;o9|IWGhy_tELunDdGe+2IGyUV%f zZs(qR-+gapopK4eh{z4|uYVEU2bcdQioJJhBcgi^`cW^sJLAd0_Zc&v9K3L4I2KqF zjjV_UR|lGd?d_3{KvO6X?Q9Q(+XGYQEC{TQw1g_MvwcG~>ABO0W*R1)wB?y*tF%|B zB#>!T68#QbnJV;AcN$Ru{s3H}9PuNL`Q|^%rHP2wd0aH{JWk60?TDOd?OL5XncLNv2ua7rviQ1tXIvCP(K=hU6{I3lz=J*=P-3UZqqoTekj3?7ozD*v^q{ydsV+;Xt12( zeyu^0Vdd`O`DJMlObgYsJ{l?gzpr#)-pl3G#>>%OFh3fBU3IXyodk?wz~c@>$SU8C z=*EPM6PpNko}E@|n878FjhC#wOh19|dL-yZ+L0z@8=!9Jkg`&=uGKNxtJ)AF$*RNn zcp0hNbAQS^h%_nd2EHK(%1RsJd}}Yd;TQyVO@PIHBH&mCd6j9@WYwqdMUWx=h7}~F z)(u$dEby9Pg$ZO-Dqp;t65IWn(upWZgjsVUmO!Z=>P5{zOX)pLV5rJJZVU3)w z!7L6Dah?=X!fC7woJPqeJ3r4_0UWmp^Q<41E}0`D2NLFK$~kxtbK*Zv2lKBtH!PNZ zt6{Yl?KB60U30meEPx>y2lE+7AKD2QqXh+ULheHWoKTi2C}U-%3xISVYA?o$qwN+V zO}F6!UUQkiqBsHV?Uvs;^<}s@$~dfPz^k8mJt@ws_M#~lBe3gaSlq4xmL!5x7)YC> z(Ye+rla2_jjf|#(hT|T#65JOa)4#JHyt*;fi5$$3PsulH|T;nmJ3df9cY)H zuS-vgPi6u2cG0)NLz=GlX(%YWs|~gTmJ18i_pKSUa3Z1Qwd) zgmg4XURrM2C{883rARe2o!iHg>lsySao9bT;xiphm5!zoK6e}tpMxzvx$Pp|3n*J? zGs{VZ*`AV)usI%Naoj`FM7DX3twG_Krp3|M)f`)9sQoV5TTLnPU`lzc0P!FITOO4{ zJUpxZfWD5M4uUer{+NXR#3*XTePE-MbF9JMMi=rNdljkeIfi|Qo?}pF%1Xg@Jnkqv zUlGT>$#Fc#Ubp608evA+b1bcwI~L={FSe(d$m;(=8q`weSqI{M!@4jHe3`?#*22l^ zIs=KQjwHGooIT*2K;PjC8>o?k!lQ(iE;*5<827H^9n+%zOjc z3ky8C?%3HJ{AEs^9@z*d*PS7wcFRf7;3AtiLM4x!1HUs*@`T~F=HCA>|B-V)UnRH> zzeF7{u%r(*gIu1c>pVEVTu&EwNhVzGlPtL0DcNwjTexAlU(%&tGJ5WpjDl4vO>)0r zWmElvu{^nH=rR^6vGZYVX-?fo$@vp!9m|R|dhUx@Kkm0fQ%M#rUja1{ zEv=XmkTBn32ZFd#ug9rEKNp6XUynJqv1vHbXZV%#u0u0O~9gX37XyovHgsy;11Nd}Ku)8%H_BJ&y> zN$ZfWAJ($(A`R*-m2zIttMsJ=Qvixr-$D0wm7{QURvvmn9 ztkCtjX^~6e9oBUj2Y9-^!A?5mdeX6Wd2_v^c=i1lxjnh*N}1S-6vI(;TBJ98iOY6?EeN#OwJ0>WQH!eFWWuTlY#hEPJ@iSoUzA zvFzbaW7)&qmgmk;{g$TtEdzqW(Q)ZzQ*+Z3JI<>*E`xHtUUZx<*Efn+d+xZ%RUqm~ z&&`nTi){mndaQw;F+ac0XF;w!O53>f;S`(yvrIuyDdW^oel#NC~G_ml95ymgo@=i=JE-DBnZ! zgmZp$fj;LS$ig5KNkkaD#liqWVLK-m`NKLr3KE$RyBhw;AX^}??sE*{QB-d19c1;9 zE7OzSbq$hjCkVEU^7@o<%ga1l3xph(-HNoW|O9ah|M8=)R4b-BrQQw`>(DnJHX z-i}Sy<@zSZmD>4AIA1ZxanrsB55_jHp-y>w6F15byLpA572pdsm$`g1;vq0^fdhGa zE1ayZ@56>J*9TNRN{x%%hM>spuvnQWLPV}RU3J|Z2!t?hhm)Y2B`ILs25pDBOi`%z zUT_}dGZtJP;8NE+nSW0gR9TT*Ty>UPTz8gRTzQsTTz#%4*FRmUO9}OdHYD{=^Tz8R z*@!G2p6lEUP8}#o(P5sp{9Aa6D=z!P7|;K^z`RVC{4|*^>)63$z|yEDgLrr{RH12N zcO!Yi{2yTt&Y?Uw%aB9{=kMW3G4Jm|?g$hJdoQo%J?2|(?2pKz=lu_mY(o(kz`Vbg z{n(eFZ$=^o=KY`G#O`BCkUsHw|09G*MY26okw$h<5v<>;BH}scZ0I5GVdaIx&xZQq z{><|?ruJjx9k!8U66)rdlyyibb^8FGc-_!EN~T@R937QVx1{Gm3%La6^Df6Z=0T^y z86~7dS?NyI1l+CKi<7zg5!i*5T#o4kJjg(vhS+g@tYyc^*%f-WtaMkLp!TAuksR|- zJVtv_)WZnu`Uz9F!0trw2m?80wi9x>0yrTbrwQPM!bBMt^(YWJmTRTGI6$jsT8{SP zuzj`hVNHX^8O0nw7Ux)d(H=iVVAtc!wgrC1K>ERs<70OL9JiRC(v~y9CxCPlXfJ5& zL15RDOv3_CF}RGM(%NyGFv<-Ol>m;H0L%+M?(#{a{u~~eIB%$l^9Od$IUCEfnkQJ< zF;70>dGZS+9k!8Ucm?`9PXw0pytW(GJUA0+A{F3T&g)Qvqqzpy##%K<@czmwx;9Ra$&Ok58k4 z!Zc*hzmNm6XP7){%IqpZ(k!#|#|Xu-MRlfk(6OuJP@~K!h+YRC`>yhqK7&MC#`D7c zEPRP49Y|fBIrv}d@5^Q0!d2ezpko`Gu)H$KbdbzQ&#(!;4}xByl&p%itlQu-o?ddiN<^+aA`FZM$2Tx`Spu39$A zRfsA?euLoQ9B?YKA{k_uul(mw96eB>Jz9m%b?14ZKYK@_ifBZWo~Bx_fn^nA1yk{5 zl^t}Q-|9N?AOM3y^`&^YFMp0ki2WA%MXUOSjo!8OA(W}r%4+V}$B@L1 z8_i9Q#laWp!*P#u9FIoaKT`UTV?4HV(i*$p^C~gCO(L)-`oSxR_I14qJJT$E6vPH) zufiN;rew8x4Kbc{r>dip4&1MlOv_WaD)Krr5{89CED0;>9wx`1#TWHO9fuWInee#V z(^sXvW>{a3&UVePB2TdnjlBV~ib-|Ct4r9=QmulLxYH#jh3%8$0*lQ;izahyGhbvg ze;^$1Cnr`hNgV4IN(@VG<9%|xuQpD_T~eu{3d;6`$KL<;H1>E%$O8bYSCe>N#ltW~ zQBs-6n~1eX&F8JrK`m5n;^;Yg0m!%Hy?C$yKuoIzKs*S*c2xz4hgXDGSlnU} z*JlMM@gl>2)_EjU2rct#S>`{B@_$0J;?x4?NF06t+kGTQcF}Ei(T@<|cbW%AhXhd2U*DHPx;eEu*Lxe=-S?*X# z3|b;dt%gK5OC{zEXH4ltgoxh9D#Gspz^rQT0am$Y=^qd-2Zf2{*}49xa&aFegjfMy@EiOEbQ`ZOIqU3oRH*BR*H7`3u5J9Ah8T- z2Z^~A(aAAr2Z{Ni<$DoiYbh6abA$25F?Nx4> zey)^_r$_oZayG^OflPUxv6q4xE4h(>0z-cm#V7U&zy@XjdhB0OOzcwxWbj4Gve;*w z(M^S`GLn_p^soap56R5&I{%3h#B)oEm{z6!1L3uE0PVUzZ6x(}PEwxMSd@^cWt+_|B9`n_Wg3 z(kXZz!^F_k0Vc$g01st2Nao%&(3H6szw3ynG(H)s$s-H*T_lF}(xjNui3pJ~0^L)_ zJ$6ZhQJ7hp4pJM2aJfnkHswAzrbMpE`x>_o+C45=7go5-_}_?vk!Bys3Q^j{@}kts z%&bHK8?Xa%n}rfvXeBG)dU3?a;#dY!o+)y44C;glr^^`hSxsNFidRCrmbY7m2?tn6kG-E2_wlhA)O+zNPMVdG<{!DTkiwm#G z%s}tZKa3jgY%YBg%pw>x2>GC^y$knCFsLzM&dD9$*>GQm!NjKJFqgq_-ZYq87z}Fs zt<2#t%mw;Yueb6&^cS%|&Hh1tZ%W5>^U;~T>a%@xhuD{ky&<1Nn#5mZvj5_Awlgx> z9_6XW;nr)}Ozm#a@lbBBALOF~lJd=Bj{VrUGRH%kjC1?=sNLX@ER#cyHx^@R-%`jS zVF{TI+ehC*nqHKjcLV4=0SZ3)U!?I-gOqqRVtq6$hwbg+4++gbXEDuDQln9Y?61sZ z`_a7X`*`RAl;xqJne0D7I2_C!}im*?5M|2>tXxoBni($i5|KcbbNFtcqpJp z&8Vk?RJ^f`38YegSFP(b2pid%B=Oc8UM zQ{I--l8f6hR4Hg?Z-r_FU5dDYh#M1S!@_%V$ARW$g4X9{`6mEv6ZA?} zmVYwPc0s?-$?|i%T&Lpv3hfZ|oJO|_dPk!>1bxHI@=r&;y9HejbOO+i1^wNBhkrKE zPXv9}yu&{q2q$akv739};cvoR{f)$(0<;QGqM;ffE(#RIb12ACpmlxk@Slkh;TJR= z=p5=zM+rJ5{mz1~B26_G2Mn&L@>EK=weLGNTKbi1H)(@V0M=3RoWDK?6K0Cb6g%Z zbLj7A;FGA3UbRsx(Cap82YS;+Yk}S}TsXAiwdvbH@7Qr?QxUyqqw|4&pOCVM{%FTt zO#SGCgt&h67sE9;hZcC4W`Fw7PI(&*q`xP`4a9O{as4C6j87A&1n6IO+`}{&YCZFb zQ$f%ijDuT)?$7uaj^hk^EIk9YHs~eoexTjIW%woBl@Sp481K*|ydqzs|*}PZj)XM*l24dBF^C()cQk!-6+^2j$H~Zj(;ecxK*W!DkA7)O%N2 zGq8&;P?-9pp__qk)Yz5QF7Xz=QLvkCmH2Pbul${ePoq78H-WQ_z#jU8VCI+UrPHT2 z{tDvL$vYUqbiTJL=U?drDbz>fNg7-6w;0Lsb*924lK#~UUqJ)tcxjl*Pc?;?g1(m~ zE3C`+(L5V}8}U9`s<8J8p_fTvjc?L;t;P>)e6Get9xgxA&ae23=U4n?l9hjfBmY{B zlljl2OB8+Ze?9oiq@OCR`R`57+4xSx_oml0KQHDy4V*)N)cC$WFA4rc`@U(=X6CnZF#$fc}gA0)Ouc{ThWee|a?7##uOE&ZAihdv7t00?wyXG_Etb{CrBL zpHC}PJm`;=^cUFlc>EO53~(HX*)@^-zoUNrX-8820gn6wXpdbU*KYv5Xydgge*nFmlz*Tj|3F9i10CfL zq`th3Aglg^9Qg-1@(*(4A4CmF`2&vp0ZMMafTR5av^**QU`PJJv{~XU`81fmVdJw< z|H1TKh0(tk0GH4$8rPW@3BFITRlgD%K8)+j^W!p!Pac0m9rYVZQzgBXf0%>6VYE`w z)8k_ponhl`pg)YxQCRagoW8EH8h^uSn_!FnaQaxqgTEcfj{~~l!mp-ZO2cgYKZq}- zN`<{=7d!|&f{xMnjhx+rPtf>pSzp55bA+A#79%-*otd0|fvM7;Ecq?|M$jfj5B&X9 z=-;BS=5G}J$i`12eiS{Tuy;`b%j0tTrN*rqzoGGDjji-*zLwKRI=;?)9rVf_@~E6# zysS!pzAy2~{du&bKaZxND!upbxm>?W8YS4OU!|jeD;?v%(m}71<|gH@a^$aaTm`w>Ak~yD?C=?f<8Qc>g@El7|H3?_^l%=y;{%f z9OI>qrYU+DzwSJy7g1P`-+DUR#>=4P*3%Zj*7z9bsNXoc!%pu3GlIPxDu`FzZ1uMZO(`6oE? zPjKX)Kx32gAM40}EG?CIOTHgVr`fnK+V5Cet1#qeDey!(SK~UfT<|3tFEDEaZx?L! z*F-vcq>Lx@cfG_fQCRo)6k2KH;}JiFVhZc>rqV`@Re4kCB8^pfQ|U^L*Glhj3AX6XaJ1hHddbeu`;8g& zmQJts8z;~oG*QUaqj--^`+iHFl-#l=L?S zgg&YL&1~8u@w~tJ8RF;A`+_%7U*p%n^J#fGr{4rl7%!kVG+sq-123d46)Jwa;6*g? zXvWt5?Ib!;u(f|%O!GBX?YWqi2;S^{zJQP77E@4Tv#__|RT@9#W_|Nyifa6#oAt+& zsY~NaT!WB)37xC)ZLV>Gw+QC;JPG&|x>DokG~S`{uC%Dc|3KsSG~TVSZqHL_cqP~G zQF5hSA?cIb^Hi#ocy7--5Wkcb3g-6w8E}yDt2jTmC*vl1UgK5t8gMh+SFPf=3vQvS zY8YGX8KN5mTkY9O-`7~RXDi(;c(YfvS1aw*ShZIxJtFuV?*|??PN-MVlNygpA13%& zo&NXcalk9-WsUz~o-Ft+!Q7s!fW!2m#?NW&s%3s3_3lbLU*dB$eoy0o!n!@fbdJWZ zv|A;8a(k|#EfUY|xf}7P(H(-hJzoZ1Lv5qEJZ?|Mr_;hZg;&u>z)`B?BO=6a7aXIp za&&LCX9rCYY_(@6ouIL5&rX^r_#E%??!I__&`C=){+hc+aFbwek2%0=X^q0VerxIL z8oSb(CH``aZ%m5;pF!INbN$W)UPrqGZ-QpN1-OecD*y48s_0w4KyMams zZ}!eB-iG`eXr#uQifw02=QKWD<6UVc9!zbdFKhgs#+N9p+h-&FSz}k)P)VQM|C{I&iRbnii}-UWFi!Pn zUt>1#S7@uovxxBplr`S!|0duIX}iYTiSbuyEFYuT^XY3eMX=SLTj&IhReNrsd4kXJ z4ousK{99;=#;2xTF1SfBx5w?k7ttDpb^R`)uWRf|dr;z&`~PCPLgKl8Payv5be~}E z{}+I9wth?^zu%xN!4|(;DNkd??^Y@nY|a0zRHCu!->p<8nE8DZ^uI|n71sQIlTOpv zmFDTo@$vpB2L2XxNIdg968Lh5{&%HA|GSd5N_uPky~?rvUggMtl_UREbYD{bZI1lg z9Qn67@^7P;lJbAYk^eh{hc$XUc;J4AdfRvg>h~QgR@nRJqEmstOGjzkQmC*Me~XbE zUuPq#m-CKW9Q}6-?Ns^E|5t(jEspc? z?>o-Nzi*$9-~`rl#K?|mQdhwrrO z|Kq+2TkWIjACFi2Dfy+H*JkUSZweyD4iD;g9!EpGthZzr967k5InE zbAS7RAEjEstPhm{KTc~VbAC%7{uy-%w)lO5&e2%$`vhGm_#E%Eg_X$v1YN4}QGF*0 zzEZHYpWj2*Xsq`0d*~LyT%UPJ|0MlT*)vs03$Lq(>7oVamiRb#A zf%yNWQGz!?GyN*?FKNd#&cBHs6Z|X3^U$Xq&qJS~bC2iruV$$FK0{v>yxF_JbrtA6 zLzijXo&o+YW$3O5Abtzx5lrUj|;wEFt-OkPko;DD6H%M zysa;)=c#e5&Kq8!${EZr*PoxK{+i|r-bALs&r@HdKMCgkeHrDwM4t$@*7M&`zY{n= z$G?a8-w=OiF1|j$Oy98M&0@a8wLK~RxAeFjUxfJI($h)tuh6G$a5moKbISbp8tCO9s(9bcLP&1<-qkt`lsv z@4NJ&9gpO=yO+aP^>A-w6Yhc$y+`>P4=-kV@6k$yGma}dxi{lAI=-t=rMKd*E#eQ^ zzDMhH{4ev~LHX~|k2S8$-z@QbC*eJ)t_D?to&``nTb1!w6Vw7?zvP*qTRie#MqwvJ>}{io*1HdRx}gCdn%=Scw(+ZYTZ+I59ujy z_wdA4WjcxdrFt!O-@;_Q@f0Ugg7PkUzJ}nCSU&kl155A7wIf+wC#Yy+{+tE`lx?cJ#G1l@Y zjty>~RN?zS4!cu3xDe(if~7(YxNOg>B>m;#tWn7%MYFvT$aVEV%hfEfrg2qpkC7^Vbf z2+UBJVc=&N+~IJC!#xV_QE*G)mcktYcLdy#a7V%|gIfl76ihix1)i5)9p*Tg z<6%yKIT2lO<5yqPQ#VDZO*ea{|Btxy< zchkc~s}PP`--VoSlJT&t(mQER{+S4$XUvgRc?t4!d=}{PE@lhxG`N=<8J-j24mNgX z&Sgx;7A}FigkJZp6^v7NxLb`!ioXN*YU58?*TKyPox9+67(+Z<{x;)wV;Ar?W1P7g zZhswrosPd%$KR^sZ#5R1?;_o;#+l|H;11R4@7C#e>hwEx`kgxcD4lM%PPa#=+oRLf z>iCy*e1pbsX#BoT|GrK?RmcBT$IsOG6O9*Y>^4vSzTeyENgrQ=8G_)(^6k2amIR;O#w=^Avp4jn&L$IsO9Gj;q-P3J6~ZlO-M zS>r9*U8=)dbp95LPo00OPS>W>b?9^*79ToYhpGB+n@)e0PJbORkF(9D8fROyyA|%` z7>HXny{($wHdBqS>&)L3J%#vNb@;71-F4<`9&b8Me{}wxI{j{4&TdVAk9MDidmqw2 zt@A&v={>Faep>VWl36UbOyAJ%`Ci%P@cA8w&RmP1o&G{Jul4dH9x3 zkRB;+hMVP5{J%rLE8_5cml`MeE;VlYyHx$3)_e~I=6N_uyPs%&KhgYtqWS$q^INO) zH|X-Gy3{}R`F#oWSPpE_d~MPBw`h7>b-Hb?B{^fD<^5IXzfOnWs@=Qca(~^e^WUxW-|bTK z;%=87XDE-y&rZ$HZtd>T>G$aTZlvS!_q3+}5?s#rl8%2#r+-7ozpwer*ZKac!-wkn zed1E{-|bfY=yt1q9i`)IwVUNu>GE~De4Q@et?JRB(@oWGf1Q4)PCrzqpQ+G)b5 zU#sIAbofG~<9beYt8vt#^R?;lnL7Lz#?i&2d+{#t7X{K1m)ENBbJi*M z{Vyx`kqec3)wh&8`8wrh-KkvT0p))6XY3B4CBI;|j2fO*;eUHhx&C*R`~C;YJ^o|m zUJjj>^96gcTSk8!&29~SI!1-}IaY-?EK=?@P>49)@>7&M6rU^R{2w(c{EzdLd;JB< z-T5`;zHl+SL&$xZ!nfb6+~Ge`uIGN`zW*S*L+F)<6(0X*g-^q)yIgL4ktyzP`ziOm zfy(`KFuOx&z%Yf+oTTt|QxqP&lwG`R`6cE4vPrqyS19*)tCc(A4CQ|GW#!J=s@!jG zQ|@&)DEFzmmHYm~${qF#<-Yd1a)0(0<@R&Cq})sLl)E&b-1kQ)x2;yWH)26z{+7*C z?g)Gik?}Ang6#fli*kQt>$Q|>d@EB7@_U`}`RPUT+uOXWWBqH_DauEYPL+)w|Z z+~-|9-fQTGL)_5Q)jXJ_=fMZC8aqr13*K|En6m zsjUUqZRgGWO*ubP@IbfKY z4~++FJW1n88V5BFYP?C~O&VXV@zokXr13)aWvjccONeYj>k|w`+IT0G0j~?b1M3 zP+g98w`+Hob|((g{e z=4BW@J#*m{$Bk2)G|IzSPBG4M2H-4bAkG{HA+!VfiAR8D zLkF1y>T^MTA*e3_^;1E;1=LrA`dXZAoQX4=b5Y7yP|DYEUb6-A`y!NfG0tngfisV- zIIp=15`7!aYrcz_Lgm!N?RQNbkg)i2wmG5?=QqqqzRXQu&>Bjk(B;`-^Wk zrt9)fOi3pmpIpv$1#>0++c}HG{b$w^ac?(N_&8IAFE&-U#m|xg)sCyQJ6*f+`g|#g zk56)w^ILTG<=&L7${*QVxy5~~{!=*4UvmHNi>@>Nc4LL`JI-tqcd;2w;=iZ(Gacz3 zDPEV9&pDp+T>K>&eCtEIHQK#5?JE-gqIP$ueOvG!wdg-D&^Sbd>9)W96TaKDa;g^_e+Y+R>C-yIScj_jxV%E$pOYjr)7kE)aUo__DrNO1L%8?oGQ{@Qd1Yrf+pUDDg8~kBIxG z`GmOEdSmf%sNA3S{jJas6ukkLpP{?N;P(cgEu=$lNP~^f3PDdWp%-Mr?hPG*zsi7L zdV+R2-i;32RFLKiTh8yp3D z2=oB{E?XJwVbB3g=m<4YVa+$80~`x`Jl1;? zdcYLe6S3BtSo4pAeLUVcGNF~62zxHpdJ}8>9M~u07bQ(-B@1Bla~Km(WfsG3LYRrS zL{5d>Ld#&Uq(<0b>>W*7g%}g>NQ7Xw(F)kB5o1z2!c4piu^M)aBCtE~ri6*N8Dg;4 z!Zq>(q_B^VB%gqZs??4G-Nd&pE`@z1^du9y(KlgVgLso}K#Yl7r&qzg4NsR$`XBlp>>uDMlZo4e z*TTLJw}MUjA@1^;(3x(6{Q%tp`$76X>|Jy_?1yku)5LADyI?;`_rQJ}xlQ^R@|n2h z#ovh81KWgVbwB)1!8UQ*>OuH_4%?((fQE_tRzHFLD^TLE-#!NWWl%D4FX#!_uOPR9 zJ3dds{~B@|xS#XC@V|lF2JYJY0{-72w~2c%&%k~gI-7|*D=)zQ3-mP;C&Ish{UPWX z__ow<;r|=x8T5D9CVdQg2K@uJN&f^r6DNFc!TuC9O!^GBPfYR}zlWV+{1LX#_yFlM zVdE=C#$RCP86U#VH~t2@kMS{L3t(fk8~=pAFKmo<<5T#HVPmu#|AO7$Fbs@#!v%Yw zkp{ceNQXVb$bdc4$TSQpgN?CmWW%m8dc&?Ya$%1)@(^1G+oUl@AJ`L&LfDgyBG}W7 zey~q42Eabi7zBH!F&OqNV+ico#xU6PjiX?nWQ>5l*eHX2vQZ9uiE%XSQ;aIury4b| zml~sCFE_@(ZZYa%hm7&C!^SbNR~g5`ZZ{^uju=y5$Bb#PJB;ICuQO)AUT>TT`%GgN z>@H&t?6Zt{us0eDU~e)O!9K@W4EtPT3GB_rsjx3FmchQzXoUS$BMAFzMl}QPcAwhuxcYz|O%<=_1hH3EPjaJ{6&amtg19A7J;v{3?RnCj;NBzziya+|Pjx z7j`iPVE4m#E`r=|fIWbw!p80p_8@$lsR%p7rLYHM)D=+)MPU!YIKkI0Fb0aS5?p5F z!rp4+VLjLh|8RN${-e-Vxv<}czm#&!T-bgy4{OM9_(xDF{3B^D{3B^T{AJV%e;KWW ze-xc%7GV|H47-B1z&@I`!LFq1U{}$7u&Zeo>>BzR>{>ki*&ZVUMA|!yZds zR}s}yU)bZQ6!v(khTTA8UHEzxjdSH;T{;0F6KFo{W9byw6R8RIBx-{_nW9KJnL3bi z3S9vI6#6RsQ|Siy@rEw^(`YwRPN$#3K92UlKAwIK`viI(_KA2Bg)f278?finpJC6Z zPhc-3x4Q_dnb$o4w$D8Xc9wfE>|X96uyfqQVEf%i!OnM&K#%a<0zzs0CMv&Or@qAZ zZMfIN+zN9S%r2NGVP1rJ59V($CZ5}8!wiI}hN*`+9;OK<2J=;zYhiZ6;A5{C(- zFt5Vo<17V7fE0td1ZD@!BQVdwyaDq8%x5sUX+(oyrohaDX@%*8xd`UFFn7Z|1oKOn zk6^qwn>h-m0cIY|5|}W|MKJfnJPPwynEp7w83EG(a}o?bc26I}xNxT9gUN-dgqaEx zhPemkS1|9wxN+ulCCtq*kHb6z^BT;%F#mwThx_Ohm~}9h!Tc14Z!!(U+0YW02+Tb& zAHWzmBRU3VG0a&o*T6gs^Bhb)&W>imw8QX^_*??B4dynOoiLBU?16b7=6IYhwZd$I z`6kQ@Fu#ZS1mhM!FooSFA(;+jCgRD3nGGYeI36KvbLN3gNnFX0J8)gp7T+G>dF!M1Z z7r-pUY+QsHF&Z-#Ek)=v=l75gh*+r6_d=iH=9k#TuM<= zp{cR4s(=B;4K+Ct009XiB8L zBN}OI3$-M~*Q6|HbUZYkt2^<8WZfdG##ogRkFzc*1FOcy%Z>9`Ri84HrgyeCFR!8* z)7m>%hoZrzwh$xDh=%hPcCL}|MN=0}4#qge%uxG^j+O8%48~4N$lno(GMYCj8V#;z z-=g+#M=;7>W`0ITXmu5Z#cr4tZjMG`k=Bm#d7Z)bj?UHP3&N{A+kze8NPGE|NHkPF zW73*6ZR@87JA&n$dtPT#xFa^9rLnPE@m)@}ZL?A>tR&^Eu_J3FvW8}~chuD;60fzB)Jl?C9&XeyE7H>07MeiwrcIe5DW;LI zKbNK~SRerlXu<3mbLUQ5NYiF7oWEr5oEfthO2o;u1UtsY#$a?sRb!(B38V1GP;bl6 zZJhYv&(pXs4axf)S+?2ag*BGBF(`LD>4B#HqML954F}{ z`h=PztJg$gVQ$(59V)eC=1!X%>}(59k49Ec4tJ>U0qcSkWLZ)5G4nqYnHnEK|i z)%CU2b+u!IRh2cB!TS2<%G%1xs!(HmD$Qwk(mwdyQg&Ty%b5DHqbtYOhU#jYL!qXs zrkdKC+WKIqdF+^$+E&&0du8DBkzg*=%+ifzgLt#gnlfwQER15LXlz_9HcyZl?cxn9 zX9i{+u+(Zy^_a@hqbox-p)qx}l`U0G!P+s+b@ih|EtOR@mGz5fmS{5Tu$V zO{j(Og7q;7qKdiE@LCMs3YIuC!%djX%~sSD7WB14z6gAAa66~0ZW4Y%Qhw09)Z+sY_4h@ z9l~^JsR=gKhQ^K_8>$*xUDG_KraDv;YzbB;NU1sPnDhHdJ<`556ouSFj!Ch}kw}}& z)NYv9Y=?&h$ShPb+|k(*qSc{T3_^tF%@4N2 zu@xbj)D-K8qV|?%l&IU$3|4w0G1i!pv^<&`>Ig+wLk4mC$!b0aM34#@nxlx+5Np2{ zi8^3TQ(Jg#IMNx@n3u4^(2P0MzbO_gQL2xyc zO`5hg($*=OMf1uKD^@84Z(Lmz;ay?3LB;Ig>I2KbB}=Ah?c6pCLuiKf6(@y*2TW;t zXIt9=XX4`RjKWLk3?Z^$eR~VqhettMxIIL3TDi$&D9nw9)&!%es;Qe=8YM-u@j{m( z*wLCPQp{VhG8kQ>$ZCmet&|DlszMF15LuE}FJTzb;dU$&7-~(OD^`S}lcSL{WF*RP zBWysLLQ&;!m;gN(!yc)pK*0s68IOKt$3^R)?Vn#KW!W1vR)WsJ0sMNbaPR5ewFYnz6`-&lGAY zlc)+yJQ_K;PJFRAZQZ+^3{g$tws6P#cq|Vd+0llZgKeCK8;S#EcSLJ>k0f};>fj1m zh#86XJJgOUci?9@nopb7-W)+ctS2meCfa3kWPFNEYFiNz)i4G75a=!V!8N8o7cyBqvm@}#$Bqk&$@=N-5C=4OC3bH! z!yO%Mp=s?c;b1#W4zJL@?rky&QdJfX@w8%e@NiC1x}N0IBc1Kgl2fON*CPc1C6}zM z>q0FurISPT#^3I-Icu;s=t;rVn9d6rmz^{w<7LquX0hUTmxnU3tS7J^ww1UO~N>^Tb~a52MC#@q;Gkd~m_ zeo!_-kg!5_f0ZoR5$t#3nUNJNVdjTcpe0aJv)ZEA7>7O>z&7N;JT=rFfrh~%SdD2p zabjehKCxf#%2I5-Dy(D>`0>Lddkn<~rP2mOmzscmTZcZ|>VbL!RYzi52eBtLRq*~2 zwm9|~6Ca`_P`B3K*<3+rqgI`qI6+}eF^>{sb)#5>)e?clG8A146)~olR7gV{LIHAX z&z{$b!U4JuIi;z^Xnq7MEC#Sh52V+5J>{IHRgi-sTeJjZ6+A)H2H8He{giUISbarU0rgn;6 zwI?X%LIpN+pw|{^?VxCQ#mWwnrbFqiScf|Z=fZ1)(J&OcMA?r_9NAOt4|c28VZu2;3-(H1h%Yoyi*UXv+0|T`vnJS#4FH6C2s&rUm0MmzkS;I9HtPZ=?X6}a!f{OR258*z`K6}M5w z;JF}waiJ1+Ex50P&9w~S_FWZB4KSN}PzoVtEON8}x1wd@6sJfT5Lj^A@Gpckb5QDJ z@Q67I6NRrGxAbV^O$W;Oe~i^-$<+#=64(NwB0K=NqXY1*M3tj9?f~W{51^^I*{voC zpy_$IsC?WVbacG=<|3{W%@)Rka&E%asT!{FK-=vA=|>vTtz*#HL3B3z>ZQA@1y#$y z7>l?n43!!fPQ@uIk+u^5s?Z{h7;uTT-upoK-ho!=-^}3ZMl?b-41ckNXGjPY4*~NW zsl*89`4N<+YDO4;vxLVzHw8CPy);O?6MAZz88S?0<980cIsT38H8-NKt1#`klB#ko zGFF<<03i_}W8qf8SB>yyG!tG|MhK6m78n+#`)Y!39C#BPcBbYvq7q!0vFPnqvAN{Syd>jf{e_#3P5~z`U^KhKMGt)}q^H-@L?F4jbOH6-*e`q480s-bN?DEge_ILKSDJXU| z#jqFyemC-T0)p(l7?1UoZ9fj6VKplFpkB?>qz3$pgMBU4jOh0}Zdw<@fSD zbEhK~bX9tcqC6fS_{Hskc3e1K8&<&O!JzWw8C(hm0#87$zV0g^uN90`CX8z^ zr`+r89I6TIHPN7b5GhjZT4PPxS-RBMKi-_(XMdq&=pNoHnULED5h2aVQ;Db8MF_~y zP2{gi9E(-y(p3H`&IBN71q3t*Nb4zqVzr(^Xg%fWP3SBxYk+d%IauoG;Q@hEW#y>K zRP8LH$dV3PGG*8@DqC|b9QxvO(We43#Zi8#oCq(gasp5}ad~)%z|dn^{8r%lUYZ## z#;g$yesoBduw+GZ>Lj6OP1mHr-i}1vz8iFtZh-WiC6Wdr2vV%P$ij+Cu9J@8iupHQ zh_*$$=+Jb`s64#rlY@z|ajPBdFV9N%NH!BfL{AhD=R$>m$kYpwwO=}B5z9|WZ4;1e zc?=zFO%zA|a)?lbV?FXo3V%=pirEW;OVyK^V!`I~ zWd>wuoH?>k6os}9I`1scSJ==oElR3xL#tds8AQJ*7A4yc|L4U z4CwTyyZoDmCIvZq-5*Rbl;VTdQLZ1WyEN87C~>pQfl%#4#9H+MHB}8P$#HJ|_ zl~Y9~#plL{8SAK+p?UET%>!$;=zxTL1zh3l9D)Aw{B%!3B9$A%N)H1~AI+_Xg-v~g zH6fjuyA@DmHE6e*U` zznCoXcD7`Fe7xr>MU1P=eD?3Pj5ZKM2pGB)*wMCRAIJ~qF_2#8=9+L zxuLhlS8f1Vx#7Be*l{WH*{tPivf0@pk$JPCrli(vS+&Ci1rk+*J&@qY#MD)#S#)P} zh5jV91LCEbyIyyS)_UWuVDdt{NeJq3(Jwv2ziB3f0%+r9MO_WZ-#$fPv&g^-PXsBG6pLmq)U9gplIZhn=i|%9lqztTPs)++a?;RD8}AqU zA(?m^AF;cg$!2h=IjpGnNl%wXnN{LM+uYB0zaecW8vSA2jrknmv3zY&{ z$?ZFqV|8}b(9&U=r1q-@^6}WYN4UXoW$>W|wAzc{^mMn`3w+>ZD6cEs@TOrqv1y_A ztoP4*?tvTEU+kTD{%I3G{pMpIdha;4@yof-_{L?R`Ssp}JA!p63_IO&JdChYsVY)Y zJpCO~e2|?sp(5J=q{l4OXB#vGfH9%FtxK&M1ni&~Nt;Z0paPrE(nLAD-Z z3XcBsAc(adkH6FO_`FKx!Pea4-_*c$*_+JZL{qtO;&aUOn5M@IYC<93$2z2HO{h#V zUU{fUu-YhM;Q2=*gf|oOFeCjlI0R{Aq_6<=vF4lO%VDJpt%#c9kCiAx$3dRUctDl}r z5b->kY}}h5{nVh6yc}C@#}-=1L8TYdSJQ{5yHq;?7jv{;ULAA4AJ@3YI9-o!`xbxs zuD>MvYQm`p-mj^?Ju|6#1WIwCXN`pO&sAV+Qg9}vEv;Loz(G;IN3%g zNKw}QFs9Tn)oGOw#1A2<@!IL1p(8k9r`^W*sib(nSc^hJN9Z6aQ4L^C#^0HrkjxG& zw8mZ1>ftXRY=v98dp9*V&l-yf3TB`9I7|rTl$di#B@9quJy0*O2ToEZbXM!#O^|!Yy73`B0BHJr<1GGdibYKy|y>jr+S_!kWWhI1Iww3|bbRjx(PnWeI_w=0H z(?xp4*JBV=t$|~VxHL57$pto+32i4!8|$OG^;q)53noo1N5$`-f#X!A)5)sn^GOFJ zs2e#6Lrr=lKVFJz7-)#)NTmw0gW~L2L7Yb9wG|-i%>AsZvQCOMW8*^#Jfse*l2ubR z<{kQuS}U~xDqvQ-OH?b^ApopJl(~VFg~Uja*P5)X1zRg1TEVJ;>R{Q{VHP;%Mfbc( z!;jZTC4HgH8vRu#=nyNb)|{;&WA@?>l{Pec$x5cjBeQ2cZt(|QrP!;NVr(i^O}t7y zLyXVMF>oAVF1~0NYckxxj$Z6%QR%kmVbQVT5=E2lZmS1z z@D(ph;xsd88D(w9)CgPR`8?3OCALJo%Vl9`tCA!$54C)LE3RE|ZV(8`%4 zXd(Zt@Wf_F7{vba0=tGuS$oGb%FLIR+MAS3=M0d0=zEB+cy3m_5(a=?*o1t7q{)wG zP<_CHMF!LTVm~C6b_f6-W<22gdkuVUi2v|u7=sp?1^i~<>`1$PIUm=L@ivixbm<1C zyKt>R7q00lIWgScQZlZqWC~uEC>d8`-=r(qFscME&*D|PaHxe}wcFeDI(e>EYIWz@@=P`$;E7fx_{vMn(! z8Z~%&XQ*Vg?cGxJt&g2HRqxQ6y4`;n%QMln#_n60Bq+lUINWFrH?*Xt}nlf(b(pWpc!{5=^)KV90scxw$uO8FVTwaTp{>$q_O_k-fRd|Q7 zxoUKMu)ek8^cY%suKrF(LS^cbDzjky>ZVAWEkNwaKNBxWmW-?7+O~DBZilxD9O*gU zRnk4Wjybjjj&wAasp~c`ra}^gW4zmSB-2hD7hNSM@rwcw5tf+N#2~rCN^~cXE0G)D zC6-J~C|mA#I|p5yGk&9^L}aNo&EU$*7oI$6>+0$a zBK_l)P|f=}TTs2Wi}bRDQOlAkK4|wLt@d|Z#d}E)H6Ek$Ltv;~MrFJ}zV|OdT(#suI0bKD;~fCJ z*(KjONZ=B0JK;^h1&~(>v%xMi;e$^57~~5=ZLK=By(G_w;e|r=jT37T=2<>9(kySU z$V+70gt&;f=@o-E{kogpH4mRYXj#ughbv}@heWYwO^YvVg&{=ox_!H>2Z{RJekzK~ z{ylR1czjVN6g^aOJXH^$bCf~n3{KI*)~Gqs$<3j|yIAjcC)cr_((__nSCeWQmn5r~ zE7bc^P&?+d%oeTQGdMtcTCU9NCb;w!VC9 z>zJz1qiaV8YnpoAoK+p3-B~Sm3<-KJf7UZWg-o?O`&^oHq9S|fG~H>d*L19BMVHsM zo;D(%SB-rhYV0q&tzCyfjXk8bIWQgd09Mjvd(mDGOQeV%X0j*?8 z*WM3*yPwhWN3*cAQb!Q+BjCfLa`aSI!kIzRS%REe@V;tBi>>%4C5TUXp6$Ha;V{eI z8}ckwXV!6LG1cj9;%sIbhwj8J#fiDiWcL%MeH=hRr(MQUuG{HdRgJ9+^PxfftnNUL z?{LPfS~{TtQ?Q@7LF_)5lE6$(?8Y0?pU5wJoXbtexgW_X#ug2c&L*~qp;;pkLSHwc1^-}IoGeoha^*;XvK?O zhIz4U8JJ6+R^v`B2@DCu=TzX3j&j-Ho`9uf>gQZa;-5J=vX&f*y;}-ld^pyUu}O36 z$Xdc5c;;htURL*aE#aq@I8cqQ56E}I1CiE1usslxkMHsGo+E2XPY(hAeQQa5(l|d< zYf1h8p|xb+qg>XKZ(%LDLbBN){+07b)-63S39zf9LPG-(urr1D+2Ro%nyWC zhhzM)N#3Wl=uer4mPXH58EOykEg4=;Vu9GoNM~D1peYmx%jdLPMg_vHSbUK6$Z~@Z zFaF1uo9fYrWw{yse_*-U*JQvZDsX_)f!C$4eb1n;efx8+OYxrwIkGnW_pD7d$&>NO z+H@dmlXYGeltZ!r9*|qh5TBQ|*uRaGsR%@oEci>krpishlFDx~piPB_uuS zOm!=Iw)zQ=|NL#-1G*Ny5PR}gT#XL2qltM(&f6D0=S>>I7~MDsh8BfyzXw|?mPThl zxe9f#_9fdLenJ;e=gq8PrI-Zx@dD^!(9YshA#etMD+`~Q4&ZPUx7#}83;bVz`5|YE z-0wZyYTw8GKhTHrLA-bI`ED~;*XZGnd6eP-Lyf+wd#KOyQwSgD z3S7d<@sNPDcYr4(KXM2RL5L;8O9BTa7@5pr6pf;w<3*>h;YFvtzRZ;35oG+w(!eCw zoL_OmC)1B;=>I($dUbWucKL{gesCIkCoVt)IxzOX0LsQ;dU$;}mGNoovw4alUiEj$Bt*j^lwU)jtGnk@Pp_;*V1SJ zf74FqS4un9^RG|ND3u~d1xAkwEG@C}23o=`f%Zs8;EV`vQ#7mJrfOSXfs)2AjcyRG zz5rW>|Nr&Jgx|+mx>PO`U=lkgGt>Z zcV8UMvTE<|$G1R-gpG12iUjr!{j~PT8F=_1#A2g(uO5_b{Q7`MB!0&N*0AiLJ_H9#rK2Pc)ey0%ni zuot<^(fcKtIpOD*%}iwjTi{RLZn?r`(B+?YyCFPX|E3wM(P-43zb~+#Dmkwtheahn z^3ef2^0VJ?Jo3>2ew3Q(7}JvSM?N}$Z-Vekuq*xx5AF`9`X9ex`EOSLrzqtf4>e^q z3i!&oDjC&)7If_W&FOg2m-y)W-ac>T(>`V zwckU++T9$M0dWW(x}xKubbkT5w)<;VN_j}7V)1Z~uUKk}Cnr~-mM_4HWIv_+KmYji za4w=>^ofP#BZgnd{x6$Z(}UqQeDEirxevrdf!C)f@?IOxRQR2PXcR{#Rw}53&?w{T z(6Xo3_W$jd5~@Zs zJL+;zic1OARfpvhYnC)k(L~l6!xyQMa5ZCZjZ`z{uzzGt4;*{oS*;|>$$!tMC7f@h z9*z@?6we_ntyn!wh%aVNRZ|{XSYs1s-G^rR07+ ze{uTA7e*5H=ZEeKBQ;0vWA*S9Y42}^uMG$BZc?~;CGW+8ZTN^CKGYgs8&a3hn-PeI z-uj~>OQUkLXLS%Cz7DBxlgMjLZ4sRH;u=tj>z@31LVlvo(Q7)Rc;7E{r;{tH;a%9@Ab%&m~a%gkwR@D{@T6$N)UfLP@b;hq)e!A0g`W&oSw!0UwiKs97&p; zhXFDfRLFLi4qFQA5>^re+GsC;Mgiy>mNQ`tx_hR>eVax%cXqlks6ddU} z#?D#qyKG5%PD= zf62_MtgNi6OjH(-voi~zD)Y}j|J%8J=R2U1Lc4@fTH_BAo=^fOT7|czvoA^qCpPG? zI0Z0a5^t+wazZX6%#MW+&M^aVmp1^qt=Y@{@i_;nVst4(XFp_OChWveL|4fj*liXnmFN)dey!V$T2cikSLw$2fWk-}De!j2$n zELTxZ23QNiBT~vI?g<5fKNrL4dkxjAGCA=!(=FUhc#Y3VDGA4R6hYhQ(RqMPj^Uew z(HT)kVhikdJUYD2;(~sFXl`n`OPX5Yl6REvY@G9*I*b!LbfS$s;pH9dMf>6Zytweg z|7mQ+4j6=%OBvwoCP8H!=#X}&2g1O+sE*;;N1Q->^)x+*-ZxY+C$NmJ=N_3yHl?H> z@gy7+!+irCkkvM!4_;z>xX7qIT-RlRzKPuc2RYj}u^mtWoyG?`m2YM-rA-giR@Kz1 zEYEns#)RNSGOV$DQ~R-fa;0XsOa_oRH%FR46GAo8IhD77E*Q{`!}>TeyQAMsXKyO8 zF{1_gj!6~zj3URIwAxwFjNyTDv z(8*t*`jCVgu)-g+kkVycG7KOkXSFh(I`FMWB46WJpqF@}Dg%x3>N$WgsBMpHqa{Xc z5KKzKffr+@{qXN0`1H4?Hq#Q7n95EY7J9Nffpubem4TKnw1yewB@8?cFiGnrN_!)L!Q^4tm{~DIezna>T8TN?Em>FfvAUC4!nck5N z-Z3On_^6{@WjIs;D5M=KkjA_edZ{pzmo-9hwPrTaD|cC^cK(7-+l3?+5#4(cs5&S{ zv(U~d&~Z@ccgp!VHs)p`(WKL1CbiZ?87PtfNArZ|pvOKF$mH?^0A~ z4#wy9X6j11Jq{BBEesMQYaZBuPC9Uiw;}>)THQlhDxo|DX+mKV4wEOuVS~<}$5UQTIoV$mbU}sNVn7j!GV8Rirjq3pkk*+0eAv^kj z{vCFf=KieoW0}|j#3RuodZ{7BeEL}h@(Wmx^}-lF-OU7Rh6)Z~bQ8E6Lo=7@&O%xH zekr^7J(!Z8Z*QkwhtT)Vy0p-S+TT?^L`lo!%ebc;kf5&Ep6D`tKQG0+kB3x6Ht{eOAjh?`gP{yYv`Omj>rm~16y zC*9AolH)lLSc;gsAOG>ig&+S1V;ft$pi;1dUd!TNpjCopoXv76pPpIA4oU^$v!^Jw zZTW==r1<-2**G(z1@Wo|Dd48zTd#Xor^$82yQUY|pa=H!sQ3m^G^;@rzo}8Yyqa~9 z)>!DfNH(@oGzbwa2+!s5VgVn!0oe9E&ph*ub`Si{aM-)Y2Bse~?pU3Z;B?)1?1Dp( zDZ?@EZL^F#0c&Hkr5zBGPkP zJy<1Je8kpWFV&F$yEO$&-%I9ea|`4f7!MlLeyGHMFmi`|E@wMPxz`j zL9hLgF${pN)a#HjjBBXZeXm)sC))-ic_HKO{>(Of0=Hf*WZv6^_h=wiIN}iACE3H_ z#faq9AxuR`4~LZgEbAS7i0AG*<#1o{J~S^Ex=Fxyh25yr%XIgfl> zLzNCeyZm2qfZ(EvwTZHfmN zAADfMR4uVH zKEZs*orC%l@a%BWu;fL95@RooPu4$OHy*lgSB(ewxo+&8LRmXmHBN(|>+f8@ZhG(R zH|wr$GgMb0va2&#V)a{{f<(z4?gnxGnOxcL>0bz%R~g$^rl*8?7S5$S^u<77vf%dM(Ra zr+QR%Pl)`t7*Jf-vfdeujfSCG3s3+MwEx^?H0zUWq+1HkBOnl)?~qYWS>kVRZs1c(@Ly{$Hv@S*nPWIZy6y|Kdxk|0I7#FJ}EEbXmdBa zOfAI3ttBz#S2A_bC`mj!GYQm8r{_qCnt6|sIQ>9w>ulck4&y6F~w<`|uiM-2qEtC_ryAl9lp8zdK(h-!l6S zVr~caDj?86egyhf`X}n%@;lriEY2q99dld;pg~>?tH=*KwK~+iiq3_LXYm`KaGyzW)2YX{cYM60VT4vT@)Q)pP?<143T73rcXQB~bN6M1>-*uo`% zuq{0~J_c+#0?sZwOtFj;`S9MQoyvJ|CvFu}BrGXg_llT4W9qlkI*IFS#^hQQ*-a5` zCrOW@OLEers41mOjkL2Sl-ROe9A3t*!9PlwXpeV3fBDgq8W8xJ~2r+T_(xG*0>-N#{?W5M#?Hk+X=EfcC&YkV%@g38= zZQZQh*f{*cMs{?o5W7!+$)IM3{dtBQAP~O!dy43-Fs_IkvPHnrgoL#c2#0Y}T<-TA zXU@8;P_%~G3*0s=E+PsX;EO9k(2s!?MWnKXxM|JnKv6AvRF&Mavoy2x)lcjsW6ikTnwti-zB8oY`so%)SNNH#o5bO~LQO!P(+$_Y zZd|`^yj($ReBZTIV+GC9&DRd<9-dw8{R#H|gARyWi&`o<*mtx7N-(kGSa-WBO+spw z6vKLBqJpU41E5%zpw3X5Cedz?E*kW(ZA+kD7G^@}hAV?<2YIRG-g$iLUcRm8gNPWk zG}YegF>n9Uj*!AjpPK$d7fu}sn7V6$thR;V_?f&yx;kz|)b#mf;&{>v3fz3d&6gz6 zAXFX+asXjW+i0-f^U`j;JCMo`|9-7Od@^;9WkmzuHc*K{U?W2B2YeKk(Q!HZBFg0? zD4W2ngZBo*uHyjR0BFCDgbj!%{3Nl2@(mv4h-kzGF0Rlu6X73X1d1irum02Lb9Tf( z$2twbK&cifTNx&&rOGqC3@cV^IzwnyM{s#44|C;nX401RIFo~poXyQ9dokymOqlG| zE-S6FG!jJeK-PF#qJ-)g#p_Vs_YBZ^VvnrX;j9_TalADlXud`iZZeFQKmc81=!j+{ zCc`*Y^TL4sktVY-Ck2Gt%w8cKGt5Av9&Q*CbwTB1-A4b93MYy5=NlCUx=nENFonD9O*Xu!MEhdrEJH3Gsy%oD4vZ7>; zD5YZZyheA#9vsSM6IKb**X<_PQIYAP_uAdyY#-1{ag*htNa4VC+P9qJ-PX65@L!$Y z4}6@49>Tp~1Q4HLf>xK}O2z)q6Z3R>{7@(HK~V_dm|l8nVK8nwUK?*W_@B0$27EQsPZwjsio}3 zwtSZ`ieu=w3N@4*SyA7JxkS(<7F$u@P8eOG+tCO7px-_)Mq%vuaPY$bdos{2cGWhu zoP^htSLuKtLGpg_rxq7}ad7~WH?O??!(!SPl4%iw2eZ`mvR47fqU-ga&YZOV$B?xC z(_<&CGX^vq-MziXPoBHoLg1D0Uh4^+8CZ&h1*KMUp${!Kcm#|SFnp9C`cx3O30q-C zgj&4Z>UHo@9|1*%d^DI$yWOsH_6Rjb?L9!xJlAoo)=(R&nA)wvgkn=Av>U?mP7z~g zF!(t_!IKK)fQC2lLDWsAmD8}G40F{E)&KTwf;o@^80)Ll4yDpZwTVYqTv=5_Wvq}X z71cv0vo>Wn>4a~^Um$KrE%8#p71d1nPz{U0nFB zKRuuzg_|4J&X`FHeKM05<K zoIudA2c=3$V3Nm~Y1zV6gkoBl6U~$S)a*I7p*RUv4OF~zP=|m6?@brZE58e13W3GM zHQ<`&Qn#uZK^%5@6?7NA-M2Kc zgw3GjI-miOVX{*Pm_z$^>Yk9PE4)rVUo~D|16~$i(^V)`(RcCZE9(0aoZ9o3z@WUE z$+JD>a>xPp+NHyy1T#C14nb=@e#lX+HgbION!KdD(WS*>1MxhAk-VLEJI9NFI#yry7g&O4?YYKL*W3c?tc1!8mXOn~drjj-$5_NB?rb zO_Pf0f;}GY-g(KZ>~CU~{k4Qu zreIk(TFCLEz?{+0nu0O*9XZ1>Vbww#49d*eLc5VrCNm=OZ!%wY|3X`e(-NIn9io0k zRh!Rzxy%f|Yc*|PdB4qITQ1E#h`iygv@VWTrvLiIzlGKNHxpK`l8}Ozt6IPjEaeqH zDf3>y;Yyoy4gV9Y;lH1{hO4s}`fUO%xLV3-7U zaCq~$b?eUU8ymN`t()6T%Q~tZZEbID-!ZM`?OUzw<3kn_;R`+Kd~63Q3=0=WfQal- zFR-A_fJ1xw$W{f5m;o%JB5DMtK%4-%Q+5;yE{vI#Y#_f^*9?&3)e$pEliI*!`VCAcNM=K33J`a8j7C#nrd3J4 z25NqwAczQxHBBE8=T?g|BEi`yuN5vpEIvRmfPZ(9D`u=P4XBN()g22JO)W_T8m>24 zqGSUlN^pm&SW-J*zJ{{Zpx%&uMEs3dG(>ULr0y}TsOO;xT zRWwF?X&bAx)eZcwc7WHnOt6x2KN~Lc;2ev?eWr-08#a|#ZDDJGiWk2R3=GDFOXc9@ zVJb%T0Z9A}cOwN?ABL~xTLEs3)4J7G;IEpZO_ zU!OT7QC?lshXP4|Xq6EBZP1HtVw9|QU$y(DN3`bvVeT{1=4|`z!eC_XG3|^HR+xM% z>^CyOnj)46zC^VZtL;~!?T5&Bdd_zdtXOe0#-2{^jsysXqAs_>+JM{eyY8R0k6cHa zlEXQiMxZXYW{tXJt1|&nm`)>9Mz$=FIi*F!wlUJ@cu@_r%ZDvXS`Y~%7>2xJN$`59 z$TX)Ax(RS7j8WY`0A>OTP7yC0J{+2Ce;I%^G<-urj2DjXy^)UYy}4b;O6r%&2}>${ zQ!03CsmAgSotCubd1((&+|@RUA+hT-FcQWx+;^ShWP-8_Uw5_55lFr*Nk~AiQxIr6 zeTnIFU!PLdDfeI;@(Vp~>Ej%3WqpJCh~~Zmua8F%Saf`opxfjJml4hcEW2>-3t;+$ z9&?7cD~F|MX<{#61TG&sVMLn~dN#Plei24k_{ps`IgDZOlM?}^3rEsSpUAAn4iO6O3B zgpzCmuV<|qkt#Xz54!I9bwRF!j3SFrl`ZQX9adqsPlN7m;IS0)IpaevrWa}sSMd~j zCiqv@ztGomPpHg|NeU45b(&ff;AwqV{{5JxSq z&e^X=;PtZWTVl_Ny$EF+Z^5*&r-;J7F`Y8l>v|VdxpG%HSB^B9Ion#wj8UuwlAPd- z82@EXdaS$y3q4jSh4^b2{;At@KxF_Mrz?5Oi0pILV!qmuSc??FCusEa3_fvWz}#f7 zibXp6)i{>8gS)>I^x9$a4qQ)SFGBzHEyrpGpbUW)Ds@r#9YRWxxW+pBH?Q`g+J^_D z5_;}h$B5DdyUnKM`+3&7k7xDp3K>qGe!Cd*^eu*LD4x`cJRMmqS^*xw`~$@aJ2W7Kiz>5<*BE|S}4MEZ9>kt(E zksO4gZ?c7<=*rQ7A`yt9Yj-CIMP+-23`UK7$gpq}-H4$Pbm~1MZMX@j#*f|BSq1h5 zjbZdWoRWQdG+ynXpnQz+?4xv0VubsD6wN^*q@8nx{sorZA0#Zh3PKBgI?n`*A;%DH z?HDEYJgmF|;joi}V0mN3um<8-{Xek2|3$+34neck;aVN8gAS7dmw34J#?Fcuw#xr+ ztn&XWb(L4=d3Bz9!w8cuWU=Rbvj3%TE-w6~{ed-qzt=$o13^N_)#*|j4!3V@nRm8t z-D%$5ytBP|bNjYg+t}JL@7!r_Y;SDTtiy04M-wml1$rJ4vgcfw7jaXV3{+xmX$K?} zsF&_p{+`)2k8H;d&hVX{;5>`C=K#;DQXfqJq1&8@0WRXpm$Nz?JghvxMm$>;tnmUw z-tO9t<&^*+Tv+5T^j20NvNnn`G7n>TYRoM4LHKi%Yg{mkKRNWc2nOnNGoL?sE@{>F zGot8>h)#fl1Ysas)V~N5CAjuC%3_2CF+z%%Sp!Js5FdZn@|&LBW!YMgpc#IyQBs84 z3&7$_p6P(VdB;-F6Iu@mFajS0!H;jvz-ZzlpoToF3lWKJAnTz30xv791Rm-~9J?M; zX6UBn7t4mAdU_d;N_1F-*=2P z1K})rLA~Df?Q`JhhhM)Yu66?(RTRQUHBp|!$D@8e-qL@9KLhJs;I-e|$LGe%&>mdl zhtj1%@SY-x)Ft^3-shDSyqBGeH0ff4d2dm60}rm(txoH`=mzSBh(FZ;2nh1>&oA?E z>#72MqsT+A$DGP@pyCLtV`AE@x~J%1!wD;aG@8Th7}7EoqVuJ1#py_(=CmfwCsayl zAS%YF{Dw@%QHM)-7^&sH%6nnR5yr)62G1}c9_fG*+b9gr_<_~+cd$Xd|4c@~aBJi9 zM!2IWgCLSl$R{SH5cUa7aZqXmCdiIbqy-5M5UH6?2#)Y7Gf-+gR2&a>^=0MA=9tc*VnOPkV|#YsE)@;sttv~ z%^4hz;a+XJE#N0RcDHLmTc8qKWVIu&0DFtKu#Sw@y_IlTMHb5niSkvs$F5ylk-JOL z24a=)7E^yy79HB8(*gUBeng(|7PY*v72el91OE&ONaz$jnF1)D-}hL0%(*;$WOHHf zWoNT=6>5jvL_KLjjY&*UpWv$=_@E zT>oA>zqZ^z+&!OQ=qvgJPzjNn2iIaF^xVB?HcwYRUDc-;y*v%zkO_Oq19z}$e1Yjw z&A;4OU*EuI`tRBSk0HPR?18j%r~s9{#tQA55=`tk-Xq$B=yp|44DQv+dz9ckD*K*O z^t>~7?~J?a1`P)&gYaJnrx^3wlG@tm3M+wXSePGIH(aIu?kqiF*H=;To#D3ru6Fc< z7A;$i%2}(-+gyCLw8BaJ5RJFAI7_g?3sQ{$^O>&-JhhEUb9d5nDYoDa1q8}F>5;&h zLGBJKYGdaNlrif9Jj(z%3@!GtT};+RRf2~`eOT(!zU3S%?9GlasS|O9<;vf=k)C`a z^PgBo7nFQ5Zf?mF&JQQxM^*00?gUHeYmH|vF~uh1IF6unNuNEP=@SO))knMy)Cnfx z4lk}=B`y`0E43H?)8$XGoM%ga?K*Vw2DJtej zU(i3(MIEUX9d}esP7rzIcIf{wBKSeS(fk%0fRxV*XCO5MNmuIuOA11&3x>>N_An$h zbS^t5lBU*?PO>rptuLT}SgsoE#7UufA^i^uN*WCpcmxw>Mg~BXj#!^X8o!R%@fSwQ)E3Z^Fn(?ie71w+*6 zsN_tG1WPkh&PCl*FeVAiN=drtxSfu50+9V13(TH@byAA-qk@8ZSn-9iVTQ)|1uqv; zjF}0U5v`qG`^fV4kym6fbd~1R15%GNEQCI58c0SA9BU2f1U3vjs{^|PSUXXSAa=hh zU;*z&+eIyl<;^cewgXZa9$KA~;Itn^c#Y70wPmywFU1>a7I_diwr(|yHtM1fb{dT< z-;e-W^YU*Q$Ri?%vfBaKC4O%-1wQ&25oDT@M)pD$nDz;uyoSoz@! zS;0A^sYX`OoI&??jf8`iP#Kcjm7EvKFRHggNUvP?M&`w^o-vo!t7WN_OO3vLl{5GIt_RTOpyGQ#Evy##afm zi8v>!t(Nyz>$5KAZm+%WuNxq(eyDOzMyHAOBxB|Zw-U54aEt@7pV-qH=vi!O=q z#GFBnx3)B%bsI5+{j>Iw>u7a#IK}-aI?P!^j-z&F0`gdfE{0-CFPw{f6tK7$I{XS) zj5R-W5zHyD_$IxR0(cJ8rntFTNMV3};hV7MvLaT8PsoMu$~);G?b^nzLI$(XXh;}K z3Fb{%yca%Jwc4H3g;(3!;=y8}UJ#^R9P7FoLKq&e5bKB{j6kf1!NjaPRS$F&Tb_t{ z4*}-9WV3;$D@tr3|C#N1>>`tbvL)Yc>+J-Uy;v-t$| zm=gc@fPVXP18AlK&~KOF2$>vomk*@tpd6UHK1($_=B}2imWbro{xh0Z>39Fg;=*@- zB4L%PWJ9z|SOk?=i+Y_}(g@(s6_a(nlLMIH{X?zvsyb_iGM*fk--TO&K-KgN#uk5YF;B`0tY=2_sU z+8FH)1WZD8*~q@xOsqt;6sM~{u{yHY`)7W*y7QD6zw>f&;dfpP?2jCaM>K24H!LJ3 zw6@HnZR_@p+g9!N=2r98)~2;(w#>~~@d)YgkJW+714{awxgo2v5vDUG^kf`9uloe6 zU!5z^k_s|ZWg{x$zb5lAmAz~P7?)#2WWbq=aN!UpG9bUHZa~ORtzB{x`Xpz*zvmC4 z6M7+a2w(cdRVI@3Sv+VZUl7uSkuyVw|CQT4fQfVR&<1wj!~wi?-?p3<+#WBNa?4;S z!LdGn)2`h1$#Z(H;)jz>`jrO#KQ3i%mBvL~dBD|GPNkVk@ID2CP47&m%D9)hP@3MR z^8#NiayM!Er9y;Mc7ol0wN~M1hiJ8ww+N+HXK#&&w3GfT!nHDQHx|4t0aU)AwA_Qa z1HRrUhHH28#yM1M6%w2Q*KPzXfXI!AP(}ii(hsKG5%?L!;ymy#95%LIw@> zN0z0JR)Lg4(AEsVO{oZ}3tvgw>G;DN*qJbeSSVNULt-Z>*HYq%NdymOgmG4cxl1aP zqfUp^4LT;gJt`;m%1)TuujP$$UNXilU-#u`NM*8fp${0DU@*y+wMIQaXxjhw*>qeQ zgJypP!$jZhNG-QWP$UBgR{$Vf8VD{H03a+0ecsfuPAKU6ZqI94_fei4XaC)udflwo zYxTO1e|tx5x7Bk{EVm98xlYh)KeUfL(*uW5y}loS#KrVlxXx?V>w6}6FzWRef$iW+ zb>a|M=wmw&cGz&@ygscv9UE0!#ewGZIOd(MB?_%O3B>o??-v(-yEm{>rU^s4oi~<8 z$n(c2n~0%=O1v_q8mxEkHSHbIZ=Xw&yDHq= zw*0QyBt7Pl-Sk}FJr35T4!9mys3Hnaxmm5mS}4KPjw8A`zi#00qoV34QVFw+bWR*; z_#3t?A8bSxc?7i+B#eSR(l5bLr(<4KXgUvg>74FBQ2}P=0IqTNAITCKxubmr83ED4 z>cmieMaK3j3ZCW_VZhQJw~LNp4?XciEgHZ)l_^|?1v#rY^IhxM>^Z@16SjsA>h=8G zUP1)3$BSg~P#@Rrjad3$c1EQUE-p^%n0a7%E@H}X2kJR^zcfIBLn*(A1css0&wP#@ z5!^M3YJI=-^KgMuEJb+wbPN`dNV~@SEUA{TjNW=D(%xI|&9F=HV)MxiDY$GJtE60qR~(nI$Iw4cs1Su~-L_|gzFb7u8ZNP?nNoEM@kVUu-F&wLsQ<8_bCvj($H zy*xloM5;i+MKCM@)^x;}$tz3X7P)llaNlyR*J;Z9;YzXA$HrnAO;=PzrgNXRm98u( zqB5zak;WILZIOy#R0({kwZ5TRqM{u`^x~}T_Nex)&WzG`XY3aMY67Ab-;x8BqNm#- zB;)$`2%lXjGxt4|nS%q^v5##_D7nZ4qqAtZpSW)^pmlk6?Voj8o{K0s#yj`a>-Y$T z&+N6^h%ccN7i^{LDM48rzvo$0kO~Kw4|CKv8qfF_eOmclt7#vfku%q#li%>=P}Myg zbtXn0`=*WyG|Gq7YVDPOz|J zV;^Bt?H4-A5_SxoW?$W1T=?pv{7$oHR?~&+=j?vxYMp1ty$s{M-dB) zF%Bb=B0tz&T=>D)^OGX?s92-*qFc1Lor7x)c60v;==d;Zhk7%U5MaHg*vsN@w9j- zgh9@VWh0{BvVv$FVSZt-s;(N2p09HTRd&drR1 zZ^p`p9uBPy<(*reT{Ei`A*3c$>%k7#)pP(a8W!b6DaQFILZf9ADG@nHDKtYZO(Ur2 z{^6pEl$qarvAFP?Px4b{RE+cyqJ~%8E5u$BcxlK%LVAb{3<*^w79W-2hcy{VAn-G( zgvOEMHeX#{mEzK7{Q34t$ArRY8I6@btI+uHBSYl&E=4kXa-C$kR2S5P{)9-A@25zA4$?K0@$8q0cAs!)0ua+Xk^nHqMk&3JD zQHUfgS?gWkp%dh}Y^Yv0M0!@(by}{}Km-&Zn)I#MgQ|s`3OgAF0I{rH$9Hj(UoZe< zFoCiUWw742{z{OdIDcfv`{kWpwc)FIO+$+f*|zuInN-ws2HRG^wY0OtXXGiJ&w!b( z9XocHb&I;Uyl;GH)a#DfIYBJwi!UCm8V|ns0-t#N$+9FW=yR$-?m!p-8~883^BbI- z1kJ_)fjYopZL@-_x@X`Y#|pSVLMg;!)zT6ltk4fgOHlJ1L2P~7 z@;(s-U0ly!c`2HpX6T=n9H{paGQHygG7<@Fb|cnRawtsM#)N z>jLp8)oQ@p_hX(@^v?@j4bwVtvRLJKeMVu9vdh^&^MMhv%doR%YU__4pOgJZP32<& zQcJnmfO6161xX3vQ7Q}dU~;8}?oLx%`2CdHLVwUdQz~9`@n#SVMr6wSTiOt>y|RzrsW35Nbe&?`k&|LR{ZSV-rg02m@$fYz%7WF zWJ^Fv$(uvm9s=0qK?xS#X-~u@ed%S4x?u=r*0fqsw=b_hW^Pp6Tc~tdK&&!J#T^mz zD?*c0kp~<@!+lpeC|N`gR7ihzJy55juyoV9j2G$n3m=({BIN_2@?cqCLx4!GK&7!N!sKFK&6{RPavgkDoueJ$fhfhI`|`0O8F5grHskw z@yHBL@gV8azE6-AA|*l`=+e`8M0IupX@z)ia1MohW)v94__vKl_xkI`x&iV!>%@ZY z)@=X>PdFr%m0>x814P1wf*!)#j5un%rb`8^O=J_wOPTzG8sKX$ue+&892>3K7I_4) zeuq0z1bN0pRnT)Ni2WD|saRUBSAv-NI3&rs-wFbEEKi0KELB#5q-*dc%nAB+E0WMS zLYo$qi*Uke-BNv`8?MUu?yy8C`|i4Hb=)?JjLhHuiuAmHhh3ljQK2`&mFM=KowtG% zvr#ahS}`$_B(kazhbnZV=!wdI@+!*RYtK?25n^&9LT<-! z(L#BcO;KdbnksjfKpPhMwsu=ovW>{9QQU;1hbMCMly!i>!Im;Wk#9FQ3>zLlvvlg4;?Uk_zIR?}JVLzS;=(Nz&;<|>8#~GBzO>_>BbYOd#y`{;j4o47qR60#v0WIM zJic$VU}5X<7OcbCl-A+L_DK~=RLezL{Z%NDXeX)m9fTIsE0AuAgt87;62gxtqO<3? ze&2@>I0cqjod=aR;uM-I+fnzs-y2l|HwQ}sDKV;0A_45Ls=*lXn$DTc80mTc4y!_m zC8}2px%S9yQL!bDD^W={$S^on7`Z@}P~v7Wi~@+yjB6-DckGKMs!#Z|E>}QNb#3N` zVkBxKrPnR0r9D(HvJN4Y3+-&MPZVR5vbds5-lk1~pXA^N!^!_*Wk!UQgt#p$-xMOS*TaRs_=Fv6e#p%cmSU z1KX*P_{g_Zjfd9`ANko)4r6;6h5{C1dl6Z)S&TmhET|P~jH}EF(0n+90w$4FIFs}0 z&;Fl_3xD>18{c__tVoAc7v;BlW*s}k;o^3l@K;w48t>^5FkBvj5*QnE=#UDDQwvFL z7Ada}?Eu-y4wkRR1TQ^5MZ&t6Ib-<=^PnHOPRj)&(webS!~b!bLcQKSwa>2spZdxQ z-s3OdKCjo0JX8L@T=!6ZnJ_P0_1E+Q8_D&N#lgikBqWI&TQI`9v4>W%iI!Iln*f9adXi;k$OTHo z01y<$TQKY!Hi=1}D+H`X(Ry-gV7H(!HOfFz(MFf{1RI-jKcP{-cf>$`WFLw9nc5ir zIkA0gaw?Id8;~25TQ~vTSSQl$5}ekRty%(GRVX$i6OaqBP=RzFL=9wQo*x^9p1nY0 z1Y0agr(nYeY)&ycad@#lTnA2_h?Lc4^gbU9`&N+n?QV-JT$v1EIZHdorsG?<*oV>M*&W|*%FoE8D4^It1_XM)K69E0y4B}h8n;FO3acmy=H&|0=hSOo#RS#cFiDcVRGF-zH?}uphx-G z3)H*(ECy<=-)0~?|JR-@F8tbq>FxX{M~?l*c6r=1Vp+H=QoSr zj_oF^xFt|3=g?leYoWlH4Y&{M4j1kQu%t~wCI>kOwNC(sx@Sc!6|>W{p=^Y<#0@xAPPe1&68{YLNIP<|kHl7OoZvYv%eTSJLfEDNWjc-J7t6$;kwwTTB+jzqK%D^rd=rOe0_jh9rNTw_!p$;Q_H^Yk=`JfYr3X~ML;eA+(P@h zUl{O1uv5e+;NZy$7 zhNx3XTi=!azOy6=#h@_j7y$UBrGsM>+t@D3hMghKMiDT5yS}?x5w_(pq)-n@xjZ@q zF&Nhr9$WL5CSzQiWtk#;-b3_DvfzZhtK@4;&l}J$!|P|PVWykNp&mmWUS6jEr+;Rq z&xGBWFP(<^J!7qgfdf8(1MTS@3i}k(shkO(wA;F%&4Z#!w(sTD9*ac&#*fKywAnx3WN`EYohSi#U0JGm!7yfy8mAu;) zA$mQ2r8n`b`S!r_NpT*qfjscDLo%i|;Dv;WYui&9>=|`BvfhMspJc61snv~dflKQ< zNksR@5^~TVl1=Wp(IHYS?+ef($mssz-(Ot#;oq6w=)OyF5EPIBMAB|n7C121RBx^o z9hJ%+2iZARe8jswQ4qBp_PEmSBe8rt3OZKWI_zkoYpCq%C@&>qUIkK6mMqE+?1r$B zH_ktd8p|5c!LF8UGOORpjhV$FPMl(yl1pc(HLC6|L88EABN!LXXnzz0{AM8#@U5-M zBg`2i!rCU*c2X4%E<-rDnm&R0AA!c7+VmT(=8Z4}la-0kvdc@E$ZF1AxX4N|gt7@O zvSohoqs4_Ed_MutfX|Pl7a3 z*c8$ElPHz;;>-3j8>%KCjqeBptWzn06$Uo5(?Sw4kV$JD>jZAKHx!H%VaDb5CB^`k zJ`QoK7>?m7RK*e5f|Xx-LceqYse%^)HLT`)!ug&=8676EhiRQt$^}x^Mo9+J$A0<0 zTwM6&chl=*l!R+{dRI3^42TFd0+miS=kDVXdk=t^7c2F8%W?wK2(B4B(L|e-;MzI< zZkt^|wBlbd>PFpl4%Lmq51>qxbc)LXm^0p8`)3 zV(YBe5ijesOs|FOyk@YG@jn#2v{ll}P{m^*f6TzrHoL{`oWn%;TXHqQ+_Ph}V48gJZE5zoX3sG_qs#t+#XfPj7PpY>a;Et4R+pZlX0gI>%b|YU za~xuT*2)jfMU6n-4{^jS?PMn|s}(>9{}|-Fn99Bx(r3-A2PZopJOV&$cZA2pDBgn6 z%UG;7LVos*Pj&J}4i0@TS4lYHq@aZeU|Hwb^1xw*pV(uO%#MpWRwC5^5-KS~zOCJy ztX6<&AUPYNe{7Qq+erpt5{xQo>~p~Yx)3!e`-F+H-?f^gx(nta-~Kj`9w@#ufDrXz ztg({SB9Ky77lk!*Hk+J1N`J(I1=$0hi&pum)F2z5s_F2UF?OSz&}5sg8iJfz*`wM3h11(;nQ*l$ zi&S{QO=`V=TmgN6RDw_a48QS6Np`1=b2!)Wy91u9jScuHz-?vlhj8msOX|AFccSmU zv4SzfOc1ofIlHz>SIaS$6T<}6sbfpTZNaJQhh{Zph{`1ZThWllBC>=s8F1t}`IW!2 zxbQ1~u|U^JY&l*rHwtaCPOp7LT;j(9kR91&SX(GgiSHuY%@pgmjtm<@>8N#IA+pA1 z;H!Kmprt0c3ibI0sn0R}8ecp)KK8+(P1%z|!`{&7?hSk$W^ueou--7rcd}gw{C;~g0e(NichU!*8SiSo8CE+R?xb;Fu+{qbIf^R4 zxq{!Eskve0%YsV`!Hjyepie_AyNU$0Dwlb511+=?U)EAJb zlYSG`SVfFTsI|g^!^1VwSn2P53!fi0{M9IwNY4>WD@uDe*jx}@pf^nIMM4+)7gokj z3|I=2cY}KUfia=h{+meV{>|}|xlsZG<|jMcv;+DRt3yR~T#t{Vt5&uwE_BVky#R`*~BP$I^f^#;cY&62?jJbKY8Zt~pT$*Iw}r>;UJlm--U`Gplr=+mC|@32qdWoLO6(6n)AIfKt=HC!`{*@_m;k5LwCG`$@zm@& zHY^d;HaV$#pMU;M!Kf55-i?j*8^&9==YYRRZdBnKSb14nt*vh2`7d$F!L@Z*sCZBZ zOOUK!kV1WmF?9mBgR%3;K_Y0D;iEuPXE51AJS5x;!e_pUx=kqRgi67m<7?me$6o;w z_f2{a{E8;q_Q`3$qp#kBdKEn&(DDim%FBQJ74_*kUQ$ps*F8CKks-o&C=(^vrZFRW zM#G8IbnTZmB3fjOduBP@9~m!y<{P`u9zS^e$wA%wh?jwloEH!BOK_6$*6$dN_z~Hl zE!1%X>8WZN*1M+F#a{bJYz)*F1Nsu%hwS>8*H4}%ddFX4ey<`|Oo=S}P@t|ykK^hf zn4n}rIj5DSUp2QODK~`y$9Bfudq<@hD3YMVx^Z_DMS$3a(MrAm@H_9MM>yqYW7W8GaP8}L5A9sq zgJgDo!f?*(^}7fN)$4jex6M!ogYZ<5cL%0r1sn85#*p8A-r*YIa$heu5Fz{uE=5AC8Jt7b<&b1Azw zDy%m>x!Ft(kX#IBYG@kM8TV5YWCn_IKhg-K4|BGksmWX|XlgKb8=4xO!iuKbr?jJ` zi!!tgji|Lo5186s6OC}0sPQZ|*|$)oF>+Hfs85;H47yOO8T7{#iiT_pKj^p7F3C`U z_SrndPCA~BwL}Pn-}rwQ7k=aa85@BRb_3m(ILh#|UFXDQwC&Y%XtE2DTzmp8N>*$cciO2T6jUI!@-uZ}S|kbE;y`JNLQg2H4L3@;kq=-}`p&6@pO-5>0s9b$r-8 zu6wT;n!;6gwX#(AbUfN1IrYYR0a58`NwpH5Fgtt!2jcYCa0(Gs+KvpUt!g+aK4O#t zLTq(!#~@lviW4BW9MP%0z%ky}J*rtoidrDvXFssI`vk}R5COCr96o*DKVfj-heq@( zI_ln76r}smSdrtBu-I4n9)WI)XL6g@uKkRBnr?1|UJKw^71|76j66~2l`{%K&>(*T zh;ZsgVb->a;efcEfLR0DPgD_uVy!(d8YQSbKO>w^%BK-}P^QRZ3dbo__G$OVHz&SJ z_8!L^IqAM1-o#a96pO%I(j^bfS8lm*>0YvGS00?8<1=EA2wNLs%!Y<94hj4V z10(J7MBA5co6P#9J7EuvYyV1zOx&iEI0e*ABOp(bl|@ezbz)do8DeFLt9C(loVt_U^0=$Bean^xyj zjp_!|v_87{oc<33iXZgbSiZsMqwF#A{r&h478ic}Pjm78eeAf+SNEjBfAze6>TD6z zZ$KgfIc*2v9Xpeo044+3M0^@pJ{u?O9s$x$Cbvhs~g;v0#d)x)*X zLck8YTEc|qUX-vWidA5ArCKydxAp9IL>O52(iYJ2r_1q0#H~kbVE0!hYxoS8OIT?H zj!XG-R%DYC+nwZtPX+#-N-W4R}rAvXwh{T z^$9*rB%+#Bagp4TLLP;JRXHHTchX)83?25L0QzF|@j%0P>;_bm7jH;jOI$%fU^FY~ z9NiAQBB~-fCW}%+(I?%c?NcLiOD7B-dsj2`wtpsLUH$YDQ-WVT=weKCKC_M;N>fH* z#mZwkzQ=S9oa3?SzO<8E4un~3tcN1Xw!_rhZFpVw&)P?>qm>5*G?<0_vB#S&QKpAyR;W|3BqCQL6 z0^El{pCV5t@!N|3H3xTZ#tE)g#KjaW)|Nn;I`1BnRX>hJnCy|t!S0}rq;*wT9F60(E))A1~y?euS8Yd|Y7VLZD)tFcvF_ae9UI2A-8mpM@Ijt{>R%M)Z! zj1mg@v0`__#5R2&87NFrg@n>q9rtaga*|ErBnx4^TF1SZY@i1+vDuHWBeAa<@ar(I zwQ{alrf)!8m*nIxTIF`Rvt7MW@QX)$_aegbyId}f+ zP%uxLn{}fYOL{v2CNl#6@&Kudk@O*TDnQ+dU~1&C*LQ8sKpCw+JRrg$bYSSID}(Nw zhfC@$J`7|Fbh^&}vNh(eRB3t@gqrA|_Z=<~?^V=F{`_YYNxq#7QI zd1E@kOV1q!yhuEnW1=^sQIOaWtMXs{+~UGlH*-6#nN!o<<-N=;q0C)o%%*0>C{`GS{vXb zOce};16KR@d#WJ5aO~wAjm_lfz%dRR5<1f!Hw1C|>K{OQ{M}rn2L(c?G87i}RVqeB za5X`P)}vGn2n2;&5il3ms}A;JQxhgU*zf3AUXD>s;@=-Q*fT~oS;ym0Vv-f6q5rzu zI@h5JLGCO`n+)foHej>Yz)3gQs_C;B_>YA>v<$|+6SIWWh z!#<~0gs1-JshUXiuzAlc5A&4~pF?E4LgZG6TuERcNN6?Ew?gFRa6FVK$`nRF;;@7& z&{SxkDJFi0LNssQ)K)=`#>`d{L^J2`Pwf4$V}?e5F5Klbs~4R>K^{*{lOczAG7wTu z<9-Xu>tNrs#2sWv&%yLnFgfJv&^Sc1b?9&8>);3dR>9<~c9;+}s3y=L(KwBj&lx{P z$Qb6>gZGq+?~1xOLzgDU#6ojidpK1pnqa8Zl@gEzhn!B|X!Qh!n?qp~ zR?|&Hplue2+*)Ck1>&cnuo>s8)scWFbGgNW=^-0W)Ss}_xpjFB(1V$kEen;tNg*#c zi(!UAJ*P?CtRs*ygMqe;e%UHJL{151$V4+=X78G~bo6ly1nR3T;Jw;GEJzx72f%0vug6P~YEof0;TeftUYd5oc#q&SIJ zCQ{-IheU_t9$^V?o?5M*V-2#whU!Yi2D`MgbSZq_5i8724H})fqGe5l0C-=@pK|g4!qIbA(fsF62CT-R;sTD^ z+IOwvS#ts30?CIY$;dGlwOzYFk5A5_AMHO@`xK_<@WV^P`YOLuR!rH2#|AS(0>}0{ zRSR!t35wF((BVuJtK}d{q8DQr4{+kei7pRvY7I+93pLOLrw82#GgZZaxsRb0OVz>? zi{K>3l1CcX^t92&wYX~6P@;Y^^IEl{eSI0~uE^I4bxk7&?TU*wL$@8IN3CS#cUB{28$P})eEu|6A|a0Z?(7pnEoQMf{WmBx#w7P zE0LRXbef)Kdc=E#2R+XmLYGPeF=Nn86?CtR8Pc~4Nh;V(qP`g6C@V^K?=$D}P)QLoKIPm2ebz{B zofHLzQH2+*JmmbgT2&e`+>A-n-tXy1wsL-jaVCtgb)@m#b(*OL_W8SMcME}b9C59zZ1NF|h zOl4#@sl1T}CSG32czLs`Q4dGeD22z`dqsXG+T@Ml+d;9rQl5i67SwuB9{I2e5>>p9 zEg7z(gIYtPe9)`&!`3qCWAT+_G+GVA@4?f<>KP7>gc@ASpB}!Nvm#3MdaR7n`<8zm zsic(jEy^j?>mW-$eE;fP4Vfs(M1LQ)bWtV@1_4jA)Ln}B&WyJnP=I3kxcE`ew>%KZ z9orpz7@T!cHp#QN?sGOabc)6313|hp#R~8Zo-lMWTT2;u)u}uag>R5%Lux%V^z_P3 za8$;sUuErze^t}P4@!~D6BEWm(~55w;y&CeE_o*-WFl1Ti@Jd|z^YVC*P6RzprTg9 z*lVs@LS#veZ%a+AXeVPCcBfG1$n2U}p`)8~ROzTWWI9-=WGP8!A>!e#lX1*GaXh>- zCbe^M)oGISx3ErT(zj!2cl0t*{f@_cXr})7N*=YBO*I>>=8QU0^cy1KxeoPRdHtUc=lrxv2Rc-UjqOhPK~;o)aK*ip9* z4%(I8)Vt`7 z>JI%>Ur_E0f2{2C*iVhzH}Ft;FV%H;7mwWF6o2!J`xrnNCn#Unvi)zl`1JCIKSt^s z56D*Qn9dUAJ?*hxQRxgH508 z2S93=9$ebK*TkP{2iNP*0pIWe>ql4te%_BwfMAEZ0XHY)@TuKK*R>PuA=d8FPP78_ z1PTU51?P(n67!$zD9JrUPA6OoC!MAfe-GjV&n6IzJpA^A6P`{zTt^*<5Cn^k4rf?- z)C;I7O_u$s=|6OvrX%N2B~CWa6m|CM(o@&BX|f_udE9fbKqBw~8tocgAVzyLwHkNi z+s%#hb9T3cV>>DUKYDXM+f8@erh&fnJ3ozDbyXTfpynAx!x6@UGG?LeNrvgHrBV-H`X_hsXM9(8hBr8l$mkjKYl6Bkr;OH@dN=w;~lzSzZ z*>U_&i9yC*;7m1RGF#T&it2pW6_M=_9vgAKRA4 zyp1yP7fP)3#T3Wj7zY0m%=S;nor|y_qFDaWK;TxWg6Bx>h{y{RnZEeh2$Li!4j6{6 zlD=haiCwx-5~7ruQS9b0c+VBHz}w$B7}28HY>GUYK#TM|O%& zNrS923Sk%@d|=S2$bs!CJ!{+;oh6Bljp-@i#%Kp7Ha4c^!;PtRo7mt)nw%WbFb-g_ zXP!Dewr^hDG@f^!?!q(igMRw}LU_|p!8aHg1q1Xw@M$AE=#2zDDbQXCOsM&D4aaM(UU2A+0vJpY zV4S*6OH@^C_P{jI0WA~gmw-g$TyNqB1Hjji-+?Mq#WPyQaj(M(;UI=2F5n2hRS<2; zG%`vI6D1voUE$d$rxmQTFj!~oC`(6m)^1El)IS2&xitZ-Gd<~+?Ik$7wT+y9`3TeT zWBX)?eRv^{n3Wy+6gwRPyU)x{A4xUvvxc!oK*QS<`y)*#GpUB>VtkeebDcyLFWTy1R!}bMNcaDapi?gncUO~G9hwN zD9ASWiN%G5h1TN2;Ul~0xxRZGtV;~q`kvWwJL|jMu5SZ>vG1*Yo9*YZP2+s&?7U+?tLWL?7N_*2>6*CK^u9Rn;9H#XKcZ>?``Z{OOu zRd?*8ddCXXcbn_Ax_%A)rkHBJbG_v_)RRAn|Na#HGSi;Wc$K3kf2cG)`L{~b6Le(Z zPvgHO`eo+pq#Qk=byAL=&^jqcPiS>~1OI(azs!7{l%prKPRh{}S|{b`39XJ-`0p$F zWv1(do=?5_ZTe-VJs}BLj-JqpEk{pi#g?Nd=*Yrf*QiSi-}xJh3*Y$* z{pw@O4WI|s1J`x@I&?*-tE5@>>5%qo|J3xl^{5J&?JChQ9&vMhqi%N264cDk_Nndl z`)&`~Cbpvm-K4Z=IGxUPa!-a*z#f8UxV+f<>Rp542&UAfqV{XFdoViJwu^`5;C~I$y{E z#&kdyhtYuX#jTlH5fEKRR~b0HBj+qGMAtJ8?hXQnS#^%i1ZQ`39Nh!%9>*Ekb?!S@ zj7xOYxQrYeLZ&vEGdd=(ppBj@G5_o$KqEW4IvbJs52mp3)gE>;&Wh8{lBq`LIbaW9 zo{bO29h?Vt3|ALkrf&RLMW+O2I6sR9USzl=-5WuGi+gC?Ic%-;vQ&udF>`8|Tq{c2 zU7-{Jo8pdM2i!zLsRV_R?<#}T&oeL@{^SS>xd^4vXlWyM3a7xW7}k#$q=qMZJU)<4 z7M1}gcbzfiI+RKBWQR%PYXXc~O-|$UqP*HlOg0y6(*_&LB4_p@Q0D+7`4uSo=5rLv zrVy@9R2XcOsmZy2^NI3YTNYD^nj@KfIc$eIX33?%DQ_&(s-eu5STjq_07X8kB?TnO zmq5*D3TXX(i6n)nD2jYk6jN=5Y?pO`gNk;#MGiY^b+g}CvoPynTXr!0E*nU`Bwn*2 zjfP2*qb%eh;*{g;sqxfKm8(cTswc%VkVg#f-Wg!o6{sXl4(_Em+5k zC`2|zwjxj{BarDg!98>}0XQK#1yWC&0%uoGp@cM7qNE@)SczSk3}o&#fz;dQuJeh& z=1}39VL5rD8`lYGBXmP$7PuwfY--*{nX?rX%Z15B=1?5TR98kz^2`?B9CpfH`mL8~ zBHkeYKbhBCNxputzpJNnfE>VgsFR;IA#c<5@GND=K|1fsrq#>n`U3G)`D}iCA^O;D z@u}H75liW$u*6A=1hgbzq0`Am0$NYD54q*|EX@iKctRzbXUWLvu zb$(8mJ`O|Fe6JX^1==JVyialhyk#De65u?c4SGc9v%*HTa>r(Q%yJ8iLG0+o-0 zG!A%IFdNLGZQcPrlt3HA!+dJHAl)w^{6TtzaJFe5VS?!(;eOMTg#RM+5$S1?gF>_1 zbev?vGAvAa^IDCEvMbG^Hq)TD3U z!W#w)yRqBkfC+=<;V`k^8Z5!wYI4FQgMHiFN$igXdkn`+E|6%$0@$fOhlhy83C0r~ zF(pA(l!=TcUCH4~l*1|ZahPZ_Tok4}r6)`&;GhkgClTS4$$eE4>Gq{<5g?kxG_V+q z=P(Tt1dHY{4crFfIZT6GgYg`u!z_dKW4M{9-=I7f8Bl33o{J2q7A!iaOjsLbVosS? z&1s79D#?Ps7nac}Wy5*FwnHsVDF+5=JCD}InXoArh6TM~J*C!yMhyrX>Gnc+OPRuz zbiX1*@detkB$!M4q6v}+5q?gZNxZi2^l@g&b(4cm4gEy}%?xGIekHr)$_-moq$hxd z_PcaK8_XtjKtNzMVG4ACPRrE=XfA~aMMMyDy@efN(s_VF~XaK0g2;cDVdKbw5>bo z3x&S|ERrWo00#s%;J=aFg8xORNS6td1WvbM=#&BOK{uh(l1aEo*cYNka*dg5j$%1s zu_7(y&C?uA?;PzAwRuEsh}5{v7>>|$*orRn;Zj_O?Kp&c@%NZ7-7Hbv&p6K0ole`r zm1C1sFP`M|zI8=6ByBQB$#h*G?J4}2u6v%_)z47APAP~Ul9WXFW=K58Jj$b+FT?`c$BhBfZhyhlenatkENRhctkPkE7jwo55nyBqaZL(Pm zuluVoGcsSxMt0PblGE7R(H|V_3iYfAwhe~*xA4iut%o2Cz}*mFzw>0q2LJ+7nx;G- zTb!3pLpJ3F2=C8pBz!$@q2r^H59T?4zqjG3@6GZrd;f43)4UHSCfG2=wHi~Lvn5x+ z6=27_w|bNmS24N*W(||TrcO2`q_{RoQNn8SXX7aA&d;u~Pw%a2z-bbg6jzgDvL!m2 zE1;&h)=91=SCec*R~LtF4i)Uh{9rseb2Vk9fRy4I9%Zu&`t#x`jH$pZg1G`Tau=Q5 zbXKq*7ihT&QJ*Qs1QIp8dP2V}*cvBm;Hn@G+}ZlV&4~#<5$9wdcBas0mVIQyJ}JD@ zycuD4AM3epEe0a>6|bUsd3W#N7IxP6_X6o|xyjuyk zEy<7ER&lSKU%6pnnZIK`#kHWVqj+9hM@4aEM`c@aYe#FFe_=)2hVu4G>YdI$S&|Sb zSkxqm&Q)KgU!VCn!mgi0)5L2wBl6~T*XAnbNJf??vb}RxMLt~`Ptk}0*_+on*~LIs z>|u>8-xE`&*|%3{;aHZjq;G)lBYgMyj1Jl^5z1;7H4pT3_4d+@9?SG-41Uw{jfuW2 z>4=WOezn57=u7nHeWNh|{B94h+?C~2pVzN^LW(UvnYClI%13GoV>Rz$2X@$*;|7)a z8)WuSt;~+>kab%%7Bk0=txP+d{BV{K;YOOgB5JfYC&+fOcGKi)kk|>7P}R#e=mfYq>?GA2U3m8urA#*I4mQD%x1zr7q?OsqFC1G&X#^ zP-x@X!F}i0&%0GjW+R9Ctn|4r4mayNULo|UEI5)X92^;$Z{?o(kw!m2&Sfq8oyetG ztoH^rp1$p;4(2?a%7*uJ{)J-Ip8P7Y%1&PRUuV1&&tE97GJjFJHr7bh3m-_VB_xXl z{_JELD}Ayx^1p|uoF6^Z%Iq)Ivi84S!S>&%qDMcQjobLrTfN2t&89^iVeO9=(-KfTEYoX~(a#<_T>b?sc;HYn-Ci?Fu;mt+`A^IG#Y$X40lqTo zm)U>*(M~bmLcfDM*pZPuy)+A7r&uQyh3rh5osGB4Mlr8qEkC3Rx-e(dAE!TL$G`a+ zbps#Lycb-seDX*KYr3-Zp$(0xACFUI3sHs0u9CvV(9wVgq0Rv9_-%Z+Hx=S70%n8vg>)0wvmw!TxS-Q?ItUYw%8OpsTxg zV~5t-HK=t5>BVc)M)5(E!#nu8dU`hvlHJCQT3e`RFxb_jmFtf#!BXQTGO}T1JpP$C zjac5m^zBtBp69x~3cb;Ri(`6?;ys_A@w)UQ{xB)Nr2n=a-R!_4R{dl>J%Wzj?9ngOV~+l>4d`UQ*__GMIdVgA@J{{L4LGDPs6)58 zy1zfTMgLU;=IV_NXw&aqgD>d2>##sy*obquO0;?8{vU5{Uk?BP literal 86528 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 QgKzv)Gsp?fYU9BF2eYpB=l}o! diff --git a/obj/__snippets__.dll b/obj/__snippets__.dll index 8c1aeb63d4e3052883930e1545fe0f482ee49ecc..f60bde113ca2894ff26baeb35baabc6ddef0c9cb 100644 GIT binary patch literal 54272 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 Rb-CsK Date: Sat, 28 Jan 2023 20:46:01 -0500 Subject: [PATCH 10/13] clear --- .../iQuHack-challenge-2023-task1-checkpoint.ipynb | 14 -------------- iQuHack-challenge-2023-task1.ipynb | 14 -------------- 2 files changed, 28 deletions(-) diff --git a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb index cccc2e7..afbfe30 100644 --- a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb +++ b/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb @@ -399,20 +399,6 @@ "source": [ "evaluate_results(result)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/iQuHack-challenge-2023-task1.ipynb b/iQuHack-challenge-2023-task1.ipynb index cccc2e7..afbfe30 100644 --- a/iQuHack-challenge-2023-task1.ipynb +++ b/iQuHack-challenge-2023-task1.ipynb @@ -399,20 +399,6 @@ "source": [ "evaluate_results(result)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From 2e498bef70fb3ef8c000ba4b83cf10ad17421a47 Mon Sep 17 00:00:00 2001 From: Michael Papadopoulos Date: Sat, 28 Jan 2023 23:49:48 -0500 Subject: [PATCH 11/13] Task 7 --- iQuHack-challenge-2023-task7.ipynb | 4629 +++++++++++++++++++++++++++- obj/__entrypoint__.dll | Bin 216576 -> 321536 bytes obj/__entrypoint__snippets__.dll | Bin 54784 -> 51200 bytes obj/__snippets__.dll | Bin 54272 -> 50688 bytes 4 files changed, 4589 insertions(+), 40 deletions(-) diff --git a/iQuHack-challenge-2023-task7.ipynb b/iQuHack-challenge-2023-task7.ipynb index 2670c29..2f0c09e 100644 --- a/iQuHack-challenge-2023-task7.ipynb +++ b/iQuHack-challenge-2023-task7.ipynb @@ -34,9 +34,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -47,7 +46,47 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + " {\n", + " \"cloudName\": \"AzureCloud\",\n", + " \"homeTenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", + " \"id\": \"6d61051a-6e40-4845-a03a-3c5160bb5629\",\n", + " \"isDefault\": true,\n", + " \"managedByTenants\": [\n", + " {\n", + " \"tenantId\": \"d0ecd01b-d782-448e-bae0-c3cad0e0543a\"\n", + " },\n", + " {\n", + " \"tenantId\": \"94c4857e-1130-4ab8-8eac-069b40c9db20\"\n", + " },\n", + " {\n", + " \"tenantId\": \"f702a9dc-ae48-4dc7-8f0a-8155a6dfa4e5\"\n", + " }\n", + " ],\n", + " \"name\": \"Azure for Students\",\n", + " \"state\": \"Enabled\",\n", + " \"tenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", + " \"user\": {\n", + " \"name\": \"papadm2@rpi.edu\",\n", + " \"type\": \"user\"\n", + " }\n", + " }\n", + "]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.\n" + ] + } + ], "source": [ "!az login" ] @@ -67,9 +106,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -89,9 +127,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -104,16 +141,15 @@ }, "outputs": [], "source": [ - "teamname=\"msft_is_the_best\" # Update this field with your team name\n", + "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", "task=[\"task7\"]\n", - "slack_id=\"myslackid\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -148,9 +184,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 62, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -181,9 +216,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -238,9 +272,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 64, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -251,7 +284,3374 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "{\"diagnostic_kind\":\"state-vector\",\"qubit_ids\":[0,1,2,3,4,5,6,7],\"n_qubits\":8,\"amplitudes\":{\"0\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"1\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"2\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"3\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"4\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"5\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"6\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"7\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"8\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"9\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"10\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"11\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"12\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"13\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"14\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"15\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"16\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"17\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"18\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"19\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"20\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"21\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"22\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"23\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"24\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"25\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"26\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"27\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"28\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"29\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"30\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"31\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"32\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"33\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"34\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"35\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"36\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"37\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"38\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"39\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"40\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"41\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"42\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"43\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"44\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"45\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"46\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"47\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"48\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"49\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"50\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"51\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"52\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"53\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"54\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"55\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"56\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"57\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"58\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"59\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"60\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"61\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"62\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"63\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"64\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"65\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"66\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"67\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"68\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"69\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"70\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"71\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"72\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"73\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"74\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"75\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"76\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"77\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"78\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"79\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"80\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"81\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"82\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"83\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"84\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"85\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"86\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"87\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"88\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"89\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"90\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"91\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"92\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"93\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"94\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"95\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"96\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"97\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"98\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"99\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"100\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"101\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"102\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"103\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"104\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"105\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"106\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"107\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"108\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"109\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"110\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"111\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"112\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"113\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"114\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"115\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"116\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"117\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"118\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"119\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"120\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"121\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"122\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"123\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"124\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"125\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"126\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"127\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"128\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"129\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"130\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"131\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"132\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"133\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"134\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"135\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"136\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"137\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"138\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"139\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"140\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"141\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"142\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"143\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"144\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"145\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"146\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"147\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"148\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"149\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"150\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"151\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"152\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"153\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"154\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"155\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"156\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"157\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"158\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"159\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"160\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"161\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"162\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"163\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"164\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"165\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"166\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"167\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"168\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"169\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"170\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"171\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"172\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"173\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"174\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"175\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"176\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"177\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"178\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"179\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"180\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"181\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"182\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"183\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"184\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"185\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"186\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"187\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"188\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"189\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"190\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"191\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"192\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"193\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"194\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"195\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"196\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"197\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"198\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"199\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"200\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"201\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"202\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"203\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"204\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"205\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"206\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"207\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"208\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"209\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"210\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"211\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"212\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"213\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"214\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"215\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"216\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"217\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"218\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"219\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"220\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"221\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"222\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"223\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"224\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"225\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"226\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"227\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"228\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"229\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"230\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"231\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"232\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"233\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"234\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"235\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"236\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"237\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"238\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"239\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"240\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"241\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"242\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"243\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"244\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"245\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"246\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"247\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"248\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"249\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"250\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"251\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"252\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"253\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"254\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"255\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0}}}", + "text/html": [ + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Qubit IDs0, 1, 2, 3, 4, 5, 6, 7
Basis state (bitstring)AmplitudeMeas. Pr.
$\\left|00000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00000010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00000100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00000110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00001000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00001010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00001100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00001110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00010000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0001001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00010100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00010110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00011000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00011010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00011100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00011110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00100000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00100010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0010010100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0010011100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00101000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00101010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00101100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00101110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00110000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0011001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00110100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00110110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00111000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00111010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00111100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|00111110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01000010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01000100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01000110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0100100100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0100101100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0100110100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0100111100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01010000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0101001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01010100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01010110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01011000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01011010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01011100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01011110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01100000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01100010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0110010100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0110011100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01101000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01101010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01101100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01101110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01110000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|0111001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01110100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01110110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01111000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01111010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01111100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|01111110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10000010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10000100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10000110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10001000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10001010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10001100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10001110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1001000100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1001001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1001010100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1001011100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1001100100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1001101100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1001110100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1001111100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10100000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10100010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1010010100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1010011100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10101000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10101010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10101100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10101110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10110000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1011001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10110100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10110110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10111000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10111010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10111100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|10111110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11000010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11000100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11000110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1100100100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1100101100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1100110100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1100111100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11010000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1101001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11010100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11010110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11011000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11011010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11011100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11011110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11100000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11100010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1110010100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1110011100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11101000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11101010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11101100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11101110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11110000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|1111001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11110100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11110110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11111000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11111010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11111100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
$\\left|11111110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", + " \r\n", + " \r\n", + "

\r\n", + "

\r\n", + "
" + ], + "text/plain": [ + "|00000000⟩\t0.0883883476483185 + 0𝑖\n", + "|00000010⟩\t0.0883883476483185 + 0𝑖\n", + "|00000100⟩\t0.0883883476483185 + 0𝑖\n", + "|00000110⟩\t0.0883883476483185 + 0𝑖\n", + "|00001000⟩\t0.0883883476483185 + 0𝑖\n", + "|00001010⟩\t0.0883883476483185 + 0𝑖\n", + "|00001100⟩\t0.0883883476483185 + 0𝑖\n", + "|00001110⟩\t0.0883883476483185 + 0𝑖\n", + "|00010000⟩\t0.0883883476483185 + 0𝑖\n", + "|0001001100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|00010100⟩\t0.0883883476483185 + 0𝑖\n", + "|00010110⟩\t0.0883883476483185 + 0𝑖\n", + "|00011000⟩\t0.0883883476483185 + 0𝑖\n", + "|00011010⟩\t0.0883883476483185 + 0𝑖\n", + "|00011100⟩\t0.0883883476483185 + 0𝑖\n", + "|00011110⟩\t0.0883883476483185 + 0𝑖\n", + "|00100000⟩\t0.0883883476483185 + 0𝑖\n", + "|00100010⟩\t0.0883883476483185 + 0𝑖\n", + "|0010010100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|0010011100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|00101000⟩\t0.0883883476483185 + 0𝑖\n", + "|00101010⟩\t0.0883883476483185 + 0𝑖\n", + "|00101100⟩\t0.0883883476483185 + 0𝑖\n", + "|00101110⟩\t0.0883883476483185 + 0𝑖\n", + "|00110000⟩\t0.0883883476483185 + 0𝑖\n", + "|0011001100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|00110100⟩\t0.0883883476483185 + 0𝑖\n", + "|00110110⟩\t0.0883883476483185 + 0𝑖\n", + "|00111000⟩\t0.0883883476483185 + 0𝑖\n", + "|00111010⟩\t0.0883883476483185 + 0𝑖\n", + "|00111100⟩\t0.0883883476483185 + 0𝑖\n", + "|00111110⟩\t0.0883883476483185 + 0𝑖\n", + "|01000000⟩\t0.0883883476483185 + 0𝑖\n", + "|01000010⟩\t0.0883883476483185 + 0𝑖\n", + "|01000100⟩\t0.0883883476483185 + 0𝑖\n", + "|01000110⟩\t0.0883883476483185 + 0𝑖\n", + "|0100100100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|0100101100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|0100110100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|0100111100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|01010000⟩\t0.0883883476483185 + 0𝑖\n", + "|0101001100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|01010100⟩\t0.0883883476483185 + 0𝑖\n", + "|01010110⟩\t0.0883883476483185 + 0𝑖\n", + "|01011000⟩\t0.0883883476483185 + 0𝑖\n", + "|01011010⟩\t0.0883883476483185 + 0𝑖\n", + "|01011100⟩\t0.0883883476483185 + 0𝑖\n", + "|01011110⟩\t0.0883883476483185 + 0𝑖\n", + "|01100000⟩\t0.0883883476483185 + 0𝑖\n", + "|01100010⟩\t0.0883883476483185 + 0𝑖\n", + "|0110010100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|0110011100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|01101000⟩\t0.0883883476483185 + 0𝑖\n", + "|01101010⟩\t0.0883883476483185 + 0𝑖\n", + "|01101100⟩\t0.0883883476483185 + 0𝑖\n", + "|01101110⟩\t0.0883883476483185 + 0𝑖\n", + "|01110000⟩\t0.0883883476483185 + 0𝑖\n", + "|0111001100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|01110100⟩\t0.0883883476483185 + 0𝑖\n", + "|01110110⟩\t0.0883883476483185 + 0𝑖\n", + "|01111000⟩\t0.0883883476483185 + 0𝑖\n", + "|01111010⟩\t0.0883883476483185 + 0𝑖\n", + "|01111100⟩\t0.0883883476483185 + 0𝑖\n", + "|01111110⟩\t0.0883883476483185 + 0𝑖\n", + "|10000000⟩\t0.0883883476483185 + 0𝑖\n", + "|10000010⟩\t0.0883883476483185 + 0𝑖\n", + "|10000100⟩\t0.0883883476483185 + 0𝑖\n", + "|10000110⟩\t0.0883883476483185 + 0𝑖\n", + "|10001000⟩\t0.0883883476483185 + 0𝑖\n", + "|10001010⟩\t0.0883883476483185 + 0𝑖\n", + "|10001100⟩\t0.0883883476483185 + 0𝑖\n", + "|10001110⟩\t0.0883883476483185 + 0𝑖\n", + "|1001000100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1001001100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1001010100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1001011100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1001100100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1001101100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1001110100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1001111100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|10100000⟩\t0.0883883476483185 + 0𝑖\n", + "|10100010⟩\t0.0883883476483185 + 0𝑖\n", + "|1010010100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1010011100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|10101000⟩\t0.0883883476483185 + 0𝑖\n", + "|10101010⟩\t0.0883883476483185 + 0𝑖\n", + "|10101100⟩\t0.0883883476483185 + 0𝑖\n", + "|10101110⟩\t0.0883883476483185 + 0𝑖\n", + "|10110000⟩\t0.0883883476483185 + 0𝑖\n", + "|1011001100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|10110100⟩\t0.0883883476483185 + 0𝑖\n", + "|10110110⟩\t0.0883883476483185 + 0𝑖\n", + "|10111000⟩\t0.0883883476483185 + 0𝑖\n", + "|10111010⟩\t0.0883883476483185 + 0𝑖\n", + "|10111100⟩\t0.0883883476483185 + 0𝑖\n", + "|10111110⟩\t0.0883883476483185 + 0𝑖\n", + "|11000000⟩\t0.0883883476483185 + 0𝑖\n", + "|11000010⟩\t0.0883883476483185 + 0𝑖\n", + "|11000100⟩\t0.0883883476483185 + 0𝑖\n", + "|11000110⟩\t0.0883883476483185 + 0𝑖\n", + "|1100100100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1100101100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1100110100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1100111100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|11010000⟩\t0.0883883476483185 + 0𝑖\n", + "|1101001100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|11010100⟩\t0.0883883476483185 + 0𝑖\n", + "|11010110⟩\t0.0883883476483185 + 0𝑖\n", + "|11011000⟩\t0.0883883476483185 + 0𝑖\n", + "|11011010⟩\t0.0883883476483185 + 0𝑖\n", + "|11011100⟩\t0.0883883476483185 + 0𝑖\n", + "|11011110⟩\t0.0883883476483185 + 0𝑖\n", + "|11100000⟩\t0.0883883476483185 + 0𝑖\n", + "|11100010⟩\t0.0883883476483185 + 0𝑖\n", + "|1110010100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|1110011100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|11101000⟩\t0.0883883476483185 + 0𝑖\n", + "|11101010⟩\t0.0883883476483185 + 0𝑖\n", + "|11101100⟩\t0.0883883476483185 + 0𝑖\n", + "|11101110⟩\t0.0883883476483185 + 0𝑖\n", + "|11110000⟩\t0.0883883476483185 + 0𝑖\n", + "|1111001100000000⟩\t0.0883883476483185 + 0𝑖\n", + "|11110100⟩\t0.0883883476483185 + 0𝑖\n", + "|11110110⟩\t0.0883883476483185 + 0𝑖\n", + "|11111000⟩\t0.0883883476483185 + 0𝑖\n", + "|11111010⟩\t0.0883883476483185 + 0𝑖\n", + "|11111100⟩\t0.0883883476483185 + 0𝑖\n", + "|11111110⟩\t0.0883883476483185 + 0𝑖" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "()" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", @@ -276,9 +3676,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -289,21 +3688,71 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "\"Connecting to Azure Quantum...\"", + "text/plain": [ + "Connecting to Azure Quantum..." + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Authenticated using Azure.Identity.AzureCliCredential\n", + "\n", + "\n", + "Connected to Azure Quantum workspace iQuHack-Workspace-micpap25 in location eastus.\n" + ] + }, + { + "data": { + "text/plain": [ + "[{'id': 'ionq.qpu', 'current_availability': {}, 'average_queue_time': 302694},\n", + " {'id': 'ionq.qpu.aria-1', 'current_availability': {}, 'average_queue_time': 356530},\n", + " {'id': 'ionq.simulator', 'current_availability': {}, 'average_queue_time': 2},\n", + " {'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s1', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s1-apival', 'current_availability': {}, 'average_queue_time': 1},\n", + " {'id': 'quantinuum.hqs-lt-s2', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.hqs-lt-s2-apival', 'current_availability': {}, 'average_queue_time': 1},\n", + " {'id': 'quantinuum.hqs-lt-s1-sim', 'current_availability': {}, 'average_queue_time': 70},\n", + " {'id': 'quantinuum.hqs-lt-s2-sim', 'current_availability': {}, 'average_queue_time': 199},\n", + " {'id': 'quantinuum.hqs-lt', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.qpu.h1-1', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.sim.h1-1sc', 'current_availability': {}, 'average_queue_time': 1},\n", + " {'id': 'quantinuum.qpu.h1-2', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'quantinuum.sim.h1-2sc', 'current_availability': {}, 'average_queue_time': 1},\n", + " {'id': 'quantinuum.sim.h1-1e', 'current_availability': {}, 'average_queue_time': 70},\n", + " {'id': 'quantinuum.sim.h1-2e', 'current_availability': {}, 'average_queue_time': 199},\n", + " {'id': 'quantinuum.qpu.h1', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'rigetti.sim.qvm', 'current_availability': {}, 'average_queue_time': 5},\n", + " {'id': 'rigetti.qpu.aspen-11', 'current_availability': {}, 'average_queue_time': 0},\n", + " {'id': 'rigetti.qpu.aspen-m-2', 'current_availability': {}, 'average_queue_time': 5},\n", + " {'id': 'rigetti.qpu.aspen-m-3', 'current_availability': {}, 'average_queue_time': 5}]" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", "qsharp.azure.connect(\n", - " resourceId=\"...\",\n", - " location=\"...\",\n", - " credential=\"CLI\")" + " resourceId=\"/subscriptions/6d61051a-6e40-4845-a03a-3c5160bb5629/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/iQuHack-Workspace-micpap25\",\n", + " location=\"East US\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 66, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -314,16 +3763,34 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading package Microsoft.Quantum.Providers.Core and dependencies...\r\n", + "Active target is now microsoft.estimator\r\n" + ] + }, + { + "data": { + "text/plain": [ + "{'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0}" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "qsharp.azure.target(\"microsoft.estimator\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 67, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -334,7 +3801,21 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Submitting Task7_ResourceEstimationWrapper to target microsoft.estimator...\n", + "Job successfully submitted.\n", + " Job name: RE for the task 7\n", + " Job ID: 5600345c-c75e-4170-a4e5-4937240ce0e0\n", + "Waiting up to 30 seconds for Azure Quantum job to complete...\n", + "[11:46:30 PM] Current job status: Executing\n", + "[11:46:35 PM] Current job status: Succeeded\n" + ] + } + ], "source": [ "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", "result = qsharp.azure.execute(Task7_ResourceEstimationWrapper, jobName=\"RE for the task 7\")" @@ -342,9 +3823,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 68, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -355,7 +3835,1051 @@ } } }, - "outputs": [], + "outputs": [ + { + "data": { + "application/x-qsharp-data": "{\"errorBudget\":{\"logical\":0.0005,\"rotations\":0.0,\"tstates\":0.0005},\"jobParams\":{\"errorBudget\":0.001,\"qecScheme\":{\"crossingPrefactor\":0.03,\"errorCorrectionThreshold\":0.01,\"logicalCycleTime\":\"(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\",\"name\":\"surface_code\",\"physicalQubitsPerLogicalQubit\":\"2 * codeDistance * codeDistance\"},\"qubitParams\":{\"instructionSet\":\"GateBased\",\"name\":\"qubit_gate_ns_e3\",\"oneQubitGateErrorRate\":0.001,\"oneQubitGateTime\":\"50 ns\",\"oneQubitMeasurementErrorRate\":0.001,\"oneQubitMeasurementTime\":\"100 ns\",\"tGateErrorRate\":0.001,\"tGateTime\":\"50 ns\",\"twoQubitGateErrorRate\":0.001,\"twoQubitGateTime\":\"50 ns\"}},\"logicalCounts\":{\"ccixCount\":155,\"cczCount\":31,\"measurementCount\":155,\"numQubits\":13,\"rotationCount\":0,\"rotationDepth\":0,\"tCount\":0},\"logicalQubit\":{\"codeDistance\":13,\"logicalCycleTime\":5200.0,\"logicalErrorRate\":3.000000000000002E-09,\"physicalQubits\":338},\"physicalCounts\":{\"breakdown\":{\"algorithmicLogicalDepth\":713,\"algorithmicLogicalQubits\":38,\"cliffordErrorRate\":0.001,\"logicalDepth\":713,\"numTfactories\":12,\"numTfactoryRuns\":62,\"numTsPerRotation\":null,\"numTstates\":744,\"physicalQubitsForAlgorithm\":12844,\"physicalQubitsForTfactories\":116160,\"requiredLogicalQubitErrorRate\":1.845427031815162E-08,\"requiredLogicalTstateErrorRate\":6.720430107526882E-07},\"physicalQubits\":129004,\"runtime\":3707600},\"physicalCountsFormatted\":{\"codeDistancePerRound\":\"11\",\"errorBudget\":\"1.00e-3\",\"errorBudgetLogical\":\"5.00e-4\",\"errorBudgetRotations\":\"0.00e0\",\"errorBudgetTstates\":\"5.00e-4\",\"logicalCycleTime\":\"5us 200ns\",\"logicalErrorRate\":\"3.00e-9\",\"numTsPerRotation\":\"No rotations in algorithm\",\"numUnitsPerRound\":\"2\",\"physicalQubitsForTfactoriesPercentage\":\"90.04 %\",\"physicalQubitsPerRound\":\"9680\",\"requiredLogicalQubitErrorRate\":\"1.85e-8\",\"requiredLogicalTstateErrorRate\":\"6.72e-7\",\"runtime\":\"3ms 707us 600ns\",\"tfactoryRuntime\":\"57us 200ns\",\"tfactoryRuntimePerRound\":\"57us 200ns\",\"tstateLogicalErrorRate\":\"2.48e-7\",\"unitNamePerRound\":\"15-to-1 space efficient logical\"},\"reportData\":{\"assumptions\":[\"_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._\",\"**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.\",\"**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.\",\"**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).\",\"**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.\",\"**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.\",\"**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.\"],\"groups\":[{\"alwaysVisible\":true,\"entries\":[{\"description\":\"Number of physical qubits\",\"explanation\":\"This value represents the total number of physical qubits, which is the sum of 12844 physical qubits to implement the algorithm logic, and 116160 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.\",\"label\":\"Physical qubits\",\"path\":\"physicalCounts/physicalQubits\"},{\"description\":\"Total runtime\",\"explanation\":\"This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (5us 200ns) multiplied by the 713 logical cycles to run the algorithm. If however the duration of a single T factory (here: 57us 200ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/runtime\"}],\"title\":\"Physical resource estimates\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits for the algorithm after layout\",\"explanation\":\"Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 13$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 38$ logical qubits.\",\"label\":\"Logical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalQubits\"},{\"description\":\"Number of logical cycles for the algorithm\",\"explanation\":\"To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 155 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 31 CCZ and 155 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.\",\"label\":\"Algorithmic depth\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalDepth\"},{\"description\":\"Number of logical cycles performed\",\"explanation\":\"This number is usually equal to the logical depth of the algorithm, which is 713. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\"label\":\"Logical depth\",\"path\":\"physicalCounts/breakdown/logicalDepth\"},{\"description\":\"Number of T states consumed by the algorithm\",\"explanation\":\"To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 31 CCZ and 155 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.\",\"label\":\"Number of T states\",\"path\":\"physicalCounts/breakdown/numTstates\"},{\"description\":\"Number of T factories capable of producing the demanded 744 T states during the algorithm's runtime\",\"explanation\":\"The total number of T factories 12 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{744\\\\;\\\\text{T states} \\\\cdot 57us 200ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 3ms 707us 600ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$\",\"label\":\"Number of T factories\",\"path\":\"physicalCounts/breakdown/numTfactories\"},{\"description\":\"Number of times all T factories are invoked\",\"explanation\":\"In order to prepare the 744 T states, the 12 copies of the T factory are repeatedly invoked 62 times.\",\"label\":\"Number of T factory invocations\",\"path\":\"physicalCounts/breakdown/numTfactoryRuns\"},{\"description\":\"Number of physical qubits for the algorithm after layout\",\"explanation\":\"The 12844 are the product of the 38 logical qubits after layout and the 338 physical qubits that encode a single logical qubit.\",\"label\":\"Physical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForAlgorithm\"},{\"description\":\"Number of physical qubits for the T factories\",\"explanation\":\"Each T factory requires 9680 physical qubits and we run 12 in parallel, therefore we need $116160 = 9680 \\\\cdot 12$ qubits.\",\"label\":\"Physical T factory qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForTfactories\"},{\"description\":\"The minimum logical qubit error rate required to run the algorithm within the error budget\",\"explanation\":\"The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 38 logical qubits and the total cycle count 713.\",\"label\":\"Required logical qubit error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalQubitErrorRate\"},{\"description\":\"The minimum T state error rate required for distilled T states\",\"explanation\":\"The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 744.\",\"label\":\"Required logical T state error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalTstateErrorRate\"},{\"description\":\"Number of T states to implement a rotation with an arbitrary angle\",\"explanation\":\"The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.\",\"label\":\"Number of T states per rotation\",\"path\":\"physicalCountsFormatted/numTsPerRotation\"}],\"title\":\"Resource estimates breakdown\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Name of QEC scheme\",\"explanation\":\"You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.\",\"label\":\"QEC scheme\",\"path\":\"jobParams/qecScheme/name\"},{\"description\":\"Required code distance for error correction\",\"explanation\":\"The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.00000001845427031815162)}{\\\\log(0.01/0.001)} - 1$\",\"label\":\"Code distance\",\"path\":\"logicalQubit/codeDistance\"},{\"description\":\"Number of physical qubits per logical qubit\",\"explanation\":\"The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.\",\"label\":\"Physical qubits\",\"path\":\"logicalQubit/physicalQubits\"},{\"description\":\"Duration of a logical cycle in nanoseconds\",\"explanation\":\"The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.\",\"label\":\"Logical cycle time\",\"path\":\"physicalCountsFormatted/logicalCycleTime\"},{\"description\":\"Logical qubit error rate\",\"explanation\":\"The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{13 + 1}{2}$\",\"label\":\"Logical qubit error rate\",\"path\":\"physicalCountsFormatted/logicalErrorRate\"},{\"description\":\"Crossing prefactor used in QEC scheme\",\"explanation\":\"The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.\",\"label\":\"Crossing prefactor\",\"path\":\"jobParams/qecScheme/crossingPrefactor\"},{\"description\":\"Error correction threshold used in QEC scheme\",\"explanation\":\"The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.\",\"label\":\"Error correction threshold\",\"path\":\"jobParams/qecScheme/errorCorrectionThreshold\"},{\"description\":\"QEC scheme formula used to compute logical cycle time\",\"explanation\":\"This is the formula that is used to compute the logical cycle time 5us 200ns.\",\"label\":\"Logical cycle time formula\",\"path\":\"jobParams/qecScheme/logicalCycleTime\"},{\"description\":\"QEC scheme formula used to compute number of physical qubits per logical qubit\",\"explanation\":\"This is the formula that is used to compute the number of physical qubits per logical qubits 338.\",\"label\":\"Physical qubits formula\",\"path\":\"jobParams/qecScheme/physicalQubitsPerLogicalQubit\"}],\"title\":\"Logical qubit parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of physical qubits for a single T factory\",\"explanation\":\"This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.\",\"label\":\"Physical qubits\",\"path\":\"tfactory/physicalQubits\"},{\"description\":\"Runtime of a single T factory\",\"explanation\":\"The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/tfactoryRuntime\"},{\"description\":\"Number of output T states produced in a single run of T factory\",\"explanation\":\"The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.48e-7.\",\"label\":\"Number of output T states per run\",\"path\":\"tfactory/numTstates\"},{\"description\":\"Number of physical input T states consumed in a single run of a T factory\",\"explanation\":\"This value includes the physical input T states of all copies of the distillation unit in the first round.\",\"label\":\"Number of input T states per run\",\"path\":\"tfactory/numInputTstates\"},{\"description\":\"The number of distillation rounds\",\"explanation\":\"This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.\",\"label\":\"Distillation rounds\",\"path\":\"tfactory/numRounds\"},{\"description\":\"The number of units in each round of distillation\",\"explanation\":\"This is the number of copies for the distillation units per round.\",\"label\":\"Distillation units per round\",\"path\":\"physicalCountsFormatted/numUnitsPerRound\"},{\"description\":\"The types of distillation units\",\"explanation\":\"These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.\",\"label\":\"Distillation units\",\"path\":\"physicalCountsFormatted/unitNamePerRound\"},{\"description\":\"The code distance in each round of distillation\",\"explanation\":\"This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.\",\"label\":\"Distillation code distances\",\"path\":\"physicalCountsFormatted/codeDistancePerRound\"},{\"description\":\"The number of physical qubits used in each round of distillation\",\"explanation\":\"The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.\",\"label\":\"Number of physical qubits per round\",\"path\":\"physicalCountsFormatted/physicalQubitsPerRound\"},{\"description\":\"The runtime of each distillation round\",\"explanation\":\"The runtime of the T factory is the sum of the runtimes in all rounds.\",\"label\":\"Runtime per round\",\"path\":\"physicalCountsFormatted/tfactoryRuntimePerRound\"},{\"description\":\"Logical T state error rate\",\"explanation\":\"This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 6.72e-7.\",\"label\":\"Logical T state error rate\",\"path\":\"physicalCountsFormatted/tstateLogicalErrorRate\"}],\"title\":\"T factory parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits in the input quantum program\",\"explanation\":\"We determine 38 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.\",\"label\":\"Logical qubits (pre-layout)\",\"path\":\"logicalCounts/numQubits\"},{\"description\":\"Number of T gates in the input quantum program\",\"explanation\":\"This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.\",\"label\":\"T gates\",\"path\":\"logicalCounts/tCount\"},{\"description\":\"Number of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.\",\"label\":\"Rotation gates\",\"path\":\"logicalCounts/rotationCount\"},{\"description\":\"Depth of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.\",\"label\":\"Rotation depth\",\"path\":\"logicalCounts/rotationDepth\"},{\"description\":\"Number of CCZ-gates in the input quantum program\",\"explanation\":\"This is the number of CCZ gates.\",\"label\":\"CCZ gates\",\"path\":\"logicalCounts/cczCount\"},{\"description\":\"Number of CCiX-gates in the input quantum program\",\"explanation\":\"This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].\",\"label\":\"CCiX gates\",\"path\":\"logicalCounts/ccixCount\"},{\"description\":\"Number of single qubit measurements in the input quantum program\",\"explanation\":\"This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.\",\"label\":\"Measurement operations\",\"path\":\"logicalCounts/measurementCount\"}],\"title\":\"Pre-layout logical resources\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Total error budget for the algorithm\",\"explanation\":\"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\"label\":\"Total error budget\",\"path\":\"physicalCountsFormatted/errorBudget\"},{\"description\":\"Probability of at least one logical error\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"Logical error probability\",\"path\":\"physicalCountsFormatted/errorBudgetLogical\"},{\"description\":\"Probability of at least one faulty T distillation\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"T distillation error probability\",\"path\":\"physicalCountsFormatted/errorBudgetTstates\"},{\"description\":\"Probability of at least one failed rotation synthesis\",\"explanation\":\"This is one third of the total error budget 1.00e-3.\",\"label\":\"Rotation synthesis error probability\",\"path\":\"physicalCountsFormatted/errorBudgetRotations\"}],\"title\":\"Assumed error budget\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Some descriptive name for the qubit model\",\"explanation\":\"You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or ¬µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).\",\"label\":\"Qubit name\",\"path\":\"jobParams/qubitParams/name\"},{\"description\":\"Underlying qubit technology (gate-based or Majorana)\",\"explanation\":\"When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.\",\"label\":\"Instruction set\",\"path\":\"jobParams/qubitParams/instructionSet\"},{\"description\":\"Operation time for single-qubit measurement (t_meas) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.\",\"label\":\"Single-qubit measurement time\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementTime\"},{\"description\":\"Operation time for single-qubit gate (t_gate) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.\",\"label\":\"Single-qubit gate time\",\"path\":\"jobParams/qubitParams/oneQubitGateTime\"},{\"description\":\"Operation time for two-qubit gate in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.\",\"label\":\"Two-qubit gate time\",\"path\":\"jobParams/qubitParams/twoQubitGateTime\"},{\"description\":\"Operation time for a T gate\",\"explanation\":\"This is the operation time in nanoseconds to execute a T gate.\",\"label\":\"T gate time\",\"path\":\"jobParams/qubitParams/tGateTime\"},{\"description\":\"Error rate for single-qubit measurement\",\"explanation\":\"This is the probability in which a single-qubit measurement in the Pauli basis may fail.\",\"label\":\"Single-qubit measurement error rate\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementErrorRate\"},{\"description\":\"Error rate for single-qubit Clifford gate (p)\",\"explanation\":\"This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.\",\"label\":\"Single-qubit error rate\",\"path\":\"jobParams/qubitParams/oneQubitGateErrorRate\"},{\"description\":\"Error rate for two-qubit Clifford gate\",\"explanation\":\"This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.\",\"label\":\"Two-qubit error rate\",\"path\":\"jobParams/qubitParams/twoQubitGateErrorRate\"},{\"description\":\"Error rate to prepare single-qubit T state or apply a T gate (p_T)\",\"explanation\":\"This is the probability in which executing a single T gate may fail.\",\"label\":\"T gate error rate\",\"path\":\"jobParams/qubitParams/tGateErrorRate\"}],\"title\":\"Physical qubit parameters\"}]},\"status\":\"success\",\"tfactory\":{\"codeDistancePerRound\":[11],\"logicalErrorRate\":2.480000000000001E-07,\"numInputTstates\":30,\"numRounds\":1,\"numTstates\":1,\"numUnitsPerRound\":[2],\"physicalQubits\":9680,\"physicalQubitsPerRound\":[9680],\"runtime\":57200.0,\"runtimePerRound\":[57200.0],\"unitNamePerRound\":[\"15-to-1 space efficient logical\"]}}", + "text/html": [ + "\r\n", + "
\r\n", + " \r\n", + " Physical resource estimates\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Physical qubits129004\r\n", + "

Number of physical qubits

\n", + "
\r\n", + "
\r\n", + "

This value represents the total number of physical qubits, which is the sum of 12844 physical qubits to implement the algorithm logic, and 116160 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.

\n", + "\r\n", + "
Runtime3ms 707us 600ns\r\n", + "

Total runtime

\n", + "
\r\n", + "
\r\n", + "

This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (5us 200ns) multiplied by the 713 logical cycles to run the algorithm. If however the duration of a single T factory (here: 57us 200ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Resource estimates breakdown\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Logical algorithmic qubits38\r\n", + "

Number of logical qubits for the algorithm after layout

\n", + "
\r\n", + "
\r\n", + "

Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the \\(Q_{\\rm alg} = 13\\) logical qubits in the input algorithm, we require in total $2 \\cdot Q_{\\rm alg} + \\lceil \\sqrt{8 \\cdot Q_{\\rm alg}}\\rceil + 1 = 38$ logical qubits.

\n", + "\r\n", + "
Algorithmic depth713\r\n", + "

Number of logical cycles for the algorithm

\n", + "
\r\n", + "
\r\n", + "

To execute the algorithm using Parallel Synthesis Sequential Pauli Computation (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 155 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 31 CCZ and 155 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.

\n", + "\r\n", + "
Logical depth713\r\n", + "

Number of logical cycles performed

\n", + "
\r\n", + "
\r\n", + "

This number is usually equal to the logical depth of the algorithm, which is 713. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.

\n", + "\r\n", + "
Number of T states744\r\n", + "

Number of T states consumed by the algorithm

\n", + "
\r\n", + "
\r\n", + "

To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 31 CCZ and 155 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.

\n", + "\r\n", + "
Number of T factories12\r\n", + "

Number of T factories capable of producing the demanded 744 T states during the algorithm's runtime

\n", + "
\r\n", + "
\r\n", + "

The total number of T factories 12 that are executed in parallel is computed as \\(\\left\\lceil\\dfrac{744\\;\\text{T states} \\cdot 57us 200ns\\;\\text{T factory duration}}{1\\;\\text{T states per T factory} \\cdot 3ms 707us 600ns\\;\\text{algorithm runtime}}\\right\\rceil\\)

\n", + "\r\n", + "
Number of T factory invocations62\r\n", + "

Number of times all T factories are invoked

\n", + "
\r\n", + "
\r\n", + "

In order to prepare the 744 T states, the 12 copies of the T factory are repeatedly invoked 62 times.

\n", + "\r\n", + "
Physical algorithmic qubits12844\r\n", + "

Number of physical qubits for the algorithm after layout

\n", + "
\r\n", + "
\r\n", + "

The 12844 are the product of the 38 logical qubits after layout and the 338 physical qubits that encode a single logical qubit.

\n", + "\r\n", + "
Physical T factory qubits116160\r\n", + "

Number of physical qubits for the T factories

\n", + "
\r\n", + "
\r\n", + "

Each T factory requires 9680 physical qubits and we run 12 in parallel, therefore we need $116160 = 9680 \\cdot 12$ qubits.

\n", + "\r\n", + "
Required logical qubit error rate1.85e-8\r\n", + "

The minimum logical qubit error rate required to run the algorithm within the error budget

\n", + "
\r\n", + "
\r\n", + "

The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 38 logical qubits and the total cycle count 713.

\n", + "\r\n", + "
Required logical T state error rate6.72e-7\r\n", + "

The minimum T state error rate required for distilled T states

\n", + "
\r\n", + "
\r\n", + "

The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 744.

\n", + "\r\n", + "
Number of T states per rotationNo rotations in algorithm\r\n", + "

Number of T states to implement a rotation with an arbitrary angle

\n", + "
\r\n", + "
\r\n", + "

The number of T states to implement a rotation with an arbitrary angle is \\(\\lceil 0.53 \\log_2(0 / 0) + 5.3\\rceil\\) [arXiv:2203.10064]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Logical qubit parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
QEC schemesurface_code\r\n", + "

Name of QEC scheme

\n", + "
\r\n", + "
\r\n", + "

You can load pre-defined QEC schemes by using the name surface_code or floquet_code. The latter only works with Majorana qubits.

\n", + "\r\n", + "
Code distance13\r\n", + "

Required code distance for error correction

\n", + "
\r\n", + "
\r\n", + "

The code distance is the smallest odd integer greater or equal to \\(\\dfrac{2\\log(0.03 / 0.00000001845427031815162)}{\\log(0.01/0.001)} - 1\\)

\n", + "\r\n", + "
Physical qubits338\r\n", + "

Number of physical qubits per logical qubit

\n", + "
\r\n", + "
\r\n", + "

The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.

\n", + "\r\n", + "
Logical cycle time5us 200ns\r\n", + "

Duration of a logical cycle in nanoseconds

\n", + "
\r\n", + "
\r\n", + "

The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.

\n", + "\r\n", + "
Logical qubit error rate3.00e-9\r\n", + "

Logical qubit error rate

\n", + "
\r\n", + "
\r\n", + "

The logical qubit error rate is computed as $0.03 \\cdot \\left(\\dfrac{0.001}{0.01}\\right)^\\frac{13 + 1}{2}$

\n", + "\r\n", + "
Crossing prefactor0.03\r\n", + "

Crossing prefactor used in QEC scheme

\n", + "
\r\n", + "
\r\n", + "

The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.

\n", + "\r\n", + "
Error correction threshold0.01\r\n", + "

Error correction threshold used in QEC scheme

\n", + "
\r\n", + "
\r\n", + "

The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.

\n", + "\r\n", + "
Logical cycle time formula(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\r\n", + "

QEC scheme formula used to compute logical cycle time

\n", + "
\r\n", + "
\r\n", + "

This is the formula that is used to compute the logical cycle time 5us 200ns.

\n", + "\r\n", + "
Physical qubits formula2 * codeDistance * codeDistance\r\n", + "

QEC scheme formula used to compute number of physical qubits per logical qubit

\n", + "
\r\n", + "
\r\n", + "

This is the formula that is used to compute the number of physical qubits per logical qubits 338.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " T factory parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Physical qubits9680\r\n", + "

Number of physical qubits for a single T factory

\n", + "
\r\n", + "
\r\n", + "

This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.

\n", + "\r\n", + "
Runtime57us 200ns\r\n", + "

Runtime of a single T factory

\n", + "
\r\n", + "
\r\n", + "

The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.

\n", + "\r\n", + "
Number of output T states per run1\r\n", + "

Number of output T states produced in a single run of T factory

\n", + "
\r\n", + "
\r\n", + "

The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.48e-7.

\n", + "\r\n", + "
Number of input T states per run30\r\n", + "

Number of physical input T states consumed in a single run of a T factory

\n", + "
\r\n", + "
\r\n", + "

This value includes the physical input T states of all copies of the distillation unit in the first round.

\n", + "\r\n", + "
Distillation rounds1\r\n", + "

The number of distillation rounds

\n", + "
\r\n", + "
\r\n", + "

This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.

\n", + "\r\n", + "
Distillation units per round2\r\n", + "

The number of units in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

This is the number of copies for the distillation units per round.

\n", + "\r\n", + "
Distillation units15-to-1 space efficient logical\r\n", + "

The types of distillation units

\n", + "
\r\n", + "
\r\n", + "

These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.

\n", + "\r\n", + "
Distillation code distances11\r\n", + "

The code distance in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.

\n", + "\r\n", + "
Number of physical qubits per round9680\r\n", + "

The number of physical qubits used in each round of distillation

\n", + "
\r\n", + "
\r\n", + "

The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.

\n", + "\r\n", + "
Runtime per round57us 200ns\r\n", + "

The runtime of each distillation round

\n", + "
\r\n", + "
\r\n", + "

The runtime of the T factory is the sum of the runtimes in all rounds.

\n", + "\r\n", + "
Logical T state error rate2.48e-7\r\n", + "

Logical T state error rate

\n", + "
\r\n", + "
\r\n", + "

This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 6.72e-7.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Pre-layout logical resources\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Logical qubits (pre-layout)13\r\n", + "

Number of logical qubits in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

We determine 38 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.

\n", + "\r\n", + "
T gates0\r\n", + "

Number of T gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.

\n", + "\r\n", + "
Rotation gates0\r\n", + "

Number of rotation gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.

\n", + "\r\n", + "
Rotation depth0\r\n", + "

Depth of rotation gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.

\n", + "\r\n", + "
CCZ gates31\r\n", + "

Number of CCZ-gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of CCZ gates.

\n", + "\r\n", + "
CCiX gates155\r\n", + "

Number of CCiX-gates in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of CCiX gates, which applies \\(-iX\\) controlled on two control qubits [1212.5069].

\n", + "\r\n", + "
Measurement operations155\r\n", + "

Number of single qubit measurements in the input quantum program

\n", + "
\r\n", + "
\r\n", + "

This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Assumed error budget\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Total error budget1.00e-3\r\n", + "

Total error budget for the algorithm

\n", + "
\r\n", + "
\r\n", + "

The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget \\(\\epsilon = \\epsilon_{\\log} + \\epsilon_{\\rm dis} + \\epsilon_{\\rm syn}\\) is uniformly distributed and applies to errors \\(\\epsilon_{\\log}\\) to implement logical qubits, an error budget \\(\\epsilon_{\\rm dis}\\) to produce T states through distillation, and an error budget \\(\\epsilon_{\\rm syn}\\) to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets \\(\\epsilon_{\\rm dis}\\) and \\(\\epsilon_{\\rm syn}\\) are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.

\n", + "\r\n", + "
Logical error probability5.00e-4\r\n", + "

Probability of at least one logical error

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", + "\r\n", + "
T distillation error probability5.00e-4\r\n", + "

Probability of at least one faulty T distillation

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", + "\r\n", + "
Rotation synthesis error probability0.00e0\r\n", + "

Probability of at least one failed rotation synthesis

\n", + "
\r\n", + "
\r\n", + "

This is one third of the total error budget 1.00e-3.

\n", + "\r\n", + "
\r\n", + "\r\n", + "
\r\n", + " \r\n", + " Physical qubit parameters\r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "
Qubit namequbit_gate_ns_e3\r\n", + "

Some descriptive name for the qubit model

\n", + "
\r\n", + "
\r\n", + "

You can load pre-defined qubit parameters by using the names qubit_gate_ns_e3, qubit_gate_ns_e4, qubit_gate_us_e3, qubit_gate_us_e4, qubit_maj_ns_e4, or qubit_maj_ns_e6. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).

\n", + "\r\n", + "
Instruction setGateBased\r\n", + "

Underlying qubit technology (gate-based or Majorana)

\n", + "
\r\n", + "
\r\n", + "

When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either gate-based or Majorana. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.

\n", + "\r\n", + "
Single-qubit measurement time100 ns\r\n", + "

Operation time for single-qubit measurement (t_meas) in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.

\n", + "\r\n", + "
Single-qubit gate time50 ns\r\n", + "

Operation time for single-qubit gate (t_gate) in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.

\n", + "\r\n", + "
Two-qubit gate time50 ns\r\n", + "

Operation time for two-qubit gate in ns

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.

\n", + "\r\n", + "
T gate time50 ns\r\n", + "

Operation time for a T gate

\n", + "
\r\n", + "
\r\n", + "

This is the operation time in nanoseconds to execute a T gate.

\n", + "\r\n", + "
Single-qubit measurement error rate0.001\r\n", + "

Error rate for single-qubit measurement

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a single-qubit measurement in the Pauli basis may fail.

\n", + "\r\n", + "
Single-qubit error rate0.001\r\n", + "

Error rate for single-qubit Clifford gate (p)

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.

\n", + "\r\n", + "
Two-qubit error rate0.001\r\n", + "

Error rate for two-qubit Clifford gate

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.

\n", + "\r\n", + "
T gate error rate0.001\r\n", + "

Error rate to prepare single-qubit T state or apply a T gate (p_T)

\n", + "
\r\n", + "
\r\n", + "

This is the probability in which executing a single T gate may fail.

\n", + "\r\n", + "
\r\n", + "
\r\n" + ], + "text/plain": [ + "{'errorBudget': {'logical': 0.0005, 'rotations': 0.0, 'tstates': 0.0005},\n", + " 'jobParams': {'errorBudget': 0.001,\n", + " 'qecScheme': {'crossingPrefactor': 0.03,\n", + " 'errorCorrectionThreshold': 0.01,\n", + " 'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',\n", + " 'name': 'surface_code',\n", + " 'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance'},\n", + " 'qubitParams': {'instructionSet': 'GateBased',\n", + " 'name': 'qubit_gate_ns_e3',\n", + " 'oneQubitGateErrorRate': 0.001,\n", + " 'oneQubitGateTime': '50 ns',\n", + " 'oneQubitMeasurementErrorRate': 0.001,\n", + " 'oneQubitMeasurementTime': '100 ns',\n", + " 'tGateErrorRate': 0.001,\n", + " 'tGateTime': '50 ns',\n", + " 'twoQubitGateErrorRate': 0.001,\n", + " 'twoQubitGateTime': '50 ns'}},\n", + " 'logicalCounts': {'ccixCount': 155,\n", + " 'cczCount': 31,\n", + " 'measurementCount': 155,\n", + " 'numQubits': 13,\n", + " 'rotationCount': 0,\n", + " 'rotationDepth': 0,\n", + " 'tCount': 0},\n", + " 'logicalQubit': {'codeDistance': 13,\n", + " 'logicalCycleTime': 5200.0,\n", + " 'logicalErrorRate': 3.000000000000002e-09,\n", + " 'physicalQubits': 338},\n", + " 'physicalCounts': {'breakdown': {'algorithmicLogicalDepth': 713,\n", + " 'algorithmicLogicalQubits': 38,\n", + " 'cliffordErrorRate': 0.001,\n", + " 'logicalDepth': 713,\n", + " 'numTfactories': 12,\n", + " 'numTfactoryRuns': 62,\n", + " 'numTsPerRotation': None,\n", + " 'numTstates': 744,\n", + " 'physicalQubitsForAlgorithm': 12844,\n", + " 'physicalQubitsForTfactories': 116160,\n", + " 'requiredLogicalQubitErrorRate': 1.845427031815162e-08,\n", + " 'requiredLogicalTstateErrorRate': 6.720430107526882e-07},\n", + " 'physicalQubits': 129004,\n", + " 'runtime': 3707600},\n", + " 'physicalCountsFormatted': {'codeDistancePerRound': '11',\n", + " 'errorBudget': '1.00e-3',\n", + " 'errorBudgetLogical': '5.00e-4',\n", + " 'errorBudgetRotations': '0.00e0',\n", + " 'errorBudgetTstates': '5.00e-4',\n", + " 'logicalCycleTime': '5us 200ns',\n", + " 'logicalErrorRate': '3.00e-9',\n", + " 'numTsPerRotation': 'No rotations in algorithm',\n", + " 'numUnitsPerRound': '2',\n", + " 'physicalQubitsForTfactoriesPercentage': '90.04 %',\n", + " 'physicalQubitsPerRound': '9680',\n", + " 'requiredLogicalQubitErrorRate': '1.85e-8',\n", + " 'requiredLogicalTstateErrorRate': '6.72e-7',\n", + " 'runtime': '3ms 707us 600ns',\n", + " 'tfactoryRuntime': '57us 200ns',\n", + " 'tfactoryRuntimePerRound': '57us 200ns',\n", + " 'tstateLogicalErrorRate': '2.48e-7',\n", + " 'unitNamePerRound': '15-to-1 space efficient logical'},\n", + " 'reportData': {'assumptions': ['_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._',\n", + " '**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.',\n", + " '**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.',\n", + " '**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).',\n", + " '**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.',\n", + " '**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.',\n", + " '**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.'],\n", + " 'groups': [{'alwaysVisible': True,\n", + " 'entries': [{'description': 'Number of physical qubits',\n", + " 'explanation': 'This value represents the total number of physical qubits, which is the sum of 12844 physical qubits to implement the algorithm logic, and 116160 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'physicalCounts/physicalQubits'},\n", + " {'description': 'Total runtime',\n", + " 'explanation': 'This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (5us 200ns) multiplied by the 713 logical cycles to run the algorithm. If however the duration of a single T factory (here: 57us 200ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.',\n", + " 'label': 'Runtime',\n", + " 'path': 'physicalCountsFormatted/runtime'}],\n", + " 'title': 'Physical resource estimates'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of logical qubits for the algorithm after layout',\n", + " 'explanation': 'Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 13$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 38$ logical qubits.',\n", + " 'label': 'Logical algorithmic qubits',\n", + " 'path': 'physicalCounts/breakdown/algorithmicLogicalQubits'},\n", + " {'description': 'Number of logical cycles for the algorithm',\n", + " 'explanation': 'To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 155 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 31 CCZ and 155 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.',\n", + " 'label': 'Algorithmic depth',\n", + " 'path': 'physicalCounts/breakdown/algorithmicLogicalDepth'},\n", + " {'description': 'Number of logical cycles performed',\n", + " 'explanation': \"This number is usually equal to the logical depth of the algorithm, which is 713. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\n", + " 'label': 'Logical depth',\n", + " 'path': 'physicalCounts/breakdown/logicalDepth'},\n", + " {'description': 'Number of T states consumed by the algorithm',\n", + " 'explanation': 'To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 31 CCZ and 155 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.',\n", + " 'label': 'Number of T states',\n", + " 'path': 'physicalCounts/breakdown/numTstates'},\n", + " {'description': \"Number of T factories capable of producing the demanded 744 T states during the algorithm's runtime\",\n", + " 'explanation': 'The total number of T factories 12 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{744\\\\;\\\\text{T states} \\\\cdot 57us 200ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 3ms 707us 600ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$',\n", + " 'label': 'Number of T factories',\n", + " 'path': 'physicalCounts/breakdown/numTfactories'},\n", + " {'description': 'Number of times all T factories are invoked',\n", + " 'explanation': 'In order to prepare the 744 T states, the 12 copies of the T factory are repeatedly invoked 62 times.',\n", + " 'label': 'Number of T factory invocations',\n", + " 'path': 'physicalCounts/breakdown/numTfactoryRuns'},\n", + " {'description': 'Number of physical qubits for the algorithm after layout',\n", + " 'explanation': 'The 12844 are the product of the 38 logical qubits after layout and the 338 physical qubits that encode a single logical qubit.',\n", + " 'label': 'Physical algorithmic qubits',\n", + " 'path': 'physicalCounts/breakdown/physicalQubitsForAlgorithm'},\n", + " {'description': 'Number of physical qubits for the T factories',\n", + " 'explanation': 'Each T factory requires 9680 physical qubits and we run 12 in parallel, therefore we need $116160 = 9680 \\\\cdot 12$ qubits.',\n", + " 'label': 'Physical T factory qubits',\n", + " 'path': 'physicalCounts/breakdown/physicalQubitsForTfactories'},\n", + " {'description': 'The minimum logical qubit error rate required to run the algorithm within the error budget',\n", + " 'explanation': 'The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 38 logical qubits and the total cycle count 713.',\n", + " 'label': 'Required logical qubit error rate',\n", + " 'path': 'physicalCountsFormatted/requiredLogicalQubitErrorRate'},\n", + " {'description': 'The minimum T state error rate required for distilled T states',\n", + " 'explanation': 'The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 744.',\n", + " 'label': 'Required logical T state error rate',\n", + " 'path': 'physicalCountsFormatted/requiredLogicalTstateErrorRate'},\n", + " {'description': 'Number of T states to implement a rotation with an arbitrary angle',\n", + " 'explanation': 'The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.',\n", + " 'label': 'Number of T states per rotation',\n", + " 'path': 'physicalCountsFormatted/numTsPerRotation'}],\n", + " 'title': 'Resource estimates breakdown'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Name of QEC scheme',\n", + " 'explanation': 'You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.',\n", + " 'label': 'QEC scheme',\n", + " 'path': 'jobParams/qecScheme/name'},\n", + " {'description': 'Required code distance for error correction',\n", + " 'explanation': 'The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.00000001845427031815162)}{\\\\log(0.01/0.001)} - 1$',\n", + " 'label': 'Code distance',\n", + " 'path': 'logicalQubit/codeDistance'},\n", + " {'description': 'Number of physical qubits per logical qubit',\n", + " 'explanation': 'The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'logicalQubit/physicalQubits'},\n", + " {'description': 'Duration of a logical cycle in nanoseconds',\n", + " 'explanation': 'The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.',\n", + " 'label': 'Logical cycle time',\n", + " 'path': 'physicalCountsFormatted/logicalCycleTime'},\n", + " {'description': 'Logical qubit error rate',\n", + " 'explanation': 'The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{13 + 1}{2}$',\n", + " 'label': 'Logical qubit error rate',\n", + " 'path': 'physicalCountsFormatted/logicalErrorRate'},\n", + " {'description': 'Crossing prefactor used in QEC scheme',\n", + " 'explanation': 'The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.',\n", + " 'label': 'Crossing prefactor',\n", + " 'path': 'jobParams/qecScheme/crossingPrefactor'},\n", + " {'description': 'Error correction threshold used in QEC scheme',\n", + " 'explanation': 'The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.',\n", + " 'label': 'Error correction threshold',\n", + " 'path': 'jobParams/qecScheme/errorCorrectionThreshold'},\n", + " {'description': 'QEC scheme formula used to compute logical cycle time',\n", + " 'explanation': 'This is the formula that is used to compute the logical cycle time 5us 200ns.',\n", + " 'label': 'Logical cycle time formula',\n", + " 'path': 'jobParams/qecScheme/logicalCycleTime'},\n", + " {'description': 'QEC scheme formula used to compute number of physical qubits per logical qubit',\n", + " 'explanation': 'This is the formula that is used to compute the number of physical qubits per logical qubits 338.',\n", + " 'label': 'Physical qubits formula',\n", + " 'path': 'jobParams/qecScheme/physicalQubitsPerLogicalQubit'}],\n", + " 'title': 'Logical qubit parameters'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of physical qubits for a single T factory',\n", + " 'explanation': 'This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.',\n", + " 'label': 'Physical qubits',\n", + " 'path': 'tfactory/physicalQubits'},\n", + " {'description': 'Runtime of a single T factory',\n", + " 'explanation': 'The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.',\n", + " 'label': 'Runtime',\n", + " 'path': 'physicalCountsFormatted/tfactoryRuntime'},\n", + " {'description': 'Number of output T states produced in a single run of T factory',\n", + " 'explanation': 'The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.48e-7.',\n", + " 'label': 'Number of output T states per run',\n", + " 'path': 'tfactory/numTstates'},\n", + " {'description': 'Number of physical input T states consumed in a single run of a T factory',\n", + " 'explanation': 'This value includes the physical input T states of all copies of the distillation unit in the first round.',\n", + " 'label': 'Number of input T states per run',\n", + " 'path': 'tfactory/numInputTstates'},\n", + " {'description': 'The number of distillation rounds',\n", + " 'explanation': 'This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.',\n", + " 'label': 'Distillation rounds',\n", + " 'path': 'tfactory/numRounds'},\n", + " {'description': 'The number of units in each round of distillation',\n", + " 'explanation': 'This is the number of copies for the distillation units per round.',\n", + " 'label': 'Distillation units per round',\n", + " 'path': 'physicalCountsFormatted/numUnitsPerRound'},\n", + " {'description': 'The types of distillation units',\n", + " 'explanation': 'These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.',\n", + " 'label': 'Distillation units',\n", + " 'path': 'physicalCountsFormatted/unitNamePerRound'},\n", + " {'description': 'The code distance in each round of distillation',\n", + " 'explanation': 'This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.',\n", + " 'label': 'Distillation code distances',\n", + " 'path': 'physicalCountsFormatted/codeDistancePerRound'},\n", + " {'description': 'The number of physical qubits used in each round of distillation',\n", + " 'explanation': 'The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.',\n", + " 'label': 'Number of physical qubits per round',\n", + " 'path': 'physicalCountsFormatted/physicalQubitsPerRound'},\n", + " {'description': 'The runtime of each distillation round',\n", + " 'explanation': 'The runtime of the T factory is the sum of the runtimes in all rounds.',\n", + " 'label': 'Runtime per round',\n", + " 'path': 'physicalCountsFormatted/tfactoryRuntimePerRound'},\n", + " {'description': 'Logical T state error rate',\n", + " 'explanation': 'This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 6.72e-7.',\n", + " 'label': 'Logical T state error rate',\n", + " 'path': 'physicalCountsFormatted/tstateLogicalErrorRate'}],\n", + " 'title': 'T factory parameters'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Number of logical qubits in the input quantum program',\n", + " 'explanation': 'We determine 38 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.',\n", + " 'label': 'Logical qubits (pre-layout)',\n", + " 'path': 'logicalCounts/numQubits'},\n", + " {'description': 'Number of T gates in the input quantum program',\n", + " 'explanation': 'This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.',\n", + " 'label': 'T gates',\n", + " 'path': 'logicalCounts/tCount'},\n", + " {'description': 'Number of rotation gates in the input quantum program',\n", + " 'explanation': 'This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.',\n", + " 'label': 'Rotation gates',\n", + " 'path': 'logicalCounts/rotationCount'},\n", + " {'description': 'Depth of rotation gates in the input quantum program',\n", + " 'explanation': 'This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.',\n", + " 'label': 'Rotation depth',\n", + " 'path': 'logicalCounts/rotationDepth'},\n", + " {'description': 'Number of CCZ-gates in the input quantum program',\n", + " 'explanation': 'This is the number of CCZ gates.',\n", + " 'label': 'CCZ gates',\n", + " 'path': 'logicalCounts/cczCount'},\n", + " {'description': 'Number of CCiX-gates in the input quantum program',\n", + " 'explanation': 'This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].',\n", + " 'label': 'CCiX gates',\n", + " 'path': 'logicalCounts/ccixCount'},\n", + " {'description': 'Number of single qubit measurements in the input quantum program',\n", + " 'explanation': 'This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.',\n", + " 'label': 'Measurement operations',\n", + " 'path': 'logicalCounts/measurementCount'}],\n", + " 'title': 'Pre-layout logical resources'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Total error budget for the algorithm',\n", + " 'explanation': \"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\n", + " 'label': 'Total error budget',\n", + " 'path': 'physicalCountsFormatted/errorBudget'},\n", + " {'description': 'Probability of at least one logical error',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", + " 'label': 'Logical error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetLogical'},\n", + " {'description': 'Probability of at least one faulty T distillation',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", + " 'label': 'T distillation error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetTstates'},\n", + " {'description': 'Probability of at least one failed rotation synthesis',\n", + " 'explanation': 'This is one third of the total error budget 1.00e-3.',\n", + " 'label': 'Rotation synthesis error probability',\n", + " 'path': 'physicalCountsFormatted/errorBudgetRotations'}],\n", + " 'title': 'Assumed error budget'},\n", + " {'alwaysVisible': False,\n", + " 'entries': [{'description': 'Some descriptive name for the qubit model',\n", + " 'explanation': 'You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).',\n", + " 'label': 'Qubit name',\n", + " 'path': 'jobParams/qubitParams/name'},\n", + " {'description': 'Underlying qubit technology (gate-based or Majorana)',\n", + " 'explanation': 'When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.',\n", + " 'label': 'Instruction set',\n", + " 'path': 'jobParams/qubitParams/instructionSet'},\n", + " {'description': 'Operation time for single-qubit measurement (t_meas) in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.',\n", + " 'label': 'Single-qubit measurement time',\n", + " 'path': 'jobParams/qubitParams/oneQubitMeasurementTime'},\n", + " {'description': 'Operation time for single-qubit gate (t_gate) in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.',\n", + " 'label': 'Single-qubit gate time',\n", + " 'path': 'jobParams/qubitParams/oneQubitGateTime'},\n", + " {'description': 'Operation time for two-qubit gate in ns',\n", + " 'explanation': 'This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.',\n", + " 'label': 'Two-qubit gate time',\n", + " 'path': 'jobParams/qubitParams/twoQubitGateTime'},\n", + " {'description': 'Operation time for a T gate',\n", + " 'explanation': 'This is the operation time in nanoseconds to execute a T gate.',\n", + " 'label': 'T gate time',\n", + " 'path': 'jobParams/qubitParams/tGateTime'},\n", + " {'description': 'Error rate for single-qubit measurement',\n", + " 'explanation': 'This is the probability in which a single-qubit measurement in the Pauli basis may fail.',\n", + " 'label': 'Single-qubit measurement error rate',\n", + " 'path': 'jobParams/qubitParams/oneQubitMeasurementErrorRate'},\n", + " {'description': 'Error rate for single-qubit Clifford gate (p)',\n", + " 'explanation': 'This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.',\n", + " 'label': 'Single-qubit error rate',\n", + " 'path': 'jobParams/qubitParams/oneQubitGateErrorRate'},\n", + " {'description': 'Error rate for two-qubit Clifford gate',\n", + " 'explanation': 'This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.',\n", + " 'label': 'Two-qubit error rate',\n", + " 'path': 'jobParams/qubitParams/twoQubitGateErrorRate'},\n", + " {'description': 'Error rate to prepare single-qubit T state or apply a T gate (p_T)',\n", + " 'explanation': 'This is the probability in which executing a single T gate may fail.',\n", + " 'label': 'T gate error rate',\n", + " 'path': 'jobParams/qubitParams/tGateErrorRate'}],\n", + " 'title': 'Physical qubit parameters'}]},\n", + " 'status': 'success',\n", + " 'tfactory': {'codeDistancePerRound': [11],\n", + " 'logicalErrorRate': 2.480000000000001e-07,\n", + " 'numInputTstates': 30,\n", + " 'numRounds': 1,\n", + " 'numTstates': 1,\n", + " 'numUnitsPerRound': [2],\n", + " 'physicalQubits': 9680,\n", + " 'physicalQubitsPerRound': [9680],\n", + " 'runtime': 57200.0,\n", + " 'runtimePerRound': [57200.0],\n", + " 'unitNamePerRound': ['15-to-1 space efficient logical']}}" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", "# result = qsharp.azure.output(\"...\")\n", @@ -364,9 +4888,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 69, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -391,9 +4914,8 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 70, "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -404,10 +4926,37 @@ } } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logical algorithmic qubits = 38\n", + "Algorithmic depth = 713\n", + "Score = 27094\n" + ] + }, + { + "data": { + "text/plain": [ + "27094" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "evaluate_results(result)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -415,7 +4964,7 @@ "name": "python3" }, "kernelspec": { - "display_name": "Python 3 [Default]", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -429,7 +4978,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.10" + "version": "3.10.9" }, "nteract": { "version": "nteract-front-end@1.0.0" diff --git a/obj/__entrypoint__.dll b/obj/__entrypoint__.dll index b9827133de8f3bc5e7870a5ae5b68a25e5d81091..d02014979e76bcec770aae77f79ab3dfc2dc52a2 100644 GIT binary patch literal 321536 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 GPyAojdL6g` diff --git a/obj/__entrypoint__snippets__.dll b/obj/__entrypoint__snippets__.dll index 3a7aef9f4ffccef08a95d5c2c985a23800ec2c14..41aa53b31b122142b53895acbcc46e3234630e93 100644 GIT binary patch literal 51200 zcmeHw3v^t^dEVSzV6j+=FHoe!_Y!;v;se5iAPHGk2m+u8if@pTWlMn;zy-O|Vi(*8 zC77l|+Kzmb+I_@|6Q9ODveH&3Rhr|ds;#DuqvRw`qf^&DNt-r4vLf~6^qf3=>c;j- zTdUtUcmCbM-Mfq31xZm32DtP1|9}4fpMU?sbfw^ZT{Q;I3d#BQtk02PM1=@2S~_+9(o&ToOy@Q3Y`azdNW9> z;=r3aVRi6lNy`6HYKjCQeD5u#PU>8x$WgadLREvum5N&UD9T5ya%bLsI*;Q#b)3&c00+Sq6>d;(B?WJvRd$iOoq?*-+yOjFn`;3(Vdlj+| zT&bPk&QQ1my2g~+xh@NJXOJvqvMF>K#ipI@q3{)*0f7Cd0XhQ!JkbN_%)Zc%Bj~zF z4h&*DSz1{vt?CM^heWMVsACyOzSR!BJC-AtfrMQh&7f9-+g`*$*shKi8@Ho~)Ad@3 z+qo&6JAlm2Sa>JoP~Iw}AXuqF;ieo^iDjVXuGlURsrA5r5_m9QslwYYgEkhsd^_SL zYV+n#!>Z2qZ$ZhXj@5wW)*$M*1JP}}_D3^!BC}M5I^e{S)=)70qlwy61P^ToT>g63uKxLA~+OO-NQX?NTe7b}9$P3#mP7a7Hbm zsn&NjsefIcj+Ip33^8{+@yO~Y);y7mBj2$FQO0Y~eYG?wgT9JYZq-*Sw+fcj?fRfP z@`Bec`rKBq(>`~%=W`!2J_qA@9;GvIF<8(8=nMd`wg=D|0N@%PKxY6zFL(f*0RRr- z0dxici1q+FLr?8sA8vzEa31>3*VzFK;*aP=n`H7kAqFA9v~raY@k`YI^ZWITu-r{<{7tfy+s^azpDe?hOxmmh2ZGG>G7c5 zE(2?r(Li5|sNV-3BV?u8_(TlC;rNkAW;<-Ms>v&5cA&7bX~}JO(EH)>kx&Qh0=K|; ziG2#jG|nFCfO|(;qTZ;3ZDTt^9q_@3Cs+@N5PdMxa>u7J{W#m#L|@3k6=EIGHI~`M z8tTo+4z*_KkJr7qL$$7IUfH~R1Ej)dBQ2TTATWh!W)BNWy`j9(6v1f12nSafRHgQAh!g1ExrqVyJ&FisO1541^~=z9zbX4H2a~8ahkyS z&F3@Fv($$^pSj1z`T8DiQn3%waH|i)>Jr*!^&#wJ^&v}h`w-qax0`~E-bpesItvwz zE;hg8eI=W39`tO^agWMSc_;j_Sq(#14D*%h&QD{eUB7)zr~_t*>A86Oo~9kQ?`qDV zH)1brzr$cSKhME*paC&&M#o8Y^yndn9*%%cQ+6Y(yUU5Uj@UhAB9(d z;2`s(`D`+MK1Yg4_*NIHZ#_4vp2Hx=|4gFN0_v>9!h1#NsNGQavuK0 z7k0IRkNR7uS7B11bPPd-L95UxMbU8_EJIiI01nci-TDAqg&|g?Cyqz6Ng+c!w^C0< z35V^~AGUn9HKP8fjt{lCt;^MyF_dHK*_N+FV(Opi_-rfl7j-_Pz7mP30q41BO#Kn^ zG4=5nQoj$Hm(}ucOkL5OAJ_R4 z&Q~JKR7=aw@G|wo$WCC>nnNGp5p^;4Tr{Gdicp8Ygxogun)+QpJ_1NYZESunx<-A~ zVci$h^Pqnm5+mxbTiMb(moOg#O-%i<=DAI4wYT*RV1L|1_#2w%bKto~y{!2>qn>VE zqtelx7!FGPoHic4!$H4JIj=YoooDI)L|<{1p*Pwz?)FxemMF|dsPh>dSJ0CO(Az82 zKgOIIQ_E3W1$YX_HI(iJ;iaZr$Wb2+KZW@9F!R42{u#ud34a{%{TiFp*i+$80-`kJ zzlA^Nqa?Q1`AhX;=v16~KXd1a)EGzmt6oWcE);>EuG^vzzOK@tH$mBMN-u=|8dy&8N_|%SF#3Z~i#no9*VIwf3h(#} zQ*uyRqJFQPlwNCZQ{U7jueD3npO_L`yHtHgmp&0~3#|(;RsY?TwuCmL^jD_z17|xt z=?A9N6rx|fV@gY-FNKz?7K~-3J`p_-{SrzmOzBTxr4{N($}1>@Je;J zDZTCtqSRwbt0OOk+SI+KbU5-Qlm<=dXz1baD)pc#JrbHi>8vi%x|hPYt4Xhe}c=o&&UZXysOV`vU^{Mb3b1ZnLI>Jdsc@|u&PMQ)exK=%+OP&SS zs-HF`T5zp8Z%VY_I>oa;twam1Q%{=`EwNr*H6>bNy?R!cycTUxzvPv4i#E(@QK`fh zZB+kPQ_@4Og*T}U`rLd??L~_=tFP)3ed06Wxcaxc^mc1c?5LvaIO=m4jgD$5i@zTt z+>0+DA5!n&oD)_bLF}kmjrHP69Ljlm5I<+(R*6p~`tM_8_Cc?HXw`?KAG1#%j(*JU z{i;=+XmxN}Jb~G5E#esFq7$tvRJV=?5U*BA^#$~0Qbi;8s98WF>RH6S>Y^HheQrbk zQLJ`Ov=&sW^Ucs@wbr?(`KtPydOG&3+70-Zk^f=zYsi0BeGl;mo&Sw9#Ihwng6&VV zwmN&&!PXVded@ch&CZafPpVBzx*W#ucal!?l0oO9^A2X}UsZqH^Z@85q7OQ=&WYBO z$bX~hAt&K{KQ@8o05v&=xS;+Nb$`oY{0Gii&GS*@zvoOM--`Hf_#G#uA#WpY4>8`2 zF>s>weTe@owAo3hCt{~VThxQ<+n8uZ)t|L@Vy2EYb>doY72@@(2k}<*KE%7!zg)`r z7nT$9wUx|g?__>x9rJ3-faWux`3&N${panBcW+H-ctXP`0GZi(RYR_sm~uZ3_$ynV z*N`uonDAfG`PX#(J0>RlEuDYc#Dpk^t#C|CNL=T)n3#|OogZ+RPw0F?=dbDfHJ$&W z&VNzoRfs&}I(}Zquj%+L9jma$>iD3JAJ_3!9Y3$**L3`rj#ZPU*YQCet7by3>iBsb zzoz52bgUwpUdM0g*ik>iNNrKitM8~6odI~g18@`LUWG9mQnw=w zsnz&%upnHG{2lmn(AqnYUyDCStwS7wx2{Ki1LBa{h(8B2`9|b7OI@>Vb|DE$4=ZDVf(9zJ5x4E)yx{A)5 z6Ru)jjaZOG=tqDs;4;XBCqmZ@i4FS#W^e`@_A(d9KG>fY**m~|8?|sbg+6J9b$%Yl zFTygfV;U$rNK-(pUtFF?&QhzNIFma>49uEG0WV!bTXgF z>TKSf?pB9-`uYwZ80_6Y)YmoKKXj;T@4nuB{RalR_x1Mn3=j1V5BK)(>*^csIW*KY zIK02_z}^Fc-NOgEhW7Ui4-R$rsKbTy#N$0`WH6CR={EGJhZ3oR>$Rgtot!~a^T|w_ zL=cHMo!_@ttG-{2jg97kozVJ?K)18AGwx{e!|wZg_8w689nVY_QttigzEj!cr9|Ex znTBzu-8AcD(nD@Okxb?8$1d#XiIG#MhR>=GDE1xAvVUw$<*Yp6M+}T9%O5ahrYxUv zQ*I*X8fd9R+&~JOwot(!ts=2rj~HCB;PHeOpe`~k7RSb>0UR3}O5_tGX`M}a2^yH4 zouTuMjpfqGnHe{q(|B5_Sm$JcdCC|Y^W4!C<~Xi_9ZpQZJK)H=Op)+BI+e~&vOGGQ zL;rLdQ+Ez#vhK0uxPS-gQ4=(KuJZvm?Pik`>UeS@o5^LS@|~v(iFCd&-HE=%wQ>%) zfyqgA`k_p6Qr%~|TuUELx+x&g59L5~Mmez97v-o@Pn6@NC(1ErTfSm6h9wY(sewG; z>Op%ro0&F{0Ckeng_It%+O0Z^@;gr?rriKP8m(A?{$6*b!-Z6;?n;zYtjI#KT{ZZH zo_p%5;LVz_Yk)aSM`+^(pgB|nz&;}eP@EpUkjTz>Y|Ri;UjMsF#+4d!#|!7ryV*n8 z%v0JgIAyyy%}mcEQ*KsI1^`SBSLj60D`q>>*tr-A?yPeYAI;}TEnT&~2zSe0ZzjVDvd{A>w(iDxlATLyJw z`G~IA;{l}fCU0(1G7;fK5IpU7PNq_362>^L+=+)X1q^vwFn~tu01+2+?C>$p_haLk z^yJv3?y<4X@f<3_8p@lgt?BLIYyxMWtU*9m-BrVw2dA|t!CNa3^?;i%tw&TR&pV}6 z0GA5{n3Ih)tp;dqV@-w9NbtOG)XiSP43{%LhjRJJDyV5SqmBbVp)O$GBCTBYFs?NcfX*PF z#YI|WZZ&fFDO=_laLuUac@PnDHr&}1S8d0m%4xg$>6KUi zQMAi(HYwzrVoqCMH0G>s8zHk6WFB$a&fR9SXaNK4usBP)!Wz9Pw8?3Uh1;Sw5mabt z7R6V$J?6w>ZRf&~RSJiL>t+c4rz@}iYGifW)qml{B2aeYDy3WT7?`6bYCy+TY6-c< zJbfZs%?-^^^6GD(foU;ONU z`r3=Le?NNgnI{kazhC%+zk#j#T0l)bk)OtKaV5%gEwL1kk|Dy8l^fW`KCMHa?j_du zlw7K-}|A|&&BS{OBPvEa7v{?KDoMQ?4uGLL!LUQ3q8f;J@4Uad~G;}hm8r1RZx)qH-Scf{zjwj06a%pfhgNez&qsO#@d?I)+Eur;E+)EhKiMepu{ z7vgG(g9;=3GUt^v25<>P_a97Uay}qN>+W`}%Q@|2bN6k*ySfAV7+tt&xZ%@}gw|CFp@t&SN{S$lp_e}Kdo1E(DJWA@Ey%;@a&cqUbxK#GI^76{0#CdX2@8zgz#esQ_|p+q*xDMF@cV<^mANpI@5*tP3Ld%MhumTbLf z_d8wD!}N7VyPivBm?6z%y^A|-wnkIqMBrOG{jv%TTa3p%;QI}$>V0P*E}B7!ymiLQ6Jk9 z(8J<2i=8}y8wEG=WL#D4`j}yHtyK1>AThNNxUcg?z74Go#On#ONT>4g}3y_5_U%!Rr>+5CbtQ)X= zy{@gPZ*5x38T7F#%hl`X;5Dyg=Gk`e96V^b`pj=)74k}1k1lu>Qt=M(;$mcRF*35a z7}2}=oT-DCSj81WPw=gRc{W{Sp@A)bvrAJMQWUkg7^!nH(tTt0i1%XOa&a|+M?>e` zO#9DRjr>vBx$7rvHB$ST^oA`;e2#v-RwbUJ2dzq)c$3<^qpH-Pqk3>(r_S3tyv@xw zW#2()ln2$Q$fL$}9`(R$BX}Qz!Pk~Lc(A_LmM-ib;T?Xhnb}vO00w2W=h^WfVORc^eu0bPE}9YDM?(O95R>P$U@0`Yu9!@GALL=gmQ4g$`BRg=fJM0neK zPK7Fkg-N>$oaHiYp1qMOI?O@MuMo-kf;oe9LA6?q;yekp#Q6M#vc`6eWW9OT|52A zdCII~A0%fPUj+#`(dvip*+lETAE{lB#^5k-s9%e-)l}ejN&JB#{2f+_t{QJY-|FQ? zU7|YI`LS%R9oTXiu{OMxJbBrZgYae=yhbZNc|ejQwaBPMbG>^=Y(T~25ZO{@%HWuc zl=;OS27Dc9PF>>XOqe8UG&Jroq9#5!rvpAEq{EGN`ua`UcpFWViixyY+K4ZD6$5eg z&1_ZYlp^1tjJQe>XDdvhI02dgNw1g*!R#ltPUu>(~dYv23k7 zISBMc9dV6@N+Vvnm@?^djXKfwn%l(|{&o^>2O33&hz+kLFKxADF@FoqHeyb3SZO{} z;z|p~S{hu5Mx+GeMJ6X^hE-ltcDlbgE+g8olNe+k_Db`_WfMuQwZ-24iG*e1xLXp} zD>*$eWbi~{%Do{I0$1VX+cwtAkaQL6B~5B4HbeHh1@de}m$TJ0kdv#QW?>ER*Os}? zFXj4`MWRTOp+gBb#BkMB7j=ZnR!3k#DeLhP-0$@=8{G#SPM`P`h4y-Va^(4v?_T8e z2P5K%DV!OtF%icr!}#ieem?ewjE{Mi%xn&J*Y#I7kZm|rI*&Fw3D&EKzf0LJPD1qr z@{oh|n7@V2eX{98Q_IBx)vPB-^CV?m=5O}7Q@Vy5^9+r<3AJbNZY?N$2x@LvIA^iD zpYvQfzEatl6(1_DDX=}1=$~Wg&=R-@S9HvUHIQpX5hY6qax6K-{EH!*hd3rXm`z#0 z4kT)87B+jr80=k04^kde{4|cZc?39~k*_OZ{!Qe06@&Ld26O1q?h@;K{&M8#dil@o%!m)VQ$$wj>#uo)?Kzl~uT)`kKRaxPYjsv&R z*~ykc{*4Ce!J`zUBpMQ9!>+@`D#G}|YX*CJ#uioUBTfsJp3l(72FhN}80mGYtxIk`BUEgHZrJ{9io#vMj5k zYV|7NSif=*tV}WVIXUkWCu_*c94cdkcQA!u#ZFvt+mdC+C%ATXsPGP^60A(8T-Dl= z>so{QL zBe+^kP~ja+ELbl87`Ss}OO_d4BkPQWcW^bq%3bR?$ZW}X2Un{JD!hY<1-r$dw<5JA z^K8{<5Z=M{1uH(xezhg@2PPT~!aKOWV5L84U0ZU0aJ8DC!aJB)usaQUH&R>jk>F}I zL4|iPv0(QY^gT#z$s@tlYJv*yU}C}Yhd~(VQMTlx8roPSyn|~CRy?WCC;7qPYBfQH zcQCPF_Zjp7q;{K+1y`#HD!hY<1uH)MKA+^{!PRPl3h!WI!E(Qq;eH%;n@?zHW0CL< zt}WP~GUx%Mw&at+)oOwY?_grV9x~`5q_*TU!PRPl3h!WI!44br14wPjqruf`f(q|o zV!_H>#qn!Pek8bBO;F(-Oe|O#xAbLO@?>zenxMivm{_pl!>4_c-Qa39L4|iPv0%lM z&iN!y1y`#HD!hY<1^bXevtMm%pAW896I6Hy6ASi(2K^XPTXHhET1`;l9ZW3PpEl?O zQd@F1xLQq6;T=pY*l~lVN7<5d!PRPl3h!WI!HOr*y0+xm;A%BNg?BKqV4pB(?h7-- za1bYW!fFdrqt%e7kqV6I&f3@%sT!@rdUB8%^HrWh;)SK}JJ)CBg%68YG&rEJ6evc2E7^Fvv~-zss~dNr+=-mi<48)>P( z!=X_FmnI?nR;dmg{qz*^B&M8vZ|0MU+)ZTI>Lu^eNkl9lV@P)2s1$M6c`TW> z1}8Fa6|uH5MPNXNiqdQC$1g}G69n^I!jdj2Ehex$5X+;JgZuk12U zvzHvNw)6iM!$h_#O|h8xn;-~T#IsCmy$71ZrnKNNZwOQ4;=|txr;| zCz>G9^-0eMIc=uMOK;7yZsxcho+f;~qpWNWy-e#+i7>*a2m zq#Ji%PMRRw9`oB;YS<}j*ApnEkvjEWpHR-udK3dK>(~dYv&{X)^7mZ%W463JHouRG zT%*C>(6V_@w)BqwnzvTHNLTeeR|+Ii^{{yPTy7tGlB?G}ZEo{h-k4 zw|M!y5bG^oJ}<<2in&bBFT{F_m(L5a-s0u+LacYIUp`CQ z>bjh(cEL~$=Lxfy!}C*%g5_y_b?2wH_2P%d8Oo*351C(*&7;*W1mw3F-@vIn^>zkMt>n&)x}ms_zYi$W4=a1F(pJpmS*QM4vg+Ja zsmXq`y;n!D--##pbWjUdSGV+1)80YkuHAn&;LERI(}$M-g%^fIju3w z84@070kMoJe_G!dqXN7^XuZ90OSMuABy$1F(qhg@{(T;yV|s$bHbEtiC*6EOga*?I zmQy6dd>d4v<^sOIp72m}T)i!3CwFI&rip17XaIjN++IkVMQ~oK>nSEbN-P zV+d$8kZI*0Sb3|D=PHJUFE6U^L%kcTM`W*p4X-6nUiQdh9m3{}FajG5jXSwCQ?^0q&V&h^>D)2jsE({BQi6Gi zOnHD#p456bhFHl0>?8(xdEYC|6PNAy)LNT1;MvPR!P{lxi>|Y6irht2U(b9|>fo^^AXLUzK9ySaRF zTK~{Qd@AGp21OoMKb@Dz>gKmu7mKaP?O$oR^Vr! z2sR%@&!i{Z-SKoLA1~ziW%NWE^(QCwPe$P-`SZI2*<}90w3|;( z2p!Mz<#gU}a_PqF zUP$1_eek0u$q&y_kN4vOBv0elPV$9GcYv8G^TQ`1VM}10;cPaO#e>dSe3Rc&C)iNd z5B~_)U_+hMKS@+HLNF1&lyu3>=7m$R$m1oK7D6u3${T-j1_RJ%reL{;lKH2SIak;P z_u?50#muzO1p9LFt207&C{VLfXLp)xCY$R#J$M#IaxKVUGCNVgZisN(6Uc4&Y0M)@ z4)H{)bI6^@Ov{hQ6)W;9mE{Jq)Hq#8r1OR8Q`yXfo6F&c6^5VAyXhSIzsO@-AdeDV zr_YKN{5O@z#JJKMoyg^vJNv zONu|o!iFNn{Tla845s7W6*sl0A@+?3^-OkSirW8kAE ueZ-`bCY7-^WyYFAb#<8dbLOzSk0NiwRMN#od4x3))_xE&`$d)i6rrZckJ zI!&U+{l0VWxqEi^?h~LTL3@CE?)m@opa1;lKmYm9WAE-g{SSUoq9W3P>&HJ9`5oLD z9#(Pf=q9rJ?*83A`K_L>5B!dG>gxkjms2@=G3(A}6AN}Sk;%Aud&aS|g^Zob*eA|T z+6(TiGrVR^?>#>2b0{1 z^j&P^`(>i?@Fz&h|Ki;Ti9-0}w?)o+$ttlWtE=SHMB5_W20=IA#|(Hl?>wIeY=4sx zE~Bl0RIo)Z4QHLS3(a^k_-%X3C-83%iySY-G!DIk_A^knh;+(ZyP(TszLtUec0%Os zPm!XrusaeRf~>tFySHQ^?jmk$c-tPi4zOeQU?lpYN&vzBQwWtf9QpfLpGYhR`rh4y z)&|h`B@!7zX74v_$TozGUKd>U40VDe$lDR*f#IH^F6Qmt9?cy_Vs~$JH=3}1Br5B1 zN8x^nL_2c*WQ7s1r*{vCkROwKkqHL<65V+nw7tF8??AjNG6W-w#Wp|VZU7kD=-qQ0 z$zT(rd&>wmRU_~-LOH}xg}WKtHh&Uow03Tc`P8rP+@uSc-cb37KU83l z-pEi13>BE3hfoP1VE7(FC4hkCcnFmM0_N`_R00V2BM+exK=f#YN^r#83-im}4WaZ{ z`6E5-_4tFm`Qs0g>>0wyD2_kapPvVz_6%WU6!Ufld5~|<5KO$7hg$t|YTTlVVjeIN zZ@i-!dxl_k#k^fXImHvoEanXbd1&pPA-E0r0@`W>0~>j2{3|PV(RzRMi)@80|9j*^ z@BMP;Grg!BE+7_j!Jv12hX=U>0Qx&tt=_Z-`561L$Pk8PtSdK&jDH00wAI~#6g&b{ z66@+N8LBYSm{+k+1AWK3Hu>Yd+Z)|O_n^EBrS;w`e~xb1xaRM-{Q14ov%a&xbMH3P z3Lg~fa-lhjNTAz=I$%ul9Z}rZ$M#4+JQ~^xrHR}lbH5-l=m@jzJ(BrlL0OS4+0S~G z_h-K4frDoxDgh%|r4cFt1pJamp%S#3L#W=j8v55K$e5vu&FlerkXL3i`^>zuzQ3P& zXi!)mLRzB_qjDA18-0jUMjsL??ZaVUO1ddr>3d10l}@0l(zVVveWh)$Y zk>it(AGc`X2xc@%j$6%W~j;Gxj5+k6StS2|UzN!bjA8dV{%KHli^~x^v$~wtF-Mz9#4kPcok)MxP@;8ysAigj9 zS;T$O&m;cl(O*aW9~Az}kuM^hP?(d^-$UA@WbQeelDxdRtNSVN{D^|S+w*M4{ituo zhyFxCDFuDJ`yuPAk%(OJp$Y5TfL`#SDeEsIQTdn;J!Sm>&_7hrA9Y6}e;4VHU-O~0 z3i^Tv$^S(AJLG#l^as|uXoq~?hkj%YL_6he1^r|BTGvoCChGr`~L{4*c=v~?cPulvxf^<;F7e94Eh z)>D9f+lRgvn~C>3i33#SvL9*HMm*s z_91HUPTA!{)Zm>m;zQKL7CGWW)WjAUQ;^r9t#ZzTRExHjw5SNNMcd@J6s6aqyW}ke zy(EvLMcXBhsnoNHZ$$5wn+p1F&sV!27aMp>(im5kd?!|nAEgr%FaCWvs)+1`SH)ff zu_a#zM#q(9O+JzEp6jl~p-39p@*%7%eJ=Rdi zP5Cuh+w+R-1^!K>zt;7~NdKYyZ^S>6|0@UOXS<@-gDUrg?C%+{PRZvY_ghoIJZ?Ru zFtcL!T(Q0=Ka9R$rB!+xa-Whs;(~k=G=FI^{-O0z#V3VycVtTbX{0amamC?3BOZ+~ z{!ru&az=b0aw(D!tH+59$WP1AjscmJeLIF_l|0cgj6LEs;;nK6@ecWU#Cveq!T5V? ziCGnA`rmG5`j@saeP&=x@flNm#^rz<-of~V9SMa`D0~u_H+I}qn3w#R_5K|2k$YZK zn9ut$@o%d1zw={aZmINl{g@cbqWqS{^ngkasPvdhkEwJ*r4uUsl1jg%(r>EtEfrsi zkk3sOzoz0hReVdu5@oKf;)hjyNyRr+{F;j2RPikpO9$!SRPn=|OkYy*O%=bU;x|=% z%frM-^BeLP@-6EeY}JB|cELXTVV_(f9P79h6?sj?r>*~r^d;+mA&y1fLA+kYCe5!{ z{T*2QSQ`=dcWp&{Owr$K*+`Ff67#RD1Bhdhp^n|;)ra(pM}NJ2BbIP&w_{Cg!G;G zvt$e62rO_b(%TS62U0Dlpzwss)CPj({Sjrre_J!%!O7dT7y zA&v;`)ROxVM`Q%Jh&%v@t)PT4NEnqtq@x(e{lK0>x2X(K{I3 zacjsrZk@MgtsB;-t-rSJiTq3i1HLT01>Xlp8H7UQlv>kZr5oUGL<(FeBAB=<@UrE& z-wvVsQ}n+VP?dZMrPwnA^2@kB4}H9a`>$F9@>yK3I?8M1TVZq5JX41~3QJL_I z`r!Gg!lJ^TC@d_VP9!gR@`)^y%mX6t zER4z{g-r6&ewi3gq|=K3et9C1E;wEt`{nE+#K@=I42e);zdU%_oh_uDhj0Kmd1m6= zxsy{ee&+0yd|0Rx#d~^Maz>i?$9x>`gjvK#`AK3w?4x)me8EXOiJaqOixBh1(m3W! zVh(7 z3rw>P-TyvN(!oCNkwh}@W?>@=W|inoc9cra5}v%4gIzqo>X!N+7 zPCH3G zl?VNvdFWY)ok%{5t=l6hCyfkrNhQ+jluA5$rV<%+Ol4NFTPpJ|IJ#3R^MW=`Py3BT zkEIgx88??tCDAR0@i$g_JdttH&&DvRC>K;3D0VWR$jm0Pvoev%A(?cFBSpq$a``O! zR}USzP{`y{3(nNFMdvXTOFQzYlPB~@)?M&1AyuRn3TZXORNoH=Lvi>_V!;XN?8&MH zXp~JCdZds}H(iJ|1qBHN?P{RElyhjR0F@Y`318t#Zz0)biVC4PKY2NkUG&QPMl9N5 z<%Ba+n4fpD$FuHpIr>HzL*9{bcVRJ=cCu(5$KabOAj>O3(sG=^rIV%U_Cp_<4%$!_wlBq;G^@1uCO5#bV^3kZo^D31qvhdYLGGxu9(y9El zV(wMCf8|5Mx~Os#Rqf3XQa$3~e#4#Z@N7D*>gHVI`#_An>RtDUTfhLN{z7P!1gPsu zj@>*>cRM}fW@e|aj!sVx&*V@Dx)9GZ8V=>jYy!?d>t{e{)lnzmc@|VvI)9kXy*Nd3 zE+xYE=!Uxrkd17Nr~ z^}xZ+r1DLc;W+opVS0hp%GsG`Fgel93Dy?K7nQGi(4P(^m02w0z14|K1j`A3V&o!h z)s!S8C(p_#7ITwwMkcU|Jcl#RDXcz?ywPHMT24qo7GzOQqij+xV~?2;N1l`{;6?m7 zNXb}rZVhtyDYMQC;F=Q`HD^($0||53QKleALfu`+P$t3IS`xIt59<2i@LwJ5|Laem z{=zTp8aeU(f0>dF+p@Z&Ha6Kv^!F3&>$W?rzW%$qyVq@q@3c1b-xt{s-)F@~gfd-G z-GunXXl%XUvSJ57Re%-tZHO0?yaeJGW5`85XeX!vHqsN$E4*I1HpFlK60$&O z-L+oOT(5YszSX)2IVv?xfMYZkzX&Co%#`lVE8TVUTJaR41xAPB)WVe#eJeeoDz9fQ zcB9d&sr3zAUA?+)KNlQ(Y%pLS_EPPm>o%xPWs^KKln}qT4Ld{Cn)PVqKFH|BkiS?D z82Ox3_o9EI@pZbl*Nf^US^*Ts8){pRO&y95y34nakN(vs{`8G6T>Dh_!!JMk@c;YF zSN_i$rC$m~9d-HIhKf?S7H}Qv2d-2BEK`)Luh=tWu~vy`n30zqANAyC!|x!f+%(rg z4@W)acovUtjUPq(1O`Owi=Xxs1|3pmCMh+WQd&tdxuB8@Ode9nL&|ze8?j!=S&CCl zDYndON)hh$nlkZ- zGQ{z?u<~vu+0QuI!zUyN+xZE?RAeLPyfbd*odk3+SPp9Tm&MeoPB;q}{m`IY+-%JkfRahX@w9I0` z+9Wr4>?79)xfq-<>rfk3lvDc|kH%yiEMtOI{gj%kFmo0wyWm_Yq_R$KJh7PYRz%3V zkjTs{IsL|*!BTnf#TTE3Or8+o1dup8kNtZl&o-)kwxN;Y_SzH~?J6hqK3_YP%3}wf zHff>M#Fc_Gxc4JZQxull56wL7B@Y;Nc`T?y5*<|HmW}Qs(nor@EK4kFq6|uJ&p-(O>=C8faWS+>(IoYf;YbOeMmuo+$DSgeJ zxn}1tJ9g6F2@Jpct*U1T>NtlsYuXWP&NuA9P8z@jRV}|c4W6Bw!;ye8Q`qb1;IWaw zyhmV$*s*X_VTfO+W659y7g4nT@wA&OLt?n@9mKksekZF+jwP|CRw=*rC!D!NA)WW} zFQOuEXZ8rTdGJHy$DVr1KMtBc z50B1`3}4AX%jX~o{iM;D!zGQGytXjorUMTWjQ&$N&Ko>7%GRa}3n)K23W@wdetobq z`!FTe9!GVwF;dUxJdEKTi{0*LlDBCW*9V_SWK;AJ+E4q6g6m3ozT03os22Ex+9?`! ztE0zqqYErd?Gy%;Gu6WkcQ@;8v6R|caaE??OWd~M&THuUfttGBzyC$${)>(9)Vo9t zdV8lZ75Yj-|NEZk-B;0pgEduja73v{d5Ou?d?t}EWYru>LpX=yj0Fc18ipUoYhbnX zOvOb*9dFgBT@`zYn_ZY1ZS;ZzfilV}ixu*0T%p*sQX?G4(E$$maPX=Q9t|n6yT&>E zB>a^z8iG2FGy6J5KIx?AeCl9Mp2!79x_TDoC_mvQ)w)8RLQsV-;xqMImb~;|Di&Vn zbNoz!Q$HJ~6>YjbZxVkGHyBPdk@Z(m=7O%lmEzMs89)9Q4q=?^a{2MF9{$)aOFlLb z(!<(n+MS$qZtrB>a3>$;I;Hw#efU7wFdi&jUe5D#9-b`Q=W~7++qsfsUmNqJ?GFQW z`ZtQn1CO8lYfE1K%?d+V>K@Geti?b2Y;Vg_D`Z>7PjTM;{Yz6jNxc?o@5*p$q8`Ha z*EaM!AH-eRk-4M$N1Vghi#?EZ_8m+*hxQ$DjwJWZI5WwSqlc1n2WF2{-IeVR{54(o za_!0v9HOJw%dSRtWlLHyn+w?GTj8oB8!m7;r&Zg4EOq(%4J=>3RxxMYhUM$Bwx+qY zX(Kb}(>0c>%V^*YuVm^RJ9q{jwp@Mr_pl22Hx)g)6yjGf#g>Pe5eQu8Ay!d2( zjSt`B$gcd@9Y{Qi-&$a$l$mmd1?KaM1>Wc9VH9Dw&M;&Nu2y~co(LYY$5V|BhNacE z3$^H-TAkyO2IZ0Z0+AEH$jhL+pjN3?^Sl}wiT8uZ7~Kty2+D4np7$+c!S`F1Gq4th z@_U1Wi$&kd&7*t_Y+iX2soZj(qUm@)gR6u<6BFNT(3OXm)4AS5PJ-`U)ec(BGrC|n zxhCVNXV7<=e0iQCKx8&jo1D%IyPFbdb0v;xT?gy)9=tV>bbbC~x=2+ks#$;}V5d5U zh*pCsb0rU*dzYWZX^4T^V4nG9FyfmDwaS`Ki|S~#zFKvZ%c?Dc?b=*PLgo=~Du} zVF_(2L7pi{fDB1cNV;_G)-?$m#JtCG+2^v(BA#Ti6B!$i87IE&5Lg+U}f< z$4c>ghxnq5jjtKzog4u5h^dFmI`eq?$jJ_C?&Q2%0}b9;#=KaJu(9ssAW%33`t=nqW#q@i~+h}!agVoLFoq5FtV&%m;CxgPW^C#otVSS zXp9LP-`!2)iyD0R{JCXV3hUksT%v|+M?*_0)mK%%r_ zVX`NV!90cZFqJW@U%+MiPXXJm{&gVu-$b6f76Xsq?Tvo$tcc{@AJfbD0LeEJy{KE`iR1K`&MH5|4Boxvjb< zvkvlaHBb&-#h@WAA#+UJGI&;98Gl)r!91Tat7_ECdR#;X`~)qSfeK~_^DxBk$7Ou7 zxJ+G4&hPzhrj*pRsc)?>6ZbyqZtc`4{%*FfiJ(=X?<~r6_yiOjsdH_helU;pErx1) zgK`_HHRNmMH6xa30j4U*L&Ll?l;1t9w_ehGG_KJ*d9rMyTTab4Ot!#sHBqbgR(*6) zMS4OeC%rb)O>I>wt^V-xI#(N!UU+Ki+6JRbYq{ASE38ZOgv=v7vrDvsTDfbrg_qU2 zdbY#QvotMI@Y13 z(Djk7?c}vKn!0P}Ocm-&Gte;a4CQwZ+jjC=4~B}gvurzg<8dWJPfaJ6KJRL0S?=Vu zRW~h?(cR%?HRraI57&=}rItA9ww-*1mYSQRD~bn*wv!K3QA{k|qf~S9dfXT5YCKiD ztj^U7z4l7p*Q{1dH7DPA2UJpO-jzAT=-jrG57&=}rIxsAzg5e zTI(T9hs~5})^hVGW`%W$K5yYe zS7w)J1+{Y5Y6~x`bM+TK_`XLoG}a|rZrd-~s>dn%J>9Vb;7A#@oV-(}pX5W4J5V2k zp1a;1|Ee{hz1VI~sK(;pWKYZ9XlbqQ^7R0F*bJm=l&3DoGD8|@;7)q;ViCf1)&uR2 zd#I?&p#7+sLv?BsVVYBJEf-KL&*WP#t*7?#?q#`h9AO=FISn^@*KN~orkQeD9+qL6 zyUXC4enhq!IHt(3HKm&K1-Y~unk!ph))lJaR@KXL%dKMad^bid>n#h-HO(l@g6#>U z=Gd=4)(m~tNNT4^mFr8BYnXQiefOZ!xIKZam<V46_lp}u!p zp%X~sDypPhZWXhJ_wxk8^-i#lU)nyLsxY6Cr+s>-mGv!^Wd|4`=;z@*$cx!+xA(dD z5Bb$SWK>(;v90Q-vGyAkS4mO}l?H5Lnbu2KP09Oh>S8UYS=Cazz5QIg)@sXl(*oEv zx_ih_!y2dW%+uwVZYGci%dXJ*rd732g{FE5*ADd^#R^q%ZMD?SU2YY#wsOy3t7B^A z)t0<&ZgWjD*s)+Mhl(txFS290y~m>_RM4v7ok8E3Zq-YWN85Q)gB8J4Z$)MWqW(Bs zq0X~8HI?eExw7?DOzv&x>FJodZ97j-7l^42eGzGzUfX$6BPy7mMwlwn`HkM2D_ehL zuTbaNs5-;wmRrTFLFXcG)lX)?pa2@ANlK1`d)NE^cX!PTUcl*3c z&kE&z$M%%tf(QM|8w+@)w^!>ar0F$L)FI32Co5|bhh*yVD|BjL^I8qfm2J?pb+4j^}p*2&z6`2)?`UbE< zRa~KoCJ@W5VpiSWnAYzA>fO9pf^d5Rp(a!aQ;*Iozqcol6+3~nINSbw+Ba3B-D;Z%#wi;ShVzHT8om|D6 zDq*^G%(p5d%jsIed9W@9yqdRF|2{i6lXUjl z88>eia(t;>B7^d?vnf`Gw|~zoHmG&MN#qJyXTizjbHlo6Y*5*%t--fUkwaO@2G@Hm z8UCu>(?t0Xxp5rVCew_a1j;HJXsGu&k`|lsnHIye8rgR8|s=WwVKELG!{ToAh3T z2)og|219v`UrykK(0CE9e=MM>`QS}R&Di&+@`YJvjEOn_Wx2Y{Kxmnh*{qu#ce7c% z$I%ccy!~g@+o^-Lg%gdtnX67VudC&;L#3!^7coxD8Wqm&cq;!~D(7f+;X1#75$i5! znj@iA7Ii*+zL3b|3k&D6Zqmu+@G{Di&*z;?4($)xc26jeBHeJATvhrnoyg^AGEhoB z>jst+Zigo`S5sLxL%*S$Ql--Zafi)OP*>)%t_dGkForL5(sEZEaZ|o`G4E!%4t%& JC5>y~{{tDcbXWiY diff --git a/obj/__snippets__.dll b/obj/__snippets__.dll index f60bde113ca2894ff26baeb35baabc6ddef0c9cb..f3b4b4c74286e0bae2c7be511e941fda6d8d5ee0 100644 GIT binary patch literal 50688 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 B&x8N~ literal 54272 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 Date: Sun, 29 Jan 2023 09:12:04 -0500 Subject: [PATCH 12/13] Final Push --- obj/__entrypoint__.dll | Bin 321536 -> 0 bytes obj/__entrypoint__snippets__.dll | Bin 51200 -> 0 bytes obj/__snippets__.dll | Bin 50688 -> 0 bytes .../iQuHack-challenge-2023-task1.ipynb | 0 .../iQuHack-challenge-2023-task2.ipynb | 469 ++++++++++++++++ .../iQuHack-challenge-2023-task3.ipynb | 508 ++++++++++++++++++ .../iQuHack-challenge-2023-task7.ipynb | 433 +++++++++++++++ 7 files changed, 1410 insertions(+) delete mode 100644 obj/__entrypoint__.dll delete mode 100644 obj/__entrypoint__snippets__.dll delete mode 100644 obj/__snippets__.dll rename .ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb => team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task1.ipynb (100%) create mode 100644 team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task2.ipynb create mode 100644 team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task3.ipynb create mode 100644 team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task7.ipynb diff --git a/obj/__entrypoint__.dll b/obj/__entrypoint__.dll deleted file mode 100644 index d02014979e76bcec770aae77f79ab3dfc2dc52a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321536 zcmeEv31D1R_4j!%$z(EFnoQcHNlQCT7t$sT+1s>D_Z7OOO)1boI!&hSv`MDSOiDvq zNJ|k!7C{tHKtL8j5M&V-KsFJvC<+QH0u@kDL`6{XujTulbMJfe<|Qp{DSoJ=z4yLz z&$;KGd+xdCE^nD7Cw-byh$t1|z4wT|ft3GdN_^m`59pkc-^!u8GoBpv4P)_>qnbB{ zV}UKv$cAXJGtd_7>Wahz>q3EOcUK_X6_~qhWuP-VTNuil%Gb#U1q#EQb{9OaS z%hct-G3v`27<1s<0Fl>0;RU?V0awIB+v0%#^fDv|&e>Lr4B2ZdqM?omG$S%_+qrGO zv0E#oGl^!)#bHFxuwL=UvYC`df#Zn!?oA~_at}S4V5XE75c!BE6i2~i3zBS3Mwq<- zQzw*|DLdo>8Qg!8As5JiC8`X$s5kd{&~=_zAs9|zD9?uSD^uurOFYvo9SV}C8qtQ* zB3wmKLs=<)uPk1Bx?gB2C{+nGg%|rPAGpCg1+VJ{t8DZaQ(urh-keQe2mgM-)+w zne;x5i9oaiwCJJzwn(+-B${)TY7g648F-1EK>)V1u(mU(QCX2(z^q^hDnl-i0S&7R zxnRpehj?P;U|7)Fku^&l4EG zl09}}>bSvWX%VorYXUTqu*3^{0Jwz&VZ?;j-6OI?hJHn>ORlw za7HnBIN#Vl#;|{SmHpEIzG*tBxLL}YpdWbPveFr<8m>`a0t4SsRys3*(U<7AS;*|2 zjfgu@fH@3AxzlXiDs-BSTg6=g&s0`AH^ER}g2y~&IA1dqV1X0B3?x+vW)TA~a8-6G zuF5X83icrYms*u$p}3ex0q<89)nrC35(Rq0D`UyjV)CT3^>D;U_t&9ZSjp^;&zK{6OGO#RGsB_J)ozU*hm z%^-O{J06e*J(bUOtV-0OFCpvk$n0H>hy@qm1O|9~U|zGvkd5dkfY^x5ggefrZJN-p z4Ln5qv2cyW{k35*x8X!E(0bCBs*W)USx-vTQ92;6gQ@Q@Xa;N>bPr!%R=Or3x4wkB zTaej%G9uQ!0H-jJUztYhto97O04s)JV+$PAT7mr>+jV0L9c&bpFVP)Ny8kW4xW|y$8%M-d3DC`e3_csj+-=-yo?)@`C@bBXV5l#_<1}Wt zO*0grhk;9Y!m)8Xv3@ha)W%B&Gak;2Pfsw`m+tZ23yOYbjp8u>veNB|;`;Ki{QZD_ z)8%&#n+CFCHD6Y`BO$B4gbvR@X78DZxKjk^a{@aVfRAEdb(ZC;ifn&ump-7cvf1vR zYN)Q9>)S6?!eNU=+Lg0cvFqR!ivY|@yvj&!{4PM+BK0NOix&BMcO&A)3vjj*_=FQU zhXK*U&6XaDZ9UkG_A5KjOLh(Wr-B}YimTo~RgtD*nf6PS(3UJLZ4p^pwj``AyTT@3 zSPI09n`E(mF0P=r;%J5;o6e&-!ImGml^ro9^sa3{ zRcCrf&e*iiEZAq183oZE$T)P9xAapWI)4&|f9d(SicLopxd72PrmoH$^`81Wv&>t# z$r~Oyqjg=jVwnz>8R;1|!-v4oE1c35zYCN3c?x#GOQm}DdHw)_Viy7HEiFMqVi)5w zKQ%o+jS4oQmJ?%_Afxm%oa-q&I?p3#A^GVz#K=p}OB=fB+D8_Nd8WaWD zAixu!dLcW{Q|<+r1CXB2OU?IU@9M<>Rp$lIP_5Ur zGA{qZx!RZ#dqmznU8Z;xM~^YZ1R6Pk33x3NkPBpFSQ&DG3{WBR@4SwR{lDtaPB%xkMWJHcj^vX37K9S)l8TT#YL2il^y{8Os$XV@KGv57xCO z;gdyxt)vjThR=AV-CsmS*}c~w_GR?45;8MH3t8#Vg0zXxURV#2Yk~D7ozs*Zn+}!O zCp044090erSw9|_e6b~Ae<~$sI#iVoRf(KmJ|sCuS#q-O1`@W}7M4kEMGizd-j;Zz zCGmc^I>qKOb{#4gH;Y4JKHGaok1;qHZ};;>TDXMkfF7iJufu|MHL>>1t=ePn3A zpO%vvyMdKI&K_nm&)x|dcoMO<8-e$Y?Y#*}=Gb2JurI6kX2fvV?cnN(+ycNG`3hq3 z+R~AmJg2H3Q|5;+=$|Z1)jXr*loy(d==5S^vLZ<@=`P0N70HratE;P zGRXsm*Gu>Qf0kbkpFcn&xD7u+8(^5y2VcWwzNZ)6;`8Nsdbvw7k#e78A>~fN{3PAN zisgPumww6Ef4^iDY*IAI{eo4A>K9Ckj(+hYzO@cnj(AO>8c{U_I`FQAA{;c~`F8^^l$Zg*;-S!_xv;Wxc#7(ww zrHng+aqL^(!UgokHtY5+GOoubd<)-efLrDpD`M9er|et4fdszgn@F;HzlAv4E7qHz z3U7v+c^+>@?AyqW+{e-Vi1O3Q8uHR258!fa?{_%E)B7MNSkHOVF?V_MyyZOm;trt4 zlb0To#l%CPfTu%2S=2p%MO_*eb!kcWwK6cFWuQH3T{nZ~pH1-ZuyNei`oRa3eSp?H z44ItwxFU}r!)oL7_if`a-NwkHD7L?be)B*LRqfnB$K9D|C-lnqfu)bW3&zmyV@TNd zaF?;~;XY&E!=1*yhr2C5HAD4Vn(ns@I0{$CrI*dkOLumhS9M$lR?}W|oG;H;&a*vt zT;zLT>PgSbknW2;4k+?{MBInzst@l%)6&t0=}CQ>gsZb-E4jSr)3s$-Lz zdw`xzFI)7!N*HG;fqV8KH1X8~XhQYz4m$p6r3ZFSPk^mBrwiFD6-W1J=agr;9=TxG z^I3F745shgUN+dy0BSBPy$B@Y4Bo~CJB2+=F8(JU`o;iK_p+blwv^cpf!98bz{3yb z#r}$-*k@*X(tCdhvK_-A2(Ev`*GJ*nEWHpE*y;TZN$e@+R1QvAW#pCpGA2ybpf9FL zgR(u!+xo2r$pxG%BvRg1E|4+U%8(0g@=aXD(_kpx_RC4o%?v$b;cl@Zv}3@v9Q>_b zlTBn*eI5mDf9vwaS2}T1?Q#`d?rO%dYX6Q4D19J*`%_lRF}8X|o(+%-?oP(?&wz)+ z#MI0F_BkY3y+22cwcHip>QT!$bsF#sFl?-?d-R>@$9#_`P@uyf4W*OIogla zkhDL|n`pmUAMjXbHMrM6Nedm8>HL3-OfU$&a5)&kc>KSB5;Fd8<#AFR%}rOsWr#Hx zTMUXp=m!{dqS;@wEJ4nPh|AC7E#yw6%e0=lY-pi|T4;Pac`zMO%asLv? zc8q`k825Ym8V88zo3DZbR@$}?7m2pPn<$_5ZI-CU(YB=f|Giwp``rIO zY#N+3)w243qg24%sxNV>`dei7zJ`d8SOs{U0Xg)yaeO3cZ2J zFuX-f#^AhLFgLp~iPLM=#@`b4Cf$?&JJ-jHJ||bZi{4eGxIZySMfxs9o@tZg2~oiRDVF``Z93Yr5BcJwoMol`XbZbAvzMJ$Qd@qCGSZg!G*g#;FfM$(2BLmEVKf17n@|x; zfo=4$2V+|t2K#>jX#wmehNtkiF~4ieNMdwSUf zta0I5efeHKWcQ}$c@}3)kPVn&vWno2X8UGt!Fu@!mWw9LV<*`EpEEH^^MOMILmk|?+V_Bd)UFv}U;^)0|9V7SE3^jXM3X!KK(=1Tp`O5MOtbr|+ zsnHFVrJ2y^1e(3_*x3eqM*L+VY^|-Rtf;B1scPVyG+9%5R}qaqgD8&ldU%o1E922{ z*M=BV3_X?T887lyt)w@4)U(H<7pz(|7r1`{-rbl=qi1(S)-f^uOiDFYUv^zt2F#oO zVbrh@aqa9+S0g|nlw}gZ_0lPP4J5{((4f7v6yZe#I1yTlz?Q@1Iiw+Aek2$O{+`O^ zJiePWbHU`Gq~ONA`MRJmR%d}=`Hp;K|~r|tPUsCT}|)-E-k zBNBGW^#!?1c~Z8S=b=kQ+TKjQt{9wM;Gsw+$9IbSOF`qKQ&84J-Yhe(fbvpUl6l5? z$k~j#JT$$4+gm-1uipV5A1#r(N~LzQfXgn-Wo(YY*oTU*%`TvP@F}1nh<)^cpJ~Pw zG0m6#W*+y@*U{hHgZwX-E;RpPdTi*S{C}9x3Hp_BpB}a>*N^)mqXhb#e_3t;pfZ8} z;Gd9J4CokvQu7s5E6{Tq*C5bOH8fqIONy(8Fqb(3U0ql;WCWmv0^OdaaLWaX3_34+ z9B|D7tteK|2?8z1R#1yTKTJOl?M@d9&83>O9}SrRC?vSSnLip*0jLvg&ZYZOel(;S zP>tf$koppbG?gH+N6obl@%)=nX*J_R9onAEqe3Akaep zp1j$>eNmt_8uulEGIR|$3G}T(#pNpkeRuGly!j}1yFfST+V2r)Qr4clV}bjoKZ3X8UD?=tlf76+L*sN_as375@;H5rvOUB^p;ECELON|f%fLd{p)}mBGB~g zxPLvMB7s)r#r>?$qXb$AN`^)WG($sU1!~gJc!6Fpsh6K;0U8RG>BuJucAQ zL(a^50F-+Kx&hF`fSwWPp?otX2hejeWqb$Y_H4{TFJp4frL`E#J}PoRC4gQvQby&{ z)gGoSqTkw-TWJ{m&Pc%#5zl021A4>8?V{oIrVU*J=ubBEc|dR3&~<>`c5oR^f3O>1^M2NiF)Lb-8IeweS|7bG_#Yy#?QyalOEQ zPk&U>ecq=feb)DfB)Yr2`vl&Yk%zu9$SUvk9Syj~IM=8`T2FVH^+*foYcv(9hYC{` zN&2UP#ge|6xl+=aoYhHiVaiE>xqKVa0@%eyqz28%Iakto#h;QiFP&izeRs%3NS8ys zM4uS?+~5;Zn0k%CdoxbY!VwbI2kSKau7<+`@A57gdMQeqbgG809(ujNrwhE>yCUTt zz<5hV!zZOYAn>O&T$J`W;8gmIhR3BnDe#p7Kjz(+_B7x$x<$h!9tD3x!L&9FMhtxM zC?xb4Elqn(=u0&GR@%FOJya_2=V)p^FGetv2)vVCrF_6XdQHPi1kR*ylrTR_A6fK> zz?MF;=?M)hePq**1>WtwI%N#_Wz)|!d|S$Rfq$*xT`9)^&Y|CF_|qx10{=zBfs`qL z2hsm&xIAU4z^S99eb7f6;9MH4VBP*)vf8^;+M9q?`}1g<&~y8{P~K0M3%rwlL_L7> zX)@Nbs=chw!L-1J`+y%zD-`TKV;I}R5Ng$M&maYNXt*+8!4~~CBbk1>nM}V%!#z@d zZ^q7oV}<{A#gA?&JRkKBp&Jzp`(*is(mghe!2~$Dd=WipmuLDSdc>wz@K0=*?X8G@ zrC@J)7TaSny(X|FPqB+%v5Q|ZCG#tG@f${2*ai?;{D!&s4Ri4u=HfTZ#cw!OCh;5Y z;y2vIZ@7!!a2LO$s5yz>Q7(Q*x%7XOOaDjFHYxuJ@AnG1e@D3bV}y&}2<>N%dl;$tJ*Mq{Bz;TaG5&85yfq$_{Rik#!L$9}0sJUe zd&aohGsY$VSeN``>1E-^{(+_)Aayr?De+qm#ZB(%LW#KoG zx;6Z^hIeT=JB90;NEd0i-J@Wuypk_bUdcC+tnzC#Kdby18cvpfB3-HYL;hbwzKQgV zg0($W(aSdcCh%4Crj}<;-e4RKR@47!I8ZQLVDHhQZ|^Z0w&=GR$@J6BWcoE4PL{8l zhA4iJuT1#QP_UM-j+WZ+GT`gzL|y+jV-w(dTCd^hCf8r@vY&d2DLnY|Ex3BR)aK_w zLnhOgZ1_^(C(|7QTmG}bWq%E>@(r%?4fIS>`6;gQQ|Rw@eOy2GMx~-pwD{b0gl}2iKy23l)t1eGu?m`hte1o8J}q z%K}^dJC_RhSdl(~{(VC5$@V+n)xP;uEA&?R1upp(&2-yNd@rH=Lc+-@%d7bxOG9kv~aWqlGi}T(S zc#4KwvxD%D$JzATjAZ)hW-|R6Q_(M!@|JwZ(W#0b3fLbnqlY#8D-A!R;csf#qF3W}8U04%r<)_eZ<)&86)yW<;o`S~W+s(i=_?+?(=O&e3P-^2fW%AMYxEJUx|EezmLoYIjyF^7w$djwTwSDK3$OH%z$<;Uy6SJGZf|0?irr915Uc>WC1cWn4%;Dhvp zt}ifnGvIaftcG(nY~i;V$@uA}f|J)L>*y6#9`&Cp{F2+>?rML#-TrUna(hE|`>z)J z2-$em{sdmNANVnBZ`Sw@x!ND13_O>U@UI(as15%R{k?(42yB(#=(6vPw9uw!{cWVx zHoODv+vuu4>?$92&5vQ%{1~S8r203x%5QR&-{dO4iOx+bzu8rOv#b1OSNY9!Yf||R zSNRTC`3_h44tgr7e5b2?C%r9r%Rh8d3U6CvzB?EC>!ch7WB&X+;4YG54EXQq<~0JB zYWy1WMu8^_Z1qy zYxoSQKT0zNw(5`4I|`5be+>RnnpkDk$LDohX|ll9`P6ANL&IwSd>YLcc(-?1;j1Wr z8ZFguPvP4FuNIj1*QvM*w~ayy*8A&iv|GbV(+UKi*k6wV+(YLJp7+;ffKR7e1>T9B z_Ef+-=(TD~UbgQu=x;W>2>3I|tP#9-#<1mp&!jAYt@fYk>hCkDQqe>I-2O9Zs-{=x z2YobK!>av#v`ApDegw8#P?7;ky;A^?eo<)UrPKJaf0uC-lwdnY$?j0licWZcwz@MbabV(&q(qo4}SmT|oC}SlQDB^nixd`R;}En1=CJh6O$5t=I5S1#5kNnoig7(zH23pRCV|X}926 zpDn;&LSGh`^|=-BWwcRlU+<(P0$)z$awnekc@gkeP}UT#edzHSfq+AUveO*aK0`KxpOTQERucA>JK0EzsfhTDC$tmvu zzM85vJTE1!km0EUvpx#|e~}hxxWuF2)f&$9)CfML;d%|n6|D97Mf#bBm!_R0^vU|X zhF%gp>yy8ubuFb%Q~G(8E&zNZJ*eR&0^dYmZdCY9bR+OzrrpyOe4fBJ)A=(Pw)A-m zT_&)l&#%zc8dm!J3f&;^F7IbjzYl(2q1!b4v(#4v{<^@d4}M_dR(e#yx_!6O%Nkyq zHdye#*YI0uV*uYqZwoB`4)9lL@JuD|C~5@!H9A>fOWr$aqrjHDcTq&cO5VF@tH8Ux z&lN90`Mc;04SR>R3Ve=+m3`bz7in18$K7bx8oz47sJQV`}9eP{C=L!5Eoj-^1mOdY%%LKOc`7m9rVWrQ9=>~y! zdBbV-;P)`yrr{gYmI(ZHfmt6Rz>mecWs z3l(hPw;9R!>865{*Za@VxvD(YUq!<22D?74|7Uc!4UY%@XRh`7vo86cb=_Zl)^&gJ zIr@(9v*w5A=rMtJd(X+Q2LI>ihZ?>+zfs_41!nu;`-4BHR~4-7&Uy$JRFikbzs`u7F8!N#8m{0px3zeslo{^Fr8 z3~mGdMY_+X_n_Vv>2ZP2qHoa#!T-y~^ZkRDT>SRB%I_ub0+#XPqOI%=UM z-vgk3m8J>I^6dru8(Ju^CEsu9E*t+2@V})8lkl&(_`gQ43!dALhc@Un@-E`~nEyz? zuhU?GE&jiAmH!dJA7%JY49X(fBEYPegrhP~mZ0-(KVL!Fa3~ zFh8@v&qEk=`5d=|Lzgqg|J4+pyo0C%UIhdUOHTKVO^4XsZ?%r|QUVp3T&S$Im6V~<#+v96z zDW~Q4=kOV^tNu2BIQDOfBq{VJtTdJW4B67i7@UyJ$x~e)s+@~3%2TD5GH~A` z-)h#FlGD=L!Anw;W0gJhHuje!!EGQ(`qLL;-JC+h5fAK7oHmxAakkFQ)2i2*uk`86 z>3?0AlHjkf&K$*IMvh4h@PdtyxdEXOz1IkBPf<1? zG~(IzMm#Iki07di@yt^ro@;8vQqeeXY(}<_o8u1)kBerUdcvhzo z&*wB^nrp;!hK+cqq!G`XG~$_%MhYNc2Sz0bqY=g+j71oSa5O?G!gz!U2xSQ62on)1 z5RO5pM5scjMyNrkMW{olhrIPjCm~G6^<<H`oraVtIG&Dl zI?@>kGZAJX%tn}lFc-MFNarIgKv;xu9KvFRB?wCqmLoJFtVCFi^M%#)5W*)AzKL)@ zbo$(2o^$h%^4wX3)Q5CDQVe;tN2LuqU4#@zDmbIOQJ&>HmBz|59y^iGu zUJ1G(lB)Wy*Yez|%inD*9yS^HQ)%(A8C;GkGUo~XE_vqU=b&36aA{^U(rfADV!oF* zT+4YM@GR$_QT|rsbINO#M>XGf0rS~Dr_UkXYn+h%0@5)k|3{>Ij4luB=NUuE|BRvJ zf5vDvGqL6<*L1ZyeO}YQqSI+wjyJR%Z|im~*7VIfeS=gz|J3#TQ`gg?@u{Z5XPHWl zEK|vmWhyzc%w6VLkf&YK57zXF(Ba_i6ln8vm%qKdSMMYWyCJ-=pDY ztW@Veugg8J%RR5_e_qqQqUqkybZ=<7H#FTFy1!omJ&(t?O=ai*)b{ndabxjTFYMh| zScum=>7S+=M+{#CI5kDl8|Jw5s{m&K{x(t`Pmf7@@8CU>KY19xgY>qRYjBFTQ(frmi^E+SjzZCS+ z4lU1>T8`^=8rO7jT`sQWh-*1+)#dNj_1%}E{M(}`%HQtM<@f0F&uF^mwcO9AD7jzJ z^1Y$y-q7V<(fXRJ>v`MKua@_pTFz;(3-)8Fsj5Axsj6R6Q?>swjCQU0&(GEHTn#sCxLL#P8gAEcT*Gk<->UofR^7k5(O#CXJ>}(GEU2hM zr+ajNpRe`7bUbc%r>b!}%KWS6DA1>BzT?pz<}(T_kK^#|f>E@F?m=3CmD?#J2x&fT zkaQS*LekN6k)&l59nJU}nmAUa3n!_x1gGYlf5v>3KDmU`(RA4wPRnS*St`HgY?Xi9 z`6@qpol2j(UZtPANu?*m&^S z;?oLVeKV&uv=}b|aq7K8r9Zn{rNh6i($+^+TK=R;&)TcfAH1&8U;IU-sirA>N^(`Y zW`s(IR;iR`skEs{rH`#u=_Q>iEjdl4*X>m4uP#yPXRcOh>s=~c^F5W;{X(Vm8$TO7DG5 zr5C)T(%KZZ?;6@SNTq)nuF~z}Q?YJW<6xE^2XnC6e*oiw(-Bpv6x8^j#KYPmE#%hYmdIH=*B8s4el zYczbVovLyVYWN{LRrxPzc(0wRd`eMr26Q@8rU46g zf*(dY8u-O^D*c&G*VZfecSz>|AD^VseL6iC8x+p>H>6S<(kqdkg>>8$mENJ#DN_~v zDAF$hzjRtEJ%aQ(q-WvQ@w!IjdzHK?87iHl)0ZvSr}EFz>6di+vQA$*TH&cwr4Q=# zrSUp{f=UBAovG8cI_=ZxHD$WIPG8a~m8<+donE8U2X*?APHCd9N2fC@6uefaeLB5H zr-5S>ex^>>>aeNd+_>GYavO;@Aq(dk;9_UZH*oj$13 zmuhuAb-KJxXX^ApoxY^gYw9)KBwdeA*G^S%pH62^Q}9cTn`t@x&owi@BJ=ZuI;B|( z4(N2IPS@(RPp1a`9kcuKbSu_yuOoa8YolW91E*t6um+(PYwD8_>aceE8p4-x);BK; zvI6WDG)02^S!Z(1ElTq-MC3F%vuLb9I;M@kz?cf~3SzzksyA#5vFNkoZ?P*LeYbvnXpFPC;?vpwsJyt{3=}l&z9ZNIO$f z)3aOBaXNLE`&!Bsg1D~|CZg_^XUClN#C3Vv$@X7TIE6f%8<#`2?wq+Mfy4_IuvrU!XYN~vT?^6Xzk9&1` zzfKeF8JQ$UyFaY(YeRrj>4J3$Mh_dbn&oY5??pH<)^x|zdA#wre}kc8>iDjo*sdx=+w=}s@L*& z|4R9+(3_q+G#`}?@;s^esMO8JD*ws!w}oy|$`JmD6Pcc|l8)2qAkS=pr|8tp=NGAA zU2eCeZhY3T%O&5c@5IzwH2njTj`OH=kmp%}r|8tp=a#g8=yG}3SNER}EdHivl;HPg zADzXs1^;59O1B#-oo%YrUCu4XH}a2_@}@`47jF6w3ePB7CHyZdIteM?OHYx2FUMll zkdF038e)7H3F`#|R~fkWV$ERSDihZ}tQ$;R;rsnqDd1yqSS#cs9)f=c)(b;$U5I}M z)(nNXF2X+p>xLp+55qqb>w}{Z<97xTkHxCN#42Gl;-dkXSScKhcs%~`Z(Eiju0m>J zWpE7QdO#*t1T~1KVufI0B`^u`Osoz}tN^AWo`;oziP?V!;zh_au~wOb_&8upygjr4 z@$tZzSgRa|_!O)P@XZCRVoa=9nhMH0ILv(u|6>Iq}+*!H`5x#5jq+17QBan zFEL;zYT^m;HpDTkb4-e(v`O74XW~im&4^FK6Y(bXqMS+FQNqN!hrbzi2B=ItO??{T zKHLE^@kCxP;)-G%rEc=FN2({A@7eiHY`O!^`CnOJ?@kN7F9&P=Sp z9zy(6a5Ay-`Yz&Mp|pu-guajXRq!zJyv&n`|A2BPy-7bt{6{=fhP&PpHQh#QQNh^H8%5H}j5 z5l=V9BA#I!Z5T8YG3?nGk9ZM&-~~2pOhmlII0o@jqYCjdqXv}A5u4Ox)ZuysVv|-H zlW^UP*u)pM8W10EOhvrfXheL1F$3{BV;15zV-DhWV;<;3i19lg27irb17g^}u?W{; z#IS$kIK-QcC5StWWr#bCCd8*1D-mxqRw3>&R)hX@#ISbbL|ku23~M*m;Q9>2uy*5Q z#C=99;+;ki@h+nc@%csw@dd^P#1|T2&|ieuq)!{05npC>BEH;+Ailyl71+-sHt7pS z4A)m8hW#7exV{>(NnbQhLwt?VgZNsb7x8t*4#c+_XCl7M*opY7##x}h9kEGw7-u8C z*Ek39H;hjr{-*IMV84YJW5l=s@x#VNh#xa9M*M{F8N@#{K8yHA#$||~GOj@UW8({m ze_~vP_-Do!5&zt{7V$5PFCqS=aRYchj~JuCxC!wq#?6R-V|)ei?~U6K|IxS|@t=*a zA^wYT7vgt}dl0{C+>7}CjBg@-&-gZCuX#UWpZOicsp5w{@WUzarT91|yl6ghSHSD0 z!OIoFo3|rQ$L^~L-h3P44D7s$;LXoRoQY@f^AKN(Qdx98aTg+V;-TuuduC(<~?6;y%v7^+8HNz)Nm(R{?!v=ng-9gnz{+7Z`L9C1CJ zZssB0Zt@=ZQshjg&m(6tU5T6qdKA|U^cb$E(3`lPLVv>bR2rI+hqyQ;AG1*fuBTBY zt{dqDTsP85xSmd3xSmd1a6N-|rxanvIv+9K)kZvD8xCbBN6AOjza9m zhiz8l9@1FE1*u0P9-2BHy+CLcp&Y*}Nto;SK0ZH_K=NJZOOSpZ;YNge5PpU54+Ikr zLJUGEL>P-ugD@9i6+#;Vj_EPpNxsu{InrAZ9zl2p;Y9>|<(2S7al)}W1rX{HmLr4_ z&O*2n;dTW6#@0^}euwZbLK@Cb#v(KzEI~L0;U0t>oT=alnMx2QAgo9DHo`jyCeB*$ zt5P%?VLU=T!U+hQ5qc1AMR*z^7dK(b5#}PCfDlILM%aaLDZ;e~-$nQd!s`g{BH*VF za2|>879cD@I1!;8VH?6Z2wy;W2;mt7d?J~$ao#f$VHd*Z5bj3!Ey5oW-a{zDInXSG zV-dC@T!rurguf#!!`aX(gpCM05H3e}6(JSpMZ*y45%wTFkMMs8={P^iM;L}shA;`? zEQIS2?n8JBVGPcf79pI4@Ogy22qSUMbPPfV!Z`>}Ap9Ny&Vbe-bR*n|@D~LB0r$T{ z!9yvv4-~Gym!VZC$^I(?^*MHiY{dmvi~P-~S^XvFe;Lo3@}FG{*Nve6E1rT=f64TZ zXg>2XgD-$zTZpg-H<1m^R!`_!*^e)AyU52n6BbJ}~S%I(;qqG@e6~gf}4`bvw zc!vvNUv+e~#5W;sz-Z*02y6?!L*gF94RitG5WOPtAhbP1ioQ{Vs8!+}5`R+SZ%O=1iPK;~Av#9lV*1%rsXglHtI$y4T2z*QAr^}|c<^tRU4x#8HBj$qH6j$kb2q@C5iDH86ACse>+Bh>PZ6Y_p?$JQ8K7X;w5E?BT0bUEz2z%9pIwMe$H)6@?|9 zU0qi0`WiE|>+(8NWv zwruI>nH!7;Cvx>o-Rr{f*!1?+)@s%8YFacW*wG>Ftfu3G9o-?-)@oX|1?pfhuzkTtZZD_&pgWLs;K)Cx(h=x-9Wwyun$vNloMBB-pnXG>^h`1DX? zb?sy}O*A&r-rW(JPSci0!&`&#(4tQCNoS~w%SF28hT_3+2Y!L8Y2KVUQpr4$wlAkS zD_2U!N?N&e(emZzZ4x zSZag~Fy;iE$tlApYM4`oPtq`_46g`vgkVZKHvutjR!2vq4NcTY2iV%$6k8EmUx|?z zYKwGkiNwO(dR87&OJVNu<-zWb@cd|`b9OkcK9_9q+Ao&Nwub71wY8O1we9We8*0}z zRIjU?TwOD%y`i!pSl`yxUe}r!tIN9Fybr&$)E(pjP&K)srn0WBwxOXi*xojIQmCqW zQeAahO>K3JQvLx2_+Ttp3N@~^vTPus_9b(cG%ta1fTFdvQ(_)ni@M}8tP(b0z|yMv z`u3W(+I8)d)(6+uR@JNvhSoRKwFld4f;H>wC)d>XZxsd&3bW<49&TZDBwTLK7WT=u zjLW)hp|tN;5<2=+c~+gBW{gPqkbTwKKf3Ck8iI zp+|ECyQ{_Fbr|by7HSU98EtIev5Ezuu23}GMz+hV&@Qh6>cZ#1V*}!5MZ@upogp|D zkz-DGGz!Hm33dfHgxZ@oMnl2&MeV4vqqQ}RJ_`ps?9BOLp0HFgd;Sv876DeF+-_^D z_^lWw)%Nvmp_<9{b?tTS)wK;(HIu7Cp4hj44hW~On9#TnQ&kIGi~qHAC>T3 z1K{@Oi~5ruwrd%H)dzAC{rOo=qCe(vhi`vQN5WG2bJf#ftDfOjgkq8IXj^DrEFSKZ zNp*EJ2xE=*FFBArbHl+6T@jRR!#H41aB#)u1iK>enyoc$)eY-Hb?a)^*G;OeT3?3& z(_YmcY^biUYM4}0-RAI8%epY;50ZPNYilS9zlRdDVzVQW4jHNa3a`W{=?Ka4Xii6X z{rX6>omO^)+d^2v#Nxp&T(CD^f+mLJ-R&Xj48>w_BGj}Z*oDMiMbWHvv3L}%x0Y4T zl_f3W^>ZY~%dMm}CSmy!igv;WvHoN>Uj`m@kQ&6?uU(?fShlVsyfqx@j%k>u z$8cA7A|s;stmsC5XGlE3!eCcBSnDiaY3ZB=Az63vxvC+0M z#7nUOd~ss=DgL~|R!hawVCSI~;F_h-ye?K(a|oL0+Hib0c*vaQcXxCgav`qXE-12u zP7@|8d%D`8A2y7Ra92n#ZlOb3ww_ffcCtJg+7gTo)L^Z2QO^JheC?!p`bJ6zYjVM8c7I~qAn%v5ZVus2#4imK~r z)3Hd#m;m)0tU$vZp{PvGJO#~)V=i9TZ8PGYbLTmjCs5cIVY3lYRV)d%ZG>tQSWBvf z;r8}WS0aC<_^ZXdR>mSBk#CJXtdTo{Y7>({awiRlSh*$Ch7~~gbiJV%psZ@J;GyK; zHo1x=cVUji@c3~r!i3|CCv&yRF>VF^7jO`;tGFi?KUD!MJyE<-vwS05?Z zJ+^EMCJsF)xEb?#cH_E}Y%(!1iB4px>B#Hf=y}m-Bno$j#j9{r9nG_Cv|HsYjl@@W zZ`l%w!m-TT))s;ssCC}9P@7Cc^ReGgWJ54(szj>15R)h7LsvG>Y1@+W`pYP56KN0Z zE(UHG-*Ax_g`s6zNQNU{SX06h5CNPsXX&!$2vUr2)UiAQAEZ4f>kliD5In4~J=hhP zY!?oicyVL{dzclW4bTK?YE%0c8^(DQ#-|Ok2bvq|ieUM{E?C*L9ELGu9gOj{-m(p_ zFRQS~;P4a2Qnn2xj8d%&WT7=3o4U9@cH0kk2Ui!dy&ACxHC6ED6R{-r=@p;vIk;Q% z?^13cma0~p+^}OcJHR+{Vzp8%#%hYdWEqNX#riR(r&M@D9AE)tZ7*%=M&$tdo19w4 z#b`xDook6F0cfxLbjGylwXLo3jp2cKz#iipLowjAY-&>r5h{3Z7{eHfhp=PDzS^R2 zbg4+Vcs;94C|KYX2~f9lVWqPhja z=sGOComtJ$RfjWU5$4QoI^$GTr?et;YIis)XND}q0Pb%^GKJd}s$D+&6u4-b55JFu zIoti{I1+H!h}sYBchBFSa@o2~aEszmouTrck~eEzq&u!*HPQ#@ zWP7|~XjEY12Ywx)^>K=ZH*AcPs1CKS$Fv+LoM3MaM#EU&Ii~^?V&wi>f4JMa{VM6O z86Ms)9Nv9vI2!5V17@Yx=mxk900-d&q11zSg8EQuAikFS<4!sNnLZnH_UXY_&mDLG z-cAvmq|>HXx3;#a^EBuRhmFhmuu-W>-3&@tBUTyF_yEHm1BrL%#G5+`cVRtDOR$Ps z8rl}8<&o21^EmY5IY|bzHK9_Ij6l3AA0!j@cJIrDn7X) zI5Y8W_D!C|0M&PWXi;Jw!m0^pqf%Uron>2sZP*{cw~Jef%?WM^sx1TV(PcK{>9!c2 zVZ#fB!&c&M=_1@IU5GDa1tpE(8I;w) z1@Q#k7T}|}sl9*Rhs7^rKDf7`Hk!8tHMgOTh{&`ac@?Az_$aM4BHHWq8e!(;x^FLBCWyGnF)?c`bPT9ryjQdk`(JM0=vR>VgeW-_3_A`2ROiPfl)D0FA)b9Svb4<_-_wY9pG=Ca2&y zU{-kmiej}}DhWXKJUkU0cLyDlP~URky3sXZ3<*|Y=Rk^UJyg9NBL7G$+E5QkYVofU zU5*F0@NYegp%zBjfKFeB{K?Y!lYn6(X#jma+S&%V4knSTu>%{z7Z0^T|7HO@ThX+7 zG^_^AV->Vx46H|k*8{3T?mAqDL_u}H@p!30T!Wl?sHq0=!Hf~*si^O&Ls!SYQM|TR zG^h=I-+*R^(AVprg!M=#i8A8(Wl(k9IDZ9Jc}c_RltVOX#7%;z^n#V%_QJ?Se%5Rt!CqPc)+s`rkRNe zkf+KcF2t&NSZ*|9F>xX$lVzAL8FDT<4r^gR^sl|YdGYq!PdWDX=>^~GTz$`3lo~J$ zZ%TlSG+gB6F__~Gq#8MSqrBeSA^!2kki3cJ5Py~7uk+V|Fh>aI0o9p=@&;&#|5Q+U zhxofqf6yPy9^&u&Bxw3BNXf~`@d%WYE{VT^kr$iH+syF?eHJ&;7cHj&TYpfgXfM4xE-67L`3f(n6ANm5a`ulER4c@Gkbeq2p5~|+I>jUILr~CW9 zhR!w7OJVe3Y5-3+10D`o`jk62Y~)i~fc$;;7in(j57wpWZ{mavWT;}?AK@s1I>n&0 zRV9kJ5PrL1x)OgA^p~(Yt~McvFCoNWTL?!cYe1{X-{fzC<`pN9jI>cwk!lOaVxImw zbcUl=g|<3KjSc9t%E*S|*)sT&2Z{egwBTg1aa9Hi3Z?~2WB5?$*MFjySnGLxKlWA{ z#t7*3YlD0!y+letEPs=i;Z@upKEvPOO$QV*{J|{CoLS@PV3?0LG%_nw1UMo0*T9)v1~qgVIVhvLlHHYubzP;D=MdYSP%bAPYosF}_J|J0%H0XdNMM_Mr#HJGy_6<{YAiqDZ zQ1bfc=OojzBAS#En=-UM{0)xr1}_UH@U~2Of}%V@I!U=(-8~8rGiE0|h|sm%A4jPq zQJ}$DpusB8kgav9oV4~F=xPOLik8&1P(mUR%V+x-4TI9gS*8THo-iT+%82+vH5gZx zBD1r_7P7Om6iPXMcq7XJ^E@C`DU6JHv2r01gJ(7JMc-AqcB8BbKrxbb=`8ez6XcP` zw&t8O;5WH?S8iUv9Oyz>y`EZfSP(VpcpPLZkHoT>xfl$6&nXp3Msa$Ee`hKDfj9%6 zmDueFDvdBie28;$hC`1Dh91IFVK~n^egDF=l54;|;Ymhd_CW@QG6pEmQOGlW7|U|S zvyutc>1vXK|52s#$p;i{tnUWQ>lo90H`wiwdCwojtmJgiEWO5HeClgy*h@AD_nYn! zBGZIZf@@o1vSWu-?5SlLvn~8NFPbK+ge#$WJ&Q}Jag4WW}*raJ+NsQS| z@&)U!%T)earU6x-O9-@&yS~44{vZ|w0}EbbsdYdJ29|e(Q{DX)Rp3Nh{o=1nXx}CF zz}oLe6iAE}kyYu4W3CT2BeT8gaTNB~iOOFaSRbR)eXa^*JZVl~22&hlwL|yuh#{h0 z)gsH>64k>apK6JM>#%h#-kHU-ii>a<><-Z}SvUl5OvfPBrtUN{c(wk0>!?YI?d}~{ zJ26DrNUVP0D=ko-a|~cH=x=fwJWJ$Qm|BY`Ec`StF2P3rhBKqdpPu61IV~y6HP-xf z16f(ZU|kjGVR6UWVjp(0IRfiycA|EB{B>B?vk!u%9II7-FyL&Rt}}@sFJWKWt;(7z zp)65JuA6fqxA{-*Tz_zIy2rs@H3BB(SNwDhP`Qi$1ZzCH3-_;~IMHf1685C$8Scgc zhu?Cr&0)#kW+uq=H|20oEwn+GzWQqny8`V}96T{b5)(lGF_M><;J6|f>_`^k?^a9t zmyiis8LOG|5^2vaC+D^DDC+PHq? zV2uD`wE@e(_Axhy|K%i_z`DgsPYI7LS3+J>PNMXt4=v*bplRg#a(M&FOx5;^7d4#8 z|HfLiv23yw<#xLFS+b4E{M-Fn%#jZU& zi`#|F-0WO9Rowu+_hCz88F)?2T2z4DY1rmSr)8rou2}06&FpOH2jpez9JR4Qjkw5U zMo2lR6?_%%Yw{A(>0OKn_^8B>OT1^067*3B`#8cLu{Q2z=guadyBir65fe&Bs`10- zG>Gf+C*Zt56sJxH0JT>DSNDW6*2N?&8c52n~)h@>|-IO?^^utXiq zfM+Lr9Ro(nyoFX*gTZm4z>E#r)P)x0;!@1~_4MX)pTnfN1LKBUVnK_lVfIO$KRC`p zT3$oOR6nwzO8ovD@a+X_w7Uv%5wxj)krH?F`jZ4$D%E+yl_RJVF)InP)+k5!4oo2q z)-hu!2kXdis>P+v{i&rNSwbx?ltV2pOhPR##6W6skvI)NTAi5ok_^Cw6EB{aEM&=u z@sXG-kfWxGCVW;yy0b}56+kdy6Kh>F6|+}eV@J*tH3cvG>U66bVt{)l9LQQ-(n-`S7_CDiNP=;;k5Md(7mU~mD^R# z)QeGW8Wy92*iXxqioMb{UZpaDT8+v)ps&TLYE$6#g*6+PIaoy+>`=vtVFqVLAcXz; z>qKJ%_yIfLW#!iN#Dc*9F)jx3B9=+A98i*?ar9GSYHdPCyL-!7+OLI``Z(f-$&?63 zGh9soOb^H^rdL?9M&ny4DW#M%sMPjZVgO!-EUQcKBHX= zEuSiaNg^n`PDMpI2{t^-pU=uS3 zCC=(fdGZ$QqY^(Z@gCu<1};~c#}#Qy7uKeb-QdWVe)k85B`B3%m2j{Lf3TQw`j#j7uY3_A3K;C>rlL8KA?r@$t8NuR*(i*;{g4xU0Qn zN^i*=yuwj3rNn-KuVhDg3Eua`+kxRwJHHCXM4ZO(93N9AzA8{sE(qkQcX9XoW+n5q z-w%qFOj*-g!mlSSata_X2Z5u!x~FKIwc3v!+Yj6GJ7ft763=ELPhM7ZG;RRi@`VZ} zS&Ub(N~Tnmm*Cm(?#`}~Db)~`vDE`&YwC9FIGO*K>n42YbwPFdnOqjgmRt85KY^*5 zmk@i+$*Ki44izvR>zuoSdDIHC*pluzzr0p5Wqq(C7Ah}U7>x0IW_Zk8KD1%InAO&! zDRk*N2j@dlF4T8G?M@QymX|DBza9^3I~rVL7ptxW3%q{7PbtGrdf9Zl@X&uEi`ze^ z1K*5D&IIf75_!5cj7R#pc2KjyoSE@yCim4pO2wHP8 zo9W8%2E6dnjllw9HUYd>hT)7iX3%n0mCcdOBf-#VF)Kn~&?WXWFu|fOyi43EZ(Ior zyrqc;f${c-yeRG9I_~iLAQ;7GxnhCN?pQpq zPWl|(AM6Np$mhH&0(j>%6o_vO#<|}+gIzs=HY@{U<;V*K)`z1gwuRsA4FvfuE6K&H z@X>fcUWgCi?ce}Djn`fMV{TCRA;*R8nJ$XgyBj8XDNpQGE9#7&r zc~r#2rzX5-VwALC3Q-`-uNsU;iI7 z`kI6MM*M%<@N2>6EUj6}IRSk<{tjs$|KW~5Y(PHH)_X3t-ociZs+N`*{&%nIl+R@1 zTAx(ln|e{ay&Xah<`{f8B-#$TXj@CmzreBTXH<2hKIE*tb=OIqgGTpI!=LT1?r0U$J zI&oq+K%YCXRSi4%P|MjtM@WU1JO7W>ArAGdQ`Z4>=)mI4Pw7xhHhB>|Wlc$7bRe`?CyMjhRkNalb)73u>%eK$L|UG zRPUVU3_9m0NB(Fi=?gUf+Xq8@V%`y&DBqF^M73f*J{z*OLj&CDVAo*X7(3|QdSYb$ zo6m-t6Q?`YJ%B(Mr!(*8zi==V+J^7%#$uuNK#-4fw#dm&oVUaS8%;$^bWLDE#lnif z;>c;`fkj9w0&_Ovw$g_3z{YrdOKi$9#{{F>!dojM(GAB0*Ts&hnp8QdqOz{0q3Yz1 zz|#FgI&=I_TL)J+*z4INxel%wU>$t$OTQz&W}StP^Y(P&YqH7fR=pHFSiyLa_kk8D z0}rJGpUwB5?f;#loEIV=Xq?N;eiCN(=0l&^?XR9g3ca;(evI;eVlKBnZ>Uc5afgS$ zzQ-QD8(+TL&;@^uV|e}$BU=$}@8DCN6Y;H8e5*5nui=KG6#K-uGAv4=V9S6b~mI$?3T2kf&q$cA^|R$?1dI94DR) z`9LQ~A7nPRmiX<3E0f?HaB2kWq8$?2qTvLww@$1KjpG_&N1M+2U4B{&-G3s7=X$ zzVo0a)PwS#?>nO&^cdyo^n%9?y5Qj>GM&n83g^1}e_~oy4Ynpr_a;@&nw#b~2i67g zUHAXqt;UDBrJNhWPbr1vS0pfs{>>-Mi`ECmw6tsv#e28y7{h1Fa(0k(>>#HKxY5Ap z2#nR|6D`p(+fYL7INRh`W8|4`JTxfAP~H*+br-Xb$WL}gqFp$A?}fE2p0^{=uTp0< z4$dHN!I$+vwyxxtdOrI1E?g_Ce%@29uvGT{+%oIK^d~Drp;;ZV$iLs0^tVa*afAvC z;g7&0Z2ezR`lvsW{!#46#q<7ayYfHbII*VwLpe^Y|KHvE9OC*`?@p4}Y=OgHMe)AL zvDz7E9mOO^XeGt0thLnp?z0Ya#@2k{yaIX}3QP<-oZTX9ktKjz+E^AYgFA8!$@S0<9)C&UuD-@EGjTTSWS zto^t*592xGkI;r+kIhwGr_1R4xH}J{JLhfVFEsEskN(Xw@!GX(PmSS=E?Zin9e7cn ze?c|S7+6zP9;hh~OsYD0s>+uiRb_L6JRQe?Q_i`RSztcrUtt|THE_%^ zfi&tP5wm zL)EORX==N=F07vE=}I;UW`ZQ9G80(GI_9#`GqW=qjdnN2s|d;a;9ZCGV!f>W zu-21o*|KC?wyX%R{2(hf9DcH1EIs)W^7sGef=eQi$V`BVBvD;mNhW}UgM)LFC_9^$@RV!y-z`bc|F=+^AO$W~{9J~R#OvO_NIE^odl_)fn^>nK3 zx}YV3HZGm>LrICo8b4uOjy-@nZLdrtxOqEuu5N+E0Pmbtf=NlXM?|eN&N}@L)6ds~ z%w108^iFSJL~q3^2+gQI(#5eXC>4|6>kLS>apMtmQPannVFnmuMw%t6i8d5Nn-hc` zB6ca#-IpjYKZ8OnE`S~~c)<|iE^n>eRCGh(j9m(NrzZ7qa&M%ADN}PJyf(70+N@9P z;h2Ut4OKp-Hno)9*p|-{L~#rqSD}WIBP;5Nc$e|miaI)BbcHTQAMimxfkSNs#*Q}! zF9@(F1MMPbZBfffcs+TR4hRw??>nea@}0#2NZ!2i_796`V@Re&2p-H**UMf7Ad9XS z-<>&W{f{GQ{pZHcvg7oCV03qPKYsMg=@kO6jP_c;(3ydyNLUcx3m5v(VuMG(I0eH; z38GI0ft#=tW<)H@)2-1!-I-&c$b83z$#l2ZYo9;tw|#pT&@$u*waJmp zLzqx8^Cc+n6fs}O5MxeLX#M81jo!aWF8=fv z78ic{rw0_IU~$9R88c}iCNp{edR&OetTGa&EVQOPjpJZexZKv9IjNNktx8D%`kqRj zow5%_xJ@gB&CF90P)rN&MDrv+Hv4VcP@Dv-h6%ZjIs`I*2KDW{9)KwX78Bh7B|z>i6w50OruX zorWu9>I%=3PgjkXH-MMLVLA(iDq<&px}uJkVAr0%1P0~REMz+50DJAxW>JDSJB|)P zb3MArQLQ#|eDY4$D#6wjwl^zeYf-yx*%y~TkL9gsbqVTFEUMRMHgXq_c$WbEE|iGy zLSyQE@HR935!8rk;Z+5$P~b}XAwTi$Haw8LQxC6eRiBXYV?=H08VYxZDoInqLkK)^ z3Aha*Sd}X;bZ;IHa%d>Ca`wm!P(uo1F1f^fUEm5rPE}FboBWeem*`l?47ocd43To{ zmS~7JH&cgbQ`Xd?hbahpq2`UoRw(oY-7^t85%{;q06X9!kc}icy2o>a>u#oBrlJzc zeNGQEbYV;W04+78;kVIpt&edp${000~fH#sLtUydJA#%&j;MZ1;o*>!t7mL z0sseQJIRdnlz?o$@`K!B^V10S>_Pe(Z2=H1$-+no_Ne;>$%BN}_*Vi7LM^&3Ao}6Ze*Rz^7 zu)N=7x>zpFJ&3&FrL-=#R;K^@&fmuD{aXpMS4l{#RZU>T9z46bB+&5}SkKpbr_6f- z2QzKbIs89j4*$K>Ib7|<5HcQ;B&w;r6WVNxo66Je%KypFEH3=^|2r_Fa|AdXnj2d; zH*2@=Y;J5fx9;58Fk8*rx2#(I)^@$QxmDjhWFZl(%}3o2Y+r?8;o|Tym5%$q1$E|m z9+9mI7BK@@L`BpHOo34Qa|aX@7K;fSVrn_+Tjl-`1%XwIjD^n(drTW90Uk`$oV4LZ zIS(Qfh9l}Z2;T|_98YZz`HHKYE+f#fbc#tH9iIvjvNC^SL%|0FscD=N2P7B`P<66n zdM`>4@R-AiG1GF>J=3QIRq-b2r5@pBdPjJjAejxADL~xWHIAABGp$PU9iiq23WA8B zSkv?nac;G29}ZJ+cFJ>w3lNhJ5Deho9T!t)g=s)-RITn>sAy_QBG6#I$r2?SC{cnd zRK=3o#qtf5tp@dm>?7iD#G(P>j3M1)T2a?U6FAj1ZIs7G0}b~9zOe*b+p1`cXwf!S zYpWahuXcdPw@k2-azBq8*KD>e4)>WNqHfq!Vzq^(0V-bnJTNdA7cP~9hm#9OKawbf zQo9hJ8?jG3W3`ATsoAbv%Vh5rz6D3LsCa_jKDjJYH zY@n#uPiIq=ea(rDdk$CKpq>`RnIvm%)w(MY+@wfLqU`HVSQAQ1oWu1OGlwL~t7m#p zAn6ya5`w=Cda+H6lGW;~Rv)qa5Mo2%>62B_0EI;XZ3^s$6FhT(FvpCvIa_{rVKACq zzu(c$2w{cEr^0$86Ras>i6C!OOR-vhC0c$5qjJ8BV8x1}F?Mx&cPKzGG}C)Cs0}z) zruPWc<>stWmuz*a9VrC5Os5elBU={8oYG)0TNr8DdNs^0AGR!MK_rY|5b}y(1LOO7 z0Nqpwo-vc{uL6RLhHof{@zQzMw$stQH@6CzNpY#1Fs0HLrGmGXYAo;2ZkYm3+bD*_ zE@ogPjAgLyx+lr(6PG^kYV{FFzD-F;K#x-pXgYn0>3v`CqSY?9HxBuQ9=G&y4wkaM zKz&8;z5=g@L2Ve2sQYo}c?`T>bbOPb+vEqA5zYiGyKwFcVETj}bB4Gphoxv~VlQ9_ zE+05yM4JsBrSP~U-DH}`B;(5e22hRv@c;&_%3jD9$e1e-?x3KYhpDXWyiy>9l^qunG*!R* z#}*g9`)?#n)e3eCwLMSR?RB56_0^?ar`_*#mv(9iyxyV1b=a2)Doy@*6p3q-b1T04 zC$TL4Si-UhE~#=W@&cq+E2FTL5lq*y6EuQLL+)X*IBsBZypy^(D(O*451De1HKLHN z>x9HZ-qItO=#yrC1TDmu%5TFG`0YVUAaEK%(B(mQNt{d%P!;}zD$zp{4knf8e$+Ex z_ECNK`6%$4Lgx$5ZT`^w!Kk*lV^XK9M2{-bqwQJPC@6}s9STt@Hr4s#xGO=TN0hpQ z{8wC2<0Tb*ArBcqOD31@19+XlyiF&>gDLVkfUPhMiUGVCHazLn5FAla*0;PNEpOpY7p!Z1 z8chS^y}>g!II*P;np{i^)A%g$q#7UH-p9J$W*Cx4uwc4 z$;Nm4)~X?D9~+@x=)8B|734a|D6$Au*|OfyW))=n9MJ_wxGjZz&UurI=!KfYRWwZZ z1fMHydLEIwj&7g(HSz|Z=?9440fSKj1#JFAX4w(VlB{a3RO^@yK(t)6Y8byP)&y6# zKBCozt(Ir!?B^pu zhS~KkvF5~DgtCpNVA|L-L}9^3UIu$zuYxL9?i%OHktQ=|OG}wCinTzJ6Py#{zsyMw zo3%m_WQ9_QzazstbNX#i8NkM2&Sr*s%zhNA6^Xe>B!-0NF03|1*>z4aNoPMB#}apN z_eYa=;Cd2k5&EZRwXLQP$`ELwQWu5aA)pkAYOJ$=@@gHbbqM^>Y>PN%BTv6w40-w{ zLpBsoDw`W2M|DM>4$Mmce*ubJIP;VFYPU8DNw3h>0RgB{G>o0djy}50}>_TN;QPH>#0L{TTDTg zfCc5Eu(SuxOuJ>|I@P~toR=BT*KdKJsmigKG{+*Uq>UL`B>XuR1BH~b1{V|3EqbCz z*HS{&E2&n3qCu?Ij4n>jZ_qLXogD49QJ27KUeXb@+)Yuwi`;l{pIp`JlA4wZd0;=%?r*&R|ee(kQ4w(!zz!75NgM#ugcyk_JTq=L-E3OuOGpn06I}7W#Ca2^d#t<`oEsofHJi3oC*(5Zmhij`{sh66SXRnyoh1 zYI6+}J$+<%;hZRNiU(6~?5v1kv;6nfv9?WI=v0-A{EcH(Cp)xmnp;~NwXIg`{?fT}e z)}4(z=FMiawS5>YodHx8IZd4P>*wklZT1&F-Uv)h(i0)TK~k-NZK zS%JtpD9Xq@jKQukv(yLS&rPmz!7Tpd(BmQ)sL#!O{^Yr&SsQ0W(HRk_N#(Qy7D`e7 zB1n|r+TSRPLDlU2;0GD80p7muTgdbH*PenZtJb+2I_{0U)2Bz2=ek*mwC8#Re{(j^3dxsr}7-A zIKt|fcx_h0Rdley3oC&%n!|LJfR-s)rQ>Mkdk>dJ@?kcoQaUYIMvE8C& zv=?gOvN~;;rzUcg&^g!g`zWLo?xPL|%Dy|Ujcp&9bgWEp`qVS*Vd3|NM2z6skAxT! z^^2sgL8XC(F+L2d)wZ%(VM@Ad&N-(WLlVycO`KnxFH*T!RRjg+k@io1g62;+Qr-Y#fq%YwQ&IjO#WQEFuo*zuHk$AbM4~B za(uY^9>LI8^bVjBBI^e?A|v$7xo}r{QR>A($1j*RCaVYt(y|O*m1l^vH?yMWow<8w+*LPdI6xVM|3Wy$nBSJv)|e}-1gfE49#w8)9&w&1N2-qXJYv^Z zQ44Rlt$$ZLdIF1eIO;k2pV^fFD)4C%fw}rO!2f zbBQT78OL!1rAzwT)0sX&uwH$otS!z>lpvN*5VGTpK?n-G?=urVAm2g(ci(Oz4P8$G zoELxnvW0!S(`#G%7TGQjY^&X(>~(#eT%P7}+u|fJeIWfZGA`u`;ma(RXjqyvS;F4>Ndv{0C|dW81vw+3VmdDxET(Vh zPhlZrbpv%<5wTU@(ya>!A%~kE9ZXhdM?%Wt;iaiO=0D?4JqRl0TEr>B!rGJd#!oM^F5VzThF?$%28oH336G>C+NGDktfYujK zKrB}cc6I47!o_6!%n0d!P*BonFu_B>fT4vg;*PrPNu*gEb#WVkl1P8+zgt}Rt^ayp zz67QuY>O##F>c;$Z8o=#TenWkldan3v1y&$*>0JwO>^_)=Iza!hrF+Z2MYevfvny< zT=Z2c2HDBVz3}1XDm=bASLDYmKo=)jgJ})0>y{AbfU1+Q1Op63d zGgHn*1GOkl;eNAR3Cv1Ky68IHu5}8K{VNO1p1yTjiu9v`f_iXI7RH7d7~?ZQG%^!1 zBU-!t&avh0Bd^F}=qkNa7f3zIun_vJX&@QVZ(D0fC$M4QSzXvAn2MqpLF9T>zyjWl zj)Phj%k|GiwgXZaKH^#yaaH~Xq5W#hXe(NZH`FZhAhtJe9T^?eMIr1o8dts{0kr1n z-!hO#L=a`C3$jc6eAE>9=%;dO%coJFgAH}pwFtsaGk>Yi|&Z|** z*yjq(m*~D{EMK+4JZp7n3WIU}a%Rge@1nUQb0_k&6%xofRYONjuc|QO@;5iWV7FO_57aiH|~dmmztv(j}EHiSWdnL5?>!HJ)_~F@*i| z&auIg00ohykflFp z=u1$coE+nY4Wq(|tHZ{bs$8!T@pMn=qxaB36eZy)S(% z@1%pYYa6!;8O)f`kT90Px+@K!y;i%EI`L|on><)WLfXZ)t~a4-6WjB~fJN(Z%eqqa z1z~J?BIZ312b{+w32PxZxhnFISCNOq>$`6kxEz9+ zI(AKn;L^~F`1i0P{+-knQOOBxgn1VDsTM}33jvc*T{g6C>WP)8mZEg^r&iZ;0WfSC zPrP7u=P5D%>hr~gzxv6*`pB_(#AdU8=h)gl-a6U7wN*RWzTIlIYAy3l{budXt<8Ef zQanOB{38{}@_>?7xe8UTLcotOoaaeJnyRu974cuQKM!Riz_=VCA_LA`gbRl-kpcNl zbpsMuuqX6M&K#6De-NF(3#mi+GFK&+GDX9;H%jfz$>&+UcCTkPk^i^!&~Cbp=bZTK zNbT(U{my#SO{K{TmD|3Mmwv55{~wn!x2ghMDZo_)-k&p=BL#v@_gtpRI9Iw*nqH+DZQv;aZuudlU}dmH;YWP+Bfx zgmVUb-7bb}x4wOWn2!nx&VXw-G~W=pnFHW!IweZQs9Sz2&5{6Lx6<*4+gObvfMmaAT!li-WVgUfclF;W(9qWXGzVGzi zru6{j$>CePx6^2tjYh4}@bI^P+;Lj{Hj3poq^t2G``9&I;F24SeIFz)rrW}KZnM$Y zHNk_?Xnf+^Z5&iP4uOR}uzg{N4JXcvY2E4As8C@A)SATiL<9vse?zyyO5hsM1h{7}zG$bvStJ_%YK+vQ0%0WqmT8@N#VVuPv)(Y5zIBq&T{+CWiLY`MHDoMOS*@#7Qb?RfPMYXhns*bt%J}5dfnfGI8Ac~q~T8{yr z%h+ZI2d#wGC+a*+u1XC?x5k%#$?>ObZUq{Z92^T2eE9Z1UtIY1KN|=>T%j=4n6Z$9 znTzAxB2I}}mh{qp`F9r=e))Iaj$4lDzUw;ft^*FarZ0-@%J9-h&M9a=+p1_nA@QZ? z2Byu-fTie?6<(s%K&d!4KwH8l>z$o@G!n+kKAUGp%sTb_05uV*0tFYrumo7MEyhfq zSpv7nl~adf)3wo{SLO{@inTsAmQI|msEADG7_(=(vY?2{AhhW^()hx(Em9E-D}g}~ z>!Dhr)FSV~fp^|<`c(T?hd#B=n6X~~s0oN#bV&~A6w|E`l5z1h!h09W%>6RT%mD<@ zwohzJD7hnx{lz8&T9zj*d`p&wi(a_!2rXt4#}KalF23QIaP% zFc0RaXB<7{AM|eJ^{l3Sa!$@%z$dZOd2*;4F19)oI~Qks!Sma)s{Jc}b3Qg@N9|v= zD5p!WZx7x0^k+ znhsn)=MTEqYd<^bcUdPDdRE8mfebLdZE;}A@GQW5x=mC<0zv&_IO1$bxhLo&Y05!Hm5rx2ZN$pucZtg6RT;RkMa7g`5ethkHY1WEKe)TN@PjYsCq?d4 zu}14r?^?)^rxprVdQgN}WN0}cYvu`)9ftzjUi0|cU4l9^TxF)H10gt=(Q}zgkCArhbp0Ll{X%f5uycDvnh0lW}BY^_p< z+w5F`i~|~juw}zrmE8#yan-F7nxpTPq6FY|_esQfI*ZilXOzK|Zc1oh2uEH>dI7Ve zgO4s+LSE-AEmoM84rV zx|E_+Q;9fgWLhCdZ7A6+3`7#1ftVu|>id6xapC)aCqEVH9z<}ZLY>*rcv?IZ!XRhG zvK71yr9$bziGEL1m7CO`sNTei2`NX2K{+l|9PO0k!s0aDwAMq)nW5eTYgW`8tTMwS zBi}+B1j08?;QocTpy4XDcNM?2j8`_C1n{MJW@Yiu+~VItqMa1~IYws^otqg2-;9+H zJsesa$~(6_yJl7?LP)W!=7a6CtLXqPGVKgv&;Q8Choh#FpVuMm4l;H4o43F#p+FeFr!NPJX=AJ$|ffxyqC5*o*C zr}^UQsuWi?ndnh$xIB5_F7S+RIM96C;20G7 z8xk&rY>uN?(?_g}dH^VZmivv}wt*XHxbplHr`>j5VRjZjp+suTh93 zOj+xVPd*FsTpp=jA4zIl-F2F-)IbOnAe!{7$c?IroEqjC1^}_FyKT?GPJYP%kU_rQ zSRiUWHvdYHqBwuqr~Bo7y=uW%?=>wtJ7n43e`9uf;HJ6!Wh>xX+S%bT@|5;xz)aUp z+IEk1i-xQ0sdQ*TA2)<#T_8Qi$8CsU^Nxp$|w)Q1cu^Y<<&m zzak2{IIg$yTr@$=(4XfVsQzr#hc|HgK&j2EBc}*Yf?AttTi2zU?UxR2 zu4V(?eH`x<_|6G1<#V7Z7cdsGDj8Vh`Zb8H(TLMZ- z-W=lg5Wp@MO0e)wyCN>>NiSpA4MQ-qrqzPFeRcgYbED$kLZ!zN~>P%_u-@T-ij*$XL>e^oU>i*B2LlKXY9A@Ika^87ml&8zR^k(JD~>GNe{S-y0oC*DSn-OX==MpNf#w(Pu{@AIe)r zz>9K4efyQwzQSCl^P_+ilO9!1@Uc}2NcR*3>ssFlYMAP;iV$Vl#XumCXWNfT5gK6b zsuZCeFjq{OCYeD6FS%NpeJxMoC7nc1Af;|9O@SK7rYn#-_+wN``7tV`jLGQn(Dcu6 zBk9t9K#&$9B|;qN%F}p+b#?=3g?Mgo4h4K>6c{F+Ipe7J?#rWf1LSqqsRiAwcLW?f z;gD2ThSe4vAQCR*_YvM^#L>}9I#s~hL^h#3mB~M-0Y3NYx|@o`vC*7uk&6iPceoQp z(EqfOPY4P)CKWlzp&<6hNJz!ha@-Qc%*P=~*8NrxxD&ZElwhi|5+q%N&tXo`kDDRw zafCK4nAx$zY28wNqZ_Wu`0lVoDEsQVXLX$pij2(P`U>?tzQW#}{Z^qD!nNo2pPjdY z6thtqwtQ(zw#`~-D}TM9}+)AycZ>JUedA)XEC8n;8+mdB>rHy zXrVkrd4%`8hkfAesBGSeiGon8OCOrvM@~BF{bR?oS!E9Hq6#Q!or5G)jU<$)XNR}8 z>$Llw?$S;IZCL1N?Y5|78i~g+EoFd0N9!AMfOxKr;iDg4-^W<7 z9xw8+$JhAj`mlWfMM{DY_>~znM~G0;c;_7>JcEN@)a4;njL(j~P~_@rp%}m7U68uN zQv6e}6#w{?mg25M7~VIJown&-KWnimo?aP?K>qex7epCz-Oa&==4sdV`>lDakogRr3iH^5(DISZZ?^lEvFrj5e`*;U z%e2cZH_I?nxK#PJ_K2 zn)Px<79`MSZ68WCY$zRjZMz5*T^)6G25hSl7UDgpPnK24lu_Tz%1#UkX&ruGpH`tnHC?3D zUxgBBT~h5k2rZ^pASsQ6vMyK>g0Co|v)hJKE&64p(uSNub5(Cu_dD*5DuJ7WC4rO} zRVb0_6gpak6%m9C$rTDqhJGCs zGh{ga>VL7g@T>pX*oNbyo^N;TZ*p`D_aUDI@ql*iS5%VONBxZ8xGFt$y}+pi6Gd(i zs>{*9J7PSDS2dYBAVFr@@qbwR$?>mJkCb->k4Xt#Nb9`1E}eGn!3vKS0Xit!}w zcZ}D_tUGb~-Bt-^ZDk8q!NV4XPnTq%bgsNC+-J$fFQ`mOY$%~Xi;r?qn_$le$q$b9}C#Gxms`(?=evX8tjhb;I{#!5cohD;qy)(5UkPd+qicg<%ul~~ivAFP;{^|J6D`Z8sNp(?vtEbjUn>bvY?jt^Q{h;x# z9s$GQAt-^dF^3MRfH<`fh;14K6$$I&%^Ay&mGUWWx~90)nC)~Z6w!+CI=VWkdP#9Y#9i1hx|kaVLy;S z-=iuao)3Q)7}>-3DFf7e4yV*y;I@0c_Ia?0&Y4YkH$1_`8d}97T3$750uU1DNtT%* z7bp<}Ku{R3!LV=GBqlws5U>_T>&c~o)q=v*C<94F8y#8`Y;4N)ghsvoF$4LLeI%}D zYGd^06g720T0!?w4akMbEu4aGtQ+cf33ltsRxN?8DioWM3CM+5s6aXoq6RWD&yS5l z&t9N0ge{hd9I)YiHm4Y!IJ{UN&I6}TB=bh4g7C($Z~2Kw@3y$Y6{jRar-!F7(`CC( z*LP9WN?nI5hZ}eMR{KQWN2fjSc`$lhyX)Ca`5l=Q1r!^|fIyE6gt&QD&5PO3iy0?L zWcI7nmFHkg+t>^V$iS)@Y5?CIn6t+8ngKQl=-%XYjw;RBHG`mq$#nzy%z<@+9_3>% zQ19}y7^tJO9yf+kRy`eear@`OsfkLtuhBM-2u7BE2@}H;bQ6 z>?W(YB~U8o&|bS|p}?38xDV?Nm+l6zq)kF52RR3|PXLCxYlSQov)ipG}?;Q3>Cv>uh#8z#b;65$Ov%$?m*d`xkI*sK|mWe~p#HMOntyM5B zc>bCP0*)pbQ@B*yICS4*i;z)BoMp#>+5>#}CJxQYZ$SFi*!kYUW`F5(Fc2+4RS!6W z;9Pnn96}zy*sya5FWM8u`#Q%hQydYm-}ofvtvd9KFX1cirR%?~t^EZm_(#|Lh0p6~ zmE2nX=PXYo3Jyp+^tE`tvcwGMeLoDV*_w zuv1B!(Utwavm^<{pfGD*5b#M$Kf@@tvAZZ6c8)k3MZoms`s!*%*jAe%g?dQJ<!@-qEPe`co7 z1l^b~ord~7W37gP10H|_o#`D4`xMiuoC&V9+j=0;fTBva@72{Fi$wlLx7$lM+%h>2 z?sj3o2u^*w+p^w}Gd+*| z5Dst+N@?@1?rJN&6JYyhAx?m#-2Qw_J^{H6j3(DL&pFPXWMw|-AKM@wmzIpC|Efat zdi+Xn;#cq61U3ni3F|(|TAxy@8{Yz#)_0PK zj>i&m&>xab?zzz+QY`OF&?3m_{?XrCT=>y{HNDY&kK!OGAOnb`-K;EdV6Lg&Tq`^( zl|2r!bIkaVcYC5BYB}t2rQL^O`F0p|th9C5(L~o!+0|iQO2oVhWK}O&lpWX&VIyx` zycaf>HK2oCE!kvN+{%rZ#Uf6eVwsXlXQ(x*t}a2Mz|y0W6AwUMQsIDbLA{?1ZFWu0 zdRltp@@63r@XgK1Bg`2i!usWCJE;l>mmwTny*`2ZAA!c7+VmT(=8Z4}la-0Uvdc@E z$ZF1Ay2wf~gt7@OvSohoutfZYCqWu1Y>MdoNt8%KCjc*78tWzn06$Uo5+d>jCkV$J@>lALa zR}_pCVaDao6~+LUURAtR49D;ks^W-j!OAZ^pHDBC<)i@_OEY>7!VO^1S*|u&fUi&)*b*cpR6<*EvxOD zhJVA@2`AdD_%|-_d&lenq7^;Bs2g?F1ynZ*KY%h((kU+cV9t1bW&ziwlEC5`-zu+Z zJ_nu9T@V>#Q5_H{o3<>;RAEtM@d2r%78HYk3Gt+UZUysXb1GGx{W}BqM@hjh#|5TvM1(7bIOT7l}j-O(T=IBiW@A>7Rf3&f>yf-W*&1 zd>jDgaZ?IWV>ft6?h(c{gb!oSzw3kE*QR!Uyv#+l9P^4FJ-?Hwu zJ?HYL!b7|1I-YaluS*?f{c+!=GF+`-c~s%!X4CS#r5yFa(2g@oC#)AzqG^ZOcNINC6Cw$Wy zXoW9*i)tyT(}mLRQs;=xZeB(~jl(HsTmcJgI4j;mr1DU?`kfQA?OCf!ADZ4r4yrjw z5pvH$+2R(GUCtFh-s;k0)GSsQZaLH+_uFk^fY!>71O~lb62-~06PMKrAcX%I_r!9+ zVTDhuu~25mZoyhUg#Lq{4ENL6`)iN*eoIFn~@(4a%4> zG4^{_lT>%XT;$o`1kwY=cLorm9*i|svRVXE>IvhH&ZBn2HXx1&J5lf^`9x;;$-QUB zD-*D97NwcdxB=@x8i#)3HuKcW1N7*{AeJ+*pu3;J#>;?@A4_@u`{)wi)AY zm=l_8(^W%|Gb?*k8=!D{8!Z#Ac4d(YFStpq$Hx`W2S_FO)X(t~kCbG0+PHvo9Y43h zbG5Mn9|gFr4E_>sU1~|47dj^T?ini>GrS3cR*YzDr{cLF7xQsmg9K0PuG8*!kcnPP7^KkQ zdZ^AAuiEiSjZLIVkfIq?CK7Ch*ivSaFrQX;iuwW)b<%Ib8movA3AI*OaJacf8Y}%h zHu3pp!yk=8iF6;qw4$_kgUtoe1$x5NULwsI0Z81}={fKtn(Wx8XFiXNw2|G^j3r)PLbLDk%F<-mo82**$+O0Z4ijp#QTyf{tQeq|$~MaH;imc#wN z@%-n%cK7MWdmn%0py9sH)4)c~iwpTBILUbFca5Xy7I{QVsO$LBQ`Iu8H%+UDwf4SP z7^p7>^d*)L+4T{xpWIFKioe4AUPaEB5?S_vKwS@S$JItKLCJ)2zE+lg)w>NyxhV`d zwlnVj8!E*>kpvyqjk=>K0>mziR`Lme-?^uK(rH3m5!$CUyfW)2q}~|6_y(Ku&Y({` zw0sBN^ZP>k5!Q=4wGxgSp$#)aVpeG+jQW9W7my zfo*7ntu?yA)b^Tagv&&YXR*n?1uBh^o036&%A{t{iCWE|U#3trWLx;4pGLbR0|6Sd zd5E2KJRNI^5D35ae=jcl+P@eZfe>^9-Ih4Y;Jdr+Q-{&E*UzEJE<|$i3AiPB_>|Wd zj!Zc$>@U14+>Jxd^{wVv*M8Zz$O-q#a>;kuZMYe9X>BfP&FX!2ZmKeF%r;{w_a(dP zJO>0cvgdHY07`^tL4|r4+t8XZ4~;Hi0Y{psfC+~=*VK;HzvL-^llWDWpDmcAn3`)` z`xkyV%0^;koK7KUwDz6R7t$qf=&7VHJ%y_sz#3xKZ>b6yA~+@65f0sIj!k0Bm(x-6 z43QHBG53=MLA9OCk>BPST<25~oEQBw*YUBOfB##*w%`9|{{@0k2@*|s+jV@{Icc~r z8JfaXceS$AaCJP|AUXBQ`UIlV)sku@*kN|~1P;XM!*B`_RoadWsI6)^DZXNq0zzyJ zcgG-FOo|gAw;a)_UB7L-ZMamkj1)CrJkP#w_4Wyl`yK*lH8^}?#~(2`@I51Zh_<>{ z76s|vGgjodBuw^|*e%d)aZhgZ#*Lqschk+S&|?8St3sQ>gOMldqH;zR?~Ee%=Wq^) z&0;tpZYN;Y^2ydvK8?VGGDRL!FvSC9pH^>lapG9A_c-FnN%#HmBCaZqoz?gCDtl;A8mX>^)kl!o^C678H)ja%2ziCa6 zekoknqnjjZdvqYC&&Bk;gfjw-FMLodY18U_s!`own$|}rU(i1oP<+r&WBCT3jk3qc z_xG#6x47`D|1cNd-v@1{`QpAb_^+SWPwg#&`VB}#Ag65~ykqBb5x`_1n}~M<%VXn& z-6KHS$s{-5>8-V`6W=(dp{#r(llVrWd-ZT_v=FevT`ggPeJ@Pd6UHhqx>8LVq}#go z8zKyBxM>q;`NQStB;wY?HL&BA$&NgR%O%V-0!OI11`jh*f4!aq8Vssu3**24#%|j* zdxhIhC01S>np{Q`z*XA=*i)1hZ8VOpQ@i`tY}=<@7^~n_1m)h_4V>L*I3xuk*ngJ;rS z3Je|Ap8)z|^l?MO_}KBOCNG|l9G*CXfWT;0(m6U^ctuo2bi6D|2}PfDleR~V$R(XH zck&m??^CP#J?43hEZ)l{BOal^IzuT+0w!1ea=F>e!i`y)0QR)*}?I2 zJOoY2PX8K~2DAbb#7LX)fu;r)_Ioum%Y_o3^@R)}KP4^@ez8XkywV>-c0_ZP=9s4R8{s3WmY~tMT=oDu^!~ zdpSpAGdVhNjLn9G&a~SNL7cw$`;Z=gCl~2Kfe@+;g^7Kgict|GV)hDyXF~fq2Za#gZ`l@xQvb@Z+D&MVLiGCZWj7H4|>8 zaTFPeBVn$PZH>x*kaZxZkin0uE9Kz$VV_eg#8dxOswM&@EaWYlhtNrs#2sWv&mpH&1(P#A zq;Uvm>(KAW*TDzf#Js znj8}g%yI4ERH|?8+Yz#aUwMU(v$`z3h4%U$P{WP zi&PvI&gp>rM$9#J;@*`aH(aOH!P~GZQIshC`x*aSyQsH_xnA zzikb&!3OF|#Rj{yvvehV-yti^PUI;fm3A~wkzj-M^}xG%*ho1Ltvq8=WbdbpgP)RDrVB00D!BnN@W2}FJMcE^9a0Ylp;S8>k8nsVTS z8;kTevNvdS=8BdzAp+oiDSyhv{|iUYJw@}MKN+wZhl&e0Y-?XiVJbpH4CeyA1(FYP z0e~bUM_}Dn?GimcIfs6<|5&Y4n4ZHoFP(Q)`JJ+2$}T-Nm=O{Be7{hpg6HiWbd5}|USTb6mfhIUT=t7vODhAAb46InH7M@rHCpnfp(zvF( zjW({uS$7R3>L)X=RV&)pm!a;8e5^p%G;+}Xs3U@XaR)!rZy>J~wK(Y)5lo}7JIM=K z`Jo^sknVT6#K3tegVb~SLvxc$O-PntHAlkgAe~z%N$>=L>R=HDW*~W(fAFQng&+Jv zE*|DU-2kN+y!_WG8wUg`C}Dz(%TrLTPyiWDHVt4gTf~^b;)QDUf-J>E#JTTTEiM42 z43h!?7rysNzRHr`Q?8%Nl*mj$)E08idmA-n-tXy1wsL-iab6f<>qz6f=QKgcDJujo z?L22hd%x2mjtmICr)AbZVAun1t(3{KbWzbaN4|5${zLqJQoD z62lUyfqG|LrZTddRNhDf6R)mhEHZ5}n%Xpce=nxa5$fUei0YTrBCPfo!y6 z4X))64`0k#5v4{WQby@*%ex3wQc60Ca!QQ`$dV7=zPM0BCQ35V?}sg2lnH}Dz|$;s zmqNZX;{HX6)E{Nn#>@L3a5j!Ve8`pi##)eL@7`-7#m!_Bjp205+oy^u! z23~b4&qU!Hq}kB?g@&G9*$IxyNcF3%UGbPLJb0|ZJg_SYay%$SGEYPp4^1n+U5NW| zv$*7)jF5>yu`lWZ)&M06Mys^sb0<}P2~ZY%S(S=uw}4%GUan-IqGrU{bFP{~WJ!&0 zOHHh3%bW{DFQG3}`v(ZXk_O>#pdDPf+ieC2aj8yg5rT-1M z^jo=j9Rh!oghgLJk3P+&bna@-s3S%HNF+QTg(CixUJ2*FN@{{Bx%_-%)uDAVolk9>6w;PthThgN?Fa`aQ61)n)5Cr;buK)M#fg5`kJ zbCi1%;`iA0;XU?VaJ*c$XSCr%^wtgI0~{2PLr)+p5RC_ZkK*+~v3lxV_(FAszN;rF zcZT0qc6sc(hOQg9DLt3!I=qX=j(>*V`N2I5AdC}~uWQ-fHynI>b;BPc^^HBU)w*Vz zoJC9fPTy@>59~HAx_di~hS_M;;KU|B_HoA{+5-Iiq;Gcpe&-|m7_-5qZ}xp4HB1*S zZO?7uSG9s0jc0&wc!2dItN=gn2PQzUL*0P&2|0Xfx6yU&1p5eccWEbF0eS)j1EYfd zMSIlvS9X--9wMh5u7#aWbJn~C@qud-2u5yxyTS=iyB^MC$KFn~XDJLT6VRGIc08La zAqRK)xZlPE3BdJ7tC(E6){DIlJE|MR!@g|Ywn+izSLpMH)gIeer}$2v7Xe+y@6yM3{|DtTVv zpB4vh!|hsIW{9z1fL*?iZ$3mLoBHC-E9^cha=O64g4e#=w8-$fWH8H`apwCyZ|B{2 z&&=iv^VC{DgSvw`ueV;1-oPK1(h=mOsI(O-Q z3Eu2D{UtYB&v^~M4E!k~jb-`%vf-UM{WcOK0nIXPSkH9yR1mzuFLVaUDurwbbR@P} z=na9B2ax+;e0MbXx|T=mVIJd zF7r0Z#NQyKQyhb15d2Fp+rL8YT!aNvsU0^rbUZIdYDYv~pvc7HXCq9Kq&Q#@x=K3A z+7i2Tp)rLiGp8y~F**nab2t8MqI<)uFO)1cSSunn2t%Zt!vZYbE-Jcrx=TBEq<#&n zSp`%>M++GisEFkpmaWub2^}qDSfubS=g@4Y4o&E2ZEKtu@|bbB|L0&|V2lsHI0ICxAL~eQ4|{z&izc z=>}x>uG3+XMmph9&+6jog0IN`z1zmij(!Oh^r}YuDS*Kg0mhkwj7#RNZ1%x4&;>0M z=$HD!oaf*@0KSGi2C7UI&uAGZ{VpejgBX&yfJ69JL9{8;$S5&Plyn?+hHIamRj|&& zV4abzEFINZ+n$i9e*~;^a{^drdeW^xd4^!0>8Fn{9Y3&7huDYkr)&IXVYir-9r_q6 z9RfRMW~V=<8u(e8sv*$u7H#mPNrsHF@L{E52XAtE9P3AV_ZxQrr^JTvbq~GH}c^*)@#O#Z%jnidSqSr9{zC+16 zO|uQn96Z3Rs>5zYQjmLO?pQ-JxdKL4Qls|IJI792?=U3bL%BmCt*TZ_mH#!? z`0u)>%y-E;PiXs{EWQ%WwbE)ib}n0N-C;a9udDT&smo zl@rJA1@CfVG2yYkl{(h-I{T1=MKM&p9cu(dCQi~2%0VjA5N)PwMlcaLmyO=*zJ1y? z{l1ILL*d?eY`RG711go6rw&jYMa^2`^vniNYdfuw9s83HVbf_DfsR1__ zk92qv4krp5uT<9XNxpAotF(sB#}!S|yT1KT7Z<+$zYgeKPrMJD);VcU^sH*2!=YD| zz8G6|<$2)MCCnH2$!KPfN;syXi1`)C+%0Gy|Ijj9mYdf;p7e&l^Jfyt&QWM##yZx>ud`aLrBlxYM9)io6%##4 zef?q&TFLI%ppjh%cB6LB>N1*zs2s!YRgedmRw;Xdc|nPAT2f|Ucr}w;%rDhQ+&$#Q z2?^c-s-RI0DCo2Yw95?uLuyfK!~h0T7G%i2t_Y*;H>q|=g@il?WIykcG}gm z>n<1yb{(&|!2O(dxyq;MLx>;ueT$2tQbsG)ub^L|1q?tBiofdQs(hC}cKI$*_Ib_i zBa^;kDS9qZXAOK@;PToBJ$&zh(+7VSkv=sVv_lNn9e}{4caNxej>vo={QX$;{l zfhQ(z8+Pg>X%vAU%wx|Qbrn0SP9WFE?{=N;dB^D!PIT~SaBE_eWHlwe-4h})SW`x> zvz!gwKMzrIZ%R>eAN5<#9}~e{B}*ppu+#Jj+isU6OKwNjSS3qrOB8S*z-3lhLQzXN zRNZrMDq#K-#}wBvvzmY*f?KZyk<0`&A`g5i)aj}0%%QZ8xyzD5s=n0jTq9XBdX}>+ z`6*<{Po|V5dtIVut>no3$dP(fSF7a6IC4ZLD?HhIYFHiH(Qb&ed0j5h*k+HyjkT&(4n=Ydk1B@sl zY8+=dkX-uVZ!RwU@UKiMmk@J-X92lX#n7f!{<4s>CqIALW^^%DvS}RIr2J*3C=Nh* zQc?_&zpSMf#MQNN5Iq&X%8%1*ELvGtmf z@D#@Eh9ekhpq>xB5sFCcLAe4QD86TNhaz-_hys&_ zm9Pjv9Sgohh@)UB7_V&~M2bEt6CVTG;rGecS%US!zD22(B*jHW-~&}KJb-DcZ*;@? zMN$-UVKDk}t=txyLHImR7kHA}LcPoav`F6NqR#IqkatP%F>$bS(5s;l@=HfE*EbPB zkn2cssD!}In~GW{XJ3B8<`b8|GP#MzJ3>tnj4!h`jJ+|E(p})z$O<|VoqmW!r_^Mo z1i@;Xr(FlzY?Hz(EU0#to}nISW+HN2@q!PKu`G>@Y1!l8>!DKbE8#b-E zE*crm7N1P@0`NcPA_$kL)!+&;nQwgY76~E*LjWV?cA8RO18SmX8gIq zI}#{!;j4ssy%U#5cZGRhv?8g{vU<5_uQieUW(KP^z(f>OckvMR~GanI2c~ z%JfUhzD$QR?aXxI^m{Y4azX!~e@Km7Son=Uu(= z$tJ*_-lKE} z21?x}zu2f@|KuG*5}qJJgvb=H;>aS7oAabJt#EQDncnx`AX^#O1KtRvp-oy`wbnI< zLFOr;teZk61V@JjWlRY1KUP6Gym%1^AvDTBoou+l>V%@mf~8uR6EP}WGruw^A}K!QDEK?GPZ?!3blfi?kWQr~f=o~$ zPXjiq$x`y7xC5P{2Z^0P!6t>U3j2gy+aEYin;ihd()KSMlu+AF9m{&H5Q;UmnJ%#_kkPZZt3`sCWf=FH5s2>%5$Y453pT39$(=VfpM|lAU0lu>c znvnlzAP6w8G$E;DkLQ+tfy9`^L5v|J&lJT-tadD!nw?K1eTx$^HHt&OV0{_ zWt+%NvYTh*)ic|;97L`5D@%aToA?qz@0N9foW54WWn@ps1o5@xCgHTEwgX=;U_c3Q zPa>74h&mna^wC?yxXV+P_bZvb>#vzO!XIj&BL3CGac_n4RoYjR~{ePh+At#1$# z_9_SHU@Db{{e^bNQKi0X#gM>EP#f-^(!mXIO|??_?GL^L3gqB0pfzmCt3mww#_CXkU z&-Mg)B>-O6Pt$|weMNf=N->p19%y{VKqh!*G=*FctvxiUZ4P6Br{;=h&)@lVPA0TLwF z$^#0?KwSynWHPu(W&>m2Byk5FFlKtV&7eYuC7*jpxYW+;%u^=n<*uw6 zGL2QC!Z}uuhM4x1VRIE;Zt}icCE{IybvsNxUe$#=e}+xH5T?9(Qn8pEbn;J7eMmwL zSmBRYNa?aJ83vG&vsxKXUD#Ej*v>c>=oNlZm4QZS^Bh1J)V9a9(Gnvz2qq=rz>6`{ ze)M+{eEQo{n`wzkOl7Cp#D(p{911()>4KvEi!?>WmEy*jn(&Ddx7GK2_ z+kNsehjgJUvTQ5+tckq#P)r2Ig?UMZaKz3zD)6*FT z-*dx59qlT^p$b4D?NEU`|n7&#{yC-oY zXQStPFnYc{w$YP~{k{m3r=ngdgnFe`QLjuyy}~4z-~sEHC`SaA09B-xYH>=2fR}yS zCH7=dsibN4L`Io?l}S{JOd5M?(O^^AJ!nawR1FaMvU;b+(zlXN2*@4j+Bhsj5Nsro z@H{&M>xQYgq=>wM-#+=gK)BOxgHh*PFrOlc3_2l-$biAY^YO3gwv4uYOn!}ZR7muU zyN~y{0aSn`&MNpl=v0(%ZHw|&lAGu1`acdzl*F&4+0gP;wPKicK>RqMX-~`t9VDKM zDZC_-t!JSBqS6t9K#zK66X*r3(^zte>Ry?$`;khd14Rj(uv6HD3HPFu@6PW6eYD7W>3*8W6@WaM%O?qhp9~g|gZWRa3Ns zMFZwB)@7yH(lMK8^$N%1FqcY0DwRPWEyVL%Pok6xbdcON$;)JV%)CHIP))Z)NSyt_ z#f621*5bn9VAkNS*+ps6yS-lf{PCCex?lQ5eaf0FBf2K5hQjB#Msj9tkI%km`sUiH zUojvQ?IG-{}O)|7QXen ziwocS>#-49Z#jO~@*6%XD|n4{4@Ijj8a&tWoD+Zjr6_2-DXzTN}4B zo+TQ_EpD!FG|cXKL%;2H`Bv7S?1N*VxBkHC!%;v*_0-t^yXgC$podua*7p||UdOxM z?PD@D^u|8eYvp=qgu4wlL<8MX$Li~~gf8t%r-kat6ZGM0rRd3@L@)l-%zHvJw;VnB znbP#+50s`SG(G+_{$HXWX1aE0o|K~}G*8OW6PhRG=m|Q)yV|Gp!_4Oi?XR=%3C)vo z^n~U~IeLPQEWE(~U(gRTohNjE>cwx+4>Rov?QG@f3C-AY^n_+?IeLPQEc`Y6FE!s8 zYmY1F$qnk#!p|=*{2bKSz~n&0g}(n;{4e_YcYlU{7Jq)9em2x^(a(PrIuEu9%%pqm z_Cs*sFLb;nlz2<2t_%P27tqGf{b70eza>BaZTU$$HvL%^9}B-AKmUyU{Il{?^nYOi z78n27l%IFx=ZErhPk#P+`T0xo^CS8BP=0c;j- zTdUtUcmCbM-Mfq31xZm32DtP1|9}4fpMU?sbfw^ZT{Q;I3d#BQtk02PM1=@2S~_+9(o&ToOy@Q3Y`azdNW9> z;=r3aVRi6lNy`6HYKjCQeD5u#PU>8x$WgadLREvum5N&UD9T5ya%bLsI*;Q#b)3&c00+Sq6>d;(B?WJvRd$iOoq?*-+yOjFn`;3(Vdlj+| zT&bPk&QQ1my2g~+xh@NJXOJvqvMF>K#ipI@q3{)*0f7Cd0XhQ!JkbN_%)Zc%Bj~zF z4h&*DSz1{vt?CM^heWMVsACyOzSR!BJC-AtfrMQh&7f9-+g`*$*shKi8@Ho~)Ad@3 z+qo&6JAlm2Sa>JoP~Iw}AXuqF;ieo^iDjVXuGlURsrA5r5_m9QslwYYgEkhsd^_SL zYV+n#!>Z2qZ$ZhXj@5wW)*$M*1JP}}_D3^!BC}M5I^e{S)=)70qlwy61P^ToT>g63uKxLA~+OO-NQX?NTe7b}9$P3#mP7a7Hbm zsn&NjsefIcj+Ip33^8{+@yO~Y);y7mBj2$FQO0Y~eYG?wgT9JYZq-*Sw+fcj?fRfP z@`Bec`rKBq(>`~%=W`!2J_qA@9;GvIF<8(8=nMd`wg=D|0N@%PKxY6zFL(f*0RRr- z0dxici1q+FLr?8sA8vzEa31>3*VzFK;*aP=n`H7kAqFA9v~raY@k`YI^ZWITu-r{<{7tfy+s^azpDe?hOxmmh2ZGG>G7c5 zE(2?r(Li5|sNV-3BV?u8_(TlC;rNkAW;<-Ms>v&5cA&7bX~}JO(EH)>kx&Qh0=K|; ziG2#jG|nFCfO|(;qTZ;3ZDTt^9q_@3Cs+@N5PdMxa>u7J{W#m#L|@3k6=EIGHI~`M z8tTo+4z*_KkJr7qL$$7IUfH~R1Ej)dBQ2TTATWh!W)BNWy`j9(6v1f12nSafRHgQAh!g1ExrqVyJ&FisO1541^~=z9zbX4H2a~8ahkyS z&F3@Fv($$^pSj1z`T8DiQn3%waH|i)>Jr*!^&#wJ^&v}h`w-qax0`~E-bpesItvwz zE;hg8eI=W39`tO^agWMSc_;j_Sq(#14D*%h&QD{eUB7)zr~_t*>A86Oo~9kQ?`qDV zH)1brzr$cSKhME*paC&&M#o8Y^yndn9*%%cQ+6Y(yUU5Uj@UhAB9(d z;2`s(`D`+MK1Yg4_*NIHZ#_4vp2Hx=|4gFN0_v>9!h1#NsNGQavuK0 z7k0IRkNR7uS7B11bPPd-L95UxMbU8_EJIiI01nci-TDAqg&|g?Cyqz6Ng+c!w^C0< z35V^~AGUn9HKP8fjt{lCt;^MyF_dHK*_N+FV(Opi_-rfl7j-_Pz7mP30q41BO#Kn^ zG4=5nQoj$Hm(}ucOkL5OAJ_R4 z&Q~JKR7=aw@G|wo$WCC>nnNGp5p^;4Tr{Gdicp8Ygxogun)+QpJ_1NYZESunx<-A~ zVci$h^Pqnm5+mxbTiMb(moOg#O-%i<=DAI4wYT*RV1L|1_#2w%bKto~y{!2>qn>VE zqtelx7!FGPoHic4!$H4JIj=YoooDI)L|<{1p*Pwz?)FxemMF|dsPh>dSJ0CO(Az82 zKgOIIQ_E3W1$YX_HI(iJ;iaZr$Wb2+KZW@9F!R42{u#ud34a{%{TiFp*i+$80-`kJ zzlA^Nqa?Q1`AhX;=v16~KXd1a)EGzmt6oWcE);>EuG^vzzOK@tH$mBMN-u=|8dy&8N_|%SF#3Z~i#no9*VIwf3h(#} zQ*uyRqJFQPlwNCZQ{U7jueD3npO_L`yHtHgmp&0~3#|(;RsY?TwuCmL^jD_z17|xt z=?A9N6rx|fV@gY-FNKz?7K~-3J`p_-{SrzmOzBTxr4{N($}1>@Je;J zDZTCtqSRwbt0OOk+SI+KbU5-Qlm<=dXz1baD)pc#JrbHi>8vi%x|hPYt4Xhe}c=o&&UZXysOV`vU^{Mb3b1ZnLI>Jdsc@|u&PMQ)exK=%+OP&SS zs-HF`T5zp8Z%VY_I>oa;twam1Q%{=`EwNr*H6>bNy?R!cycTUxzvPv4i#E(@QK`fh zZB+kPQ_@4Og*T}U`rLd??L~_=tFP)3ed06Wxcaxc^mc1c?5LvaIO=m4jgD$5i@zTt z+>0+DA5!n&oD)_bLF}kmjrHP69Ljlm5I<+(R*6p~`tM_8_Cc?HXw`?KAG1#%j(*JU z{i;=+XmxN}Jb~G5E#esFq7$tvRJV=?5U*BA^#$~0Qbi;8s98WF>RH6S>Y^HheQrbk zQLJ`Ov=&sW^Ucs@wbr?(`KtPydOG&3+70-Zk^f=zYsi0BeGl;mo&Sw9#Ihwng6&VV zwmN&&!PXVded@ch&CZafPpVBzx*W#ucal!?l0oO9^A2X}UsZqH^Z@85q7OQ=&WYBO z$bX~hAt&K{KQ@8o05v&=xS;+Nb$`oY{0Gii&GS*@zvoOM--`Hf_#G#uA#WpY4>8`2 zF>s>weTe@owAo3hCt{~VThxQ<+n8uZ)t|L@Vy2EYb>doY72@@(2k}<*KE%7!zg)`r z7nT$9wUx|g?__>x9rJ3-faWux`3&N${panBcW+H-ctXP`0GZi(RYR_sm~uZ3_$ynV z*N`uonDAfG`PX#(J0>RlEuDYc#Dpk^t#C|CNL=T)n3#|OogZ+RPw0F?=dbDfHJ$&W z&VNzoRfs&}I(}Zquj%+L9jma$>iD3JAJ_3!9Y3$**L3`rj#ZPU*YQCet7by3>iBsb zzoz52bgUwpUdM0g*ik>iNNrKitM8~6odI~g18@`LUWG9mQnw=w zsnz&%upnHG{2lmn(AqnYUyDCStwS7wx2{Ki1LBa{h(8B2`9|b7OI@>Vb|DE$4=ZDVf(9zJ5x4E)yx{A)5 z6Ru)jjaZOG=tqDs;4;XBCqmZ@i4FS#W^e`@_A(d9KG>fY**m~|8?|sbg+6J9b$%Yl zFTygfV;U$rNK-(pUtFF?&QhzNIFma>49uEG0WV!bTXgF z>TKSf?pB9-`uYwZ80_6Y)YmoKKXj;T@4nuB{RalR_x1Mn3=j1V5BK)(>*^csIW*KY zIK02_z}^Fc-NOgEhW7Ui4-R$rsKbTy#N$0`WH6CR={EGJhZ3oR>$Rgtot!~a^T|w_ zL=cHMo!_@ttG-{2jg97kozVJ?K)18AGwx{e!|wZg_8w689nVY_QttigzEj!cr9|Ex znTBzu-8AcD(nD@Okxb?8$1d#XiIG#MhR>=GDE1xAvVUw$<*Yp6M+}T9%O5ahrYxUv zQ*I*X8fd9R+&~JOwot(!ts=2rj~HCB;PHeOpe`~k7RSb>0UR3}O5_tGX`M}a2^yH4 zouTuMjpfqGnHe{q(|B5_Sm$JcdCC|Y^W4!C<~Xi_9ZpQZJK)H=Op)+BI+e~&vOGGQ zL;rLdQ+Ez#vhK0uxPS-gQ4=(KuJZvm?Pik`>UeS@o5^LS@|~v(iFCd&-HE=%wQ>%) zfyqgA`k_p6Qr%~|TuUELx+x&g59L5~Mmez97v-o@Pn6@NC(1ErTfSm6h9wY(sewG; z>Op%ro0&F{0Ckeng_It%+O0Z^@;gr?rriKP8m(A?{$6*b!-Z6;?n;zYtjI#KT{ZZH zo_p%5;LVz_Yk)aSM`+^(pgB|nz&;}eP@EpUkjTz>Y|Ri;UjMsF#+4d!#|!7ryV*n8 z%v0JgIAyyy%}mcEQ*KsI1^`SBSLj60D`q>>*tr-A?yPeYAI;}TEnT&~2zSe0ZzjVDvd{A>w(iDxlATLyJw z`G~IA;{l}fCU0(1G7;fK5IpU7PNq_362>^L+=+)X1q^vwFn~tu01+2+?C>$p_haLk z^yJv3?y<4X@f<3_8p@lgt?BLIYyxMWtU*9m-BrVw2dA|t!CNa3^?;i%tw&TR&pV}6 z0GA5{n3Ih)tp;dqV@-w9NbtOG)XiSP43{%LhjRJJDyV5SqmBbVp)O$GBCTBYFs?NcfX*PF z#YI|WZZ&fFDO=_laLuUac@PnDHr&}1S8d0m%4xg$>6KUi zQMAi(HYwzrVoqCMH0G>s8zHk6WFB$a&fR9SXaNK4usBP)!Wz9Pw8?3Uh1;Sw5mabt z7R6V$J?6w>ZRf&~RSJiL>t+c4rz@}iYGifW)qml{B2aeYDy3WT7?`6bYCy+TY6-c< zJbfZs%?-^^^6GD(foU;ONU z`r3=Le?NNgnI{kazhC%+zk#j#T0l)bk)OtKaV5%gEwL1kk|Dy8l^fW`KCMHa?j_du zlw7K-}|A|&&BS{OBPvEa7v{?KDoMQ?4uGLL!LUQ3q8f;J@4Uad~G;}hm8r1RZx)qH-Scf{zjwj06a%pfhgNez&qsO#@d?I)+Eur;E+)EhKiMepu{ z7vgG(g9;=3GUt^v25<>P_a97Uay}qN>+W`}%Q@|2bN6k*ySfAV7+tt&xZ%@}gw|CFp@t&SN{S$lp_e}Kdo1E(DJWA@Ey%;@a&cqUbxK#GI^76{0#CdX2@8zgz#esQ_|p+q*xDMF@cV<^mANpI@5*tP3Ld%MhumTbLf z_d8wD!}N7VyPivBm?6z%y^A|-wnkIqMBrOG{jv%TTa3p%;QI}$>V0P*E}B7!ymiLQ6Jk9 z(8J<2i=8}y8wEG=WL#D4`j}yHtyK1>AThNNxUcg?z74Go#On#ONT>4g}3y_5_U%!Rr>+5CbtQ)X= zy{@gPZ*5x38T7F#%hl`X;5Dyg=Gk`e96V^b`pj=)74k}1k1lu>Qt=M(;$mcRF*35a z7}2}=oT-DCSj81WPw=gRc{W{Sp@A)bvrAJMQWUkg7^!nH(tTt0i1%XOa&a|+M?>e` zO#9DRjr>vBx$7rvHB$ST^oA`;e2#v-RwbUJ2dzq)c$3<^qpH-Pqk3>(r_S3tyv@xw zW#2()ln2$Q$fL$}9`(R$BX}Qz!Pk~Lc(A_LmM-ib;T?Xhnb}vO00w2W=h^WfVORc^eu0bPE}9YDM?(O95R>P$U@0`Yu9!@GALL=gmQ4g$`BRg=fJM0neK zPK7Fkg-N>$oaHiYp1qMOI?O@MuMo-kf;oe9LA6?q;yekp#Q6M#vc`6eWW9OT|52A zdCII~A0%fPUj+#`(dvip*+lETAE{lB#^5k-s9%e-)l}ejN&JB#{2f+_t{QJY-|FQ? zU7|YI`LS%R9oTXiu{OMxJbBrZgYae=yhbZNc|ejQwaBPMbG>^=Y(T~25ZO{@%HWuc zl=;OS27Dc9PF>>XOqe8UG&Jroq9#5!rvpAEq{EGN`ua`UcpFWViixyY+K4ZD6$5eg z&1_ZYlp^1tjJQe>XDdvhI02dgNw1g*!R#ltPUu>(~dYv23k7 zISBMc9dV6@N+Vvnm@?^djXKfwn%l(|{&o^>2O33&hz+kLFKxADF@FoqHeyb3SZO{} z;z|p~S{hu5Mx+GeMJ6X^hE-ltcDlbgE+g8olNe+k_Db`_WfMuQwZ-24iG*e1xLXp} zD>*$eWbi~{%Do{I0$1VX+cwtAkaQL6B~5B4HbeHh1@de}m$TJ0kdv#QW?>ER*Os}? zFXj4`MWRTOp+gBb#BkMB7j=ZnR!3k#DeLhP-0$@=8{G#SPM`P`h4y-Va^(4v?_T8e z2P5K%DV!OtF%icr!}#ieem?ewjE{Mi%xn&J*Y#I7kZm|rI*&Fw3D&EKzf0LJPD1qr z@{oh|n7@V2eX{98Q_IBx)vPB-^CV?m=5O}7Q@Vy5^9+r<3AJbNZY?N$2x@LvIA^iD zpYvQfzEatl6(1_DDX=}1=$~Wg&=R-@S9HvUHIQpX5hY6qax6K-{EH!*hd3rXm`z#0 z4kT)87B+jr80=k04^kde{4|cZc?39~k*_OZ{!Qe06@&Ld26O1q?h@;K{&M8#dil@o%!m)VQ$$wj>#uo)?Kzl~uT)`kKRaxPYjsv&R z*~ykc{*4Ce!J`zUBpMQ9!>+@`D#G}|YX*CJ#uioUBTfsJp3l(72FhN}80mGYtxIk`BUEgHZrJ{9io#vMj5k zYV|7NSif=*tV}WVIXUkWCu_*c94cdkcQA!u#ZFvt+mdC+C%ATXsPGP^60A(8T-Dl= z>so{QL zBe+^kP~ja+ELbl87`Ss}OO_d4BkPQWcW^bq%3bR?$ZW}X2Un{JD!hY<1-r$dw<5JA z^K8{<5Z=M{1uH(xezhg@2PPT~!aKOWV5L84U0ZU0aJ8DC!aJB)usaQUH&R>jk>F}I zL4|iPv0(QY^gT#z$s@tlYJv*yU}C}Yhd~(VQMTlx8roPSyn|~CRy?WCC;7qPYBfQH zcQCPF_Zjp7q;{K+1y`#HD!hY<1uH)MKA+^{!PRPl3h!WI!E(Qq;eH%;n@?zHW0CL< zt}WP~GUx%Mw&at+)oOwY?_grV9x~`5q_*TU!PRPl3h!WI!44br14wPjqruf`f(q|o zV!_H>#qn!Pek8bBO;F(-Oe|O#xAbLO@?>zenxMivm{_pl!>4_c-Qa39L4|iPv0%lM z&iN!y1y`#HD!hY<1^bXevtMm%pAW896I6Hy6ASi(2K^XPTXHhET1`;l9ZW3PpEl?O zQd@F1xLQq6;T=pY*l~lVN7<5d!PRPl3h!WI!HOr*y0+xm;A%BNg?BKqV4pB(?h7-- za1bYW!fFdrqt%e7kqV6I&f3@%sT!@rdUB8%^HrWh;)SK}JJ)CBg%68YG&rEJ6evc2E7^Fvv~-zss~dNr+=-mi<48)>P( z!=X_FmnI?nR;dmg{qz*^B&M8vZ|0MU+)ZTI>Lu^eNkl9lV@P)2s1$M6c`TW> z1}8Fa6|uH5MPNXNiqdQC$1g}G69n^I!jdj2Ehex$5X+;JgZuk12U zvzHvNw)6iM!$h_#O|h8xn;-~T#IsCmy$71ZrnKNNZwOQ4;=|txr;| zCz>G9^-0eMIc=uMOK;7yZsxcho+f;~qpWNWy-e#+i7>*a2m zq#Ji%PMRRw9`oB;YS<}j*ApnEkvjEWpHR-udK3dK>(~dYv&{X)^7mZ%W463JHouRG zT%*C>(6V_@w)BqwnzvTHNLTeeR|+Ii^{{yPTy7tGlB?G}ZEo{h-k4 zw|M!y5bG^oJ}<<2in&bBFT{F_m(L5a-s0u+LacYIUp`CQ z>bjh(cEL~$=Lxfy!}C*%g5_y_b?2wH_2P%d8Oo*351C(*&7;*W1mw3F-@vIn^>zkMt>n&)x}ms_zYi$W4=a1F(pJpmS*QM4vg+Ja zsmXq`y;n!D--##pbWjUdSGV+1)80YkuHAn&;LERI(}$M-g%^fIju3w z84@070kMoJe_G!dqXN7^XuZ90OSMuABy$1F(qhg@{(T;yV|s$bHbEtiC*6EOga*?I zmQy6dd>d4v<^sOIp72m}T)i!3CwFI&rip17XaIjN++IkVMQ~oK>nSEbN-P zV+d$8kZI*0Sb3|D=PHJUFE6U^L%kcTM`W*p4X-6nUiQdh9m3{}FajG5jXSwCQ?^0q&V&h^>D)2jsE({BQi6Gi zOnHD#p456bhFHl0>?8(xdEYC|6PNAy)LNT1;MvPR!P{lxi>|Y6irht2U(b9|>fo^^AXLUzK9ySaRF zTK~{Qd@AGp21OoMKb@Dz>gKmu7mKaP?O$oR^Vr! z2sR%@&!i{Z-SKoLA1~ziW%NWE^(QCwPe$P-`SZI2*<}90w3|;( z2p!Mz<#gU}a_PqF zUP$1_eek0u$q&y_kN4vOBv0elPV$9GcYv8G^TQ`1VM}10;cPaO#e>dSe3Rc&C)iNd z5B~_)U_+hMKS@+HLNF1&lyu3>=7m$R$m1oK7D6u3${T-j1_RJ%reL{;lKH2SIak;P z_u?50#muzO1p9LFt207&C{VLfXLp)xCY$R#J$M#IaxKVUGCNVgZisN(6Uc4&Y0M)@ z4)H{)bI6^@Ov{hQ6)W;9mE{Jq)Hq#8r1OR8Q`yXfo6F&c6^5VAyXhSIzsO@-AdeDV zr_YKN{5O@z#JJKMoyg^vJNv zONu|o!iFNn{Tla845s7W6*sl0A@+?3^-OkSirW8kAE ueZ-`bCY7-^WyDouz+$m{hyX-Ne283vA_egQ<3WHA$+AEI5<&3|QV&}Uv;aPkD=l`x zeNci)Ii&5#l`G|8J5J)bIkM8)Cy~=SiRSHM&SN0ka&1Ywj9TIKGn`$QJyUw;Wv z6o=JTlyrzH^+(Wqn4#^588v_?nY}(!#2tKJZ0HB{dfX)B_PxJsfGZ^@3 z2wfM-fI(zCOKtg5M^8}QFDeBBT`NKIawqiex&gTqB<$#F2DK90);tcvc67DaxNUiy zuGdQ3_Km^JUSzgMg4-d7@;Z=$piKpWO&O>XNkPpWksTmX>w*6m@L=Aif?F?wHWImb zBjROh)23%(RcGtVP_n6OHDH-Fh`MeTHrHi()!eTpth-SY6H?;-*|OdcxOvEbqfmW2Orvqq@!tvYHQlA92hU4cB$bx zwTz}(-_xZ2MSVI}QhgJ|-1O)}s~=tSXeNq$*Jea1uR(X#(x4RjDpI*sU#r|ISW>s^ z{p#TJUc2aXTfk2H-0hyveZcq}jOTfj&cMZBK@Xra0KnQFKxY7eYj^;i0RX+=0dxic zIEV+(82}*K1LzDrwTpdtE0lus(09JY4qy;}L?;?wg(5q;;1C60MaLQ(blTAc_bA|c z@;L3Q>ug+a9;baAYzp-N33y`z&DzlgKPlk)^7S;&sEzB-vzUIIt!u*1XW$BvF6bIb z?O+Y{YG|8Uv*M@gUfrfzJDS^?cW!`G_-v>pwG#xU5Kir4L8%`oZ#0E4nlQq_6$Vx6 zRyFf+6@qY_wQg0(Pbf4(sdedp6e#_=%XJeSZJ_z2YU06GHzW;G9>Gjy6g(8V~7 z@BCKcGtjfphb2Dq9vfHE_i&SneTarzeHc_1&^D_NVJE8(St{;BcxQ1p`5V2PWMXs{ zDjHpEe$yQVn{OKSY|e3y%20Vb{IOY$LRSp)Hg)r}m}%Egz2ZY7MDZbUfH{r1b{%TNug_^<>Knp@{m7j_+(`-qrb(dLa~2L(ZjeMEwWk zBkHjTGUk8U#JYc?c`nylZD{=_uz#iDFKeEk0?#$-4>X^r)FZ8H)MR)g zhJ#Wc*T$oFIOx|I=gUq==UMvi;V(NY(Hrd=_Y+-OrZ5|!&L?p^iJshx-d?3Xf;ly! zZa}F6@C1%4DD4N~qfMEBqte005x*E@{`ug~BmP+MBZ&Jn_Ke1k1V0AIUu&BG6#R`6 zN@Dw+zffNY9FJ1(r*0l>eHi>dpi8f}&NROVnoOF~%eoZTrH_WsM_vd7)Ok~SF7hRm zK4?mR?tCQ>R3A2_A3OgFrGIEjJ%JYjP3n`T^xnXiQ2MMceJlKY;NJ$C)$f|pKhveJ zdL{L2AOt^Mw^<>4OCeK3n;Wq;<>Yy%NQHNA3yyHivspw+uP|1hP^flVm=*p%LMw!)L%G^M7% zc9h;SB`5qs;0D!#v8>cb!#l%YLTQyL{TZyZO5JQqufj^J)Mit9(dh}csoPEIJI*jl zeWuhJdLhuR_M6iF(3emeHl;&>2Z9~yK2v%qFoV)5U7~d_1aDN+UP;^Y#=HfSuwbD? zd#+Y{u|o0ec_p|;J*Z1p)JFA8@TMXQ-mDICQc<1-*Q#TtL<_D}_v?~p!L{n=Oo`yDvg6q^1rbJ7uSC>tRmRPTz)+Mh+8`Q6RCEcP8MJ+0n*rHq1Pc$Vx zVn@wutQS|}P|nkXlyVksmH1Sme*+_P0DA3%Rs%TpVfGoou@AHRKGmuQ zTOFJh2Qj;?MI6CgG}yXI_3C&C@oE)UpFm&6)lU%50}@hCBkot{)xEIKa^xSzYG<%D zr&^tV9k{60I$N4AtKU$MM4nbV0sji}KMcQ!{2S^o5x?L0Yn&n8jQkC3KiJyp>{eZ^ ztDHO4_ad8|5ltUgp=CV|xer8jCW!T47T2Z z_)h|xoR~TpIT6^b?o)>_(TuBOo!z*kh%|NMTCW4~dd#%lYKyu9@ecKeD;WRk4TQYd z#{AKnng7XJ=06o3(tL(ApJAM}AM9lO+0K}T$25Ejkk>jdYseK7Q|?E2mf!N6hJ4P% zg#WhAzog@Dn3(X_bpCY{6QUfp!Z9%+QJvpxVnT*=e#l`yrt>kKzoPS3bpCTX|2dsk z0rHIM_&FWFq~q6gtb!V=kDo_&FWFq~q6gteP~vj_=m7Y9{2ej-S)-!eFmC;JE+ue>i8c=zJUB+IbTFP z6kz`Ifq#zp4|Qx)ZVh|~@NnRJh~-hHsph< z3;8B>3i&4N&$OYPY3R8T^y6w0V>{rib#BFY|98$S&i{2*2Mz_E!wwWyOPA4kMd32$ z)sO{=1%3nw11^J1cr=hRBsT0R%;O9;?DJe8m%zT8XYT;>N2rC%DfCG*tn&#RzXr>E z2lMD2XR}J!xFq3HOm+HD<(^;)zqaISn7l&CVT(O`VG;Ni{S#mzY15 z8U+BQ!*23ymYGwr%wyzXIA&96l!jBuY&w-lxYNgyW63P>Cx+7L*gSKmlksdUt+QEo zwpShK8yL7}?{NQ~k%6AkeIo~Yb`SOs?%O-mJJ{dfH#*WkI@-T)uxDVj@4!gU@aUd_ zy}S1g_m1xE8QIe}Iy}ew8bnvJKDB!Wo9 z$?V{6t@<7{F)^M6c1r6v2Hj50&$;9A54!K|+r3xac_cNROSpHbJCCR17h+j=Y!=3u zb(5@Kw|h91b`QrV z1w2eInxd&Q-S@glHyxi+N8(fIR3Q2)I zcRdC@V^fde`uU!?n*ai~F9)In%7JiuV(=K#OJa#sj z%D_F*6V`aFt@dy%nL>A3Be$-4C8M~kZeHPhKVT#!r(@}9HJ*r1xfo^{0FXIxGL}4x zvW!qQG?~e!;Tw6t*hoAxm&$PXs*|~7Ha_d>-Z}_|1rUd(f!yorfqG9mHESR~>cnSr z2|Z4=TXpB7s5SbEN5YlfKe`rlPDuGEM-nLB&dO&>_79@l=sY1+l9Wp*x} zaMOA+0APA3i?KhM1InvG7b=BWTnec1R4zT`9_Eya>7@V{pB!d2^GJ zi3pQ_VXE(*P9)64i?Lg|4^)y6BFH&8B~G= zls7wDQ`!UR7|u9pgMfazdqy$$&1zACw^kbJUN>7rup=hAL$8qjVwEf2O%U^1~CbQ5T3#z%{iq0?PB zS7M5tjA!et!~Qn)Fqgy6)v?J(aW`#C5ka5miB6jkj z2uGaN?PFxtg3Los`|0I2ixx1zPKvXvC#caI0~?+8NU%L@6G4TRW>I`~`xz$^X+Iqd zbtoJTu8$%3pR`^6ozUv`%fIJDLQwXW4y9Xh2Fy_tHK1dMT1KuBPoI!hb3-$fy!`uU zVEgF}ut^{o0_!O5JV%2N6ImXGTHxA&27SF5?Y#W^u*wN-6}E4d(fM{ZGFN28l?2U; zxlf1DrsXu{>XsHL;PrvQf>|rY5J)}Sdslg_r`Zgx=4EwX`)M?@18TKs^+2bPN%z8F>>zeK?8xK>Wy-f0Z@BcMU-J@ZC>6cK84L z)o=eF*lM5!)YKFCSsdrvP%gH_3P1{m2!`4=u#E#+hXLJ7tnVqu+>LazD_NHuB!nslXbZZjYvtqfbn^b3D`I^oDhqgWG#8+}BV~UvSjZa~C`BizlZ$_h0NB z##L+Q{?7ay-TCCsPF%($;xln~nu}l(G0n`yrbub7mpgZAC;)mzz-sx$P^NSL2QGGU z(LZL(&`Va-(-#OHjmGTK#2=-uNz9M596B4N|QsIl`ow{zzQ z&QKM-g#pW)@v{AvERO|kNTS_Zoy?J3mTTh9{WGyd#@*R@FqYw>H(@R^N8C9#IqfE= z<_(3ZJz()QhS*t;(!7Rwm#I9KoN=*AnU2PC*%Viuuu@_^IyoQBo^zv9=E|e{?QhjW zexP^0=(4sO!R5>#&AUkrki4j??@gV@W@fM*qP^4`G(CCm?tvHL3Wzrx*h&vO@C9($oBm{X^g7@IE64TJ|{)Znn zmqZf-Zf}22U(evKo)fqEk2L9EHK z(Cr3E-nL&{?7Tmgj&q8TY1$YHGgsW3x-E8{dePn~bD||%FWO6;F7ILbI-^t1r83Nr zrqbTUoi%P7x_3U40glFDGTF|@l@-v|^68hiFL~p-| z`gd0~(e55?B0Wot$Im8X*<2d_?47lbWBX**#rX`wkK;A(wVatiV>)bs*{W8*%JUOf zqmQ0+p-@tLWkDeCKxhz~R_uhs*tEdDB=(v0rmLkTuFbLYKaTmz8Vz}w)-99;oP69( z%oytYDS0fD-@%rXFh}`FYDzCF^!^7;_#__Xc@2*g{FkzI*NF`G;(6w0!^F_`v?s&j z9ot|`qA_j}(B}4fuEvGpnd>u;AH*h)o4#7}xL*%{_%=sFzzf~UY_M`E$(DTPh?CNM>9p+%u$>tqh=WB-NijPdEhy;Uv$({ z|DeoK7JCV1-)AzLu1i;C@ujP>MwVwB8jHP(RT(x-^mE`?VQ_6j&{xvj%TVYMQe24npYqTY!`UW>$l8&>eE;~{Bl`uEqe7(@y_kiB4TL~ zF}Adb(7W)Qh5eUC`7?W;{}%rOnj zRuOnabHNR+FJl$)Ps`3rKVz$i+Ru^=Ehb8w_-d^tJSX;BO*HYQuzB}WsbRcKi2EpY z-bUeVWxj#>7DA&us78UuCP%Hb^uXGSGVrPe-XUP{#}nu2aOsl5TLvCSv;V@%4EiQG zQVKIDz9~}au{M(P;M)ULZcw)aU4CmCK)gcGSfEhqOg;Sq@qA;!yT|ND;RkE>0~W!m z$>UoSyggi0p-N$K(ryE1x#U@3521<VtW>Xgku)l1c<;Y#NMp<{X!M-f4#0YSQjf(ZAg6Rdeb z3GaMW52EH#spwBGWab?wyn5vYx@sv-IEY197IzYyUutV0u1Fa3B7^e0Cq*qFr!4aX zD{_^p3JZ|r+3AiUpwVFKT+TzVw-^*p9}Khxarw8y2&^+yt7}g-G)JTIs>vu-S3H94 z+FpuWpv*evZc(F z!7&*r^UE;|_{vXFUE+%-OcFI38h02`6Q51f0iVRt;aWR={U&X^jiyQYMA|HE#Fwe^ zfw=l+wyJYVp08gbcnC)ZM%#WkR` zw#;>?$m`FGH{Pd0sMYPmR|n)L)}o}{eH{PjL}O4o2houP3zq4o^kcE7?0jf%tK zIg8y(ITy<*DV3dB@xk4i0^380rE?4&S_1dr@{YN<26C+^qGSm{js=HUcrj%25XWQ( zvnh+%fkbW1!e&nxgS`vsLCRx_pT!Y1kGMut@|7UWzp*T@V(`9WbUu}fW>eABWCm~l zyLxJNXJ+sYeMYA4*;tz2mWg_+7``l)&L#P-QZ$~8rjpTEG~<0$BvrWPp*rH4e%CC- z@$jFX^RF|~j7xWmV1%L|j#>mPDpcBvr^#=_v2?cx-(xGfTU6tVa5SJjBXF)@kd>;e z@JPpj+vx0M%OL+o1NGoh2vQOaiLqf>0)wz=XW!;q^)gxi@j{vyQsUVw%@prW=a~Dwlnn$a+3DLRfACgK470e`?4&n zqiXdk;aIoZawo`^e5-%8nxMklpIERmOL7<8mb}%!T1`;l?N2ONxeDPL-Ilz~ zzgkUD;q6Z>ST6qx_iAe>K6%UF#^wY{|F#SE~ssy#0vSnjtn+=at#^HB|LEE3-S zwFUb=gC0U^OFrgbttP1O_9qtX0fQbvYD+%pU#%vn@b)Jb?5IKCi`14p?q97YsPOhD z7Oc!w9KW{Yhy1J61Qp)?#DbM^OJBAnPy1J^2`aq(i3KY@e4<3M>tC%VsPOhD7OZ&E z=@Q8^{?%%N3U7a6!QOAs>{r{`XZ@?y1Qp)?#DaalL7zctOOE?js|hN+{fPzpa|Rtl zYD-T0SE~ssy#0vSn(uU*Ool*U#%vn@b)Jb?4t(FePMNgxQh_nuUK^V{RikxSPYyC;zRGh*ys#|!c&pS7vHDdEjcHQ#sVKQD zF4dBvO1Gp4s}y)aUm8f?s0r+iCGxRlOWB5%%Jv?BFNLy3X{*Fx>(#Vg`chq_+(=7H zTh3k-KEk)wl)PA%sqmHjVkT=XUl{5_StMB5)#cudh!z}E|64jm52-#_#=H)|+v&V= zTT|NGVf2>ghDzO4==_@ZPH0D|UZSr|G_of}I^yb|S*y-xl}u1-#-D{zPg7p)QQr)n z`4>l!Z#Xn+;KC$?-`v!Jqo1B4p2U=s@AZ5#k-LcuTfF3LI*Et{WDLpf8_E62E0E_en&3mZJrfgg z{G63RGW83rP*0#Bxt~~1J<_u7^}Fv%i87!mxt)Lp1M620wj^0iRyuRLiN;TKeUi5Nv8WMNpQLRya`hvtPg125kss$$SbdUiFRfljxjsoeyEGc=lhog+ z7}Tpz(!T2^N$v$SBCx(TjWr^|)TvL>q3b5;zUwCG+TC|#6YR4F@69wC>g%VYjfz3N z`Xn8@Zjw%3H%a5yO%m@PH5%&cr|Cw;pk95F-0LQ3=DJC`cK7wz1bdEH%+_#y{gl3L z*2`QsN!RYaoHRkUJr=gL)UZ?5t|w4RBX#P%KB1iL^(Y2f*0B#(XPNtpY~ zY<}|-xkiJ%p=I-+Z0ViSYu;M*B3;$@Tq%%5)x*-|bGd!&Nv>Y^w7D&8eOuDf<+E+O zT71{G-qPjsVyw4x`MenGEnPk@#(GPa&x^6%(&h7FthaReycp{(T|O_ydP|qji?QB2 z{qkAbR@dcRwF`!7I8T_p9A21O6f95ctGh6@trtHK&QLCOVaURgY#yz4!8dQ~B@56J|V$o7p6gvpsPAj={qi!hfQ`!fVSqdwAuF_V_dTnJfjX5i=E$n)B_fU+4Vt+W-KOG@`=gpTP^97P0`Je70{ z1rhE~CsagR(;Y|rrUKZYmZpRK3J1wYj$AA=ikmE zzLD^5xrh>5l(vy@JJ2ZN?l!!ZJbBq8i**Pq8es%B8X9+UX{Kyn(47erIMd=W->8nP zCsO=*h)j9#O`foNJBC=n0_-FPdFkFOEfAOO)YMv=HsI;4bb`0b#OGaSaa~WZ6xPyE zax8TD!d+(bkcS4_!Gld%#HkLoH4B?PVGObW@JjwM>)nfEfe(`7W90b0cr@*1Qn~b$ z8+9|;_^keci0Dkp`|XGz{hUPd}a2Y#?>kjb(Cach*g2Gu_fW zHi)xo@rsOCKBQ$qYkY&2HT|!S#^;kzIup;3grUlYqDN5aiP^Y&>fK2%_wL|H6 z_S~$SjZX<3&*0^B-tT1TjuApW7gdzXegbI&F7ovui3cwnfZ7s zDZDy;c@3Y7;Rko{LnHAI7OBU3WImE-@e3r`+_XEy%#8Ul5|Oakx6Wufol4{3<21gL zZ>i&NDC@^~gsZ=yj_IEX${WF-2wyL{;HI;}$zSA=g1ZVKmtWx!L3C)Rdda;KvR|pUAq&4EjIM z<5piD1-kAMD^~E|L@a~fk&h+Jm#U;`{(U`~ybw>Pl5Cq0R&d(9y506Hu%ON*9#{EE zd=c;8@A(}bA!9oC!$Rrf%ts4lJ9o*V!<*_DdLxO%5$sT@*~}DP0&u&h&9800wG}*8 z$(0{Zdkh_3lK*)WHkx6pm#A$fz0IVu0U%G?_8a&wiZ~`KU?d z#kP~CJZ{p5Oge2+8D}%5eAc9Klcr57o;PpGOUZSzz{}p}3_kn5>m+YU%sa{g{~!Fb B&x8N~ diff --git a/.ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb b/team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task1.ipynb similarity index 100% rename from .ipynb_checkpoints/iQuHack-challenge-2023-task1-checkpoint.ipynb rename to team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task1.ipynb diff --git a/team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task2.ipynb b/team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task2.ipynb new file mode 100644 index 0000000..bc06808 --- /dev/null +++ b/team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task2.ipynb @@ -0,0 +1,469 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "# MIT iQuHack Microsoft Challenge: Optimizing Quantum Oracles, Task 2\n", + "\n", + "To work on this task,\n", + "1. Use the notebook for this task. Each of the notebooks in the repository has the code of the corresponding task.\n", + "2. Update your team name and Slack ID variables in the next code cell (you can use different Slack IDs for different tasks if different team members work on them, but make sure to use the same team name throughout the Hackathon). Do not change the task variable!\n", + "3. Work on your task in the cell that contains operation `Task2`! Your goal is to rewrite the code so that it maintains its correctness, but requires as few resources as possible. See `evaluate_results` function for details on how your absolute score for the task is calculated.\n", + "4. Submit your task using qBraid. Use the Share Notebook feature on qBraid (See File > Share Notebook) and enter the email rickyyoung@qbraid.com. Once you click submit, if the share notebook feature works correctly, it should show that you receive no errors and the email you entered will disappear. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "Log in to Azure (once per session, don't need to do it if running from Azure workspace)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "!az login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 1. Write the code" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Run this code cell to import the modules required to work with Q# and Azure\n", + "import qsharp\n", + "from qsharp import azure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", + "task=[\"task2\"]\n", + "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# You don't need to run this cell, it defines Q# operations as Python types to keep IntelliSense happy\n", + "Task2_DumpMachineWrapper : qsharp.QSharpCallable = None\n", + "Task2_ResourceEstimationWrapper : qsharp.QSharpCallable = None" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "**The complete code for Task 2 should be in this cell.** \n", + "This cell can include additional open statements and helper operations and functions if your solution needs them. \n", + "If you define helper operations in other cells, they will not be picked up by the grader!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "microsoft": { + "language": "qsharp" + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "%%qsharp\n", + "open Microsoft.Quantum.Canon;\n", + "open Microsoft.Quantum.Diagnostics;\n", + "\n", + "// Task 2. Celebrate MIT iQuHack!\n", + "// (input will contain 5 qubits)\n", + "operation Task2(input : Qubit[], target : Qubit) : Unit is Adj {\n", + " // Necessary\n", + " \n", + " ControlledOnInt(13, X)(input, target); // M\n", + " ControlledOnInt( 8, X)(input, target); // H\n", + " \n", + " // Can be simplified (pairs)\n", + " \n", + " //ControlledOnInt(20, X)(input, target); // T\n", + " //ControlledOnInt(21, X)(input, target); // U\n", + " \n", + " X(input[1]);\n", + " X(input[3]);\n", + " Controlled X([input[1], input[2], input[3], input[4]], target);\n", + " X(input[1]);\n", + " X(input[3]);\n", + " \n", + " \n", + " //ControlledOnInt(17, X)(input, target); // Q\n", + " //ControlledOnInt( 1, X)(input, target); // A\n", + " \n", + " X(input[1]);\n", + " X(input[2]);\n", + " X(input[3]);\n", + " Controlled X([input[0], input[1], input[2], input[3]], target);\n", + " X(input[1]);\n", + " X(input[2]);\n", + " X(input[3]);\n", + " \n", + " //ControlledOnInt( 3, X)(input, target); // C\n", + " //ControlledOnInt(11, X)(input, target); // K\n", + " \n", + " X(input[2]);\n", + " X(input[4]);\n", + " Controlled X([input[0], input[1], input[2], input[4]], target);\n", + " X(input[2]);\n", + " X(input[4]);\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "microsoft": { + "language": "qsharp" + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "%%qsharp\n", + "// Wrapper operation that allows you to observe the effects of the marking oracle by running it on a simulator.\n", + "operation Task2_DumpMachineWrapper() : Unit {\n", + " let N = 5;\n", + " use (input, target) = (Qubit[N], Qubit());\n", + " // Prepare an equal superposition of all input states in the input register.\n", + " ApplyToEach(H, input);\n", + " // Apply the oracle.\n", + " Task2(input, target);\n", + " // Print the state of the system after the oracle application.\n", + " DumpMachine();\n", + " ResetAll(input + [target]);\n", + "}\n", + "\n", + "// Wrapper operation that allows to run resource estimation for the task.\n", + "// This operation only allocates the qubits and applies the oracle once, not using any additional gates or measurements.\n", + "operation Task2_ResourceEstimationWrapper() : Unit {\n", + " let N = 5;\n", + " use (input, target) = (Qubit[N], Qubit());\n", + " Task2(input, target);\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 2. Run the code on a simulator to see what it does\n", + "You can also write your own code to explore the effects of the oracle (for example, applying it to different basis states and measuring the results)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", + "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", + "qsharp.config[\"dump.phaseDisplayStyle\"]=\"None\"\n", + "# Uncomment the following line if you want to see only the entries with non-zero amplitudes\n", + "# qsharp.config[\"dump.truncateSmallAmplitudes\"]=True\n", + "Task2_DumpMachineWrapper.simulate()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 3. Evaluate the code using resource estimation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", + "# If you're using this notebook in qBraid, keep it\n", + "qsharp.azure.connect(\n", + " resourceId=\"/subscriptions/6d61051a-6e40-4845-a03a-3c5160bb5629/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/iQuHack-Workspace-micpap25\",\n", + " location=\"East US\",\n", + " credential=\"CLI\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "qsharp.azure.target(\"microsoft.estimator\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", + "result = qsharp.azure.execute(Task2_ResourceEstimationWrapper, jobName=\"RE for the task 2\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", + "# result = qsharp.azure.output(\"...\")\n", + "result" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# The function that extracts the relevant resource information from the resource estimation job results and produces your absolute score.\n", + "def evaluate_results(res) : \n", + " width = res['physicalCounts']['breakdown']['algorithmicLogicalQubits']\n", + " depth = res['physicalCounts']['breakdown']['algorithmicLogicalDepth']\n", + " print(f\"Logical algorithmic qubits = {width}\")\n", + " print(f\"Algorithmic depth = {depth}\")\n", + " print(f\"Score = {width * depth}\")\n", + " return width * depth\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "evaluate_results(result)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%trace Task2_ResourceEstimationWrapper" + ] + } + ], + "metadata": { + "kernel_info": { + "name": "python3" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task3.ipynb b/team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task3.ipynb new file mode 100644 index 0000000..c5d3c7e --- /dev/null +++ b/team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task3.ipynb @@ -0,0 +1,508 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "# MIT iQuHack Microsoft Challenge: Optimizing Quantum Oracles, Task 3\n", + "\n", + "To work on this task,\n", + "1. Use the notebook for this task. Each of the notebooks in the repository has the code of the corresponding task.\n", + "2. Update your team name and Slack ID variables in the next code cell (you can use different Slack IDs for different tasks if different team members work on them, but make sure to use the same team name throughout the Hackathon). Do not change the task variable!\n", + "3. Work on your task in the cell that contains operation `Task3`! Your goal is to rewrite the code so that it maintains its correctness, but requires as few resources as possible. See `evaluate_results` function for details on how your absolute score for the task is calculated.\n", + "4. Submit your task using qBraid. Use the Share Notebook feature on qBraid (See File > Share Notebook) and enter the email rickyyoung@qbraid.com. Once you click submit, if the share notebook feature works correctly, it should show that you receive no errors and the email you entered will disappear. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "Log in to Azure (once per session, don't need to do it if running from Azure workspace)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "!az login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 1. Write the code" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Run this code cell to import the modules required to work with Q# and Azure\n", + "import qsharp\n", + "from qsharp import azure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", + "task=[\"task3\"]\n", + "slack_id=\"U04JZ2Q9Z9B\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# You don't need to run this cell, it defines Q# operations as Python types to keep IntelliSense happy\n", + "Task3_DumpMachineWrapper : qsharp.QSharpCallable = None\n", + "Task3_ResourceEstimationWrapper : qsharp.QSharpCallable = None" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "**The complete code for Task 3 should be in this cell.** \n", + "This cell can include additional open statements and helper operations and functions if your solution needs them. \n", + "If you define helper operations in other cells, they will not be picked up by the grader!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "microsoft": { + "language": "qsharp" + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "%%qsharp\n", + "open Microsoft.Quantum.Canon;\n", + "open Microsoft.Quantum.Diagnostics;\n", + "\n", + "// Task 3. \n", + "// (input will contain 6 qubits)\n", + "operation Task3(input : Qubit[], target : Qubit) : Unit is Adj {\n", + " //for i in [7, 11, 13, 14, 19, 21, 22, 25, 26, 28, 35, 37, 38, 41, 42, 44, 49, 50, 52, 56] {\n", + " // ControlledOnInt(i, X)(input, target);\n", + " //}\n", + " \n", + " // optimization 1:\n", + " //X(input[5]);\n", + " //Controlled Task3_0([input[5]], (input[...4], target));\n", + " //X(input[5]);\n", + " //Controlled Task3_1([input[5]], (input[...4], target));\n", + " \n", + " // optimization 2:\n", + " within {\n", + " X(input[5]);\n", + " X(input[4]);\n", + " }\n", + " apply {\n", + " Controlled Task3_00([input[5], input[4]], (input[...3], target)); // top bits: 00\n", + " }\n", + " Controlled Task3_11([input[5], input[4]], (input[...3], target)); // top bits: 11\n", + " \n", + " within {\n", + " CNOT(input[5], input[4]); // input[4] = input[5] ^ input[4]\n", + " }\n", + " apply {\n", + " Controlled Task3_01([input[4]], (input[...3], target)); // top bits: 01 or 10\n", + " }\n", + "}\n", + "\n", + "operation Task3_0(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", + " //for i in [7, 11, 13, 14, 19, 21, 22, 25, 26, 28] {\n", + " // ControlledOnInt(i, X)(input, target);\n", + " //}\n", + " X(input[4]);\n", + " Controlled Task3_00([input[4]], (input[...3], target));\n", + " X(input[4]);\n", + " Controlled Task3_01([input[4]], (input[...3], target));\n", + "}\n", + "\n", + "operation Task3_00(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", + " for i in [7, 11, 13, 14] {\n", + " ControlledOnInt(i, X)(input, target);\n", + " }\n", + "}\n", + "\n", + "operation Task3_01(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", + " for i in [3, 5, 6, 9, 10, 12] {\n", + " ControlledOnInt(i, X)(input, target);\n", + " }\n", + "}\n", + "\n", + "operation Task3_1(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", + " //for i in [3, 5, 6, 9, 10, 12, 17, 18, 20, 24] {\n", + " // ControlledOnInt(i, X)(input, target);\n", + " //}\n", + " X(input[4]);\n", + " Controlled Task3_01([input[4]], (input[...3], target));\n", + " X(input[4]);\n", + " Controlled Task3_11([input[4]], (input[...3], target));\n", + "}\n", + "\n", + "// same as Task3_01, we can optimize by re-using the circuit\n", + "//operation Task3_10(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", + "// for i in [3, 5, 6, 9, 10, 12] {\n", + "// ControlledOnInt(i, X)(input, target);\n", + "// }\n", + "//}\n", + "\n", + "operation Task3_11(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", + " for i in [1, 2, 4, 8] {\n", + " ControlledOnInt(i, X)(input, target);\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "microsoft": { + "language": "qsharp" + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "%%qsharp\n", + "// Wrapper operation that allows you to observe the effects of the marking oracle by running it on a simulator.\n", + "operation Task3_DumpMachineWrapper() : Unit {\n", + " let N = 6;\n", + " use (input, target) = (Qubit[N], Qubit());\n", + " // Prepare an equal superposition of all input states in the input register.\n", + " ApplyToEach(H, input);\n", + " // Apply the oracle.\n", + " Task3(input, target);\n", + " // Print the state of the system after the oracle application.\n", + " DumpMachine();\n", + " ResetAll(input + [target]);\n", + "}\n", + "\n", + "// Wrapper operation that allows to run resource estimation for the task.\n", + "// This operation only allocates the qubits and applies the oracle once, not using any additional gates or measurements.\n", + "operation Task3_ResourceEstimationWrapper() : Unit {\n", + " let N = 6;\n", + " use (input, target) = (Qubit[N], Qubit());\n", + " Task3(input, target);\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 2. Run the code on a simulator to see what it does\n", + "You can also write your own code to explore the effects of the oracle (for example, applying it to different basis states and measuring the results)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", + "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", + "qsharp.config[\"dump.phaseDisplayStyle\"]=\"None\"\n", + "# Uncomment the following line if you want to see only the entries with non-zero amplitudes\n", + "# qsharp.config[\"dump.truncateSmallAmplitudes\"]=True\n", + "Task3_DumpMachineWrapper.simulate()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 3. Evaluate the code using resource estimation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", + "# If you're using this notebook in qBraid, keep it\n", + "qsharp.azure.connect(\n", + " resourceId=\"/subscriptions/1b6547eb-50f1-4733-bd8b-4b8c52ff49bd/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/QuantumTests\",\n", + " location=\"West US\",\n", + " credential=\"CLI\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "qsharp.azure.target(\"microsoft.estimator\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", + "result = qsharp.azure.execute(Task3_ResourceEstimationWrapper, jobName=\"RE for the task 3\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", + "# result = qsharp.azure.output(\"...\")\n", + "result" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# The function that extracts the relevant resource information from the resource estimation job results and produces your absolute score.\n", + "def evaluate_results(res) : \n", + " width = res['physicalCounts']['breakdown']['algorithmicLogicalQubits']\n", + " depth = res['physicalCounts']['breakdown']['algorithmicLogicalDepth']\n", + " print(f\"Logical algorithmic qubits = {width}\")\n", + " print(f\"Algorithmic depth = {depth}\")\n", + " print(f\"Score = {width * depth}\")\n", + " return width * depth\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "evaluate_results(result)" + ] + } + ], + "metadata": { + "kernel_info": { + "name": "python3" + }, + "kernelspec": { + "display_name": "Python 3 [Q#]", + "language": "python", + "name": "python3_qsharp_b54crn" + }, + "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.10" + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task7.ipynb b/team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task7.ipynb new file mode 100644 index 0000000..495a6ed --- /dev/null +++ b/team_solutions/Quantum Wranglers/iQuHack-challenge-2023-task7.ipynb @@ -0,0 +1,433 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "# MIT iQuHack Microsoft Challenge: Optimizing Quantum Oracles, Task 7\n", + "\n", + "To work on this task,\n", + "1. Use the notebook for this task. Each of the notebooks in the repository has the code of the corresponding task.\n", + "2. Update your team name and Slack ID variables in the next code cell (you can use different Slack IDs for different tasks if different team members work on them, but make sure to use the same team name throughout the Hackathon). Do not change the task variable!\n", + "3. Work on your task in the cell that contains operation `Task7`! Your goal is to rewrite the code so that it maintains its correctness, but requires as few resources as possible. See `evaluate_results` function for details on how your absolute score for the task is calculated.\n", + "4. Submit your task using qBraid. Use the Share Notebook feature on qBraid (See File > Share Notebook) and enter the email rickyyoung@qbraid.com. Once you click submit, if the share notebook feature works correctly, it should show that you receive no errors and the email you entered will disappear. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "Log in to Azure (once per session, don't need to do it if running from Azure workspace)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "!az login" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 1. Write the code" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Run this code cell to import the modules required to work with Q# and Azure\n", + "import qsharp\n", + "from qsharp import azure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", + "task=[\"task7\"]\n", + "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# You don't need to run this cell, it defines Q# operations as Python types to keep IntelliSense happy\n", + "Task7_DumpMachineWrapper : qsharp.QSharpCallable = None\n", + "Task7_ResourceEstimationWrapper : qsharp.QSharpCallable = None" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "**The complete code for Task 7 should be in this cell.** \n", + "This cell can include additional open statements and helper operations and functions if your solution needs them. \n", + "If you define helper operations in other cells, they will not be picked up by the grader!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "microsoft": { + "language": "qsharp" + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "%%qsharp\n", + "open Microsoft.Quantum.Canon;\n", + "open Microsoft.Quantum.Diagnostics;\n", + "\n", + "// Task 7. \n", + "// (input will contain 7 qubits)\n", + "operation Task7(input : Qubit[], target : Qubit) : Unit is Adj {\n", + " for i in [9,18,19,25,36,37,38,39,41,50,51,57,72,73,74,75,76,77,78,79,82,83,89,100,101,102,103,105,114,115,121] {\n", + " ControlledOnInt(i, X)(input, target);\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "microsoft": { + "language": "qsharp" + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "%%qsharp\n", + "// Wrapper operation that allows you to observe the effects of the marking oracle by running it on a simulator.\n", + "operation Task7_DumpMachineWrapper() : Unit {\n", + " let N = 7;\n", + " use (input, target) = (Qubit[N], Qubit());\n", + " // Prepare an equal superposition of all input states in the input register.\n", + " ApplyToEach(H, input);\n", + " // Apply the oracle.\n", + " Task7(input, target);\n", + " // Print the state of the system after the oracle application.\n", + " DumpMachine();\n", + " ResetAll(input + [target]);\n", + "}\n", + "\n", + "// Wrapper operation that allows to run resource estimation for the task.\n", + "// This operation only allocates the qubits and applies the oracle once, not using any additional gates or measurements.\n", + "operation Task7_ResourceEstimationWrapper() : Unit {\n", + " let N = 7;\n", + " use (input, target) = (Qubit[N], Qubit());\n", + " Task7(input, target);\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 2. Run the code on a simulator to see what it does\n", + "You can also write your own code to explore the effects of the oracle (for example, applying it to different basis states and measuring the results)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", + "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", + "qsharp.config[\"dump.phaseDisplayStyle\"]=\"None\"\n", + "# Uncomment the following line if you want to see only the entries with non-zero amplitudes\n", + "qsharp.config[\"dump.truncateSmallAmplitudes\"]=True\n", + "Task7_DumpMachineWrapper.simulate()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "nteract": { + "transient": { + "deleting": false + } + } + }, + "source": [ + "## Step 3. Evaluate the code using resource estimation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", + "# If you're using this notebook in qBraid, keep it\n", + "qsharp.azure.connect(\n", + " resourceId=\"/subscriptions/6d61051a-6e40-4845-a03a-3c5160bb5629/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/iQuHack-Workspace-micpap25\",\n", + " location=\"East US\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "qsharp.azure.target(\"microsoft.estimator\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", + "result = qsharp.azure.execute(Task7_ResourceEstimationWrapper, jobName=\"RE for the task 7\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", + "# result = qsharp.azure.output(\"...\")\n", + "result" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "# The function that extracts the relevant resource information from the resource estimation job results and produces your absolute score.\n", + "def evaluate_results(res) : \n", + " width = res['physicalCounts']['breakdown']['algorithmicLogicalQubits']\n", + " depth = res['physicalCounts']['breakdown']['algorithmicLogicalDepth']\n", + " print(f\"Logical algorithmic qubits = {width}\")\n", + " print(f\"Algorithmic depth = {depth}\")\n", + " print(f\"Score = {width * depth}\")\n", + " return width * depth\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "outputs_hidden": false, + "source_hidden": false + }, + "nteract": { + "transient": { + "deleting": false + } + } + }, + "outputs": [], + "source": [ + "evaluate_results(result)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernel_info": { + "name": "python3" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 7ddfbf8b8df8d7931a12b719f93b838ac32a80a5 Mon Sep 17 00:00:00 2001 From: Michael Papadopoulos Date: Sun, 29 Jan 2023 09:13:37 -0500 Subject: [PATCH 13/13] Reset changes --- iQuHack-challenge-2023-task1.ipynb | 36 +- iQuHack-challenge-2023-task2.ipynb | 77 +- iQuHack-challenge-2023-task3.ipynb | 82 +- iQuHack-challenge-2023-task7.ipynb | 4629 +--------------------------- 4 files changed, 101 insertions(+), 4723 deletions(-) diff --git a/iQuHack-challenge-2023-task1.ipynb b/iQuHack-challenge-2023-task1.ipynb index afbfe30..6042c2b 100644 --- a/iQuHack-challenge-2023-task1.ipynb +++ b/iQuHack-challenge-2023-task1.ipynb @@ -36,6 +36,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -68,6 +69,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -89,6 +91,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -101,15 +104,16 @@ }, "outputs": [], "source": [ - "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", + "teamname=\"msft_is_the_best\" # Update this field with your team name\n", "task=[\"task1\"]\n", - "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + "slack_id=\"myslackid\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" ] }, { "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -146,6 +150,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -168,12 +173,15 @@ "// Task 1. Warm up with simple bit manipulation\n", "// (input will contain 3 qubits)\n", "operation Task1(input : Qubit[], target : Qubit) : Unit is Adj {\n", + " let N = Length(input);\n", + " use aux = Qubit[N - 1];\n", " within {\n", - " CNOT(input[2], input[0]);\n", - " CNOT(input[2], input[1]);\n", - " CNOT(input[1], input[0]);\n", + " for i in 0 .. N - 2 {\n", + " CNOT(input[i], aux[i]);\n", + " CNOT(input[i + 1], aux[i]);\n", + " }\n", " } apply {\n", - " Controlled X([input[1], input[0]], target);\n", + " Controlled X(aux, target);\n", " }\n", "}" ] @@ -182,6 +190,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -238,6 +247,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -275,6 +285,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -290,8 +301,8 @@ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", "qsharp.azure.connect(\n", - " resourceId=\"/subscriptions/6d61051a-6e40-4845-a03a-3c5160bb5629/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/iQuHack-Workspace-micpap25\",\n", - " location=\"East US\",\n", + " resourceId=\"...\",\n", + " location=\"...\",\n", " credential=\"CLI\")" ] }, @@ -299,6 +310,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -318,6 +330,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -338,6 +351,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -359,6 +373,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -385,6 +400,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -406,7 +422,7 @@ "name": "python3" }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3 [Default]", "language": "python", "name": "python3" }, @@ -420,7 +436,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.9.10" }, "nteract": { "version": "nteract-front-end@1.0.0" diff --git a/iQuHack-challenge-2023-task2.ipynb b/iQuHack-challenge-2023-task2.ipynb index bc06808..44cc5cd 100644 --- a/iQuHack-challenge-2023-task2.ipynb +++ b/iQuHack-challenge-2023-task2.ipynb @@ -36,6 +36,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -68,6 +69,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -89,6 +91,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -101,15 +104,16 @@ }, "outputs": [], "source": [ - "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", + "teamname=\"msft_is_the_best\" # Update this field with your team name\n", "task=[\"task2\"]\n", - "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + "slack_id=\"myslackid\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" ] }, { "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -146,6 +150,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -168,42 +173,17 @@ "// Task 2. Celebrate MIT iQuHack!\n", "// (input will contain 5 qubits)\n", "operation Task2(input : Qubit[], target : Qubit) : Unit is Adj {\n", - " // Necessary\n", - " \n", " ControlledOnInt(13, X)(input, target); // M\n", + " ControlledOnInt( 9, X)(input, target); // I\n", + " ControlledOnInt(20, X)(input, target); // T\n", + "\n", + " ControlledOnInt( 9, X)(input, target); // I\n", + " ControlledOnInt(17, X)(input, target); // Q\n", + " ControlledOnInt(21, X)(input, target); // U\n", " ControlledOnInt( 8, X)(input, target); // H\n", - " \n", - " // Can be simplified (pairs)\n", - " \n", - " //ControlledOnInt(20, X)(input, target); // T\n", - " //ControlledOnInt(21, X)(input, target); // U\n", - " \n", - " X(input[1]);\n", - " X(input[3]);\n", - " Controlled X([input[1], input[2], input[3], input[4]], target);\n", - " X(input[1]);\n", - " X(input[3]);\n", - " \n", - " \n", - " //ControlledOnInt(17, X)(input, target); // Q\n", - " //ControlledOnInt( 1, X)(input, target); // A\n", - " \n", - " X(input[1]);\n", - " X(input[2]);\n", - " X(input[3]);\n", - " Controlled X([input[0], input[1], input[2], input[3]], target);\n", - " X(input[1]);\n", - " X(input[2]);\n", - " X(input[3]);\n", - " \n", - " //ControlledOnInt( 3, X)(input, target); // C\n", - " //ControlledOnInt(11, X)(input, target); // K\n", - " \n", - " X(input[2]);\n", - " X(input[4]);\n", - " Controlled X([input[0], input[1], input[2], input[4]], target);\n", - " X(input[2]);\n", - " X(input[4]);\n", + " ControlledOnInt( 1, X)(input, target); // A\n", + " ControlledOnInt( 3, X)(input, target); // C\n", + " ControlledOnInt(11, X)(input, target); // K\n", "}" ] }, @@ -211,6 +191,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -267,6 +248,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -304,6 +286,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -319,8 +302,8 @@ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", "qsharp.azure.connect(\n", - " resourceId=\"/subscriptions/6d61051a-6e40-4845-a03a-3c5160bb5629/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/iQuHack-Workspace-micpap25\",\n", - " location=\"East US\",\n", + " resourceId=\"...\",\n", + " location=\"...\",\n", " credential=\"CLI\")" ] }, @@ -328,6 +311,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -347,6 +331,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -367,6 +352,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -388,6 +374,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -414,6 +401,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -428,15 +416,6 @@ "source": [ "evaluate_results(result)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%trace Task2_ResourceEstimationWrapper" - ] } ], "metadata": { @@ -444,7 +423,7 @@ "name": "python3" }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3 [Default]", "language": "python", "name": "python3" }, @@ -458,7 +437,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.9.10" }, "nteract": { "version": "nteract-front-end@1.0.0" diff --git a/iQuHack-challenge-2023-task3.ipynb b/iQuHack-challenge-2023-task3.ipynb index bfaf4b5..77ca776 100644 --- a/iQuHack-challenge-2023-task3.ipynb +++ b/iQuHack-challenge-2023-task3.ipynb @@ -104,9 +104,9 @@ }, "outputs": [], "source": [ - "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", + "teamname=\"msft_is_the_best\" # Update this field with your team name\n", "task=[\"task3\"]\n", - "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + "slack_id=\"myslackid\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" ] }, { @@ -173,75 +173,7 @@ "// Task 3. \n", "// (input will contain 6 qubits)\n", "operation Task3(input : Qubit[], target : Qubit) : Unit is Adj {\n", - " //for i in [7, 11, 13, 14, 19, 21, 22, 25, 26, 28, 35, 37, 38, 41, 42, 44, 49, 50, 52, 56] {\n", - " // ControlledOnInt(i, X)(input, target);\n", - " //}\n", - " \n", - " // optimization 1:\n", - " //X(input[5]);\n", - " //Controlled Task3_0([input[5]], (input[...4], target));\n", - " //X(input[5]);\n", - " //Controlled Task3_1([input[5]], (input[...4], target));\n", - " \n", - " // optimization 2:\n", - " within {\n", - " X(input[5]);\n", - " X(input[4]);\n", - " }\n", - " apply {\n", - " Controlled Task3_00([input[5], input[4]], (input[...3], target)); // top bits: 00\n", - " }\n", - " Controlled Task3_11([input[5], input[4]], (input[...3], target)); // top bits: 11\n", - " \n", - " within {\n", - " CNOT(input[5], input[4]); // input[4] = input[5] ^ input[4]\n", - " }\n", - " apply {\n", - " Controlled Task3_01([input[4]], (input[...3], target)); // top bits: 01 or 10\n", - " }\n", - "}\n", - "\n", - "operation Task3_0(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", - " //for i in [7, 11, 13, 14, 19, 21, 22, 25, 26, 28] {\n", - " // ControlledOnInt(i, X)(input, target);\n", - " //}\n", - " X(input[4]);\n", - " Controlled Task3_00([input[4]], (input[...3], target));\n", - " X(input[4]);\n", - " Controlled Task3_01([input[4]], (input[...3], target));\n", - "}\n", - "\n", - "operation Task3_00(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", - " for i in [7, 11, 13, 14] {\n", - " ControlledOnInt(i, X)(input, target);\n", - " }\n", - "}\n", - "\n", - "operation Task3_01(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", - " for i in [3, 5, 6, 9, 10, 12] {\n", - " ControlledOnInt(i, X)(input, target);\n", - " }\n", - "}\n", - "\n", - "operation Task3_1(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", - " //for i in [3, 5, 6, 9, 10, 12, 17, 18, 20, 24] {\n", - " // ControlledOnInt(i, X)(input, target);\n", - " //}\n", - " X(input[4]);\n", - " Controlled Task3_01([input[4]], (input[...3], target));\n", - " X(input[4]);\n", - " Controlled Task3_11([input[4]], (input[...3], target));\n", - "}\n", - "\n", - "// same as Task3_01, we can optimize by re-using the circuit\n", - "//operation Task3_10(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", - "// for i in [3, 5, 6, 9, 10, 12] {\n", - "// ControlledOnInt(i, X)(input, target);\n", - "// }\n", - "//}\n", - "\n", - "operation Task3_11(input : Qubit[], target : Qubit) : Unit is Adj + Ctl {\n", - " for i in [1, 2, 4, 8] {\n", + " for i in [7, 11, 13, 14, 19, 21, 22, 25, 26, 28, 35, 37, 38, 41, 42, 44, 49, 50, 52, 56] {\n", " ControlledOnInt(i, X)(input, target);\n", " }\n", "}" @@ -362,8 +294,8 @@ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", "qsharp.azure.connect(\n", - " resourceId=\"/subscriptions/1b6547eb-50f1-4733-bd8b-4b8c52ff49bd/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/QuantumTests\",\n", - " location=\"West US\",\n", + " resourceId=\"...\",\n", + " location=\"...\",\n", " credential=\"CLI\")" ] }, @@ -483,9 +415,9 @@ "name": "python3" }, "kernelspec": { - "display_name": "Python 3 [Q#]", + "display_name": "Python 3 [Default]", "language": "python", - "name": "python3_qsharp_b54crn" + "name": "python3" }, "language_info": { "codemirror_mode": { diff --git a/iQuHack-challenge-2023-task7.ipynb b/iQuHack-challenge-2023-task7.ipynb index 2f0c09e..2670c29 100644 --- a/iQuHack-challenge-2023-task7.ipynb +++ b/iQuHack-challenge-2023-task7.ipynb @@ -34,8 +34,9 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -46,47 +47,7 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[\n", - " {\n", - " \"cloudName\": \"AzureCloud\",\n", - " \"homeTenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", - " \"id\": \"6d61051a-6e40-4845-a03a-3c5160bb5629\",\n", - " \"isDefault\": true,\n", - " \"managedByTenants\": [\n", - " {\n", - " \"tenantId\": \"d0ecd01b-d782-448e-bae0-c3cad0e0543a\"\n", - " },\n", - " {\n", - " \"tenantId\": \"94c4857e-1130-4ab8-8eac-069b40c9db20\"\n", - " },\n", - " {\n", - " \"tenantId\": \"f702a9dc-ae48-4dc7-8f0a-8155a6dfa4e5\"\n", - " }\n", - " ],\n", - " \"name\": \"Azure for Students\",\n", - " \"state\": \"Enabled\",\n", - " \"tenantId\": \"aaf653e1-0bcd-4c2c-8658-12eb03e15774\",\n", - " \"user\": {\n", - " \"name\": \"papadm2@rpi.edu\",\n", - " \"type\": \"user\"\n", - " }\n", - " }\n", - "]\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.\n" - ] - } - ], + "outputs": [], "source": [ "!az login" ] @@ -106,8 +67,9 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -127,8 +89,9 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -141,15 +104,16 @@ }, "outputs": [], "source": [ - "teamname=\"Quantum Wranglers\" # Update this field with your team name\n", + "teamname=\"msft_is_the_best\" # Update this field with your team name\n", "task=[\"task7\"]\n", - "slack_id=\"U04JVDTAG4E\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" + "slack_id=\"myslackid\" # Update this field with Slack ID of the person who worked on this task as the troubleshooting contact" ] }, { "cell_type": "code", - "execution_count": 52, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -184,8 +148,9 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -216,8 +181,9 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -272,8 +238,9 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -284,3374 +251,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "{\"diagnostic_kind\":\"state-vector\",\"qubit_ids\":[0,1,2,3,4,5,6,7],\"n_qubits\":8,\"amplitudes\":{\"0\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"1\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"2\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"3\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"4\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"5\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"6\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"7\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"8\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"9\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"10\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"11\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"12\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"13\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"14\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"15\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"16\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"17\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"18\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"19\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"20\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"21\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"22\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"23\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"24\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"25\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"26\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"27\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"28\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"29\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"30\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"31\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"32\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"33\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"34\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"35\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"36\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"37\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"38\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"39\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"40\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"41\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"42\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"43\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"44\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"45\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"46\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"47\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"48\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"49\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"50\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"51\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"52\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"53\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"54\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"55\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"56\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"57\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"58\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"59\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"60\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"61\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"62\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"63\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"64\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"65\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"66\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"67\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"68\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"69\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"70\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"71\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"72\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"73\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"74\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"75\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"76\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"77\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"78\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"79\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"80\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"81\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"82\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"83\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"84\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"85\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"86\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"87\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"88\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"89\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"90\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"91\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"92\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"93\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"94\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"95\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"96\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"97\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"98\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"99\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"100\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"101\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"102\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"103\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"104\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"105\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"106\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"107\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"108\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"109\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"110\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"111\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"112\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"113\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"114\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"115\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"116\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"117\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"118\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"119\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"120\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"121\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"122\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"123\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"124\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"125\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"126\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"127\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"128\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"129\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"130\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"131\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"132\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"133\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"134\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"135\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"136\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"137\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"138\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"139\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"140\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"141\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"142\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"143\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"144\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"145\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"146\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"147\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"148\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"149\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"150\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"151\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"152\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"153\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"154\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"155\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"156\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"157\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"158\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"159\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"160\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"161\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"162\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"163\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"164\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"165\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"166\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"167\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"168\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"169\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"170\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"171\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"172\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"173\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"174\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"175\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"176\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"177\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"178\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"179\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"180\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"181\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"182\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"183\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"184\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"185\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"186\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"187\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"188\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"189\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"190\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"191\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"192\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"193\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"194\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"195\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"196\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"197\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"198\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"199\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"200\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"201\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"202\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"203\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"204\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"205\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"206\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"207\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"208\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"209\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"210\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"211\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"212\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"213\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"214\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"215\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"216\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"217\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"218\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"219\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"220\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"221\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"222\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"223\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"224\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"225\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"226\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"227\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"228\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"229\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"230\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"231\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"232\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"233\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"234\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"235\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"236\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"237\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"238\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"239\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"240\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"241\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"242\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"243\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"244\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"245\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"246\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"247\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"248\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"249\":{\"Real\":0.0883883476483185,\"Imaginary\":0.0,\"Magnitude\":0.0883883476483185,\"Phase\":0.0},\"250\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"251\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"252\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"253\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"254\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0},\"255\":{\"Real\":0.0,\"Imaginary\":0.0,\"Magnitude\":0.0,\"Phase\":0.0}}}", - "text/html": [ - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Qubit IDs0, 1, 2, 3, 4, 5, 6, 7
Basis state (bitstring)AmplitudeMeas. Pr.
$\\left|00000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00000010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00000100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00000110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00001000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00001010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00001100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00001110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00010000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0001001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00010100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00010110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00011000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00011010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00011100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00011110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00100000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00100010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0010010100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0010011100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00101000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00101010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00101100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00101110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00110000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0011001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00110100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00110110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00111000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00111010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00111100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|00111110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01000010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01000100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01000110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0100100100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0100101100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0100110100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0100111100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01010000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0101001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01010100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01010110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01011000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01011010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01011100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01011110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01100000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01100010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0110010100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0110011100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01101000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01101010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01101100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01101110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01110000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|0111001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01110100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01110110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01111000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01111010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01111100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|01111110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10000010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10000100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10000110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10001000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10001010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10001100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10001110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1001000100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1001001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1001010100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1001011100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1001100100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1001101100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1001110100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1001111100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10100000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10100010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1010010100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1010011100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10101000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10101010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10101100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10101110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10110000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1011001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10110100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10110110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10111000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10111010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10111100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|10111110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11000010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11000100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11000110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1100100100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1100101100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1100110100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1100111100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11010000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1101001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11010100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11010110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11011000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11011010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11011100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11011110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11100000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11100010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1110010100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1110011100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11101000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11101010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11101100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11101110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11110000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|1111001100000000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11110100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11110110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11111000\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11111010\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11111100\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
$\\left|11111110\\right\\rangle$$0.0884 + 0.0000 i$\r\n", - " \r\n", - " \r\n", - "

\r\n", - "

\r\n", - "
" - ], - "text/plain": [ - "|00000000⟩\t0.0883883476483185 + 0𝑖\n", - "|00000010⟩\t0.0883883476483185 + 0𝑖\n", - "|00000100⟩\t0.0883883476483185 + 0𝑖\n", - "|00000110⟩\t0.0883883476483185 + 0𝑖\n", - "|00001000⟩\t0.0883883476483185 + 0𝑖\n", - "|00001010⟩\t0.0883883476483185 + 0𝑖\n", - "|00001100⟩\t0.0883883476483185 + 0𝑖\n", - "|00001110⟩\t0.0883883476483185 + 0𝑖\n", - "|00010000⟩\t0.0883883476483185 + 0𝑖\n", - "|0001001100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|00010100⟩\t0.0883883476483185 + 0𝑖\n", - "|00010110⟩\t0.0883883476483185 + 0𝑖\n", - "|00011000⟩\t0.0883883476483185 + 0𝑖\n", - "|00011010⟩\t0.0883883476483185 + 0𝑖\n", - "|00011100⟩\t0.0883883476483185 + 0𝑖\n", - "|00011110⟩\t0.0883883476483185 + 0𝑖\n", - "|00100000⟩\t0.0883883476483185 + 0𝑖\n", - "|00100010⟩\t0.0883883476483185 + 0𝑖\n", - "|0010010100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|0010011100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|00101000⟩\t0.0883883476483185 + 0𝑖\n", - "|00101010⟩\t0.0883883476483185 + 0𝑖\n", - "|00101100⟩\t0.0883883476483185 + 0𝑖\n", - "|00101110⟩\t0.0883883476483185 + 0𝑖\n", - "|00110000⟩\t0.0883883476483185 + 0𝑖\n", - "|0011001100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|00110100⟩\t0.0883883476483185 + 0𝑖\n", - "|00110110⟩\t0.0883883476483185 + 0𝑖\n", - "|00111000⟩\t0.0883883476483185 + 0𝑖\n", - "|00111010⟩\t0.0883883476483185 + 0𝑖\n", - "|00111100⟩\t0.0883883476483185 + 0𝑖\n", - "|00111110⟩\t0.0883883476483185 + 0𝑖\n", - "|01000000⟩\t0.0883883476483185 + 0𝑖\n", - "|01000010⟩\t0.0883883476483185 + 0𝑖\n", - "|01000100⟩\t0.0883883476483185 + 0𝑖\n", - "|01000110⟩\t0.0883883476483185 + 0𝑖\n", - "|0100100100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|0100101100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|0100110100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|0100111100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|01010000⟩\t0.0883883476483185 + 0𝑖\n", - "|0101001100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|01010100⟩\t0.0883883476483185 + 0𝑖\n", - "|01010110⟩\t0.0883883476483185 + 0𝑖\n", - "|01011000⟩\t0.0883883476483185 + 0𝑖\n", - "|01011010⟩\t0.0883883476483185 + 0𝑖\n", - "|01011100⟩\t0.0883883476483185 + 0𝑖\n", - "|01011110⟩\t0.0883883476483185 + 0𝑖\n", - "|01100000⟩\t0.0883883476483185 + 0𝑖\n", - "|01100010⟩\t0.0883883476483185 + 0𝑖\n", - "|0110010100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|0110011100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|01101000⟩\t0.0883883476483185 + 0𝑖\n", - "|01101010⟩\t0.0883883476483185 + 0𝑖\n", - "|01101100⟩\t0.0883883476483185 + 0𝑖\n", - "|01101110⟩\t0.0883883476483185 + 0𝑖\n", - "|01110000⟩\t0.0883883476483185 + 0𝑖\n", - "|0111001100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|01110100⟩\t0.0883883476483185 + 0𝑖\n", - "|01110110⟩\t0.0883883476483185 + 0𝑖\n", - "|01111000⟩\t0.0883883476483185 + 0𝑖\n", - "|01111010⟩\t0.0883883476483185 + 0𝑖\n", - "|01111100⟩\t0.0883883476483185 + 0𝑖\n", - "|01111110⟩\t0.0883883476483185 + 0𝑖\n", - "|10000000⟩\t0.0883883476483185 + 0𝑖\n", - "|10000010⟩\t0.0883883476483185 + 0𝑖\n", - "|10000100⟩\t0.0883883476483185 + 0𝑖\n", - "|10000110⟩\t0.0883883476483185 + 0𝑖\n", - "|10001000⟩\t0.0883883476483185 + 0𝑖\n", - "|10001010⟩\t0.0883883476483185 + 0𝑖\n", - "|10001100⟩\t0.0883883476483185 + 0𝑖\n", - "|10001110⟩\t0.0883883476483185 + 0𝑖\n", - "|1001000100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1001001100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1001010100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1001011100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1001100100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1001101100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1001110100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1001111100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|10100000⟩\t0.0883883476483185 + 0𝑖\n", - "|10100010⟩\t0.0883883476483185 + 0𝑖\n", - "|1010010100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1010011100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|10101000⟩\t0.0883883476483185 + 0𝑖\n", - "|10101010⟩\t0.0883883476483185 + 0𝑖\n", - "|10101100⟩\t0.0883883476483185 + 0𝑖\n", - "|10101110⟩\t0.0883883476483185 + 0𝑖\n", - "|10110000⟩\t0.0883883476483185 + 0𝑖\n", - "|1011001100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|10110100⟩\t0.0883883476483185 + 0𝑖\n", - "|10110110⟩\t0.0883883476483185 + 0𝑖\n", - "|10111000⟩\t0.0883883476483185 + 0𝑖\n", - "|10111010⟩\t0.0883883476483185 + 0𝑖\n", - "|10111100⟩\t0.0883883476483185 + 0𝑖\n", - "|10111110⟩\t0.0883883476483185 + 0𝑖\n", - "|11000000⟩\t0.0883883476483185 + 0𝑖\n", - "|11000010⟩\t0.0883883476483185 + 0𝑖\n", - "|11000100⟩\t0.0883883476483185 + 0𝑖\n", - "|11000110⟩\t0.0883883476483185 + 0𝑖\n", - "|1100100100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1100101100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1100110100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1100111100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|11010000⟩\t0.0883883476483185 + 0𝑖\n", - "|1101001100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|11010100⟩\t0.0883883476483185 + 0𝑖\n", - "|11010110⟩\t0.0883883476483185 + 0𝑖\n", - "|11011000⟩\t0.0883883476483185 + 0𝑖\n", - "|11011010⟩\t0.0883883476483185 + 0𝑖\n", - "|11011100⟩\t0.0883883476483185 + 0𝑖\n", - "|11011110⟩\t0.0883883476483185 + 0𝑖\n", - "|11100000⟩\t0.0883883476483185 + 0𝑖\n", - "|11100010⟩\t0.0883883476483185 + 0𝑖\n", - "|1110010100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|1110011100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|11101000⟩\t0.0883883476483185 + 0𝑖\n", - "|11101010⟩\t0.0883883476483185 + 0𝑖\n", - "|11101100⟩\t0.0883883476483185 + 0𝑖\n", - "|11101110⟩\t0.0883883476483185 + 0𝑖\n", - "|11110000⟩\t0.0883883476483185 + 0𝑖\n", - "|1111001100000000⟩\t0.0883883476483185 + 0𝑖\n", - "|11110100⟩\t0.0883883476483185 + 0𝑖\n", - "|11110110⟩\t0.0883883476483185 + 0𝑖\n", - "|11111000⟩\t0.0883883476483185 + 0𝑖\n", - "|11111010⟩\t0.0883883476483185 + 0𝑖\n", - "|11111100⟩\t0.0883883476483185 + 0𝑖\n", - "|11111110⟩\t0.0883883476483185 + 0𝑖" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "()" - ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Note that in the output of this cell the target qubit corresponds to the rightmost bit\n", "qsharp.config[\"dump.basisStateLabelingConvention\"]=\"Bitstring\"\n", @@ -3676,8 +276,9 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -3688,71 +289,21 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "\"Connecting to Azure Quantum...\"", - "text/plain": [ - "Connecting to Azure Quantum..." - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Authenticated using Azure.Identity.AzureCliCredential\n", - "\n", - "\n", - "Connected to Azure Quantum workspace iQuHack-Workspace-micpap25 in location eastus.\n" - ] - }, - { - "data": { - "text/plain": [ - "[{'id': 'ionq.qpu', 'current_availability': {}, 'average_queue_time': 302694},\n", - " {'id': 'ionq.qpu.aria-1', 'current_availability': {}, 'average_queue_time': 356530},\n", - " {'id': 'ionq.simulator', 'current_availability': {}, 'average_queue_time': 2},\n", - " {'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s1', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s1-apival', 'current_availability': {}, 'average_queue_time': 1},\n", - " {'id': 'quantinuum.hqs-lt-s2', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.hqs-lt-s2-apival', 'current_availability': {}, 'average_queue_time': 1},\n", - " {'id': 'quantinuum.hqs-lt-s1-sim', 'current_availability': {}, 'average_queue_time': 70},\n", - " {'id': 'quantinuum.hqs-lt-s2-sim', 'current_availability': {}, 'average_queue_time': 199},\n", - " {'id': 'quantinuum.hqs-lt', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.qpu.h1-1', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.sim.h1-1sc', 'current_availability': {}, 'average_queue_time': 1},\n", - " {'id': 'quantinuum.qpu.h1-2', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'quantinuum.sim.h1-2sc', 'current_availability': {}, 'average_queue_time': 1},\n", - " {'id': 'quantinuum.sim.h1-1e', 'current_availability': {}, 'average_queue_time': 70},\n", - " {'id': 'quantinuum.sim.h1-2e', 'current_availability': {}, 'average_queue_time': 199},\n", - " {'id': 'quantinuum.qpu.h1', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'rigetti.sim.qvm', 'current_availability': {}, 'average_queue_time': 5},\n", - " {'id': 'rigetti.qpu.aspen-11', 'current_availability': {}, 'average_queue_time': 0},\n", - " {'id': 'rigetti.qpu.aspen-m-2', 'current_availability': {}, 'average_queue_time': 5},\n", - " {'id': 'rigetti.qpu.aspen-m-3', 'current_availability': {}, 'average_queue_time': 5}]" - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# If you're using this notebook in Azure Quantum hosted notebooks, remove the credential=\"CLI\" parameter!\n", "# If you're using this notebook in qBraid, keep it\n", "qsharp.azure.connect(\n", - " resourceId=\"/subscriptions/6d61051a-6e40-4845-a03a-3c5160bb5629/resourceGroups/AzureQuantum/providers/Microsoft.Quantum/Workspaces/iQuHack-Workspace-micpap25\",\n", - " location=\"East US\")" + " resourceId=\"...\",\n", + " location=\"...\",\n", + " credential=\"CLI\")" ] }, { "cell_type": "code", - "execution_count": 66, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -3763,34 +314,16 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading package Microsoft.Quantum.Providers.Core and dependencies...\r\n", - "Active target is now microsoft.estimator\r\n" - ] - }, - { - "data": { - "text/plain": [ - "{'id': 'microsoft.estimator', 'current_availability': {}, 'average_queue_time': 0}" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "qsharp.azure.target(\"microsoft.estimator\")" ] }, { "cell_type": "code", - "execution_count": 67, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -3801,21 +334,7 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Submitting Task7_ResourceEstimationWrapper to target microsoft.estimator...\n", - "Job successfully submitted.\n", - " Job name: RE for the task 7\n", - " Job ID: 5600345c-c75e-4170-a4e5-4937240ce0e0\n", - "Waiting up to 30 seconds for Azure Quantum job to complete...\n", - "[11:46:30 PM] Current job status: Executing\n", - "[11:46:35 PM] Current job status: Succeeded\n" - ] - } - ], + "outputs": [], "source": [ "# Update job name to a more descriptive string to make it easier to find it in Job Management tab later\n", "result = qsharp.azure.execute(Task7_ResourceEstimationWrapper, jobName=\"RE for the task 7\")" @@ -3823,8 +342,9 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -3835,1051 +355,7 @@ } } }, - "outputs": [ - { - "data": { - "application/x-qsharp-data": "{\"errorBudget\":{\"logical\":0.0005,\"rotations\":0.0,\"tstates\":0.0005},\"jobParams\":{\"errorBudget\":0.001,\"qecScheme\":{\"crossingPrefactor\":0.03,\"errorCorrectionThreshold\":0.01,\"logicalCycleTime\":\"(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\",\"name\":\"surface_code\",\"physicalQubitsPerLogicalQubit\":\"2 * codeDistance * codeDistance\"},\"qubitParams\":{\"instructionSet\":\"GateBased\",\"name\":\"qubit_gate_ns_e3\",\"oneQubitGateErrorRate\":0.001,\"oneQubitGateTime\":\"50 ns\",\"oneQubitMeasurementErrorRate\":0.001,\"oneQubitMeasurementTime\":\"100 ns\",\"tGateErrorRate\":0.001,\"tGateTime\":\"50 ns\",\"twoQubitGateErrorRate\":0.001,\"twoQubitGateTime\":\"50 ns\"}},\"logicalCounts\":{\"ccixCount\":155,\"cczCount\":31,\"measurementCount\":155,\"numQubits\":13,\"rotationCount\":0,\"rotationDepth\":0,\"tCount\":0},\"logicalQubit\":{\"codeDistance\":13,\"logicalCycleTime\":5200.0,\"logicalErrorRate\":3.000000000000002E-09,\"physicalQubits\":338},\"physicalCounts\":{\"breakdown\":{\"algorithmicLogicalDepth\":713,\"algorithmicLogicalQubits\":38,\"cliffordErrorRate\":0.001,\"logicalDepth\":713,\"numTfactories\":12,\"numTfactoryRuns\":62,\"numTsPerRotation\":null,\"numTstates\":744,\"physicalQubitsForAlgorithm\":12844,\"physicalQubitsForTfactories\":116160,\"requiredLogicalQubitErrorRate\":1.845427031815162E-08,\"requiredLogicalTstateErrorRate\":6.720430107526882E-07},\"physicalQubits\":129004,\"runtime\":3707600},\"physicalCountsFormatted\":{\"codeDistancePerRound\":\"11\",\"errorBudget\":\"1.00e-3\",\"errorBudgetLogical\":\"5.00e-4\",\"errorBudgetRotations\":\"0.00e0\",\"errorBudgetTstates\":\"5.00e-4\",\"logicalCycleTime\":\"5us 200ns\",\"logicalErrorRate\":\"3.00e-9\",\"numTsPerRotation\":\"No rotations in algorithm\",\"numUnitsPerRound\":\"2\",\"physicalQubitsForTfactoriesPercentage\":\"90.04 %\",\"physicalQubitsPerRound\":\"9680\",\"requiredLogicalQubitErrorRate\":\"1.85e-8\",\"requiredLogicalTstateErrorRate\":\"6.72e-7\",\"runtime\":\"3ms 707us 600ns\",\"tfactoryRuntime\":\"57us 200ns\",\"tfactoryRuntimePerRound\":\"57us 200ns\",\"tstateLogicalErrorRate\":\"2.48e-7\",\"unitNamePerRound\":\"15-to-1 space efficient logical\"},\"reportData\":{\"assumptions\":[\"_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._\",\"**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.\",\"**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.\",\"**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).\",\"**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.\",\"**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.\",\"**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.\"],\"groups\":[{\"alwaysVisible\":true,\"entries\":[{\"description\":\"Number of physical qubits\",\"explanation\":\"This value represents the total number of physical qubits, which is the sum of 12844 physical qubits to implement the algorithm logic, and 116160 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.\",\"label\":\"Physical qubits\",\"path\":\"physicalCounts/physicalQubits\"},{\"description\":\"Total runtime\",\"explanation\":\"This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (5us 200ns) multiplied by the 713 logical cycles to run the algorithm. If however the duration of a single T factory (here: 57us 200ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/runtime\"}],\"title\":\"Physical resource estimates\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits for the algorithm after layout\",\"explanation\":\"Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 13$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 38$ logical qubits.\",\"label\":\"Logical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalQubits\"},{\"description\":\"Number of logical cycles for the algorithm\",\"explanation\":\"To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 155 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 31 CCZ and 155 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.\",\"label\":\"Algorithmic depth\",\"path\":\"physicalCounts/breakdown/algorithmicLogicalDepth\"},{\"description\":\"Number of logical cycles performed\",\"explanation\":\"This number is usually equal to the logical depth of the algorithm, which is 713. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\"label\":\"Logical depth\",\"path\":\"physicalCounts/breakdown/logicalDepth\"},{\"description\":\"Number of T states consumed by the algorithm\",\"explanation\":\"To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 31 CCZ and 155 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.\",\"label\":\"Number of T states\",\"path\":\"physicalCounts/breakdown/numTstates\"},{\"description\":\"Number of T factories capable of producing the demanded 744 T states during the algorithm's runtime\",\"explanation\":\"The total number of T factories 12 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{744\\\\;\\\\text{T states} \\\\cdot 57us 200ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 3ms 707us 600ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$\",\"label\":\"Number of T factories\",\"path\":\"physicalCounts/breakdown/numTfactories\"},{\"description\":\"Number of times all T factories are invoked\",\"explanation\":\"In order to prepare the 744 T states, the 12 copies of the T factory are repeatedly invoked 62 times.\",\"label\":\"Number of T factory invocations\",\"path\":\"physicalCounts/breakdown/numTfactoryRuns\"},{\"description\":\"Number of physical qubits for the algorithm after layout\",\"explanation\":\"The 12844 are the product of the 38 logical qubits after layout and the 338 physical qubits that encode a single logical qubit.\",\"label\":\"Physical algorithmic qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForAlgorithm\"},{\"description\":\"Number of physical qubits for the T factories\",\"explanation\":\"Each T factory requires 9680 physical qubits and we run 12 in parallel, therefore we need $116160 = 9680 \\\\cdot 12$ qubits.\",\"label\":\"Physical T factory qubits\",\"path\":\"physicalCounts/breakdown/physicalQubitsForTfactories\"},{\"description\":\"The minimum logical qubit error rate required to run the algorithm within the error budget\",\"explanation\":\"The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 38 logical qubits and the total cycle count 713.\",\"label\":\"Required logical qubit error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalQubitErrorRate\"},{\"description\":\"The minimum T state error rate required for distilled T states\",\"explanation\":\"The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 744.\",\"label\":\"Required logical T state error rate\",\"path\":\"physicalCountsFormatted/requiredLogicalTstateErrorRate\"},{\"description\":\"Number of T states to implement a rotation with an arbitrary angle\",\"explanation\":\"The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.\",\"label\":\"Number of T states per rotation\",\"path\":\"physicalCountsFormatted/numTsPerRotation\"}],\"title\":\"Resource estimates breakdown\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Name of QEC scheme\",\"explanation\":\"You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.\",\"label\":\"QEC scheme\",\"path\":\"jobParams/qecScheme/name\"},{\"description\":\"Required code distance for error correction\",\"explanation\":\"The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.00000001845427031815162)}{\\\\log(0.01/0.001)} - 1$\",\"label\":\"Code distance\",\"path\":\"logicalQubit/codeDistance\"},{\"description\":\"Number of physical qubits per logical qubit\",\"explanation\":\"The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.\",\"label\":\"Physical qubits\",\"path\":\"logicalQubit/physicalQubits\"},{\"description\":\"Duration of a logical cycle in nanoseconds\",\"explanation\":\"The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.\",\"label\":\"Logical cycle time\",\"path\":\"physicalCountsFormatted/logicalCycleTime\"},{\"description\":\"Logical qubit error rate\",\"explanation\":\"The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{13 + 1}{2}$\",\"label\":\"Logical qubit error rate\",\"path\":\"physicalCountsFormatted/logicalErrorRate\"},{\"description\":\"Crossing prefactor used in QEC scheme\",\"explanation\":\"The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.\",\"label\":\"Crossing prefactor\",\"path\":\"jobParams/qecScheme/crossingPrefactor\"},{\"description\":\"Error correction threshold used in QEC scheme\",\"explanation\":\"The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.\",\"label\":\"Error correction threshold\",\"path\":\"jobParams/qecScheme/errorCorrectionThreshold\"},{\"description\":\"QEC scheme formula used to compute logical cycle time\",\"explanation\":\"This is the formula that is used to compute the logical cycle time 5us 200ns.\",\"label\":\"Logical cycle time formula\",\"path\":\"jobParams/qecScheme/logicalCycleTime\"},{\"description\":\"QEC scheme formula used to compute number of physical qubits per logical qubit\",\"explanation\":\"This is the formula that is used to compute the number of physical qubits per logical qubits 338.\",\"label\":\"Physical qubits formula\",\"path\":\"jobParams/qecScheme/physicalQubitsPerLogicalQubit\"}],\"title\":\"Logical qubit parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of physical qubits for a single T factory\",\"explanation\":\"This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.\",\"label\":\"Physical qubits\",\"path\":\"tfactory/physicalQubits\"},{\"description\":\"Runtime of a single T factory\",\"explanation\":\"The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.\",\"label\":\"Runtime\",\"path\":\"physicalCountsFormatted/tfactoryRuntime\"},{\"description\":\"Number of output T states produced in a single run of T factory\",\"explanation\":\"The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.48e-7.\",\"label\":\"Number of output T states per run\",\"path\":\"tfactory/numTstates\"},{\"description\":\"Number of physical input T states consumed in a single run of a T factory\",\"explanation\":\"This value includes the physical input T states of all copies of the distillation unit in the first round.\",\"label\":\"Number of input T states per run\",\"path\":\"tfactory/numInputTstates\"},{\"description\":\"The number of distillation rounds\",\"explanation\":\"This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.\",\"label\":\"Distillation rounds\",\"path\":\"tfactory/numRounds\"},{\"description\":\"The number of units in each round of distillation\",\"explanation\":\"This is the number of copies for the distillation units per round.\",\"label\":\"Distillation units per round\",\"path\":\"physicalCountsFormatted/numUnitsPerRound\"},{\"description\":\"The types of distillation units\",\"explanation\":\"These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.\",\"label\":\"Distillation units\",\"path\":\"physicalCountsFormatted/unitNamePerRound\"},{\"description\":\"The code distance in each round of distillation\",\"explanation\":\"This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.\",\"label\":\"Distillation code distances\",\"path\":\"physicalCountsFormatted/codeDistancePerRound\"},{\"description\":\"The number of physical qubits used in each round of distillation\",\"explanation\":\"The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.\",\"label\":\"Number of physical qubits per round\",\"path\":\"physicalCountsFormatted/physicalQubitsPerRound\"},{\"description\":\"The runtime of each distillation round\",\"explanation\":\"The runtime of the T factory is the sum of the runtimes in all rounds.\",\"label\":\"Runtime per round\",\"path\":\"physicalCountsFormatted/tfactoryRuntimePerRound\"},{\"description\":\"Logical T state error rate\",\"explanation\":\"This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 6.72e-7.\",\"label\":\"Logical T state error rate\",\"path\":\"physicalCountsFormatted/tstateLogicalErrorRate\"}],\"title\":\"T factory parameters\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Number of logical qubits in the input quantum program\",\"explanation\":\"We determine 38 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.\",\"label\":\"Logical qubits (pre-layout)\",\"path\":\"logicalCounts/numQubits\"},{\"description\":\"Number of T gates in the input quantum program\",\"explanation\":\"This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.\",\"label\":\"T gates\",\"path\":\"logicalCounts/tCount\"},{\"description\":\"Number of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.\",\"label\":\"Rotation gates\",\"path\":\"logicalCounts/rotationCount\"},{\"description\":\"Depth of rotation gates in the input quantum program\",\"explanation\":\"This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.\",\"label\":\"Rotation depth\",\"path\":\"logicalCounts/rotationDepth\"},{\"description\":\"Number of CCZ-gates in the input quantum program\",\"explanation\":\"This is the number of CCZ gates.\",\"label\":\"CCZ gates\",\"path\":\"logicalCounts/cczCount\"},{\"description\":\"Number of CCiX-gates in the input quantum program\",\"explanation\":\"This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].\",\"label\":\"CCiX gates\",\"path\":\"logicalCounts/ccixCount\"},{\"description\":\"Number of single qubit measurements in the input quantum program\",\"explanation\":\"This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.\",\"label\":\"Measurement operations\",\"path\":\"logicalCounts/measurementCount\"}],\"title\":\"Pre-layout logical resources\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Total error budget for the algorithm\",\"explanation\":\"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\"label\":\"Total error budget\",\"path\":\"physicalCountsFormatted/errorBudget\"},{\"description\":\"Probability of at least one logical error\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"Logical error probability\",\"path\":\"physicalCountsFormatted/errorBudgetLogical\"},{\"description\":\"Probability of at least one faulty T distillation\",\"explanation\":\"This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.\",\"label\":\"T distillation error probability\",\"path\":\"physicalCountsFormatted/errorBudgetTstates\"},{\"description\":\"Probability of at least one failed rotation synthesis\",\"explanation\":\"This is one third of the total error budget 1.00e-3.\",\"label\":\"Rotation synthesis error probability\",\"path\":\"physicalCountsFormatted/errorBudgetRotations\"}],\"title\":\"Assumed error budget\"},{\"alwaysVisible\":false,\"entries\":[{\"description\":\"Some descriptive name for the qubit model\",\"explanation\":\"You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or ¬µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).\",\"label\":\"Qubit name\",\"path\":\"jobParams/qubitParams/name\"},{\"description\":\"Underlying qubit technology (gate-based or Majorana)\",\"explanation\":\"When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.\",\"label\":\"Instruction set\",\"path\":\"jobParams/qubitParams/instructionSet\"},{\"description\":\"Operation time for single-qubit measurement (t_meas) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.\",\"label\":\"Single-qubit measurement time\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementTime\"},{\"description\":\"Operation time for single-qubit gate (t_gate) in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.\",\"label\":\"Single-qubit gate time\",\"path\":\"jobParams/qubitParams/oneQubitGateTime\"},{\"description\":\"Operation time for two-qubit gate in ns\",\"explanation\":\"This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.\",\"label\":\"Two-qubit gate time\",\"path\":\"jobParams/qubitParams/twoQubitGateTime\"},{\"description\":\"Operation time for a T gate\",\"explanation\":\"This is the operation time in nanoseconds to execute a T gate.\",\"label\":\"T gate time\",\"path\":\"jobParams/qubitParams/tGateTime\"},{\"description\":\"Error rate for single-qubit measurement\",\"explanation\":\"This is the probability in which a single-qubit measurement in the Pauli basis may fail.\",\"label\":\"Single-qubit measurement error rate\",\"path\":\"jobParams/qubitParams/oneQubitMeasurementErrorRate\"},{\"description\":\"Error rate for single-qubit Clifford gate (p)\",\"explanation\":\"This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.\",\"label\":\"Single-qubit error rate\",\"path\":\"jobParams/qubitParams/oneQubitGateErrorRate\"},{\"description\":\"Error rate for two-qubit Clifford gate\",\"explanation\":\"This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.\",\"label\":\"Two-qubit error rate\",\"path\":\"jobParams/qubitParams/twoQubitGateErrorRate\"},{\"description\":\"Error rate to prepare single-qubit T state or apply a T gate (p_T)\",\"explanation\":\"This is the probability in which executing a single T gate may fail.\",\"label\":\"T gate error rate\",\"path\":\"jobParams/qubitParams/tGateErrorRate\"}],\"title\":\"Physical qubit parameters\"}]},\"status\":\"success\",\"tfactory\":{\"codeDistancePerRound\":[11],\"logicalErrorRate\":2.480000000000001E-07,\"numInputTstates\":30,\"numRounds\":1,\"numTstates\":1,\"numUnitsPerRound\":[2],\"physicalQubits\":9680,\"physicalQubitsPerRound\":[9680],\"runtime\":57200.0,\"runtimePerRound\":[57200.0],\"unitNamePerRound\":[\"15-to-1 space efficient logical\"]}}", - "text/html": [ - "\r\n", - "
\r\n", - " \r\n", - " Physical resource estimates\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Physical qubits129004\r\n", - "

Number of physical qubits

\n", - "
\r\n", - "
\r\n", - "

This value represents the total number of physical qubits, which is the sum of 12844 physical qubits to implement the algorithm logic, and 116160 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.

\n", - "\r\n", - "
Runtime3ms 707us 600ns\r\n", - "

Total runtime

\n", - "
\r\n", - "
\r\n", - "

This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (5us 200ns) multiplied by the 713 logical cycles to run the algorithm. If however the duration of a single T factory (here: 57us 200ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Resource estimates breakdown\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Logical algorithmic qubits38\r\n", - "

Number of logical qubits for the algorithm after layout

\n", - "
\r\n", - "
\r\n", - "

Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the \\(Q_{\\rm alg} = 13\\) logical qubits in the input algorithm, we require in total $2 \\cdot Q_{\\rm alg} + \\lceil \\sqrt{8 \\cdot Q_{\\rm alg}}\\rceil + 1 = 38$ logical qubits.

\n", - "\r\n", - "
Algorithmic depth713\r\n", - "

Number of logical cycles for the algorithm

\n", - "
\r\n", - "
\r\n", - "

To execute the algorithm using Parallel Synthesis Sequential Pauli Computation (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 155 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 31 CCZ and 155 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.

\n", - "\r\n", - "
Logical depth713\r\n", - "

Number of logical cycles performed

\n", - "
\r\n", - "
\r\n", - "

This number is usually equal to the logical depth of the algorithm, which is 713. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.

\n", - "\r\n", - "
Number of T states744\r\n", - "

Number of T states consumed by the algorithm

\n", - "
\r\n", - "
\r\n", - "

To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 31 CCZ and 155 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.

\n", - "\r\n", - "
Number of T factories12\r\n", - "

Number of T factories capable of producing the demanded 744 T states during the algorithm's runtime

\n", - "
\r\n", - "
\r\n", - "

The total number of T factories 12 that are executed in parallel is computed as \\(\\left\\lceil\\dfrac{744\\;\\text{T states} \\cdot 57us 200ns\\;\\text{T factory duration}}{1\\;\\text{T states per T factory} \\cdot 3ms 707us 600ns\\;\\text{algorithm runtime}}\\right\\rceil\\)

\n", - "\r\n", - "
Number of T factory invocations62\r\n", - "

Number of times all T factories are invoked

\n", - "
\r\n", - "
\r\n", - "

In order to prepare the 744 T states, the 12 copies of the T factory are repeatedly invoked 62 times.

\n", - "\r\n", - "
Physical algorithmic qubits12844\r\n", - "

Number of physical qubits for the algorithm after layout

\n", - "
\r\n", - "
\r\n", - "

The 12844 are the product of the 38 logical qubits after layout and the 338 physical qubits that encode a single logical qubit.

\n", - "\r\n", - "
Physical T factory qubits116160\r\n", - "

Number of physical qubits for the T factories

\n", - "
\r\n", - "
\r\n", - "

Each T factory requires 9680 physical qubits and we run 12 in parallel, therefore we need $116160 = 9680 \\cdot 12$ qubits.

\n", - "\r\n", - "
Required logical qubit error rate1.85e-8\r\n", - "

The minimum logical qubit error rate required to run the algorithm within the error budget

\n", - "
\r\n", - "
\r\n", - "

The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 38 logical qubits and the total cycle count 713.

\n", - "\r\n", - "
Required logical T state error rate6.72e-7\r\n", - "

The minimum T state error rate required for distilled T states

\n", - "
\r\n", - "
\r\n", - "

The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 744.

\n", - "\r\n", - "
Number of T states per rotationNo rotations in algorithm\r\n", - "

Number of T states to implement a rotation with an arbitrary angle

\n", - "
\r\n", - "
\r\n", - "

The number of T states to implement a rotation with an arbitrary angle is \\(\\lceil 0.53 \\log_2(0 / 0) + 5.3\\rceil\\) [arXiv:2203.10064]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Logical qubit parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
QEC schemesurface_code\r\n", - "

Name of QEC scheme

\n", - "
\r\n", - "
\r\n", - "

You can load pre-defined QEC schemes by using the name surface_code or floquet_code. The latter only works with Majorana qubits.

\n", - "\r\n", - "
Code distance13\r\n", - "

Required code distance for error correction

\n", - "
\r\n", - "
\r\n", - "

The code distance is the smallest odd integer greater or equal to \\(\\dfrac{2\\log(0.03 / 0.00000001845427031815162)}{\\log(0.01/0.001)} - 1\\)

\n", - "\r\n", - "
Physical qubits338\r\n", - "

Number of physical qubits per logical qubit

\n", - "
\r\n", - "
\r\n", - "

The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.

\n", - "\r\n", - "
Logical cycle time5us 200ns\r\n", - "

Duration of a logical cycle in nanoseconds

\n", - "
\r\n", - "
\r\n", - "

The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.

\n", - "\r\n", - "
Logical qubit error rate3.00e-9\r\n", - "

Logical qubit error rate

\n", - "
\r\n", - "
\r\n", - "

The logical qubit error rate is computed as $0.03 \\cdot \\left(\\dfrac{0.001}{0.01}\\right)^\\frac{13 + 1}{2}$

\n", - "\r\n", - "
Crossing prefactor0.03\r\n", - "

Crossing prefactor used in QEC scheme

\n", - "
\r\n", - "
\r\n", - "

The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.

\n", - "\r\n", - "
Error correction threshold0.01\r\n", - "

Error correction threshold used in QEC scheme

\n", - "
\r\n", - "
\r\n", - "

The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.

\n", - "\r\n", - "
Logical cycle time formula(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance\r\n", - "

QEC scheme formula used to compute logical cycle time

\n", - "
\r\n", - "
\r\n", - "

This is the formula that is used to compute the logical cycle time 5us 200ns.

\n", - "\r\n", - "
Physical qubits formula2 * codeDistance * codeDistance\r\n", - "

QEC scheme formula used to compute number of physical qubits per logical qubit

\n", - "
\r\n", - "
\r\n", - "

This is the formula that is used to compute the number of physical qubits per logical qubits 338.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " T factory parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Physical qubits9680\r\n", - "

Number of physical qubits for a single T factory

\n", - "
\r\n", - "
\r\n", - "

This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.

\n", - "\r\n", - "
Runtime57us 200ns\r\n", - "

Runtime of a single T factory

\n", - "
\r\n", - "
\r\n", - "

The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.

\n", - "\r\n", - "
Number of output T states per run1\r\n", - "

Number of output T states produced in a single run of T factory

\n", - "
\r\n", - "
\r\n", - "

The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.48e-7.

\n", - "\r\n", - "
Number of input T states per run30\r\n", - "

Number of physical input T states consumed in a single run of a T factory

\n", - "
\r\n", - "
\r\n", - "

This value includes the physical input T states of all copies of the distillation unit in the first round.

\n", - "\r\n", - "
Distillation rounds1\r\n", - "

The number of distillation rounds

\n", - "
\r\n", - "
\r\n", - "

This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.

\n", - "\r\n", - "
Distillation units per round2\r\n", - "

The number of units in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

This is the number of copies for the distillation units per round.

\n", - "\r\n", - "
Distillation units15-to-1 space efficient logical\r\n", - "

The types of distillation units

\n", - "
\r\n", - "
\r\n", - "

These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.

\n", - "\r\n", - "
Distillation code distances11\r\n", - "

The code distance in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.

\n", - "\r\n", - "
Number of physical qubits per round9680\r\n", - "

The number of physical qubits used in each round of distillation

\n", - "
\r\n", - "
\r\n", - "

The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.

\n", - "\r\n", - "
Runtime per round57us 200ns\r\n", - "

The runtime of each distillation round

\n", - "
\r\n", - "
\r\n", - "

The runtime of the T factory is the sum of the runtimes in all rounds.

\n", - "\r\n", - "
Logical T state error rate2.48e-7\r\n", - "

Logical T state error rate

\n", - "
\r\n", - "
\r\n", - "

This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 6.72e-7.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Pre-layout logical resources\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Logical qubits (pre-layout)13\r\n", - "

Number of logical qubits in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

We determine 38 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.

\n", - "\r\n", - "
T gates0\r\n", - "

Number of T gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.

\n", - "\r\n", - "
Rotation gates0\r\n", - "

Number of rotation gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.

\n", - "\r\n", - "
Rotation depth0\r\n", - "

Depth of rotation gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.

\n", - "\r\n", - "
CCZ gates31\r\n", - "

Number of CCZ-gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of CCZ gates.

\n", - "\r\n", - "
CCiX gates155\r\n", - "

Number of CCiX-gates in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of CCiX gates, which applies \\(-iX\\) controlled on two control qubits [1212.5069].

\n", - "\r\n", - "
Measurement operations155\r\n", - "

Number of single qubit measurements in the input quantum program

\n", - "
\r\n", - "
\r\n", - "

This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Assumed error budget\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Total error budget1.00e-3\r\n", - "

Total error budget for the algorithm

\n", - "
\r\n", - "
\r\n", - "

The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget \\(\\epsilon = \\epsilon_{\\log} + \\epsilon_{\\rm dis} + \\epsilon_{\\rm syn}\\) is uniformly distributed and applies to errors \\(\\epsilon_{\\log}\\) to implement logical qubits, an error budget \\(\\epsilon_{\\rm dis}\\) to produce T states through distillation, and an error budget \\(\\epsilon_{\\rm syn}\\) to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets \\(\\epsilon_{\\rm dis}\\) and \\(\\epsilon_{\\rm syn}\\) are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.

\n", - "\r\n", - "
Logical error probability5.00e-4\r\n", - "

Probability of at least one logical error

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", - "\r\n", - "
T distillation error probability5.00e-4\r\n", - "

Probability of at least one faulty T distillation

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.

\n", - "\r\n", - "
Rotation synthesis error probability0.00e0\r\n", - "

Probability of at least one failed rotation synthesis

\n", - "
\r\n", - "
\r\n", - "

This is one third of the total error budget 1.00e-3.

\n", - "\r\n", - "
\r\n", - "\r\n", - "
\r\n", - " \r\n", - " Physical qubit parameters\r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - "
Qubit namequbit_gate_ns_e3\r\n", - "

Some descriptive name for the qubit model

\n", - "
\r\n", - "
\r\n", - "

You can load pre-defined qubit parameters by using the names qubit_gate_ns_e3, qubit_gate_ns_e4, qubit_gate_us_e3, qubit_gate_us_e4, qubit_maj_ns_e4, or qubit_maj_ns_e6. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).

\n", - "\r\n", - "
Instruction setGateBased\r\n", - "

Underlying qubit technology (gate-based or Majorana)

\n", - "
\r\n", - "
\r\n", - "

When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either gate-based or Majorana. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.

\n", - "\r\n", - "
Single-qubit measurement time100 ns\r\n", - "

Operation time for single-qubit measurement (t_meas) in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.

\n", - "\r\n", - "
Single-qubit gate time50 ns\r\n", - "

Operation time for single-qubit gate (t_gate) in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.

\n", - "\r\n", - "
Two-qubit gate time50 ns\r\n", - "

Operation time for two-qubit gate in ns

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.

\n", - "\r\n", - "
T gate time50 ns\r\n", - "

Operation time for a T gate

\n", - "
\r\n", - "
\r\n", - "

This is the operation time in nanoseconds to execute a T gate.

\n", - "\r\n", - "
Single-qubit measurement error rate0.001\r\n", - "

Error rate for single-qubit measurement

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a single-qubit measurement in the Pauli basis may fail.

\n", - "\r\n", - "
Single-qubit error rate0.001\r\n", - "

Error rate for single-qubit Clifford gate (p)

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.

\n", - "\r\n", - "
Two-qubit error rate0.001\r\n", - "

Error rate for two-qubit Clifford gate

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.

\n", - "\r\n", - "
T gate error rate0.001\r\n", - "

Error rate to prepare single-qubit T state or apply a T gate (p_T)

\n", - "
\r\n", - "
\r\n", - "

This is the probability in which executing a single T gate may fail.

\n", - "\r\n", - "
\r\n", - "
\r\n", - " Assumptions\r\n", - "
    \r\n", - "
  • More details on the following lists of assumptions can be found in the paper Accessing requirements for scaling quantum computers and their applications.

    \n", - "
  • \r\n", - "
  • Uniform independent physical noise. We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.

    \n", - "
  • \r\n", - "
  • Efficient classical computation. We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.

    \n", - "
  • \r\n", - "
  • Extraction circuits for planar quantum ISA. We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).

    \n", - "
  • \r\n", - "
  • Uniform independent logical noise. We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.

    \n", - "
  • \r\n", - "
  • Negligible Clifford costs for synthesis. We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.

    \n", - "
  • \r\n", - "
  • Smooth magic state consumption rate. We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.

    \n", - "
  • \r\n", - "
\r\n" - ], - "text/plain": [ - "{'errorBudget': {'logical': 0.0005, 'rotations': 0.0, 'tstates': 0.0005},\n", - " 'jobParams': {'errorBudget': 0.001,\n", - " 'qecScheme': {'crossingPrefactor': 0.03,\n", - " 'errorCorrectionThreshold': 0.01,\n", - " 'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',\n", - " 'name': 'surface_code',\n", - " 'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance'},\n", - " 'qubitParams': {'instructionSet': 'GateBased',\n", - " 'name': 'qubit_gate_ns_e3',\n", - " 'oneQubitGateErrorRate': 0.001,\n", - " 'oneQubitGateTime': '50 ns',\n", - " 'oneQubitMeasurementErrorRate': 0.001,\n", - " 'oneQubitMeasurementTime': '100 ns',\n", - " 'tGateErrorRate': 0.001,\n", - " 'tGateTime': '50 ns',\n", - " 'twoQubitGateErrorRate': 0.001,\n", - " 'twoQubitGateTime': '50 ns'}},\n", - " 'logicalCounts': {'ccixCount': 155,\n", - " 'cczCount': 31,\n", - " 'measurementCount': 155,\n", - " 'numQubits': 13,\n", - " 'rotationCount': 0,\n", - " 'rotationDepth': 0,\n", - " 'tCount': 0},\n", - " 'logicalQubit': {'codeDistance': 13,\n", - " 'logicalCycleTime': 5200.0,\n", - " 'logicalErrorRate': 3.000000000000002e-09,\n", - " 'physicalQubits': 338},\n", - " 'physicalCounts': {'breakdown': {'algorithmicLogicalDepth': 713,\n", - " 'algorithmicLogicalQubits': 38,\n", - " 'cliffordErrorRate': 0.001,\n", - " 'logicalDepth': 713,\n", - " 'numTfactories': 12,\n", - " 'numTfactoryRuns': 62,\n", - " 'numTsPerRotation': None,\n", - " 'numTstates': 744,\n", - " 'physicalQubitsForAlgorithm': 12844,\n", - " 'physicalQubitsForTfactories': 116160,\n", - " 'requiredLogicalQubitErrorRate': 1.845427031815162e-08,\n", - " 'requiredLogicalTstateErrorRate': 6.720430107526882e-07},\n", - " 'physicalQubits': 129004,\n", - " 'runtime': 3707600},\n", - " 'physicalCountsFormatted': {'codeDistancePerRound': '11',\n", - " 'errorBudget': '1.00e-3',\n", - " 'errorBudgetLogical': '5.00e-4',\n", - " 'errorBudgetRotations': '0.00e0',\n", - " 'errorBudgetTstates': '5.00e-4',\n", - " 'logicalCycleTime': '5us 200ns',\n", - " 'logicalErrorRate': '3.00e-9',\n", - " 'numTsPerRotation': 'No rotations in algorithm',\n", - " 'numUnitsPerRound': '2',\n", - " 'physicalQubitsForTfactoriesPercentage': '90.04 %',\n", - " 'physicalQubitsPerRound': '9680',\n", - " 'requiredLogicalQubitErrorRate': '1.85e-8',\n", - " 'requiredLogicalTstateErrorRate': '6.72e-7',\n", - " 'runtime': '3ms 707us 600ns',\n", - " 'tfactoryRuntime': '57us 200ns',\n", - " 'tfactoryRuntimePerRound': '57us 200ns',\n", - " 'tstateLogicalErrorRate': '2.48e-7',\n", - " 'unitNamePerRound': '15-to-1 space efficient logical'},\n", - " 'reportData': {'assumptions': ['_More details on the following lists of assumptions can be found in the paper [Accessing requirements for scaling quantum computers and their applications](https://aka.ms/AQ/RE/Paper)._',\n", - " '**Uniform independent physical noise.** We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.',\n", - " '**Efficient classical computation.** We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.',\n", - " '**Extraction circuits for planar quantum ISA.** We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).',\n", - " '**Uniform independent logical noise.** We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.',\n", - " '**Negligible Clifford costs for synthesis.** We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.',\n", - " '**Smooth magic state consumption rate.** We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.'],\n", - " 'groups': [{'alwaysVisible': True,\n", - " 'entries': [{'description': 'Number of physical qubits',\n", - " 'explanation': 'This value represents the total number of physical qubits, which is the sum of 12844 physical qubits to implement the algorithm logic, and 116160 physical qubits to execute the T factories that are responsible to produce the T states that are consumed by the algorithm.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'physicalCounts/physicalQubits'},\n", - " {'description': 'Total runtime',\n", - " 'explanation': 'This is a runtime estimate (in nanosecond precision) for the execution time of the algorithm. In general, the execution time corresponds to the duration of one logical cycle (5us 200ns) multiplied by the 713 logical cycles to run the algorithm. If however the duration of a single T factory (here: 57us 200ns) is larger than the algorithm runtime, we extend the number of logical cycles artificially in order to exceed the runtime of a single T factory.',\n", - " 'label': 'Runtime',\n", - " 'path': 'physicalCountsFormatted/runtime'}],\n", - " 'title': 'Physical resource estimates'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of logical qubits for the algorithm after layout',\n", - " 'explanation': 'Laying out the logical qubits in the presence of nearest-neighbor constraints requires additional logical qubits. In particular, to layout the $Q_{\\\\rm alg} = 13$ logical qubits in the input algorithm, we require in total $2 \\\\cdot Q_{\\\\rm alg} + \\\\lceil \\\\sqrt{8 \\\\cdot Q_{\\\\rm alg}}\\\\rceil + 1 = 38$ logical qubits.',\n", - " 'label': 'Logical algorithmic qubits',\n", - " 'path': 'physicalCounts/breakdown/algorithmicLogicalQubits'},\n", - " {'description': 'Number of logical cycles for the algorithm',\n", - " 'explanation': 'To execute the algorithm using _Parallel Synthesis Sequential Pauli Computation_ (PSSPC), operations are scheduled in terms of multi-qubit Pauli measurements, for which assume an execution time of one logical cycle. Based on the input algorithm, we require one multi-qubit measurement for the 155 single-qubit measurements, the 0 arbitrary single-qubit rotations, and the 0 T gates, three multi-qubit measurements for each of the 31 CCZ and 155 CCiX gates in the input program, as well as No rotations in algorithm multi-qubit measurements for each of the 0 non-Clifford layers in which there is at least one single-qubit rotation with an arbitrary angle rotation.',\n", - " 'label': 'Algorithmic depth',\n", - " 'path': 'physicalCounts/breakdown/algorithmicLogicalDepth'},\n", - " {'description': 'Number of logical cycles performed',\n", - " 'explanation': \"This number is usually equal to the logical depth of the algorithm, which is 713. However, in the case in which a single T factory is slower than the execution time of the algorithm, we adjust the logical cycle depth to exceed the T factory's execution time.\",\n", - " 'label': 'Logical depth',\n", - " 'path': 'physicalCounts/breakdown/logicalDepth'},\n", - " {'description': 'Number of T states consumed by the algorithm',\n", - " 'explanation': 'To execute the algorithm, we require one T state for each of the 0 T gates, four T states for each of the 31 CCZ and 155 CCiX gates, as well as No rotations in algorithm for each of the 0 single-qubit rotation gates with arbitrary angle rotation.',\n", - " 'label': 'Number of T states',\n", - " 'path': 'physicalCounts/breakdown/numTstates'},\n", - " {'description': \"Number of T factories capable of producing the demanded 744 T states during the algorithm's runtime\",\n", - " 'explanation': 'The total number of T factories 12 that are executed in parallel is computed as $\\\\left\\\\lceil\\\\dfrac{744\\\\;\\\\text{T states} \\\\cdot 57us 200ns\\\\;\\\\text{T factory duration}}{1\\\\;\\\\text{T states per T factory} \\\\cdot 3ms 707us 600ns\\\\;\\\\text{algorithm runtime}}\\\\right\\\\rceil$',\n", - " 'label': 'Number of T factories',\n", - " 'path': 'physicalCounts/breakdown/numTfactories'},\n", - " {'description': 'Number of times all T factories are invoked',\n", - " 'explanation': 'In order to prepare the 744 T states, the 12 copies of the T factory are repeatedly invoked 62 times.',\n", - " 'label': 'Number of T factory invocations',\n", - " 'path': 'physicalCounts/breakdown/numTfactoryRuns'},\n", - " {'description': 'Number of physical qubits for the algorithm after layout',\n", - " 'explanation': 'The 12844 are the product of the 38 logical qubits after layout and the 338 physical qubits that encode a single logical qubit.',\n", - " 'label': 'Physical algorithmic qubits',\n", - " 'path': 'physicalCounts/breakdown/physicalQubitsForAlgorithm'},\n", - " {'description': 'Number of physical qubits for the T factories',\n", - " 'explanation': 'Each T factory requires 9680 physical qubits and we run 12 in parallel, therefore we need $116160 = 9680 \\\\cdot 12$ qubits.',\n", - " 'label': 'Physical T factory qubits',\n", - " 'path': 'physicalCounts/breakdown/physicalQubitsForTfactories'},\n", - " {'description': 'The minimum logical qubit error rate required to run the algorithm within the error budget',\n", - " 'explanation': 'The minimum logical qubit error rate is obtained by dividing the logical error probability 5.00e-4 by the product of 38 logical qubits and the total cycle count 713.',\n", - " 'label': 'Required logical qubit error rate',\n", - " 'path': 'physicalCountsFormatted/requiredLogicalQubitErrorRate'},\n", - " {'description': 'The minimum T state error rate required for distilled T states',\n", - " 'explanation': 'The minimum T state error rate is obtained by dividing the T distillation error probability 5.00e-4 by the total number of T states 744.',\n", - " 'label': 'Required logical T state error rate',\n", - " 'path': 'physicalCountsFormatted/requiredLogicalTstateErrorRate'},\n", - " {'description': 'Number of T states to implement a rotation with an arbitrary angle',\n", - " 'explanation': 'The number of T states to implement a rotation with an arbitrary angle is $\\\\lceil 0.53 \\\\log_2(0 / 0) + 5.3\\\\rceil$ [[arXiv:2203.10064](https://arxiv.org/abs/2203.10064)]. For simplicity, we use this formula for all single-qubit arbitrary angle rotations, and do not distinguish between best, worst, and average cases.',\n", - " 'label': 'Number of T states per rotation',\n", - " 'path': 'physicalCountsFormatted/numTsPerRotation'}],\n", - " 'title': 'Resource estimates breakdown'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Name of QEC scheme',\n", - " 'explanation': 'You can load pre-defined QEC schemes by using the name `surface_code` or `floquet_code`. The latter only works with Majorana qubits.',\n", - " 'label': 'QEC scheme',\n", - " 'path': 'jobParams/qecScheme/name'},\n", - " {'description': 'Required code distance for error correction',\n", - " 'explanation': 'The code distance is the smallest odd integer greater or equal to $\\\\dfrac{2\\\\log(0.03 / 0.00000001845427031815162)}{\\\\log(0.01/0.001)} - 1$',\n", - " 'label': 'Code distance',\n", - " 'path': 'logicalQubit/codeDistance'},\n", - " {'description': 'Number of physical qubits per logical qubit',\n", - " 'explanation': 'The number of physical qubits per logical qubit are evaluated using the formula 2 * codeDistance * codeDistance that can be user-specified.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'logicalQubit/physicalQubits'},\n", - " {'description': 'Duration of a logical cycle in nanoseconds',\n", - " 'explanation': 'The runtime of one logical cycle in nanoseconds is evaluated using the formula (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance that can be user-specified.',\n", - " 'label': 'Logical cycle time',\n", - " 'path': 'physicalCountsFormatted/logicalCycleTime'},\n", - " {'description': 'Logical qubit error rate',\n", - " 'explanation': 'The logical qubit error rate is computed as $0.03 \\\\cdot \\\\left(\\\\dfrac{0.001}{0.01}\\\\right)^\\\\frac{13 + 1}{2}$',\n", - " 'label': 'Logical qubit error rate',\n", - " 'path': 'physicalCountsFormatted/logicalErrorRate'},\n", - " {'description': 'Crossing prefactor used in QEC scheme',\n", - " 'explanation': 'The crossing prefactor is usually extracted numerically from simulations when fitting an exponential curve to model the relationship between logical and physical error rate.',\n", - " 'label': 'Crossing prefactor',\n", - " 'path': 'jobParams/qecScheme/crossingPrefactor'},\n", - " {'description': 'Error correction threshold used in QEC scheme',\n", - " 'explanation': 'The error correction threshold is the physical error rate below which the error rate of the logical qubit is less than the error rate of the physical qubit that constitute it. This value is usually extracted numerically from simulations of the logical error rate.',\n", - " 'label': 'Error correction threshold',\n", - " 'path': 'jobParams/qecScheme/errorCorrectionThreshold'},\n", - " {'description': 'QEC scheme formula used to compute logical cycle time',\n", - " 'explanation': 'This is the formula that is used to compute the logical cycle time 5us 200ns.',\n", - " 'label': 'Logical cycle time formula',\n", - " 'path': 'jobParams/qecScheme/logicalCycleTime'},\n", - " {'description': 'QEC scheme formula used to compute number of physical qubits per logical qubit',\n", - " 'explanation': 'This is the formula that is used to compute the number of physical qubits per logical qubits 338.',\n", - " 'label': 'Physical qubits formula',\n", - " 'path': 'jobParams/qecScheme/physicalQubitsPerLogicalQubit'}],\n", - " 'title': 'Logical qubit parameters'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of physical qubits for a single T factory',\n", - " 'explanation': 'This corresponds to the maximum number of physical qubits over all rounds of T distillation units in a T factory. A round of distillation contains of multiple copies of distillation units to achieve the required success probability of producing a T state with the expected logical T state error rate.',\n", - " 'label': 'Physical qubits',\n", - " 'path': 'tfactory/physicalQubits'},\n", - " {'description': 'Runtime of a single T factory',\n", - " 'explanation': 'The runtime of a single T factory is the accumulated runtime of executing each round in a T factory.',\n", - " 'label': 'Runtime',\n", - " 'path': 'physicalCountsFormatted/tfactoryRuntime'},\n", - " {'description': 'Number of output T states produced in a single run of T factory',\n", - " 'explanation': 'The T factory takes as input 30 noisy physical T states with an error rate of 0.001 and produces 1 T states with an error rate of 2.48e-7.',\n", - " 'label': 'Number of output T states per run',\n", - " 'path': 'tfactory/numTstates'},\n", - " {'description': 'Number of physical input T states consumed in a single run of a T factory',\n", - " 'explanation': 'This value includes the physical input T states of all copies of the distillation unit in the first round.',\n", - " 'label': 'Number of input T states per run',\n", - " 'path': 'tfactory/numInputTstates'},\n", - " {'description': 'The number of distillation rounds',\n", - " 'explanation': 'This is the number of distillation rounds. In each round one or multiple copies of some distillation unit is executed.',\n", - " 'label': 'Distillation rounds',\n", - " 'path': 'tfactory/numRounds'},\n", - " {'description': 'The number of units in each round of distillation',\n", - " 'explanation': 'This is the number of copies for the distillation units per round.',\n", - " 'label': 'Distillation units per round',\n", - " 'path': 'physicalCountsFormatted/numUnitsPerRound'},\n", - " {'description': 'The types of distillation units',\n", - " 'explanation': 'These are the types of distillation units that are executed in each round. The units can be either physical or logical, depending on what type of qubit they are operating. Space-efficient units require fewer qubits for the cost of longer runtime compared to Reed-Muller preparation units.',\n", - " 'label': 'Distillation units',\n", - " 'path': 'physicalCountsFormatted/unitNamePerRound'},\n", - " {'description': 'The code distance in each round of distillation',\n", - " 'explanation': 'This is the code distance used for the units in each round. If the code distance is 1, then the distillation unit operates on physical qubits instead of error-corrected logical qubits.',\n", - " 'label': 'Distillation code distances',\n", - " 'path': 'physicalCountsFormatted/codeDistancePerRound'},\n", - " {'description': 'The number of physical qubits used in each round of distillation',\n", - " 'explanation': 'The maximum number of physical qubits over all rounds is the number of physical qubits for the T factory, since qubits are reused by different rounds.',\n", - " 'label': 'Number of physical qubits per round',\n", - " 'path': 'physicalCountsFormatted/physicalQubitsPerRound'},\n", - " {'description': 'The runtime of each distillation round',\n", - " 'explanation': 'The runtime of the T factory is the sum of the runtimes in all rounds.',\n", - " 'label': 'Runtime per round',\n", - " 'path': 'physicalCountsFormatted/tfactoryRuntimePerRound'},\n", - " {'description': 'Logical T state error rate',\n", - " 'explanation': 'This is the logical T state error rate achieved by the T factory which is equal or smaller than the required error rate 6.72e-7.',\n", - " 'label': 'Logical T state error rate',\n", - " 'path': 'physicalCountsFormatted/tstateLogicalErrorRate'}],\n", - " 'title': 'T factory parameters'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Number of logical qubits in the input quantum program',\n", - " 'explanation': 'We determine 38 from this number by assuming to align them in a 2D grid. Auxiliary qubits are added to allow for sufficient space to execute multi-qubit Pauli measurements on all or a subset of the logical qubits.',\n", - " 'label': 'Logical qubits (pre-layout)',\n", - " 'path': 'logicalCounts/numQubits'},\n", - " {'description': 'Number of T gates in the input quantum program',\n", - " 'explanation': 'This includes all T gates and adjoint T gates, but not T gates used to implement rotation gates with arbitrary angle, CCZ gates, or CCiX gates.',\n", - " 'label': 'T gates',\n", - " 'path': 'logicalCounts/tCount'},\n", - " {'description': 'Number of rotation gates in the input quantum program',\n", - " 'explanation': 'This is the number of all rotation gates. If an angle corresponds to a Pauli, Clifford, or T gate, it is not accounted for in this number.',\n", - " 'label': 'Rotation gates',\n", - " 'path': 'logicalCounts/rotationCount'},\n", - " {'description': 'Depth of rotation gates in the input quantum program',\n", - " 'explanation': 'This is the number of all non-Clifford layers that include at least one single-qubit rotation gate with an arbitrary angle.',\n", - " 'label': 'Rotation depth',\n", - " 'path': 'logicalCounts/rotationDepth'},\n", - " {'description': 'Number of CCZ-gates in the input quantum program',\n", - " 'explanation': 'This is the number of CCZ gates.',\n", - " 'label': 'CCZ gates',\n", - " 'path': 'logicalCounts/cczCount'},\n", - " {'description': 'Number of CCiX-gates in the input quantum program',\n", - " 'explanation': 'This is the number of CCiX gates, which applies $-iX$ controlled on two control qubits [[1212.5069](https://arxiv.org/abs/1212.5069)].',\n", - " 'label': 'CCiX gates',\n", - " 'path': 'logicalCounts/ccixCount'},\n", - " {'description': 'Number of single qubit measurements in the input quantum program',\n", - " 'explanation': 'This is the number of single qubit measurements in Pauli basis that are used in the input program. Note that all measurements are counted, however, the measurement result is is determined randomly (with a fixed seed) to be 0 or 1 with a probability of 50%.',\n", - " 'label': 'Measurement operations',\n", - " 'path': 'logicalCounts/measurementCount'}],\n", - " 'title': 'Pre-layout logical resources'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Total error budget for the algorithm',\n", - " 'explanation': \"The total error budget sets the overall allowed error for the algorithm, i.e., the number of times it is allowed to fail. Its value must be between 0 and 1 and the default value is 0.001, which corresponds to 0.1%, and means that the algorithm is allowed to fail once in 1000 executions. This parameter is highly application specific. For example, if one is running Shor's algorithm for factoring integers, a large value for the error budget may be tolerated as one can check that the output are indeed the prime factors of the input. On the other hand, a much smaller error budget may be needed for an algorithm solving a problem with a solution which cannot be efficiently verified. This budget $\\\\epsilon = \\\\epsilon_{\\\\log} + \\\\epsilon_{\\\\rm dis} + \\\\epsilon_{\\\\rm syn}$ is uniformly distributed and applies to errors $\\\\epsilon_{\\\\log}$ to implement logical qubits, an error budget $\\\\epsilon_{\\\\rm dis}$ to produce T states through distillation, and an error budget $\\\\epsilon_{\\\\rm syn}$ to synthesize rotation gates with arbitrary angles. Note that for distillation and rotation synthesis, the respective error budgets $\\\\epsilon_{\\\\rm dis}$ and $\\\\epsilon_{\\\\rm syn}$ are uniformly distributed among all T states and all rotation gates, respectively. If there are no rotation gates in the input algorithm, the error budget is uniformly distributed to logical errors and T state errors.\",\n", - " 'label': 'Total error budget',\n", - " 'path': 'physicalCountsFormatted/errorBudget'},\n", - " {'description': 'Probability of at least one logical error',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", - " 'label': 'Logical error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetLogical'},\n", - " {'description': 'Probability of at least one faulty T distillation',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3 if the input algorithm contains rotation with gates with arbitrary angles, or one half of it, otherwise.',\n", - " 'label': 'T distillation error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetTstates'},\n", - " {'description': 'Probability of at least one failed rotation synthesis',\n", - " 'explanation': 'This is one third of the total error budget 1.00e-3.',\n", - " 'label': 'Rotation synthesis error probability',\n", - " 'path': 'physicalCountsFormatted/errorBudgetRotations'}],\n", - " 'title': 'Assumed error budget'},\n", - " {'alwaysVisible': False,\n", - " 'entries': [{'description': 'Some descriptive name for the qubit model',\n", - " 'explanation': 'You can load pre-defined qubit parameters by using the names `qubit_gate_ns_e3`, `qubit_gate_ns_e4`, `qubit_gate_us_e3`, `qubit_gate_us_e4`, `qubit_maj_ns_e4`, or `qubit_maj_ns_e6`. The names of these pre-defined qubit parameters indicate the instruction set (gate-based or Majorana), the operation speed (ns or µs regime), as well as the fidelity (e.g., e3 for $10^{-3}$ gate error rates).',\n", - " 'label': 'Qubit name',\n", - " 'path': 'jobParams/qubitParams/name'},\n", - " {'description': 'Underlying qubit technology (gate-based or Majorana)',\n", - " 'explanation': 'When modeling the physical qubit abstractions, we distinguish between two different physical instruction sets that are used to operate the qubits. The physical instruction set can be either *gate-based* or *Majorana*. A gate-based instruction set provides single-qubit measurement, single-qubit gates (incl. T gates), and two-qubit gates. A Majorana instruction set provides a physical T gate, single-qubit measurement and two-qubit joint measurement operations.',\n", - " 'label': 'Instruction set',\n", - " 'path': 'jobParams/qubitParams/instructionSet'},\n", - " {'description': 'Operation time for single-qubit measurement (t_meas) in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit measurement in the Pauli basis.',\n", - " 'label': 'Single-qubit measurement time',\n", - " 'path': 'jobParams/qubitParams/oneQubitMeasurementTime'},\n", - " {'description': 'Operation time for single-qubit gate (t_gate) in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a single-qubit Clifford operation, e.g., Hadamard or Phase gates.',\n", - " 'label': 'Single-qubit gate time',\n", - " 'path': 'jobParams/qubitParams/oneQubitGateTime'},\n", - " {'description': 'Operation time for two-qubit gate in ns',\n", - " 'explanation': 'This is the operation time in nanoseconds to perform a two-qubit Clifford operation, e.g., a CNOT or CZ gate.',\n", - " 'label': 'Two-qubit gate time',\n", - " 'path': 'jobParams/qubitParams/twoQubitGateTime'},\n", - " {'description': 'Operation time for a T gate',\n", - " 'explanation': 'This is the operation time in nanoseconds to execute a T gate.',\n", - " 'label': 'T gate time',\n", - " 'path': 'jobParams/qubitParams/tGateTime'},\n", - " {'description': 'Error rate for single-qubit measurement',\n", - " 'explanation': 'This is the probability in which a single-qubit measurement in the Pauli basis may fail.',\n", - " 'label': 'Single-qubit measurement error rate',\n", - " 'path': 'jobParams/qubitParams/oneQubitMeasurementErrorRate'},\n", - " {'description': 'Error rate for single-qubit Clifford gate (p)',\n", - " 'explanation': 'This is the probability in which a single-qubit Clifford operation, e.g., Hadamard or Phase gates, may fail.',\n", - " 'label': 'Single-qubit error rate',\n", - " 'path': 'jobParams/qubitParams/oneQubitGateErrorRate'},\n", - " {'description': 'Error rate for two-qubit Clifford gate',\n", - " 'explanation': 'This is the probability in which a two-qubit Clifford operation, e.g., CNOT or CZ gates, may fail.',\n", - " 'label': 'Two-qubit error rate',\n", - " 'path': 'jobParams/qubitParams/twoQubitGateErrorRate'},\n", - " {'description': 'Error rate to prepare single-qubit T state or apply a T gate (p_T)',\n", - " 'explanation': 'This is the probability in which executing a single T gate may fail.',\n", - " 'label': 'T gate error rate',\n", - " 'path': 'jobParams/qubitParams/tGateErrorRate'}],\n", - " 'title': 'Physical qubit parameters'}]},\n", - " 'status': 'success',\n", - " 'tfactory': {'codeDistancePerRound': [11],\n", - " 'logicalErrorRate': 2.480000000000001e-07,\n", - " 'numInputTstates': 30,\n", - " 'numRounds': 1,\n", - " 'numTstates': 1,\n", - " 'numUnitsPerRound': [2],\n", - " 'physicalQubits': 9680,\n", - " 'physicalQubitsPerRound': [9680],\n", - " 'runtime': 57200.0,\n", - " 'runtimePerRound': [57200.0],\n", - " 'unitNamePerRound': ['15-to-1 space efficient logical']}}" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# If you need to pull up the results of an old job, use its job ID with qsharp.azure.output command\n", "# result = qsharp.azure.output(\"...\")\n", @@ -4888,8 +364,9 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -4914,8 +391,9 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": null, "metadata": { + "collapsed": false, "jupyter": { "outputs_hidden": false, "source_hidden": false @@ -4926,37 +404,10 @@ } } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logical algorithmic qubits = 38\n", - "Algorithmic depth = 713\n", - "Score = 27094\n" - ] - }, - { - "data": { - "text/plain": [ - "27094" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "evaluate_results(result)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -4964,7 +415,7 @@ "name": "python3" }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3 [Default]", "language": "python", "name": "python3" }, @@ -4978,7 +429,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.9.10" }, "nteract": { "version": "nteract-front-end@1.0.0"
\r\n", + " Assumptions\r\n", + "
    \r\n", + "
  • More details on the following lists of assumptions can be found in the paper Accessing requirements for scaling quantum computers and their applications.

    \n", + "
  • \r\n", + "
  • Uniform independent physical noise. We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.

    \n", + "
  • \r\n", + "
  • Efficient classical computation. We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.

    \n", + "
  • \r\n", + "
  • Extraction circuits for planar quantum ISA. We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).

    \n", + "
  • \r\n", + "
  • Uniform independent logical noise. We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.

    \n", + "
  • \r\n", + "
  • Negligible Clifford costs for synthesis. We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.

    \n", + "
  • \r\n", + "
  • Smooth magic state consumption rate. We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.

    \n", + "
  • \r\n", + "
\r\n", + " Assumptions\r\n", + "
    \r\n", + "
  • More details on the following lists of assumptions can be found in the paper Accessing requirements for scaling quantum computers and their applications.

    \n", + "
  • \r\n", + "
  • Uniform independent physical noise. We assume that the noise on physical qubits and physical qubit operations is the standard circuit noise model. In particular we assume error events at different space-time locations are independent and that error rates are uniform across the system in time and space.

    \n", + "
  • \r\n", + "
  • Efficient classical computation. We assume that classical overhead (compilation, control, feedback, readout, decoding, etc.) does not dominate the overall cost of implementing the full quantum algorithm.

    \n", + "
  • \r\n", + "
  • Extraction circuits for planar quantum ISA. We assume that stabilizer extraction circuits with similar depth and error correction performance to those for standard surface and Hastings-Haah code patches can be constructed to implement all operations of the planar quantum ISA (instruction set architecture).

    \n", + "
  • \r\n", + "
  • Uniform independent logical noise. We assume that the error rate of a logical operation is approximately equal to its space-time volume (the number of tiles multiplied by the number of logical time steps) multiplied by the error rate of a logical qubit in a standard one-tile patch in one logical time step.

    \n", + "
  • \r\n", + "
  • Negligible Clifford costs for synthesis. We assume that the space overhead for synthesis and space and time overhead for transport of magic states within magic state factories and to synthesis qubits are all negligible.

    \n", + "
  • \r\n", + "
  • Smooth magic state consumption rate. We assume that the rate of T state consumption throughout the compiled algorithm is almost constant, or can be made almost constant without significantly increasing the number of logical time steps for the algorithm.

    \n", + "
  • \r\n", + "