diff --git a/pip/qsharp/_ipython.py b/pip/qsharp/_ipython.py index 6b2855b774..1a2ea524b5 100644 --- a/pip/qsharp/_ipython.py +++ b/pip/qsharp/_ipython.py @@ -19,7 +19,7 @@ def callback(output): try: return get_interpreter().interpret(cell, callback) except QSharpError as e: - display(Pretty(str(e))) + raise QSharpCellError(str(e)) def enable_classic_notebook_codemirror_mode(): @@ -44,3 +44,18 @@ def __repr__(self): # This will run the JavaScript in the context of the frontend. display(JavaScriptWithPlainTextFallback(js_to_inject)) + + +class QSharpCellError(BaseException): + """ + Error raised when a %%qsharp cell fails. + """ + + def __init__(self, traceback: str): + self.traceback = traceback.splitlines() + + def _render_traceback_(self): + # We want to specifically override the traceback so that + # the Q# error directly from the interpreter is shown + # instead of the Python error. + return self.traceback diff --git a/pip/samples/sample.ipynb b/pip/samples/sample.ipynb index a089fe237f..b50152ac1f 100644 --- a/pip/samples/sample.ipynb +++ b/pip/samples/sample.ipynb @@ -18,7 +18,7 @@ "outputs": [ { "data": { - "application/javascript": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n// This file provides CodeMirror syntax highlighting for Q# magic cells\n// in classic Jupyter Notebooks. It does nothing in other (Jupyter Notebook 7,\n// VS Code, Azure Notebooks, etc.) environments.\n\n// Detect the prerequisites and do nothing if they don't exist.\nif (window.require && window.CodeMirror && window.Jupyter) {\n // The simple mode plugin for CodeMirror is not loaded by default, so require it.\n window.require([\"codemirror/addon/mode/simple\"], function defineMode() {\n let rules = [\n {\n token: \"comment\",\n regex: /(\\/\\/).*/,\n beginWord: false,\n },\n {\n token: \"string\",\n regex: String.raw`^\\\"(?:[^\\\"\\\\]|\\\\[\\s\\S])*(?:\\\"|$)`,\n beginWord: false,\n },\n {\n token: \"keyword\",\n regex: String.raw`(namespace|open|as|operation|function|body|adjoint|newtype|controlled|internal)\\b`,\n beginWord: true,\n },\n {\n token: \"keyword\",\n regex: String.raw`(if|elif|else|repeat|until|fixup|for|in|return|fail|within|apply)\\b`,\n beginWord: true,\n },\n {\n token: \"keyword\",\n regex: String.raw`(Adjoint|Controlled|Adj|Ctl|is|self|auto|distribute|invert|intrinsic)\\b`,\n beginWord: true,\n },\n {\n token: \"keyword\",\n regex: String.raw`(let|set|use|borrow|mutable)\\b`,\n beginWord: true,\n },\n {\n token: \"operatorKeyword\",\n regex: String.raw`(not|and|or)\\b|(w/)`,\n beginWord: true,\n },\n {\n token: \"operatorKeyword\",\n regex: String.raw`(=)|(!)|(<)|(>)|(\\\\+)|(-)|(\\\\*)|(\\\\/)|(\\\\^)|(%)|(\\\\|)|(\\\\&\\\\&\\\\&)|(\\\\~\\\\~\\\\~)|(\\\\.\\\\.\\\\.)|(\\\\.\\\\.)|(\\\\?)`,\n beginWord: false,\n },\n {\n token: \"meta\",\n regex: String.raw`(Int|BigInt|Double|Bool|Qubit|Pauli|Result|Range|String|Unit)\\b`,\n beginWord: true,\n },\n {\n token: \"atom\",\n regex: String.raw`(true|false|Pauli(I|X|Y|Z)|One|Zero)\\b`,\n beginWord: true,\n },\n ];\n let simpleRules = [];\n for (let rule of rules) {\n simpleRules.push({\n token: rule.token,\n regex: new RegExp(rule.regex, \"g\"),\n sol: rule.beginWord,\n });\n if (rule.beginWord) {\n // Need an additional rule due to the fact that CodeMirror simple mode doesn't work with ^ token\n simpleRules.push({\n token: rule.token,\n regex: new RegExp(String.raw`\\W` + rule.regex, \"g\"),\n sol: false,\n });\n }\n }\n\n // Register the mode defined above with CodeMirror\n window.CodeMirror.defineSimpleMode(\"qsharp\", { start: simpleRules });\n window.CodeMirror.defineMIME(\"text/x-qsharp\", \"qsharp\");\n\n // Tell Jupyter to associate %%qsharp magic cells with the qsharp mode\n window.Jupyter.CodeCell.options_default.highlight_modes[\"qsharp\"] = {\n reg: [/^%%qsharp/],\n };\n\n // Force re-highlighting of all cells the first time this code runs\n for (const cell of window.Jupyter.notebook.get_cells()) {\n cell.auto_highlight();\n }\n });\n}\n", + "application/javascript": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n// This file provides CodeMirror syntax highlighting for Q# magic cells\n// in classic Jupyter Notebooks. It does nothing in other (Jupyter Notebook 7,\n// VS Code, Azure Notebooks, etc.) environments.\n\n// Detect the prerequisites and do nothing if they don't exist.\nif (window.require && window.CodeMirror && window.Jupyter) {\n // The simple mode plugin for CodeMirror is not loaded by default, so require it.\n window.require([\"codemirror/addon/mode/simple\"], function defineMode() {\n let rules = [\n {\n token: \"comment\",\n regex: /(\\/\\/).*/,\n beginWord: false,\n },\n {\n token: \"string\",\n regex: String.raw`^\\\"(?:[^\\\"\\\\]|\\\\[\\s\\S])*(?:\\\"|$)`,\n beginWord: false,\n },\n {\n token: \"keyword\",\n regex: String.raw`(namespace|open|as|operation|function|body|adjoint|newtype|controlled|internal)\\b`,\n beginWord: true,\n },\n {\n token: \"keyword\",\n regex: String.raw`(if|elif|else|repeat|until|fixup|for|in|return|fail|within|apply)\\b`,\n beginWord: true,\n },\n {\n token: \"keyword\",\n regex: String.raw`(Adjoint|Controlled|Adj|Ctl|is|self|auto|distribute|invert|intrinsic)\\b`,\n beginWord: true,\n },\n {\n token: \"keyword\",\n regex: String.raw`(let|set|use|borrow|mutable)\\b`,\n beginWord: true,\n },\n {\n token: \"operatorKeyword\",\n regex: String.raw`(not|and|or)\\b|(w/)`,\n beginWord: true,\n },\n {\n token: \"operatorKeyword\",\n regex: String.raw`(=)|(!)|(<)|(>)|(\\+)|(-)|(\\*)|(/)|(\\^)|(%)|(\\|)|(&&&)|(~~~)|(\\.\\.\\.)|(\\.\\.)|(\\?)`,\n beginWord: false,\n },\n {\n token: \"meta\",\n regex: String.raw`(Int|BigInt|Double|Bool|Qubit|Pauli|Result|Range|String|Unit)\\b`,\n beginWord: true,\n },\n {\n token: \"atom\",\n regex: String.raw`(true|false|Pauli(I|X|Y|Z)|One|Zero)\\b`,\n beginWord: true,\n },\n ];\n let simpleRules = [];\n for (let rule of rules) {\n simpleRules.push({\n token: rule.token,\n regex: new RegExp(rule.regex, \"g\"),\n sol: rule.beginWord,\n });\n if (rule.beginWord) {\n // Need an additional rule due to the fact that CodeMirror simple mode doesn't work with ^ token\n simpleRules.push({\n token: rule.token,\n regex: new RegExp(String.raw`\\W` + rule.regex, \"g\"),\n sol: false,\n });\n }\n }\n\n // Register the mode defined above with CodeMirror\n window.CodeMirror.defineSimpleMode(\"qsharp\", { start: simpleRules });\n window.CodeMirror.defineMIME(\"text/x-qsharp\", \"qsharp\");\n\n // Tell Jupyter to associate %%qsharp magic cells with the qsharp mode\n window.Jupyter.CodeCell.options_default.highlight_modes[\"qsharp\"] = {\n reg: [/^%%qsharp/],\n };\n\n // Force re-highlighting of all cells the first time this code runs\n for (const cell of window.Jupyter.notebook.get_cells()) {\n cell.auto_highlight();\n }\n });\n}\n", "text/plain": [] }, "metadata": {}, @@ -344,11 +344,11 @@ "evalue": "Error: Qubit1 released while not in |0⟩ state\nCall stack:\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\n at Foo in line_5\n\u001b[31mQsc.Eval.ReleasedQubitNotZero\u001b[0m\n\n \u001b[31m×\u001b[0m runtime error\n\u001b[31m ╰─▶ \u001b[0mQubit1 released while not in |0⟩ state\n ╭─[\u001b[36;1;4mline_5\u001b[0m:1:1]\n \u001b[2m1\u001b[0m │ operation Foo() : Unit { use q = Qubit(); X(q) } Foo()\n · \u001b[35;1m ────────┬───────\u001b[0m\n · \u001b[35;1m╰── \u001b[35;1mQubit1\u001b[0m\u001b[0m\n ╰────\n\u001b[36m help: \u001b[0mqubits should be returned to the |0⟩ state before being released to\n satisfy the assumption that allocated qubits start in the |0⟩ state\n", "output_type": "error", "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mQSharpError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[7], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mqsharp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43meval\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43moperation Foo() : Unit \u001b[39;49m\u001b[38;5;124;43m{\u001b[39;49m\u001b[38;5;124;43m use q = Qubit(); X(q) } Foo()\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\src\\qsharp\\pip\\samples\\.venv\\Lib\\site-packages\\qsharp\\_qsharp.py:120\u001b[0m, in \u001b[0;36meval\u001b[1;34m(source)\u001b[0m\n\u001b[0;32m 117\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcallback\u001b[39m(output: Output) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 118\u001b[0m \u001b[38;5;28mprint\u001b[39m(output)\n\u001b[1;32m--> 120\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mget_interpreter\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minterpret\u001b[49m\u001b[43m(\u001b[49m\u001b[43msource\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcallback\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[1;31mQSharpError\u001b[0m: Error: Qubit1 released while not in |0⟩ state\nCall stack:\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\n at Foo in line_5\n\u001b[31mQsc.Eval.ReleasedQubitNotZero\u001b[0m\n\n \u001b[31m×\u001b[0m runtime error\n\u001b[31m ╰─▶ \u001b[0mQubit1 released while not in |0⟩ state\n ╭─[\u001b[36;1;4mline_5\u001b[0m:1:1]\n \u001b[2m1\u001b[0m │ operation Foo() : Unit { use q = Qubit(); X(q) } Foo()\n · \u001b[35;1m ────────┬───────\u001b[0m\n · \u001b[35;1m╰── \u001b[35;1mQubit1\u001b[0m\u001b[0m\n ╰────\n\u001b[36m help: \u001b[0mqubits should be returned to the |0⟩ state before being released to\n satisfy the assumption that allocated qubits start in the |0⟩ state\n" + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mQSharpError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[7], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mqsharp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43meval\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43moperation Foo() : Unit \u001b[39;49m\u001b[38;5;124;43m{\u001b[39;49m\u001b[38;5;124;43m use q = Qubit(); X(q) } Foo()\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/workspaces/qsharp/pip/qsharp/_qsharp.py:120\u001b[0m, in \u001b[0;36meval\u001b[0;34m(source)\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcallback\u001b[39m(output: Output) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 118\u001b[0m \u001b[38;5;28mprint\u001b[39m(output)\n\u001b[0;32m--> 120\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mget_interpreter\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minterpret\u001b[49m\u001b[43m(\u001b[49m\u001b[43msource\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcallback\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mQSharpError\u001b[0m: Error: Qubit1 released while not in |0⟩ state\nCall stack:\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\n at Foo in line_5\n\u001b[31mQsc.Eval.ReleasedQubitNotZero\u001b[0m\n\n \u001b[31m×\u001b[0m runtime error\n\u001b[31m ╰─▶ \u001b[0mQubit1 released while not in |0⟩ state\n ╭─[\u001b[36;1;4mline_5\u001b[0m:1:1]\n \u001b[2m1\u001b[0m │ operation Foo() : Unit { use q = Qubit(); X(q) } Foo()\n · \u001b[35;1m ────────┬───────\u001b[0m\n · \u001b[35;1m╰── \u001b[35;1mQubit1\u001b[0m\u001b[0m\n ╰────\n\u001b[36m help: \u001b[0mqubits should be returned to the |0⟩ state before being released to\n satisfy the assumption that allocated qubits start in the |0⟩ state\n" ] } ], @@ -417,29 +417,28 @@ "output_type": "display_data" }, { - "data": { - "text/plain": [ - "Error: Qubit2 released while not in |0⟩ state\n", - "Call stack:\n", - " at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\n", - " at Bar in line_6\n", - "\u001b[31mQsc.Eval.ReleasedQubitNotZero\u001b[0m\n", - "\n", - " \u001b[31m×\u001b[0m runtime error\n", - "\u001b[31m ╰─▶ \u001b[0mQubit2 released while not in |0⟩ state\n", - " ╭─[\u001b[36;1;4mline_6\u001b[0m:2:1]\n", - " \u001b[2m2\u001b[0m │ operation Bar() : Unit {\n", - " \u001b[2m3\u001b[0m │ use q = Qubit();\n", - " · \u001b[35;1m ────────┬───────\u001b[0m\n", - " · \u001b[35;1m╰── \u001b[35;1mQubit2\u001b[0m\u001b[0m\n", - " \u001b[2m4\u001b[0m │ Microsoft.Quantum.Diagnostics.DumpMachine();\n", - " ╰────\n", - "\u001b[36m help: \u001b[0mqubits should be returned to the |0⟩ state before being released to\n", - " satisfy the assumption that allocated qubits start in the |0⟩ state\n" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "QSharpCellError", + "evalue": "Error: Qubit2 released while not in |0⟩ state\nCall stack:\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\n at Bar in line_6\n\u001b[31mQsc.Eval.ReleasedQubitNotZero\u001b[0m\n\n \u001b[31m×\u001b[0m runtime error\n\u001b[31m ╰─▶ \u001b[0mQubit2 released while not in |0⟩ state\n ╭─[\u001b[36;1;4mline_6\u001b[0m:2:1]\n \u001b[2m2\u001b[0m │ operation Bar() : Unit {\n \u001b[2m3\u001b[0m │ use q = Qubit();\n · \u001b[35;1m ────────┬───────\u001b[0m\n · \u001b[35;1m╰── \u001b[35;1mQubit2\u001b[0m\u001b[0m\n \u001b[2m4\u001b[0m │ Microsoft.Quantum.Diagnostics.DumpMachine();\n ╰────\n\u001b[36m help: \u001b[0mqubits should be returned to the |0⟩ state before being released to\n satisfy the assumption that allocated qubits start in the |0⟩ state\n", + "output_type": "error", + "traceback": [ + "Error: Qubit2 released while not in |0⟩ state", + "Call stack:", + " at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs", + " at Bar in line_6", + "\u001b[31mQsc.Eval.ReleasedQubitNotZero\u001b[0m", + "", + " \u001b[31m×\u001b[0m runtime error", + "\u001b[31m ╰─▶ \u001b[0mQubit2 released while not in |0⟩ state", + " ╭─[\u001b[36;1;4mline_6\u001b[0m:2:1]", + " \u001b[2m2\u001b[0m │ operation Bar() : Unit {", + " \u001b[2m3\u001b[0m │ use q = Qubit();", + " · \u001b[35;1m ────────┬───────\u001b[0m", + " · \u001b[35;1m╰── \u001b[35;1mQubit2\u001b[0m\u001b[0m", + " \u001b[2m4\u001b[0m │ Microsoft.Quantum.Diagnostics.DumpMachine();", + " ╰────", + "\u001b[36m help: \u001b[0mqubits should be returned to the |0⟩ state before being released to", + " satisfy the assumption that allocated qubits start in the |0⟩ state" + ] } ], "source": [ @@ -552,7 +551,7 @@ " \n", " \n", " \n", - " |0111⟩\n", + " |1111⟩\n", " \n", " \n", " 1.0000+0.0000𝑖\n", @@ -572,7 +571,7 @@ ], "text/plain": [ "STATE:\n", - "|0111⟩: 1.0000+0.0000𝑖" + "|1111⟩: 1.0000+0.0000𝑖" ] }, "metadata": {}, @@ -581,10 +580,10 @@ { "data": { "text/html": [ - "

Result: Zero

" + "

Result: One

" ], "text/plain": [ - "Result: Zero" + "Result: One" ] }, "metadata": {}, @@ -605,7 +604,7 @@ " \n", " \n", " \n", - " |0111⟩\n", + " |1111⟩\n", " \n", " \n", " 1.0000+0.0000𝑖\n", @@ -625,7 +624,7 @@ ], "text/plain": [ "STATE:\n", - "|0111⟩: 1.0000+0.0000𝑖" + "|1111⟩: 1.0000+0.0000𝑖" ] }, "metadata": {}, @@ -634,10 +633,10 @@ { "data": { "text/html": [ - "

Result: Zero

" + "

Result: One

" ], "text/plain": [ - "Result: Zero" + "Result: One" ] }, "metadata": {}, @@ -658,7 +657,7 @@ " \n", " \n", " \n", - " |0111⟩\n", + " |1111⟩\n", " \n", " \n", " 1.0000+0.0000𝑖\n", @@ -678,7 +677,7 @@ ], "text/plain": [ "STATE:\n", - "|0111⟩: 1.0000+0.0000𝑖" + "|1111⟩: 1.0000+0.0000𝑖" ] }, "metadata": {}, @@ -687,10 +686,10 @@ { "data": { "text/html": [ - "

Result: Zero

" + "

Result: One

" ], "text/plain": [ - "Result: Zero" + "Result: One" ] }, "metadata": {}, @@ -811,7 +810,7 @@ { "data": { "text/plain": [ - "[Zero, One, Zero, One, One, Zero, Zero, One, Zero, One]" + "[One, One, Zero, One, Zero, One, One, Zero, One, Zero]" ] }, "execution_count": 11, @@ -851,7 +850,7 @@ "outputs": [ { "data": { - "image/png": "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rqKw2LNnT7S2tsbAgQM7rB84cGC8/PLL77vPggULYv78+Qetb2hoqOTQQIL6Hx7vCYBqq/brfN++fVFfX9/p/RWFxZFoamqKuXPntt9ua2uLvXv3Rt++faOmpqbah+c4aWlpiYaGhigWi1FXV3e8xwGqxGv9w6NcLse+fftiyJAhh9yuorDo169fdOvWLXbt2tVh/a5du2LQoEHvu0+hUIhCodBhXe/evSs5LF1YXV2dNxv4EPBa/3A41JmK/6jo4s0ePXrE6NGj4+mnn25f19bWFk8//XSMGzeu8gkBgJNKxR+FzJ07N2666aYYM2ZMXHbZZfHDH/4wDhw4EDNmzKjGfABAF1JxWHzxi1+MN998M7797W/Hzp074xOf+ESsWLHioAs6+XArFAoxb968gz4GA04uXuv8t5ryB/2/EQCAw+S3QgCANMICAEgjLACANMICAEgjLDikVatWRU1NTafLhAkTjveIQBUUi8W4+eabY8iQIdGjR48466yz4o477oi33nrreI/GCU5YcEif+tSnYseOHQctixcvjpqampg1a9YRPe67776bPCmQ5W9/+1uMGTMmXnnllfjlL38ZW7dujQcffLD9yxD37t17vEfkBCYsOKQePXrEoEGDOiz//Oc/484774y77rorrr/++oiI2LRpUzQ2NkavXr1i4MCB8aUvfSn27NnT/jjjx4+P2267LebMmRP9+vWLyZMnR0TEM888E5dddlkUCoUYPHhwfOMb34h//etfx+W5Av82e/bs6NGjR/zud7+LK664IoYNGxaNjY3x1FNPxfbt2+Ob3/xmREQMHz48vvvd78bNN98ctbW1MWzYsPjJT37S4bGKxWJMnTo1evfuHX369IkpU6bEa6+9dhyeFceKsKAib7/9dkyZMiXGjx8f99xzT/u6K6+8Mi655JLYsGFDrFixInbt2hVTp07tsO/Pf/7z6NGjR6xZsyYefPDB2L59e3z+85+PsWPHxosvvhiLFi2Khx56KL7zne8cj6cGRMTevXtj5cqVMWvWrOjZs2eH+wYNGhTTp0+PZcuWtf909g9+8IMYM2ZM/PnPf45Zs2bFrbfeGlu2bImIiPfeey8mT54ctbW18eyzz8aaNWuiV69e8bnPfc5Zy5NZGQ5Ta2trubGxsTxy5MhyS0tL+/p77rmnPGnSpA7bFovFckSUt2zZUi6Xy+UrrriifMkll3TY5q677iqPGDGi3NbW1r7ugQceKPfq1avc2tpaxWcCdGbt2rXliCgvX778fe+/7777yhFR3rVrV/mss84q33DDDe33tbW1lQcMGFBetGhRuVwul3/xi18c9BovlUrlnj17lleuXFnV58HxU/WfTefkcdddd8Vzzz0X69ati9ra2vb1L774YvzhD3+IXr16HbTPtm3b4rzzzouIiNGjR3e4b/PmzTFu3LioqalpX3f55ZfH/v374/XXX49hw4ZV6ZkAH6R8mF/KPGrUqPY/19TUxKBBg2L37t0R8e/3hq1bt3Z4v4iIeOedd2Lbtm15w3JCERYclqVLl8b3v//9ePzxx+Pcc8/tcN/+/fvjmmuuie9973sH7Td48OD2P59++ulVnxM4Ouecc07U1NTE5s2b47rrrjvo/s2bN8cZZ5wR/fv3j4iIj3zkIx3ur6mpiba2toj493vD6NGjY8mSJQc9zn/25+QjLPhAL7zwQsycOTMWLlzYftHl/3fppZfGo48+GsOHD4/u3Q//r9TIkSPj0UcfjXK53H7WYs2aNVFbWxtDhw5Nmx84fH379o2JEyfGj3/84/ja177W4TqLnTt3xpIlS+LGG2/scKaxM5deemksW7YsBgwYEHV1ddUcmxOIizc5pD179sS1114b48ePjxtuuCF27tzZYXnzzTdj9uzZsXfv3pg2bVqsX78+tm3bFitXrowZM2ZEa2trp489a9asKBaLcfvtt8fLL78cjz32WMybNy/mzp0bp5ziryYcL/fff3+USqWYPHlyrF69OorFYqxYsSImTpwYZ555Ztx7772H9TjTp0+Pfv36xZQpU+LZZ5+NV199NVatWhVf/epX4/XXX6/ys+B48e7NIT3++OPx97//PZ544okYPHjwQcvYsWNjyJAhsWbNmmhtbY1JkybFxz/+8ZgzZ0707t37kIFw5plnxhNPPBHr1q2Liy++OG655ZaYOXNmfOtb3zqGzxD4b+eee25s2LAhzj777Jg6dWp87GMfi6985SsxYcKEeO6556JPnz6H9TinnXZarF69OoYNGxZf+MIXYuTIkTFz5sx45513nME4ifnZdAAgjTMWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApPlfY+85nYv8sgoAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAGdCAYAAABO2DpVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAWKElEQVR4nO3de4xUhdn48Wd1uyPK7iIIArKA1htesApoKG0Fq1KqBm2ijcFKkLRR1gsSkwptao3VxaSvsU3teomtTaNCGkNtqkLVFDAIFbAabZUKal0vgIruAm8cLTu/P5ru790iyMAzwODnk5yEOXPOnGcSZvebM2dnakqlUikAABLst6cHAAD2HcICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEhTu7sP2NnZGW+//XbU19dHTU3N7j48ALATSqVSbNy4MQYOHBj77bft8xK7PSzefvvtaGpq2t2HBQAStLW1xaBBg7Z5/24Pi/r6+oj492ANDQ27+/AAwE7o6OiIpqamrt/j27Lbw+I/b380NDQICwCoMp91GYOLNwGANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEhTdli89dZbcckll0SfPn2iR48eceKJJ8aKFSsqMRsAUGXK+q6QDz74IMaMGRPjxo2Lxx57LPr27RuvvPJKHHzwwZWaDwCoImWFxa233hpNTU3x61//umvd4Ycfnj4UAFCdynor5A9/+EOMHDkyLrzwwujXr1+cfPLJcc8992x3n2KxGB0dHd0WAGDfVNYZi1dffTVaW1tjxowZMWvWrFi+fHlcffXVUVdXF5MnT/7UfVpaWuLGG29MGRYgImLo9Y/s6RFgr/X67HP26PFrSqVSaUc3rquri5EjR8bTTz/dte7qq6+O5cuXx9KlSz91n2KxGMViset2R0dHNDU1RXt7ezQ0NOzC6MDnlbCAbatUWHR0dERjY+Nn/v4u662QAQMGxHHHHddt3bBhw+KNN97Y5j6FQiEaGhq6LQDAvqmssBgzZkysWrWq27p//OMfMWTIkNShAIDqVFZYXHvttbFs2bK45ZZbYvXq1fHAAw/E3XffHc3NzZWaDwCoImWFxahRo2LevHnx4IMPxgknnBA33XRT3H777TFp0qRKzQcAVJGy/iokIuLcc8+Nc889txKzAABVzneFAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkEZYAABphAUAkKassPjxj38cNTU13ZZjjz22UrMBAFWmttwdjj/++HjiiSf+/wPUlv0QAMA+quwqqK2tjf79+1diFgCgypV9jcUrr7wSAwcOjCOOOCImTZoUb7zxxna3LxaL0dHR0W0BAPZNZYXFaaedFvfdd1/Mnz8/Wltb47XXXouvfvWrsXHjxm3u09LSEo2NjV1LU1PTLg8NAOydakqlUmlnd/7www9jyJAhcdttt8XUqVM/dZtisRjFYrHrdkdHRzQ1NUV7e3s0NDTs7KGBz7Gh1z+yp0eAvdbrs8+pyON2dHREY2PjZ/7+3qUrL3v16hVHH310rF69epvbFAqFKBQKu3IYAKBK7NLnWGzatCnWrFkTAwYMyJoHAKhiZYXFddddF4sWLYrXX389nn766bjgggti//33j4svvrhS8wEAVaSst0LefPPNuPjii+P999+Pvn37xle+8pVYtmxZ9O3bt1LzAQBVpKywmDNnTqXmAAD2Ab4rBABIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIs0thMXv27KipqYnp06cnjQMAVLOdDovly5fHXXfdFcOHD8+cBwCoYjsVFps2bYpJkybFPffcEwcffHD2TABAldqpsGhubo5zzjknzjzzzOx5AIAqVlvuDnPmzIlnn302li9fvkPbF4vFKBaLXbc7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yvkcCwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANLsVFjccccdMXTo0DjggAPitNNOi2eeeSZ7LgCgCpUdFnPnzo0ZM2bEDTfcEM8++2ycdNJJMX78+Fi/fn0l5gMAqkjZYXHbbbfFd7/73ZgyZUocd9xxceedd8aBBx4Yv/rVryoxHwBQRWrL2fjjjz+OlStXxsyZM7vW7bfffnHmmWfG0qVLP3WfYrEYxWKx63Z7e3tERHR0dOzMvNvVWfzf9MeEfUklXnd7gtc6bFulXuf/edxSqbTd7coKi/feey+2bNkShx56aLf1hx56aLz88sufuk9LS0vceOONW61vamoq59BAgsbb9/QEQKVV+nW+cePGaGxs3Ob9ZYXFzpg5c2bMmDGj63ZnZ2ds2LAh+vTpEzU1NZU+PHtIR0dHNDU1RVtbWzQ0NOzpcYAK8Vr//CiVSrFx48YYOHDgdrcrKywOOeSQ2H///WPdunXd1q9bty769+//qfsUCoUoFArd1vXq1aucw1LFGhoa/LCBzwGv9c+H7Z2p+I+yLt6sq6uLESNGxJNPPtm1rrOzM5588skYPXp0+RMCAPuUst8KmTFjRkyePDlGjhwZp556atx+++2xefPmmDJlSiXmAwCqSNlh8e1vfzvefffd+NGPfhRr166NL33pSzF//vytLujk861QKMQNN9yw1dtgwL7Fa53/VlP6rL8bAQDYQb4rBABIIywAgDTCAgBIIywAgDTCgu1auHBh1NTUbHMZN27cnh4RqIC2tra47LLLYuDAgVFXVxdDhgyJa665Jt5///09PRp7OWHBdn35y1+Od955Z6vlrrvuipqampg2bdpOPe7HH3+cPCmQ5dVXX42RI0fGK6+8Eg8++GCsXr067rzzzq4PQ9ywYcOeHpG9mLBgu+rq6qJ///7dlg8++CCuu+66mDVrVlx44YUREfHiiy/GhAkTomfPnnHooYfGd77znXjvvfe6Hmfs2LFx5ZVXxvTp0+OQQw6J8ePHR0TEokWL4tRTT41CoRADBgyI66+/Pv71r3/tkecK/Ftzc3PU1dXFn/70pzj99NNj8ODBMWHChHjiiSfirbfeih/84AcRETF06NC45ZZb4rLLLov6+voYPHhw3H333d0eq62tLS666KLo1atX9O7dOyZOnBivv/76HnhW7C7CgrJ8+OGHMXHixBg7dmzcdNNNXevOOOOMOPnkk2PFihUxf/78WLduXVx00UXd9v3Nb34TdXV1sWTJkrjzzjvjrbfeim9+85sxatSoeP7556O1tTXuvffe+MlPfrInnhoQERs2bIgFCxbEtGnTokePHt3u69+/f0yaNCnmzp3b9dXZ//M//xMjR46Mv/71rzFt2rS44oorYtWqVRER8cknn8T48eOjvr4+nnrqqViyZEn07NkzvvGNbzhruS8rwQ7asmVLacKECaVhw4aVOjo6utbfdNNNpbPPPrvbtm1tbaWIKK1atapUKpVKp59+eunkk0/uts2sWbNKxxxzTKmzs7Nr3R133FHq2bNnacuWLRV8JsC2LFu2rBQRpXnz5n3q/bfddlspIkrr1q0rDRkypHTJJZd03dfZ2Vnq169fqbW1tVQqlUq//e1vt3qNF4vFUo8ePUoLFiyo6PNgz6n416az75g1a1YsXbo0nnnmmaivr+9a//zzz8ef//zn6Nmz51b7rFmzJo4++uiIiBgxYkS3+1566aUYPXp01NTUdK0bM2ZMbNq0Kd58880YPHhwhZ4J8FlKO/ihzMOHD+/6d01NTfTv3z/Wr18fEf/+2bB69epuPy8iIj766KNYs2ZN3rDsVYQFO2TOnDnx05/+NB555JE46qijut23adOmOO+88+LWW2/dar8BAwZ0/fuggw6q+JzArjnyyCOjpqYmXnrppbjgggu2uv+ll16Kgw8+OPr27RsREV/4whe63V9TUxOdnZ0R8e+fDSNGjIj7779/q8f5z/7se4QFn+m5556LqVOnxuzZs7suuvy/TjnllHjooYdi6NChUVu74/+lhg0bFg899FCUSqWusxZLliyJ+vr6GDRoUNr8wI7r06dPnHXWWfHLX/4yrr322m7XWaxduzbuv//+uPTSS7udadyWU045JebOnRv9+vWLhoaGSo7NXsTFm2zXe++9F+eff36MHTs2Lrnkkli7dm235d13343m5ubYsGFDXHzxxbF8+fJYs2ZNLFiwIKZMmRJbtmzZ5mNPmzYt2tra4qqrroqXX345Hn744bjhhhtixowZsd9+/mvCnvKLX/wiisVijB8/PhYvXhxtbW0xf/78OOuss+Kwww6Lm2++eYceZ9KkSXHIIYfExIkT46mnnorXXnstFi5cGFdffXW8+eabFX4W7Cl+erNdjzzySPzzn/+MRx99NAYMGLDVMmrUqBg4cGAsWbIktmzZEmeffXaceOKJMX369OjVq9d2A+Gwww6LRx99NJ555pk46aST4vLLL4+pU6fGD3/4w934DIH/dtRRR8WKFSviiCOOiIsuuii++MUvxve+970YN25cLF26NHr37r1Dj3PggQfG4sWLY/DgwfGtb30rhg0bFlOnTo2PPvrIGYx9mK9NBwDSOGMBAKQRFgBAGmEBAKQRFgBAGmEBAKQRFgBAGmEBAKQRFgBAGmEBAKQRFgBAGmEBAKQRFgBAmv8HvX2m8Y1VbDQAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -893,6 +892,20 @@ "id": "8095640a", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_3468/2211578213.py:1: DeprecationWarning: \n", + "Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0),\n", + "(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries)\n", + "but was not found to be installed on your system.\n", + "If this would cause problems for you,\n", + "please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466\n", + " \n", + " import pandas\n" + ] + }, { "data": { "text/plain": [ @@ -905,7 +918,7 @@ }, { "data": { - "image/png": "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gCv75s3XXnstvva1r0WxWIwrr7wyHnrooZgwYcJe91+0aFHU1dV1L42Njfs0MAAwcJUdFscff3y8/PLL8cILL8RVV10Vl19+ebz55pt73b+5uTna2tq6l5aWln0aGAAYuMq+FHLwwQfH2LFjIyJi8uTJsXbt2vjFL34RS5cu/cL9i8ViFIvFfZsSAKgK+/w7Fp2dnT3uoQAADlxlnbFobm6OmTNnxjHHHBM7d+6MBx98MJ5++ul4/PHH+2o+AKCKlBUW27dvjx/84Afx3nvvRV1dXUycODEef/zxOOecc/pqPgCgipQVFvfff39fzQEA7Ac8KwQASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASCMsAIA0wgIASFNWWCxatChOPfXUqKmpiREjRsR3v/vd+Pvf/95XswEAVaassFi9enU0NTXF888/H3/+85/j008/jXPPPTd27drVV/MBAFVkSDk7r1ixosfrBx54IEaMGBHr1q2LM844I3UwAKD6lBUW/6mtrS0iIoYNG7bXfUqlUpRKpe7X7e3t+3JIAGAA6/XNm52dnXHdddfF6aefHieddNJe91u0aFHU1dV1L42Njb09JAAwwPU6LJqamuL111+PZcuWfel+zc3N0dbW1r20tLT09pAAwADXq0shV199dfzpT3+KNWvWxKhRo75032KxGMVisVfDAQDVpayw6OrqimuuuSYeeuihePrpp+O4447rq7kAgCpUVlg0NTXFgw8+GA8//HDU1NTE1q1bIyKirq4uDj300D4ZEACoHmXdY3HPPfdEW1tbnHnmmXH00Ud3L8uXL++r+QCAKlL2pRAAgL3xrBAAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSlB0Wa9asiQsuuCAaGhqiUCjEH//4xz4YCwCoRmWHxa5du2LSpElx991398U8AEAVG1LuG2bOnBkzZ87si1kAgCpXdliUq1QqRalU6n7d3t7e14cEACqkz2/eXLRoUdTV1XUvjY2NfX1IAKBC+jwsmpubo62trXtpaWnp60MCABXS55dCisViFIvFvj4MADAA+B0LACBN2WcsOjo6YsOGDd2vN27cGC+//HIMGzYsjjnmmNThAIDqUnZYvPjii3HWWWd1v54/f35ERFx++eXxwAMPpA0GAFSfssPizDPPjK6urr6YBQCocu6xAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADS9Cos7r777jj22GPjkEMOiW9961vx17/+NXsuAKAKlR0Wy5cvj/nz58eCBQvipZdeikmTJsWMGTNi+/btfTEfAFBFyg6LO++8M+bOnRtXXHFFTJgwIe6999447LDD4le/+lVfzAcAVJEh5ez8ySefxLp166K5ubl73aBBg2L69Onx3HPPfeF7SqVSlEql7tdtbW0REdHe3t6beataZ+lflR6BfnQg/jd+IPP5PrAciJ/vz/+du7q6vnS/ssLigw8+iN27d8fIkSN7rB85cmS89dZbX/ieRYsWxcKFC/dY39jYWM6hoerU3VXpCYC+ciB/vnfu3Bl1dXV73V5WWPRGc3NzzJ8/v/t1Z2dn7NixI4YPHx6FQqGvD0+Ftbe3R2NjY7S0tERtbW2lxwES+XwfWLq6umLnzp3R0NDwpfuVFRb19fUxePDg2LZtW4/127Zti6OOOuoL31MsFqNYLPZYd8QRR5RzWPYDtbW1/scD+ymf7wPHl52p+FxZN28efPDBMXny5Fi5cmX3us7Ozli5cmVMnTq1/AkBgP1K2ZdC5s+fH5dffnlMmTIlTjvttLjrrrti165dccUVV/TFfABAFSk7LC655JJ4//3345ZbbomtW7fGySefHCtWrNjjhk6I+PelsAULFuxxOQyofj7ffJFC13/73ggAwFfkWSEAQBphAQCkERYAQBphAQCkERYAQBphQZ9pbW2N1tbWSo8BJPrss8/iySefjKVLl8bOnTsjImLLli3R0dFR4ckYKIQFqTo7O+OnP/1p1NXVxejRo2P06NFxxBFHxG233RadnZ2VHg/YB++8805885vfjNmzZ0dTU1O8//77ERFxxx13xA033FDh6Rgo+vwhZBxYbrrpprj//vtj8eLFcfrpp0dExDPPPBO33nprfPzxx3H77bdXeEKgt6699tqYMmVKvPLKKzF8+PDu9RdddFHMnTu3gpMxkPiBLFI1NDTEvffeGxdeeGGP9Q8//HDMmzcvNm/eXKHJgH01fPjwePbZZ+P444+PmpqaeOWVV2LMmDGxadOmmDBhQvzrX/+q9IgMAC6FkGrHjh0xfvz4PdaPHz8+duzYUYGJgCydnZ2xe/fuPda3trZGTU1NBSZiIBIWpJo0aVIsWbJkj/VLliyJSZMmVWAiIMu5554bd911V/frQqEQHR0dsWDBgpg1a1blBmNAcSmEVKtXr47zzz8/jjnmmJg6dWpERDz33HPR0tISjz76aHznO9+p8IRAb7W2tsaMGTOiq6sr1q9fH1OmTIn169dHfX19rFmzJkaMGFHpERkAhAXptmzZEnfffXe89dZbERFxwgknxLx586KhoaHCkwH76rPPPotly5bFq6++Gh0dHXHKKafEnDlz4tBDD630aAwQwoI0n376aZx33nlx7733xrhx4yo9DgAV4OumpDnooIPi1VdfrfQYQB9av359rFq1KrZv377Hb9PccsstFZqKgcQZC1Jdf/31USwWY/HixZUeBUh23333xVVXXRX19fVx1FFHRaFQ6N5WKBTipZdequB0DBTCglTXXHNN/PrXv45x48bF5MmT4/DDD++x/c4776zQZMC+Gj16dMybNy9uvPHGSo/CACYsSHXWWWftdVuhUIinnnqqH6cBMtXW1sbLL78cY8aMqfQoDGDCAoCv5Ec/+lGceuqpceWVV1Z6FAYwN2/SJzZs2BBvv/12nHHGGXHooYdGV1dXj+uxQPUZO3Zs3HzzzfHcc8/FxIkT46CDDuqx/Sc/+UmFJmMgccaCVB9++GFcfPHFsWrVqigUCrF+/foYM2ZM/PCHP4yhQ4fGz372s0qPCPTScccdt9dthUIh/vGPf/TjNAxUzliQ6vrrr4+DDjoo3n333TjhhBO6119yySUxf/58YQFVbOPGjRER8cEHH0RERH19fSXHYYDyrBBSPfHEE3HHHXfEqFGjeqwfN25cvPPOOxWaCthXH330UTQ1NUV9fX2MHDkyRo4cGfX19XH11VdHW1tbpcdjAHHGglS7du2Kww47bI/1O3bsiGKxWIGJgH21Y8eOmDp1amzevDnmzJnTfTbyzTffjAceeCBWrlwZzz77bAwdOrTCkzIQuMeCVLNmzYrJkyfHbbfdFjU1NfHqq6/G6NGj49JLL43Ozs74wx/+UOkRgTJdd911sXLlynjyySdj5MiRPbZt3bo1zj333Jg2bVr8/Oc/r9CEDCTCglSvv/56TJs2LU455ZR46qmn4sILL4w33ngjduzYEX/5y1/i61//eqVHBMp07LHHxtKlS2PGjBlfuH3FihVx5ZVXxqZNm/p3MAYkYUG6tra2WLJkSbzyyivdTz9samqKo48+utKjAb1QLBbj7bff3uPeqc+1trbG2LFj4+OPP+7nyRiI3GNBimnTpkVTU1N873vfi7q6urjpppt6bP/ggw9izJgxvo4GVai+vj42bdq017DYuHFjDBs2rJ+nYqDyrRBSrFq1Ki6++OJYsGDBF27fvXu3b4VAlZoxY0bcdNNN8cknn+yxrVQqxc033xznnXdeBSZjIHIphBSDBg2KpUuXxg033BBnn312/OY3v+nxALJt27ZFQ0ND7N69u4JTAr3R2toaU6ZMiWKxGE1NTTF+/Pjo6uqKv/3tb/HLX/4ySqVSvPjii9HY2FjpURkAhAUpBg0aFFu3bo0PP/wwZs+eHcViMR5++OHuhxUJC6huGzdujHnz5sUTTzwRn//ZKBQKcc4558SSJUti7NixFZ6QgUJYkOLzsBgxYkS0tbXFZZddFi+88EIsX748pk+fLixgP/HPf/4z1q9fHxH/fnaIeyv4T+6xIF1dXV088sgjMXfu3Jg1a5bvtsN+ZOjQoXHaaafFaaedJir4Qr4VQor/fHJpoVCIxYsXx8knnxw//vGP46mnnqrQZAD0J2csSLG3K2qXXnppPPPMM/Haa6/180QAVIIzFqRYtWrVXk+LnnzyybFu3bp45JFH+nkqAPqbmzcBgDQuhQAAaYQFAJBGWAAAaYQFAJBGWAAAaYQFAJBGWAAAaYQFAJDmfwEfRMiaxHfLbwAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAGvCAYAAAAHapzzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAXaklEQVR4nO3da4wVhfn48ecgckS7uyIIQlhRihVRwQpqCNWoqHi3NqmX0JRYa6KsV2JiqVG0xi6+qKUNFqmxJU1jMW1ibWrFCyLGAhYw3qsFBV2kiIruAo1HZff3onH//y1ge5Zn9+yBzyeZFzNnxnlMXPebmTk7hba2trYAAEjQq9IDAAC7D2EBAKQRFgBAGmEBAKQRFgBAGmEBAKQRFgBAGmEBAKTp3d0nbG1tjfXr10dNTU0UCoXuPj0A0AltbW2xefPmGDJkSPTqtfPrEt0eFuvXr4/6+vruPi0AkKCpqSmGDh2608+7PSxqamoi4t+D1dbWdvfpAYBOaGlpifr6+vbf4zvT7WHxxe2P2tpaYQEAVea/Pcbg4U0AII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSlB0W7777bnznO9+J/v37R9++fePoo4+OFStWdMVsAECVKetdIR999FFMmDAhTjnllHj00UfjwAMPjFWrVkW/fv26aj4AoIqUFRZ33XVX1NfXx69//ev2bYceemj6UABAdSrrVsif/vSnGDduXHz729+OgQMHxte//vW47777vvSYUqkULS0tHRYAYPdU1hWLt956K+bMmRPTpk2LH/7wh7F8+fK49tpro0+fPjFlypQdHtPY2Bi33357yrAAPdUhP3ik0iPQjdbOPKfSI/RYhba2trb/dec+ffrEuHHjYsmSJe3brr322li+fHksXbp0h8eUSqUolUrt6y0tLVFfXx/Nzc1RW1u7C6MD9BzCYs+yJ4ZFS0tL1NXV/dff32XdChk8eHCMGjWqw7Yjjjgi3nnnnZ0eUywWo7a2tsMCAOyeygqLCRMmxBtvvNFh2z/+8Y8YNmxY6lAAQHUqKyxuuOGGWLZsWfz4xz+O1atXxwMPPBC//OUvo6GhoavmAwCqSFlhcdxxx8VDDz0Uv/vd7+Koo46KO+64I2bNmhWTJ0/uqvkAgCpS1rdCIiLOPffcOPfcc7tiFgCgynlXCACQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGnKCovbbrstCoVCh2XkyJFdNRsAUGV6l3vAkUceGU8++eT/+wf0LvsfAQDspsqugt69e8dBBx3UFbMAAFWu7GcsVq1aFUOGDInhw4fH5MmT45133vnS/UulUrS0tHRYAIDdU1lhccIJJ8S8efNiwYIFMWfOnFizZk2ceOKJsXnz5p0e09jYGHV1de1LfX39Lg8NAPRMhba2trbOHvzxxx/HsGHD4u67747LL798h/uUSqUolUrt6y0tLVFfXx/Nzc1RW1vb2VMD9CiH/OCRSo9AN1o785xKj9DtWlpaoq6u7r/+/t6lJy/333//+NrXvharV6/e6T7FYjGKxeKunAYAqBK79HcstmzZEm+++WYMHjw4ax4AoIqVFRY33nhjLF68ONauXRtLliyJCy+8MPbaa6+49NJLu2o+AKCKlHUrZN26dXHppZfGhx9+GAceeGB84xvfiGXLlsWBBx7YVfMBAFWkrLCYP39+V80BAOwGvCsEAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEgjLACANMICAEizS2Exc+bMKBQKcf311yeNAwBUs06HxfLly2Pu3LkxevTozHkAgCrWqbDYsmVLTJ48Oe67777o169f9kwAQJXqVFg0NDTEOeecE6eddlr2PABAFetd7gHz58+P559/PpYvX/4/7V8qlaJUKrWv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0dbW1hWzAABVzt+xAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAIE2nwuKee+6JQw45JPbZZ5844YQT4m9/+1v2XABAFSo7LB588MGYNm1azJgxI55//vkYM2ZMTJo0KTZu3NgV8wEAVaTssLj77rvjiiuuiMsuuyxGjRoV9957b+y7777xq1/9qivmAwCqSO9ydv70009j5cqVMX369PZtvXr1itNOOy2WLl26w2NKpVKUSqX29ebm5oiIaGlp6cy8Va219K9Kj0A32hP/G9+T+fnes+yJP99f/Du3tbV96X5lhcUHH3wQ27Zti0GDBnXYPmjQoHj99dd3eExjY2Pcfvvt222vr68v59RQdepmVXoCoKvsyT/fmzdvjrq6up1+XlZYdMb06dNj2rRp7eutra2xadOm6N+/fxQKha4+PRXW0tIS9fX10dTUFLW1tZUeB0jk53vP0tbWFps3b44hQ4Z86X5lhcWAAQNir732ivfee6/D9vfeey8OOuigHR5TLBajWCx22Lb//vuXc1p2A7W1tf7HA7spP997ji+7UvGFsh7e7NOnT4wdOzYWLlzYvq21tTUWLlwY48ePL39CAGC3UvatkGnTpsWUKVNi3Lhxcfzxx8esWbNi69atcdlll3XFfABAFSk7LC6++OJ4//3349Zbb40NGzbEMcccEwsWLNjugU6I+PetsBkzZmx3Owyofn6+2ZFC23/73ggAwP/Iu0IAgDTCAgBIIywAgDTCAgBIIywAgDTCgi6zbt26WLduXaXHABJ9/vnn8eSTT8bcuXNj8+bNERGxfv362LJlS4Uno6cQFqRqbW2NH/3oR1FXVxfDhg2LYcOGxf777x933HFHtLa2Vno8YBe8/fbbcfTRR8cFF1wQDQ0N8f7770dExF133RU33nhjhaejp+jyl5CxZ7n55pvj/vvvj5kzZ8aECRMiIuLZZ5+N2267LT755JO48847Kzwh0FnXXXddjBs3Ll588cXo379/+/YLL7wwrrjiigpORk/iD2SRasiQIXHvvffG+eef32H7ww8/HFOnTo133323QpMBu6p///6xZMmSOPzww6OmpiZefPHFGD58eKxduzZGjRoV//rXvyo9Ij2AWyGk2rRpU4wcOXK77SNHjoxNmzZVYCIgS2tra2zbtm277evWrYuampoKTERPJCxINWbMmJg9e/Z222fPnh1jxoypwERAljPOOCNmzZrVvl4oFGLLli0xY8aMOPvssys3GD2KWyGkWrx4cZxzzjlx8MEHx/jx4yMiYunSpdHU1BR/+ctf4sQTT6zwhEBnrVu3LiZNmhRtbW2xatWqGDduXKxatSoGDBgQzzzzTAwcOLDSI9IDCAvSrV+/Pu655554/fXXIyLiiCOOiKlTp8aQIUMqPBmwqz7//POYP39+vPTSS7Fly5Y49thjY/LkydG3b99Kj0YPISxI89lnn8WZZ54Z9957bxx22GGVHgeACvB1U9Lsvffe8dJLL1V6DKALrVq1KhYtWhQbN27c7m/T3HrrrRWaip7EFQtS3XDDDVEsFmPmzJmVHgVIdt9998VVV10VAwYMiIMOOigKhUL7Z4VCIZ5//vkKTkdPISxIdc0118RvfvObOOyww2Ls2LGx3377dfj87rvvrtBkwK4aNmxYTJ06NW666aZKj0IPJixIdcopp+z0s0KhEE899VQ3TgNkqq2tjRdeeCGGDx9e6VHowYQFAP+Tyy+/PI477ri48sorKz0KPZiHN+kSq1evjjfffDNOOumk6Nu3b7S1tXW4HwtUnxEjRsQtt9wSS5cujdGjR8fee+/d4fNrr722QpPRk7hiQaoPP/wwLrrooli0aFEUCoVYtWpVDB8+PL73ve9Fv3794ic/+UmlRwQ66dBDD93pZ4VCId56661unIaeyhULUt1www2x9957xzvvvBNHHHFE+/aLL744pk2bJiygiq1ZsyYiIj744IOIiBgwYEAlx6GH8q4QUj3++ONx1113xdChQztsP+yww+Ltt9+u0FTArvr444+joaEhBgwYEIMGDYpBgwbFgAED4uqrr47m5uZKj0cP4ooFqbZu3Rr77rvvdts3bdoUxWKxAhMBu2rTpk0xfvz4ePfdd2Py5MntVyNfe+21mDdvXixcuDCWLFkS/fr1q/Ck9ASesSDV2WefHWPHjo077rgjampq4qWXXophw4bFJZdcEq2trfGHP/yh0iMCZbr++utj4cKF8eSTT8agQYM6fLZhw4Y444wzYuLEifHTn/60QhPSkwgLUr3yyisxceLEOPbYY+Opp56K888/P1599dXYtGlT/PWvf42vfvWrlR4RKNMhhxwSc+fOjUmTJu3w8wULFsSVV14Za9eu7d7B6JGEBemam5tj9uzZ8eKLL7a//bChoSEGDx5c6dGATigWi/Hmm29u9+zUF9atWxcjRoyITz75pJsnoyfyjAUpJk6cGA0NDfGtb30r6urq4uabb+7w+QcffBDDhw/3dTSoQgMGDIi1a9fuNCzWrFkTBxxwQDdPRU/lWyGkWLRoUVx00UUxY8aMHX6+bds23wqBKjVp0qS4+eab49NPP93us1KpFLfcckuceeaZFZiMnsitEFL06tUr5s6dGzfeeGOceuqp8dvf/rbDC8jee++9GDJkSGzbtq2CUwKdsW7duhg3blwUi8VoaGiIkSNHRltbW/z973+PX/ziF1EqlWLFihVRX19f6VHpAYQFKXr16hUbNmyIDz/8MC644IIoFovx8MMPt7+sSFhAdVuzZk1MnTo1Hn/88fji10ahUIjTTz89Zs+eHSNGjKjwhPQUwoIUX4TFwIEDo7m5OS699NJ47rnn4sEHH4zTTjtNWMBu4qOPPopVq1ZFxL/fHeLZCv6TZyxIV1dXF4888khcccUVcfbZZ/tuO+xG+vXrF8cff3wcf/zxooId8q0QUvznm0sLhULMnDkzjjnmmPj+978fTz31VIUmA6A7uWJBip3dUbvkkkvi2WefjZdffrmbJwKgElyxIMWiRYt2eln0mGOOiZUrV8YjjzzSzVMB0N08vAkApHErBABIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDT/BzRqNf3Uih03AAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -942,11 +955,11 @@ "evalue": "\u001b[31mQsc.TypeCk.TyMismatch\u001b[0m\n\n \u001b[31m×\u001b[0m type error\n\u001b[31m ╰─▶ \u001b[0mexpected Unit, found String\n ╭─[\u001b[36;1;4m\u001b[0m:1:1]\n \u001b[2m1\u001b[0m │ RandomBit(\"a\")\n · \u001b[35;1m──────────────\u001b[0m\n ╰────\n", "output_type": "error", "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mQSharpError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[14], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mqsharp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\"\"\u001b[39;49m\u001b[38;5;124;43mRandomBit(\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43ma\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m)\u001b[39;49m\u001b[38;5;124;43m\"\"\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\src\\qsharp\\pip\\samples\\.venv\\Lib\\site-packages\\qsharp\\_qsharp.py:165\u001b[0m, in \u001b[0;36mrun\u001b[1;34m(entry_expr, shots, on_result, save_events)\u001b[0m\n\u001b[0;32m 163\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m _ \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(shots):\n\u001b[0;32m 164\u001b[0m results\u001b[38;5;241m.\u001b[39mappend({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mresult\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevents\u001b[39m\u001b[38;5;124m\"\u001b[39m: []})\n\u001b[1;32m--> 165\u001b[0m run_results \u001b[38;5;241m=\u001b[39m \u001b[43mget_interpreter\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 166\u001b[0m \u001b[43m \u001b[49m\u001b[43mentry_expr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mon_save_events\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msave_events\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mprint_output\u001b[49m\n\u001b[0;32m 167\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 168\u001b[0m results[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m][\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mresult\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m run_results[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m 169\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m on_result:\n", - "\u001b[1;31mQSharpError\u001b[0m: \u001b[31mQsc.TypeCk.TyMismatch\u001b[0m\n\n \u001b[31m×\u001b[0m type error\n\u001b[31m ╰─▶ \u001b[0mexpected Unit, found String\n ╭─[\u001b[36;1;4m\u001b[0m:1:1]\n \u001b[2m1\u001b[0m │ RandomBit(\"a\")\n · \u001b[35;1m──────────────\u001b[0m\n ╰────\n" + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mQSharpError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[14], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mqsharp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\"\"\u001b[39;49m\u001b[38;5;124;43mRandomBit(\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43ma\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m)\u001b[39;49m\u001b[38;5;124;43m\"\"\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/workspaces/qsharp/pip/qsharp/_qsharp.py:165\u001b[0m, in \u001b[0;36mrun\u001b[0;34m(entry_expr, shots, on_result, save_events)\u001b[0m\n\u001b[1;32m 163\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m _ \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(shots):\n\u001b[1;32m 164\u001b[0m results\u001b[38;5;241m.\u001b[39mappend({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mresult\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevents\u001b[39m\u001b[38;5;124m\"\u001b[39m: []})\n\u001b[0;32m--> 165\u001b[0m run_results \u001b[38;5;241m=\u001b[39m \u001b[43mget_interpreter\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 166\u001b[0m \u001b[43m \u001b[49m\u001b[43mentry_expr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mon_save_events\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msave_events\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mprint_output\u001b[49m\n\u001b[1;32m 167\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 168\u001b[0m results[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m][\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mresult\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m run_results\n\u001b[1;32m 169\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m on_result:\n", + "\u001b[0;31mQSharpError\u001b[0m: \u001b[31mQsc.TypeCk.TyMismatch\u001b[0m\n\n \u001b[31m×\u001b[0m type error\n\u001b[31m ╰─▶ \u001b[0mexpected Unit, found String\n ╭─[\u001b[36;1;4m\u001b[0m:1:1]\n \u001b[2m1\u001b[0m │ RandomBit(\"a\")\n · \u001b[35;1m──────────────\u001b[0m\n ╰────\n" ] } ], @@ -994,23 +1007,16 @@ "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "[None,\n", - " module.QSharpError('Error: Qubit1 released while not in |0⟩ state\\nCall stack:\\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\\n at Bad in line_9\\n\\x1b[31mQsc.Eval.ReleasedQubitNotZero\\x1b[0m\\n\\n \\x1b[31m×\\x1b[0m runtime error\\n\\x1b[31m ╰─▶ \\x1b[0mQubit1 released while not in |0⟩ state\\n ╭─[\\x1b[36;1;4mline_9\\x1b[0m:7:1]\\n \\x1b[2m7\\x1b[0m │ // Do something bad, sometimes\\n \\x1b[2m8\\x1b[0m │ use q2 = Qubit();\\n · \\x1b[35;1m ────────┬────────\\x1b[0m\\n · \\x1b[35;1m╰── \\x1b[35;1mQubit1\\x1b[0m\\x1b[0m\\n \\x1b[2m9\\x1b[0m │ X(q2);\\n ╰────\\n\\x1b[36m help: \\x1b[0mqubits should be returned to the |0⟩ state before being released to\\n satisfy the assumption that allocated qubits start in the |0⟩ state\\n'),\n", - " module.QSharpError('Error: Qubit1 released while not in |0⟩ state\\nCall stack:\\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\\n at Bad in line_9\\n\\x1b[31mQsc.Eval.ReleasedQubitNotZero\\x1b[0m\\n\\n \\x1b[31m×\\x1b[0m runtime error\\n\\x1b[31m ╰─▶ \\x1b[0mQubit1 released while not in |0⟩ state\\n ╭─[\\x1b[36;1;4mline_9\\x1b[0m:7:1]\\n \\x1b[2m7\\x1b[0m │ // Do something bad, sometimes\\n \\x1b[2m8\\x1b[0m │ use q2 = Qubit();\\n · \\x1b[35;1m ────────┬────────\\x1b[0m\\n · \\x1b[35;1m╰── \\x1b[35;1mQubit1\\x1b[0m\\x1b[0m\\n \\x1b[2m9\\x1b[0m │ X(q2);\\n ╰────\\n\\x1b[36m help: \\x1b[0mqubits should be returned to the |0⟩ state before being released to\\n satisfy the assumption that allocated qubits start in the |0⟩ state\\n'),\n", - " None,\n", - " module.QSharpError('Error: Qubit1 released while not in |0⟩ state\\nCall stack:\\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\\n at Bad in line_9\\n\\x1b[31mQsc.Eval.ReleasedQubitNotZero\\x1b[0m\\n\\n \\x1b[31m×\\x1b[0m runtime error\\n\\x1b[31m ╰─▶ \\x1b[0mQubit1 released while not in |0⟩ state\\n ╭─[\\x1b[36;1;4mline_9\\x1b[0m:7:1]\\n \\x1b[2m7\\x1b[0m │ // Do something bad, sometimes\\n \\x1b[2m8\\x1b[0m │ use q2 = Qubit();\\n · \\x1b[35;1m ────────┬────────\\x1b[0m\\n · \\x1b[35;1m╰── \\x1b[35;1mQubit1\\x1b[0m\\x1b[0m\\n \\x1b[2m9\\x1b[0m │ X(q2);\\n ╰────\\n\\x1b[36m help: \\x1b[0mqubits should be returned to the |0⟩ state before being released to\\n satisfy the assumption that allocated qubits start in the |0⟩ state\\n'),\n", - " None,\n", - " None,\n", - " module.QSharpError('Error: Qubit1 released while not in |0⟩ state\\nCall stack:\\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\\n at Bad in line_9\\n\\x1b[31mQsc.Eval.ReleasedQubitNotZero\\x1b[0m\\n\\n \\x1b[31m×\\x1b[0m runtime error\\n\\x1b[31m ╰─▶ \\x1b[0mQubit1 released while not in |0⟩ state\\n ╭─[\\x1b[36;1;4mline_9\\x1b[0m:7:1]\\n \\x1b[2m7\\x1b[0m │ // Do something bad, sometimes\\n \\x1b[2m8\\x1b[0m │ use q2 = Qubit();\\n · \\x1b[35;1m ────────┬────────\\x1b[0m\\n · \\x1b[35;1m╰── \\x1b[35;1mQubit1\\x1b[0m\\x1b[0m\\n \\x1b[2m9\\x1b[0m │ X(q2);\\n ╰────\\n\\x1b[36m help: \\x1b[0mqubits should be returned to the |0⟩ state before being released to\\n satisfy the assumption that allocated qubits start in the |0⟩ state\\n'),\n", - " None,\n", - " module.QSharpError('Error: Qubit1 released while not in |0⟩ state\\nCall stack:\\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\\n at Bad in line_9\\n\\x1b[31mQsc.Eval.ReleasedQubitNotZero\\x1b[0m\\n\\n \\x1b[31m×\\x1b[0m runtime error\\n\\x1b[31m ╰─▶ \\x1b[0mQubit1 released while not in |0⟩ state\\n ╭─[\\x1b[36;1;4mline_9\\x1b[0m:7:1]\\n \\x1b[2m7\\x1b[0m │ // Do something bad, sometimes\\n \\x1b[2m8\\x1b[0m │ use q2 = Qubit();\\n · \\x1b[35;1m ────────┬────────\\x1b[0m\\n · \\x1b[35;1m╰── \\x1b[35;1mQubit1\\x1b[0m\\x1b[0m\\n \\x1b[2m9\\x1b[0m │ X(q2);\\n ╰────\\n\\x1b[36m help: \\x1b[0mqubits should be returned to the |0⟩ state before being released to\\n satisfy the assumption that allocated qubits start in the |0⟩ state\\n')]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" + "ename": "QSharpError", + "evalue": "Error: Qubit1 released while not in |0⟩ state\nCall stack:\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\n at Bad in line_9\n\u001b[31mQsc.Eval.ReleasedQubitNotZero\u001b[0m\n\n \u001b[31m×\u001b[0m runtime error\n\u001b[31m ╰─▶ \u001b[0mQubit1 released while not in |0⟩ state\n ╭─[\u001b[36;1;4mline_9\u001b[0m:7:1]\n \u001b[2m7\u001b[0m │ // Do something bad, sometimes\n \u001b[2m8\u001b[0m │ use q2 = Qubit();\n · \u001b[35;1m ────────┬────────\u001b[0m\n · \u001b[35;1m╰── \u001b[35;1mQubit1\u001b[0m\u001b[0m\n \u001b[2m9\u001b[0m │ X(q2);\n ╰────\n\u001b[36m help: \u001b[0mqubits should be returned to the |0⟩ state before being released to\n satisfy the assumption that allocated qubits start in the |0⟩ state\n", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mQSharpError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[16], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mqsharp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mBad()\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/workspaces/qsharp/pip/qsharp/_qsharp.py:165\u001b[0m, in \u001b[0;36mrun\u001b[0;34m(entry_expr, shots, on_result, save_events)\u001b[0m\n\u001b[1;32m 163\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m _ \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(shots):\n\u001b[1;32m 164\u001b[0m results\u001b[38;5;241m.\u001b[39mappend({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mresult\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevents\u001b[39m\u001b[38;5;124m\"\u001b[39m: []})\n\u001b[0;32m--> 165\u001b[0m run_results \u001b[38;5;241m=\u001b[39m \u001b[43mget_interpreter\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 166\u001b[0m \u001b[43m \u001b[49m\u001b[43mentry_expr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mon_save_events\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msave_events\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mprint_output\u001b[49m\n\u001b[1;32m 167\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 168\u001b[0m results[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m][\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mresult\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m run_results\n\u001b[1;32m 169\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m on_result:\n", + "\u001b[0;31mQSharpError\u001b[0m: Error: Qubit1 released while not in |0⟩ state\nCall stack:\n at QIR.Runtime.__quantum__rt__qubit_release in core/qir.qs\n at Bad in line_9\n\u001b[31mQsc.Eval.ReleasedQubitNotZero\u001b[0m\n\n \u001b[31m×\u001b[0m runtime error\n\u001b[31m ╰─▶ \u001b[0mQubit1 released while not in |0⟩ state\n ╭─[\u001b[36;1;4mline_9\u001b[0m:7:1]\n \u001b[2m7\u001b[0m │ // Do something bad, sometimes\n \u001b[2m8\u001b[0m │ use q2 = Qubit();\n · \u001b[35;1m ────────┬────────\u001b[0m\n · \u001b[35;1m╰── \u001b[35;1mQubit1\u001b[0m\u001b[0m\n \u001b[2m9\u001b[0m │ X(q2);\n ╰────\n\u001b[36m help: \u001b[0mqubits should be returned to the |0⟩ state before being released to\n satisfy the assumption that allocated qubits start in the |0⟩ state\n" + ] } ], "source": [ @@ -1034,7 +1040,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.7" + "version": "3.12.1" } }, "nbformat": 4,