File size: 198,514 Bytes
f5b1acc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 |
{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: pennylane in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (0.38.0)\n",
"Requirement already satisfied: numpy<2.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (1.23.5)\n",
"Requirement already satisfied: scipy in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (1.14.1)\n",
"Requirement already satisfied: networkx in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (2.5)\n",
"Requirement already satisfied: rustworkx>=0.14.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (0.15.1)\n",
"Requirement already satisfied: autograd in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (1.7.0)\n",
"Requirement already satisfied: toml in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (0.10.2)\n",
"Requirement already satisfied: appdirs in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (1.4.4)\n",
"Requirement already satisfied: autoray>=0.6.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (0.7.0)\n",
"Requirement already satisfied: cachetools in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (5.5.0)\n",
"Requirement already satisfied: pennylane-lightning>=0.38 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (0.38.0)\n",
"Requirement already satisfied: requests in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (2.32.3)\n",
"Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (4.12.2)\n",
"Requirement already satisfied: packaging in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pennylane) (24.1)\n",
"Requirement already satisfied: decorator>=4.3.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from networkx->pennylane) (5.1.1)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests->pennylane) (3.4.0)\n",
"Requirement already satisfied: idna<4,>=2.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests->pennylane) (3.10)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests->pennylane) (2.2.3)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests->pennylane) (2024.8.30)\n"
]
}
],
"source": [
"!pip install pennylane"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Average execution time per iteration: 0.0012 seconds\n"
]
}
],
"source": [
"import time\n",
"import numpy as np\n",
"import networkx as nx\n",
"import pennylane as qml\n",
"\n",
"# Define your AGN graph structure\n",
"G = nx.hexagonal_lattice_graph(3, 3)\n",
"nx.set_node_attributes(G, values=0, name=\"state\")\n",
"\n",
"# Define the quantum device and circuit\n",
"dev = qml.device(\"default.qubit\", wires=4)\n",
"\n",
"@qml.qnode(dev)\n",
"def quantum_decision_circuit(theta):\n",
" qml.RX(theta[0], wires=0)\n",
" qml.RY(theta[1], wires=1)\n",
" qml.CNOT(wires=[0, 1])\n",
" qml.RY(theta[2], wires=2)\n",
" qml.CNOT(wires=[1, 2])\n",
" qml.RX(theta[3], wires=3)\n",
" return qml.probs(wires=[0, 1, 2, 3])\n",
"\n",
"@qml.qnode(dev)\n",
"def complex_quantum_circuit(theta):\n",
" qml.Hadamard(wires=0)\n",
" qml.RX(theta[0], wires=0)\n",
" qml.CNOT(wires=[0, 1])\n",
" qml.RY(theta[1], wires=1)\n",
" qml.CRX(theta[2], wires=1, control=0)\n",
" qml.T(wires=2)\n",
" qml.CNOT(wires=[2, 3])\n",
" return qml.probs(wires=[0, 1, 2, 3])\n",
"\n",
"# Define benchmarking function\n",
"def run_benchmark(iterations=100):\n",
" total_time = 0\n",
" for _ in range(iterations):\n",
" # Generate random theta values for the quantum circuit\n",
" theta = np.random.rand(4)\n",
" \n",
" # Start timing\n",
" start_time = time.time()\n",
" \n",
" # Run quantum circuit\n",
" probabilities = quantum_decision_circuit(theta)\n",
" \n",
" # Map probabilities to AGN nodes\n",
" for i, node in enumerate(G.nodes()):\n",
" G.nodes[node][\"state\"] = probabilities[i % len(probabilities)]\n",
" \n",
" # End timing\n",
" end_time = time.time()\n",
" \n",
" # Calculate time for this iteration\n",
" total_time += (end_time - start_time)\n",
" \n",
" avg_time = total_time / iterations\n",
" print(f\"Average execution time per iteration: {avg_time:.4f} seconds\")\n",
"\n",
"# Run the benchmark\n",
"run_benchmark()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Padded Data:\n",
" [[0.89209269 0.65063517 0.66753295 0. ]\n",
" [0.06997607 0.50499087 0.80499266 0. ]\n",
" [0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. ]]\n",
"Running benchmark with simple circuit:\n",
"Average execution time per iteration: 0.0010 seconds\n"
]
},
{
"data": {
"image/png": "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WjBser50CvJ2OkNXRq1Wm30tCIJN05+WziMIgsXzGgzG3805OTkAgL///hsBAQFm+91OgX9OTg78/PzMapJMSs/omd7L25WTkwOlUonDhw+XWR6l9Eynvb19mQaWo0aNwo0bN7Bw4UIEBQVBq9UiMjJSSgnb2q3vDwDp/agJDKJkiEEUUe0RBMGqlFpddvHiRbz66qv46quvsGrVKowaNQqbN2+GQqFAhw4dsGrVKnh7e8PFxcXi64ODg7FlyxapQLw00wxIQkKCNOtya12O6W4xfQWlCS1atEBRURH2798vpfNu3LiB8+fPIzw83Orv+U4qXWBdUerOkn379pX5ukWLFgCADh06IDExESqVSirEthWNRlPm/Wjfvj30ej2Sk5Nx7733WnW83bt344svvsCAAQMAGG9WSE1NNdtHrVZX+DPg4uICf39/7N692+w67t69G126dLFqPLbGwnIZkgrL9QyiiKh8BQUFSExMNHuYPsD0ej2efvppREVFYcyYMVi+fDlOnDiBefPmAQCeeuopeHp6YvDgwdi5cydiY2Oxfft2vPzyy7h27RoAY5H1vHnzsGjRIkRHR+PIkSNSUbW9vT3uuecezJkzB2fPnsWOHTswbdo0s/EFBQVBEASsW7cOKSkp0sxNaWFhYRg8eDDGjRuHXbt24fjx43j66acREBCAwYMH1+Tlu23Ozs6YPHkyXn31VaxYsQIXL16UrtGKFSsqfO3u3bsxd+5cXLhwAYsXL8avv/4q1Z717dsXkZGRGDJkCP79919cvnwZe/bswdtvv41Dhw7d1piDg4ORk5ODLVu2IDU1FXl5eWjatCmeeuopjBw5EqtXr0ZsbCwOHDiA2bNn4++//67weGFhYfjhhx9w9uxZ7N+/H0899ZS0+G/pc27ZsgWJiYlIT0+3eJzXX38dH330EVatWoXz589jypQpOHbsmFk9Xm1gECVD2uKZqIJCBlFEVL4NGzbAz8/P7NG9e3cAwAcffIArV67gyy+/BGCsH1m2bBmmTZuG48ePw8HBAf/99x8aNWqERx55BC1atMDYsWORn58vzUyNGjUKCxYswBdffIGWLVti0KBBZndLffvttygqKkLHjh0xceJEzJo1y2x8AQEBePfddzFlyhT4+PhI7RFutXz5cnTs2BGDBg1CZGQkRFHE+vXry6TS6qL3338f77zzDmbP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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Running benchmark with complex circuit:\n",
"Average execution time per iteration: 0.0010 seconds\n"
]
},
{
"data": {
"image/png": "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eXk5AgMDUV1djf/9738wmUw4evQofvzxR1RUVGD8+PEOt9+0aRM0Gg0OHTqE9evXAwA8PDywevVqnD17Fps2bUJOTg7mzZsHABg8eDBWrlwJX19f5Xhz5859pC+73Y4xY8agqqoKFosF2dnZuHjxIiZMmOBQd+HCBezevRtZWVnIysqCxWLBsmXLmiktInIWX84jolZHp9NBo9HA29sbRqNRWV+zZg1MJhOWLl2qrH311VcIDAxEcXExevbsCQAIDQ1Fenq6w//86/VVwcHB+PjjjzFt2jR89tln0Gg00Ol0UKlUDsd7mNlsxunTp1FSUoLAwEAAwNdff42+ffsiPz8fAwcOBPDnsLVx40a0b98eAJCQkACz2YwlS5Y0LhgialI8E0VE/xknT57E/v374ePjo2y9evUC8OfZnwfCw8Mfue0vv/yC6OhodO3aFe3bt0dCQgKuXbuGurq6Bh+/qKgIgYGBygAFAH369IFer0dRUZGyFhwcrAxQANClSxdcvXr1qe4rETU/nokiov+MGzduYPTo0UhLS3tkX5cuXZTf27Vr57Dv0qVLeOmllzB9+nQsWbIEHTt2RG5uLiZPnoy7d+/C29u7Sfv08vJy+FulUsFutzfpMYio8ThEEVGrpNFoUF9f77A2YMAAfPvttwgODoZa3fCHv4KCAtjtdixfvhweHn+ewM/MzPzH4z2sd+/eKCsrQ1lZmXI2qrCwENXV1ejTp0+D+yGifwe+nEdErVJwcDCsVisuXbqEyspK2O12JCcno6qqCnFxccjPz8eFCxfw008/ISkp6W8HoGeffRb37t1DRkYGLl68iM2bNysXnP/1eDdu3IDZbEZlZeVjX+aLiYlBWFgY4uPjcezYMRw5cgRvvvkmhg0bhoiIiCbPgIiaF4coImqV5s6dC09PT/Tp0wf+/v4oLS1FQEAADh06hPr6egwfPhxhYWFISUmBXq9XzjA9Tv/+/bFixQqkpaWhX79+2Lp1K1JTUx1qBg8ejGnTpmHChAnw9/d/5MJ04M+X5fbs2YMOHTpg6NChiImJQY8ePbBjx44mv/9E1PxUIiKuboKIiIjI3fBMFBEREZETOEQREREROYFDFBEREZETOEQREREROYFDFBEREZETOEQREREROYFDFBEREZETOEQREREROYFDFBEREZETOEQREREROYFDFBEREZETOEQREREROeH/vlcn4HgM4BQAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import time\n",
"import numpy as np\n",
"import networkx as nx\n",
"import pennylane as qml\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Define your AGN graph structure\n",
"G = nx.hexagonal_lattice_graph(3, 3) # Adjust dimensions as needed for scalability\n",
"nx.set_node_attributes(G, values=0, name=\"state\") # Initialize node states\n",
"\n",
"# Define the quantum device and circuits\n",
"dev = qml.device(\"default.qubit\", wires=4)\n",
"\n",
"@qml.qnode(dev)\n",
"def quantum_decision_circuit(theta):\n",
" qml.RX(theta[0], wires=0)\n",
" qml.RY(theta[1], wires=1)\n",
" qml.CNOT(wires=[0, 1])\n",
" qml.RY(theta[2], wires=2)\n",
" qml.CNOT(wires=[1, 2])\n",
" qml.RX(theta[3], wires=3)\n",
" return qml.probs(wires=[0, 1, 2, 3])\n",
"\n",
"@qml.qnode(dev)\n",
"def complex_quantum_circuit(theta):\n",
" qml.Hadamard(wires=0)\n",
" qml.RX(theta[0], wires=0)\n",
" qml.CNOT(wires=[0, 1])\n",
" qml.RY(theta[1], wires=1)\n",
" qml.CRX(theta[2], wires=[0, 1]) # Control qubit is 0, target qubit is 1\n",
" qml.T(wires=2)\n",
" qml.CNOT(wires=[2, 3])\n",
" return qml.probs(wires=[0, 1, 2, 3])\n",
"\n",
"# Define tensor padding function\n",
"def pad_tensor(tensor, target_shape, pad_value=0):\n",
" original_shape = tensor.shape\n",
" padded_tensor = np.full(target_shape, pad_value, dtype=tensor.dtype)\n",
" slices = tuple(slice(0, min(original_shape[dim], target_shape[dim])) for dim in range(len(target_shape)))\n",
" padded_tensor[slices] = tensor\n",
" return padded_tensor\n",
"\n",
"# Define benchmarking function with data collection for analysis\n",
"def run_benchmark(iterations=100, use_complex_circuit=False):\n",
" exec_times = []\n",
" for _ in range(iterations):\n",
" # Generate random theta values for the quantum circuit\n",
" theta = np.random.rand(4)\n",
" \n",
" # Select circuit to run based on the argument\n",
" circuit = complex_quantum_circuit if use_complex_circuit else quantum_decision_circuit\n",
" \n",
" # Start timing\n",
" start_time = time.time()\n",
" \n",
" # Run the selected quantum circuit\n",
" probabilities = circuit(theta)\n",
" \n",
" # Map probabilities to AGN nodes\n",
" for i, node in enumerate(G.nodes()):\n",
" G.nodes[node][\"state\"] = probabilities[i % len(probabilities)]\n",
" \n",
" # End timing\n",
" end_time = time.time()\n",
" \n",
" # Calculate time for this iteration and store it\n",
" exec_times.append(end_time - start_time)\n",
" \n",
" avg_time = np.mean(exec_times)\n",
" print(f\"Average execution time per iteration: {avg_time:.4f} seconds\")\n",
" \n",
" # Plot execution times for each iteration\n",
" plt.plot(range(iterations), exec_times, label=\"Execution Time per Iteration\")\n",
" plt.xlabel(\"Iteration\")\n",
" plt.ylabel(\"Execution Time (s)\")\n",
" plt.title(\"AGN Execution Time Benchmark\")\n",
" plt.legend()\n",
" plt.show()\n",
"\n",
"# Example usage of padding with real-time data\n",
"real_time_data = np.random.rand(2, 3) # Simulate variable input size\n",
"padded_data = pad_tensor(real_time_data, (4, 4))\n",
"print(\"Padded Data:\\n\", padded_data)\n",
"\n",
"# Run the benchmark with the simple circuit\n",
"print(\"Running benchmark with simple circuit:\")\n",
"run_benchmark(iterations=100, use_complex_circuit=False)\n",
"\n",
"# Run the benchmark with the complex circuit\n",
"print(\"\\nRunning benchmark with complex circuit:\")\n",
"run_benchmark(iterations=100, use_complex_circuit=True)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# Create a larger AGN graph structure for scalability testing\n",
"G_large = nx.hexagonal_lattice_graph(5, 5) # Try a 5x5 hexagonal lattice\n",
"nx.set_node_attributes(G_large, values=0, name=\"state\") # Initialize node states to 0\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"noise_dev = qml.device(\"default.mixed\", wires=4)\n",
"\n",
"@qml.qnode(noise_dev)\n",
"def noisy_quantum_circuit(theta):\n",
" qml.RX(theta[0], wires=0)\n",
" qml.DepolarizingChannel(0.1, wires=0) # Add depolarizing noise\n",
" qml.RY(theta[1], wires=1)\n",
" qml.CNOT(wires=[0, 1])\n",
" qml.RY(theta[2], wires=2)\n",
" qml.DepolarizingChannel(0.05, wires=2)\n",
" qml.CNOT(wires=[1, 2])\n",
" qml.RX(theta[3], wires=3)\n",
" return qml.probs(wires=[0, 1, 2, 3])"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# Define a more complex quantum circuit with additional qubits and gates\n",
"dev_extended = qml.device(\"default.qubit\", wires=6)\n",
"\n",
"@qml.qnode(dev_extended)\n",
"def extended_quantum_circuit(theta):\n",
" qml.Hadamard(wires=0)\n",
" qml.CRX(theta[0], wires=[0, 1])\n",
" qml.CRY(theta[1], wires=[1, 2])\n",
" qml.CZ(wires=[2, 3])\n",
" qml.RZ(theta[2], wires=4)\n",
" qml.CNOT(wires=[4, 5])\n",
" return qml.probs(wires=[0, 1, 2, 3, 4, 5])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"def run_consistency_test(theta_values, expected_outcome, iterations=100):\n",
" consistent_count = 0\n",
" for _ in range(iterations):\n",
" result = quantum_decision_circuit(theta_values)\n",
" decision = np.argmax(result)\n",
" if decision == expected_outcome:\n",
" consistent_count += 1\n",
" \n",
" consistency_rate = (consistent_count / iterations) * 100\n",
" print(f\"Consistency Rate: {consistency_rate:.2f}%\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: qiskit in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (1.2.4)\n",
"Requirement already satisfied: rustworkx>=0.15.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.15.1)\n",
"Requirement already satisfied: numpy<3,>=1.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.23.5)\n",
"Requirement already satisfied: scipy>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.14.1)\n",
"Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.13.1)\n",
"Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.3.9)\n",
"Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (2.9.0.post0)\n",
"Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (5.3.0)\n",
"Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (4.12.2)\n",
"Requirement already satisfied: symengine<0.14,>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.13.0)\n",
"Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit) (1.16.0)\n",
"Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit) (6.1.0)\n",
"Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit) (1.3.0)\n",
"Requirement already satisfied: qiskit-aer in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (0.15.1)\n",
"Requirement already satisfied: qiskit>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-aer) (1.2.4)\n",
"Requirement already satisfied: numpy>=1.16.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-aer) (1.23.5)\n",
"Requirement already satisfied: scipy>=1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-aer) (1.14.1)\n",
"Requirement already satisfied: psutil>=5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-aer) (6.1.0)\n",
"Requirement already satisfied: rustworkx>=0.15.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (0.15.1)\n",
"Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (1.13.1)\n",
"Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (0.3.9)\n",
"Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (2.9.0.post0)\n",
"Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (5.3.0)\n",
"Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (4.12.2)\n",
"Requirement already satisfied: symengine<0.14,>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-aer) (0.13.0)\n",
"Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit>=1.1.0->qiskit-aer) (1.16.0)\n",
"Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit>=1.1.0->qiskit-aer) (6.1.0)\n",
"Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit>=1.1.0->qiskit-aer) (1.3.0)\n",
"Requirement already satisfied: qiskit-ibmq-provider in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (0.20.2)\n",
"Requirement already satisfied: qiskit-terra>=0.18.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (0.46.3)\n",
"Requirement already satisfied: requests>=2.19 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (2.32.3)\n",
"Requirement already satisfied: requests-ntlm<=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (1.1.0)\n",
"Requirement already satisfied: numpy<1.24 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (1.23.5)\n",
"Requirement already satisfied: urllib3>=1.21.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (2.2.3)\n",
"Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (2.9.0.post0)\n",
"Requirement already satisfied: websocket-client>=1.5.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (1.8.0)\n",
"Requirement already satisfied: websockets>=10.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibmq-provider) (13.1)\n",
"Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit-ibmq-provider) (1.16.0)\n",
"Requirement already satisfied: rustworkx>=0.13.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (0.15.1)\n",
"Requirement already satisfied: ply>=3.10 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (3.11)\n",
"Requirement already satisfied: psutil>=5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (6.1.0)\n",
"Requirement already satisfied: scipy>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (1.14.1)\n",
"Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (1.13.1)\n",
"Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (0.3.9)\n",
"Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (5.3.0)\n",
"Requirement already satisfied: symengine>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (0.13.0)\n",
"Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-terra>=0.18.0->qiskit-ibmq-provider) (4.12.2)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibmq-provider) (3.4.0)\n",
"Requirement already satisfied: idna<4,>=2.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibmq-provider) (3.10)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibmq-provider) (2024.8.30)\n",
"Requirement already satisfied: ntlm-auth>=1.0.2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm<=1.1.0->qiskit-ibmq-provider) (1.5.0)\n",
"Requirement already satisfied: cryptography>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm<=1.1.0->qiskit-ibmq-provider) (43.0.3)\n",
"Requirement already satisfied: cffi>=1.12 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cryptography>=1.3->requests-ntlm<=1.1.0->qiskit-ibmq-provider) (1.17.1)\n",
"Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit-terra>=0.18.0->qiskit-ibmq-provider) (6.1.0)\n",
"Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit-terra>=0.18.0->qiskit-ibmq-provider) (1.3.0)\n",
"Requirement already satisfied: pycparser in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm<=1.1.0->qiskit-ibmq-provider) (2.22)\n",
"Collecting qiskit-ibm-runtime\n",
" Downloading qiskit_ibm_runtime-0.32.0-py3-none-any.whl.metadata (19 kB)\n",
"Requirement already satisfied: requests>=2.19 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.32.3)\n",
"Requirement already satisfied: requests-ntlm>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.1.0)\n",
"Requirement already satisfied: numpy>=1.13 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.23.5)\n",
"Requirement already satisfied: urllib3>=1.21.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.2.3)\n",
"Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.9.0.post0)\n",
"Requirement already satisfied: websocket-client>=1.5.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.8.0)\n",
"Collecting ibm-platform-services>=0.22.6 (from qiskit-ibm-runtime)\n",
" Downloading ibm_platform_services-0.59.0-py3-none-any.whl.metadata (9.0 kB)\n",
"Collecting pydantic>=2.5.0 (from qiskit-ibm-runtime)\n",
" Downloading pydantic-2.9.2-py3-none-any.whl.metadata (149 kB)\n",
"Requirement already satisfied: qiskit>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.2.4)\n",
"Collecting ibm-cloud-sdk-core<4.0.0,>=3.22.0 (from ibm-platform-services>=0.22.6->qiskit-ibm-runtime)\n",
" Downloading ibm_cloud_sdk_core-3.22.0-py3-none-any.whl.metadata (8.6 kB)\n",
"Collecting annotated-types>=0.6.0 (from pydantic>=2.5.0->qiskit-ibm-runtime)\n",
" Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n",
"Collecting pydantic-core==2.23.4 (from pydantic>=2.5.0->qiskit-ibm-runtime)\n",
" Downloading pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl.metadata (6.6 kB)\n",
"Requirement already satisfied: typing-extensions>=4.6.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (4.12.2)\n",
"Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit-ibm-runtime) (1.16.0)\n",
"Requirement already satisfied: rustworkx>=0.15.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (0.15.1)\n",
"Requirement already satisfied: scipy>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (1.14.1)\n",
"Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (1.13.1)\n",
"Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (0.3.9)\n",
"Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (5.3.0)\n",
"Requirement already satisfied: symengine<0.14,>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit>=1.1.0->qiskit-ibm-runtime) (0.13.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.4.0)\n",
"Requirement already satisfied: idna<4,>=2.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.10)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (2024.8.30)\n",
"Requirement already satisfied: ntlm-auth>=1.0.2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.5.0)\n",
"Requirement already satisfied: cryptography>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (43.0.3)\n",
"Requirement already satisfied: cffi>=1.12 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.17.1)\n",
"Collecting PyJWT<3.0.0,>=2.8.0 (from ibm-cloud-sdk-core<4.0.0,>=3.22.0->ibm-platform-services>=0.22.6->qiskit-ibm-runtime)\n",
" Downloading PyJWT-2.9.0-py3-none-any.whl.metadata (3.0 kB)\n",
"Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit>=1.1.0->qiskit-ibm-runtime) (6.1.0)\n",
"Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit>=1.1.0->qiskit-ibm-runtime) (1.3.0)\n",
"Requirement already satisfied: pycparser in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (2.22)\n",
"Downloading qiskit_ibm_runtime-0.32.0-py3-none-any.whl (3.0 MB)\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.0/3.0 MB\u001b[0m \u001b[31m1.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
"\u001b[?25hDownloading ibm_platform_services-0.59.0-py3-none-any.whl (340 kB)\n",
"Downloading pydantic-2.9.2-py3-none-any.whl (434 kB)\n",
"Downloading pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl (1.8 MB)\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.8/1.8 MB\u001b[0m \u001b[31m4.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
"\u001b[?25hDownloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n",
"Downloading ibm_cloud_sdk_core-3.22.0-py3-none-any.whl (69 kB)\n",
"Downloading PyJWT-2.9.0-py3-none-any.whl (22 kB)\n",
"Installing collected packages: PyJWT, pydantic-core, annotated-types, pydantic, ibm-cloud-sdk-core, ibm-platform-services, qiskit-ibm-runtime\n",
"Successfully installed PyJWT-2.9.0 annotated-types-0.7.0 ibm-cloud-sdk-core-3.22.0 ibm-platform-services-0.59.0 pydantic-2.9.2 pydantic-core-2.23.4 qiskit-ibm-runtime-0.32.0\n"
]
}
],
"source": [
"!pip install qiskit\n",
"!pip install qiskit-aer\n",
"!pip install qiskit-ibmq-provider\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"ename": "ImportError",
"evalue": "Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail.",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QuantumCircuit\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexecute_function\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m execute\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproviders\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mibmq\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m IBMQ\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/__init__.py:38\u001b[0m\n\u001b[1;32m 36\u001b[0m _suppress_error \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39menviron\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQISKIT_SUPPRESS_1_0_IMPORT_ERROR\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mFalse\u001b[39;00m) \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m1\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mint\u001b[39m(_major) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _suppress_error:\n\u001b[0;32m---> 38\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(\n\u001b[1;32m 39\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQiskit is installed in an invalid environment that has both Qiskit >=1.0\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m and an earlier version.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m You should create a new virtual environment, and ensure that you do not mix\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 42\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m dependencies between Qiskit <1.0 and >=1.0.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 43\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Any packages that depend on \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mqiskit-terra\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m are not compatible with Qiskit 1.0 and\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m will need to be updated.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Qiskit unfortunately cannot enforce this requirement during environment resolution.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 46\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m See https://qisk.it/packaging-1-0 for more detail.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 47\u001b[0m )\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_accelerate\u001b[39;00m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_numpy_compat\u001b[39;00m\n",
"\u001b[0;31mImportError\u001b[0m: Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail."
]
}
],
"source": [
"from qiskit import QuantumCircuit\n",
"from qiskit.execute_function import execute\n",
"from qiskit.providers.ibmq import IBMQ\n",
"from qiskit_aer import Aer\n",
"\n",
"IBMQ.save_account('86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc')\n",
"\n",
"\n",
"\n",
"# Save your IBMQ account credentials (only needs to be done once)\n",
"# Replace 'YOUR_API_TOKEN' with your actual IBM Quantum Experience API token\n",
"IBMQ.save_account('86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc')\n",
"\n",
"# Load IBMQ account and select backend\n",
"IBMQ.load_account()\n",
"provider = IBMQ.get_provider('ibm-q')\n",
"backend = provider.get_backend('ibm_brisbane')\n",
"\n",
"# Define a simple Qiskit quantum circuit\n",
"def qiskit_circuit(theta):\n",
" qc = QuantumCircuit(4)\n",
" qc.rx(theta[0], 0)\n",
" qc.ry(theta[1], 1)\n",
" qc.cx(0, 1)\n",
" qc.ry(theta[2], 2)\n",
" qc.cx(1, 2)\n",
" qc.rx(theta[3], 3)\n",
" qc.measure_all()\n",
" return qc\n",
"\n",
"# Run on IBM Q backend\n",
"theta_values = [0.3, 0.7, 1.2, 0.5]\n",
"qc = qiskit_circuit(theta_values)\n",
"job = execute(qc, backend, shots=1024)\n",
"result = job.result()\n",
"counts = result.get_counts(qc)\n",
"print(\"Qiskit simulation results:\", counts)\n",
"\n",
"# Optionally, run on Aer simulator\n",
"aer_backend = Aer.get_backend('qasm_simulator')\n",
"aer_job = execute(qc, aer_backend, shots=1024)\n",
"aer_result = aer_job.result()\n",
"aer_counts = aer_result.get_counts(qc)\n",
"print(\"Aer simulation results:\", aer_counts)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"ename": "ImportError",
"evalue": "Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail.",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[4], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproviders\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mibmq\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m IBMQ\n\u001b[1;32m 5\u001b[0m IBMQ\u001b[38;5;241m.\u001b[39msave_account(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 8\u001b[0m \u001b[38;5;66;03m# Load account and check available backends\u001b[39;00m\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/__init__.py:38\u001b[0m\n\u001b[1;32m 36\u001b[0m _suppress_error \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39menviron\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQISKIT_SUPPRESS_1_0_IMPORT_ERROR\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mFalse\u001b[39;00m) \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m1\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mint\u001b[39m(_major) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _suppress_error:\n\u001b[0;32m---> 38\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(\n\u001b[1;32m 39\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQiskit is installed in an invalid environment that has both Qiskit >=1.0\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m and an earlier version.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m You should create a new virtual environment, and ensure that you do not mix\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 42\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m dependencies between Qiskit <1.0 and >=1.0.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 43\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Any packages that depend on \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mqiskit-terra\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m are not compatible with Qiskit 1.0 and\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m will need to be updated.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Qiskit unfortunately cannot enforce this requirement during environment resolution.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 46\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m See https://qisk.it/packaging-1-0 for more detail.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 47\u001b[0m )\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_accelerate\u001b[39;00m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_numpy_compat\u001b[39;00m\n",
"\u001b[0;31mImportError\u001b[0m: Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail."
]
}
],
"source": [
"from qiskit.providers.ibmq import IBMQ\n",
"\n",
"\n",
"\n",
"IBMQ.save_account('86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc')\n",
"\n",
"\n",
"# Load account and check available backends\n",
"IBMQ.load_account()\n",
"provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n",
"print(provider.backends())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"ibmqfactory.load_account:WARNING:2024-11-01 20:26:27,158: Credentials are already in use. The existing account in the session will be replaced.\n",
"/var/folders/11/rgx5c08d3v573lbh0msqtrqw0000gp/T/ipykernel_9370/2896483965.py:11: DeprecationWarning: The method ``qiskit.providers.provider.ProviderV1.get_backend()`` is deprecated as of qiskit 1.1. It will be removed no earlier than 3 months after the release date. The abstract Provider and ProviderV1 classes are deprecated and will be removed in 2.0. You can just remove it as the parent class and a `get_backend` method that returns the backends from `self.backend`.\n",
" backend = provider.get_backend('ibm_brisbane')\n",
"/var/folders/11/rgx5c08d3v573lbh0msqtrqw0000gp/T/ipykernel_9370/2896483965.py:28: DeprecationWarning: The function ``qiskit.execute_function.execute()`` is deprecated as of qiskit 0.46.0. It will be removed in the Qiskit 1.0 release. This function combines ``transpile`` and ``backend.run``, which is covered by ``Sampler`` :mod:`~qiskit.primitives`. Alternatively, you can also run :func:`.transpile` followed by ``backend.run()``.\n",
" job = execute(qc, backend, shots=1024)\n"
]
},
{
"ename": "RequestsApiError",
"evalue": "'400 Client Error: Bad Request for url: https://api.quantum.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/devices/ibm_brisbane/properties?version=1. qiskit-ibmq-provider is no longer supported. Refer to the migration guide at https://docs.quantum.ibm.com/api/migration-guides/qiskit-runtime-from-ibmq-provider for instructions on how to migrate existing code to Qiskit Runtime primitives., Error code: 2418.'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mHTTPError\u001b[0m Traceback (most recent call last)",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/ibmq/api/session.py:278\u001b[0m, in \u001b[0;36mRetrySession.request\u001b[0;34m(self, method, url, bare, **kwargs)\u001b[0m\n\u001b[1;32m 277\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mrequest(method, final_url, headers\u001b[38;5;241m=\u001b[39mheaders, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m--> 278\u001b[0m \u001b[43mresponse\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraise_for_status\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 279\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m RequestException \u001b[38;5;28;01mas\u001b[39;00m ex:\n\u001b[1;32m 280\u001b[0m \u001b[38;5;66;03m# Wrap the requests exceptions into a IBM Q custom one, for\u001b[39;00m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;66;03m# compatibility.\u001b[39;00m\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/requests/models.py:1024\u001b[0m, in \u001b[0;36mResponse.raise_for_status\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1023\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m http_error_msg:\n\u001b[0;32m-> 1024\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HTTPError(http_error_msg, response\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m)\n",
"\u001b[0;31mHTTPError\u001b[0m: 400 Client Error: Bad Request for url: https://api.quantum.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/devices/ibm_brisbane/properties?version=1",
"\nThe above exception was the direct cause of the following exception:\n",
"\u001b[0;31mRequestsApiError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[35], line 28\u001b[0m\n\u001b[1;32m 26\u001b[0m theta_values \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m0.3\u001b[39m, \u001b[38;5;241m0.7\u001b[39m, \u001b[38;5;241m1.2\u001b[39m, \u001b[38;5;241m0.5\u001b[39m]\n\u001b[1;32m 27\u001b[0m qc \u001b[38;5;241m=\u001b[39m qiskit_circuit(theta_values)\n\u001b[0;32m---> 28\u001b[0m job \u001b[38;5;241m=\u001b[39m \u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mqc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbackend\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshots\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1024\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 29\u001b[0m result \u001b[38;5;241m=\u001b[39m job\u001b[38;5;241m.\u001b[39mresult()\n\u001b[1;32m 30\u001b[0m counts \u001b[38;5;241m=\u001b[39m result\u001b[38;5;241m.\u001b[39mget_counts(qc)\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/utils/deprecation.py:97\u001b[0m, in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 0\u001b[0m <Error retrieving source code with stack_data see ipython/ipython#13598>\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/execute_function.py:294\u001b[0m, in \u001b[0;36mexecute\u001b[0;34m(experiments, backend, basis_gates, coupling_map, backend_properties, initial_layout, seed_transpiler, optimization_level, pass_manager, shots, memory, seed_simulator, default_qubit_los, default_meas_los, qubit_lo_range, meas_lo_range, schedule_los, meas_level, meas_return, memory_slots, memory_slot_size, rep_time, rep_delay, parameter_binds, schedule_circuit, inst_map, meas_map, scheduling_method, init_qubits, **run_config)\u001b[0m\n\u001b[1;32m 291\u001b[0m experiments \u001b[38;5;241m=\u001b[39m pass_manager\u001b[38;5;241m.\u001b[39mrun(experiments)\n\u001b[1;32m 292\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 293\u001b[0m \u001b[38;5;66;03m# transpiling the circuits using given transpile options\u001b[39;00m\n\u001b[0;32m--> 294\u001b[0m experiments \u001b[38;5;241m=\u001b[39m \u001b[43mtranspile\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 295\u001b[0m \u001b[43m \u001b[49m\u001b[43mexperiments\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 296\u001b[0m \u001b[43m \u001b[49m\u001b[43mbasis_gates\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbasis_gates\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 297\u001b[0m \u001b[43m \u001b[49m\u001b[43mcoupling_map\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcoupling_map\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 298\u001b[0m \u001b[43m \u001b[49m\u001b[43mbackend_properties\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbackend_properties\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 299\u001b[0m \u001b[43m \u001b[49m\u001b[43minitial_layout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minitial_layout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 300\u001b[0m \u001b[43m \u001b[49m\u001b[43mseed_transpiler\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mseed_transpiler\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 301\u001b[0m \u001b[43m \u001b[49m\u001b[43moptimization_level\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moptimization_level\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 302\u001b[0m \u001b[43m \u001b[49m\u001b[43mbackend\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbackend\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 303\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 305\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m schedule_circuit:\n\u001b[1;32m 306\u001b[0m experiments \u001b[38;5;241m=\u001b[39m schedule(\n\u001b[1;32m 307\u001b[0m circuits\u001b[38;5;241m=\u001b[39mexperiments,\n\u001b[1;32m 308\u001b[0m backend\u001b[38;5;241m=\u001b[39mbackend,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 311\u001b[0m method\u001b[38;5;241m=\u001b[39mscheduling_method,\n\u001b[1;32m 312\u001b[0m )\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/compiler/transpiler.py:339\u001b[0m, in \u001b[0;36mtranspile\u001b[0;34m(circuits, backend, basis_gates, inst_map, coupling_map, backend_properties, initial_layout, layout_method, routing_method, translation_method, scheduling_method, instruction_durations, dt, approximation_degree, timing_constraints, seed_transpiler, optimization_level, callback, output_name, unitary_synthesis_method, unitary_synthesis_plugin_config, target, hls_config, init_method, optimization_method, ignore_backend_supplied_default_methods, num_processes)\u001b[0m\n\u001b[1;32m 335\u001b[0m _check_circuits_coupling_map(circuits, coupling_map, backend)\n\u001b[1;32m 337\u001b[0m timing_constraints \u001b[38;5;241m=\u001b[39m _parse_timing_constraints(backend, timing_constraints)\n\u001b[0;32m--> 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _given_inst_map \u001b[38;5;129;01mand\u001b[39;00m inst_map\u001b[38;5;241m.\u001b[39mhas_custom_gate() \u001b[38;5;129;01mand\u001b[39;00m target \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 340\u001b[0m \u001b[38;5;66;03m# Do not mutate backend target\u001b[39;00m\n\u001b[1;32m 341\u001b[0m target \u001b[38;5;241m=\u001b[39m copy\u001b[38;5;241m.\u001b[39mdeepcopy(target)\n\u001b[1;32m 342\u001b[0m target\u001b[38;5;241m.\u001b[39mupdate_from_instruction_schedule_map(inst_map)\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/backend_compat.py:397\u001b[0m, in \u001b[0;36m__init__\u001b[0;34m(self, backend, name_mapping, add_delay, filter_faulty)\u001b[0m\n\u001b[1;32m 0\u001b[0m <Error retrieving source code with stack_data see ipython/ipython#13598>\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/ibmq/ibmqbackend.py:458\u001b[0m, in \u001b[0;36mIBMQBackend.properties\u001b[0;34m(self, refresh, datetime)\u001b[0m\n\u001b[1;32m 455\u001b[0m datetime \u001b[38;5;241m=\u001b[39m local_to_utc(datetime)\n\u001b[1;32m 457\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m datetime \u001b[38;5;129;01mor\u001b[39;00m refresh \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_properties \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 458\u001b[0m api_properties \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_api_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackend_properties\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdatetime\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdatetime\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 459\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m api_properties:\n\u001b[1;32m 460\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/ibmq/api/clients/account.py:100\u001b[0m, in \u001b[0;36mAccountClient.backend_properties\u001b[0;34m(self, backend_name, datetime)\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Return the properties of the backend.\u001b[39;00m\n\u001b[1;32m 91\u001b[0m \n\u001b[1;32m 92\u001b[0m \u001b[38;5;124;03mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 97\u001b[0m \u001b[38;5;124;03m Backend properties.\u001b[39;00m\n\u001b[1;32m 98\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 99\u001b[0m \u001b[38;5;66;03m# pylint: disable=redefined-outer-name\u001b[39;00m\n\u001b[0;32m--> 100\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maccount_api\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbackend_name\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproperties\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdatetime\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdatetime\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/ibmq/api/rest/backend.py:68\u001b[0m, in \u001b[0;36mBackend.properties\u001b[0;34m(self, datetime)\u001b[0m\n\u001b[1;32m 65\u001b[0m query[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mwhere\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m extra_filter\n\u001b[1;32m 66\u001b[0m params[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfilter\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mdumps(query) \u001b[38;5;66;03m# type: ignore[assignment]\u001b[39;00m\n\u001b[0;32m---> 68\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mjson()\n\u001b[1;32m 70\u001b[0m \u001b[38;5;66;03m# Adjust name of the backend.\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m response:\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/requests/sessions.py:602\u001b[0m, in \u001b[0;36mSession.get\u001b[0;34m(self, url, **kwargs)\u001b[0m\n\u001b[1;32m 594\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request. Returns :class:`Response` object.\u001b[39;00m\n\u001b[1;32m 595\u001b[0m \n\u001b[1;32m 596\u001b[0m \u001b[38;5;124;03m:param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[1;32m 597\u001b[0m \u001b[38;5;124;03m:param \\*\\*kwargs: Optional arguments that ``request`` takes.\u001b[39;00m\n\u001b[1;32m 598\u001b[0m \u001b[38;5;124;03m:rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 599\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 601\u001b[0m kwargs\u001b[38;5;241m.\u001b[39msetdefault(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m--> 602\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mGET\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/providers/ibmq/api/session.py:300\u001b[0m, in \u001b[0;36mRetrySession.request\u001b[0;34m(self, method, url, bare, **kwargs)\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[38;5;66;03m# Modify the original message on the chained exceptions.\u001b[39;00m\n\u001b[1;32m 298\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_modify_chained_exception_messages(ex)\n\u001b[0;32m--> 300\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m RequestsApiError(message, status_code) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mex\u001b[39;00m\n\u001b[1;32m 302\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n",
"\u001b[0;31mRequestsApiError\u001b[0m: '400 Client Error: Bad Request for url: https://api.quantum.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/devices/ibm_brisbane/properties?version=1. qiskit-ibmq-provider is no longer supported. Refer to the migration guide at https://docs.quantum.ibm.com/api/migration-guides/qiskit-runtime-from-ibmq-provider for instructions on how to migrate existing code to Qiskit Runtime primitives., Error code: 2418.'"
]
}
],
"source": [
"from qiskit import QuantumCircuit\n",
"from qiskit.execute_function import execute\n",
"from qiskit.providers.ibmq import IBMQ\n",
"from qiskit.tools.monitor import job_monitor\n",
"\n",
"# Load IBMQ account\n",
"IBMQ.load_account()\n",
"provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n",
"\n",
"# Choose the 'ibm_brisbane' backend\n",
"backend = provider.get_backend('ibm_brisbane')\n",
"\n",
"# Define a simple Qiskit quantum circuit\n",
"def qiskit_circuit(theta):\n",
" qc = QuantumCircuit(4)\n",
" qc.rx(theta[0], 0)\n",
" qc.ry(theta[1], 1)\n",
" qc.cx(0, 1)\n",
" qc.ry(theta[2], 2)\n",
" qc.cx(1, 2)\n",
" qc.rx(theta[3], 3)\n",
" qc.measure_all()\n",
" return qc\n",
"\n",
"# Run on IBM Q backend\n",
"theta_values = [0.3, 0.7, 1.2, 0.5]\n",
"qc = qiskit_circuit(theta_values)\n",
"job = execute(qc, backend, shots=1024)\n",
"result = job.result()\n",
"counts = result.get_counts(qc)\n",
"print(\"Qiskit simulation results:\", counts)\n",
"\n",
"# Optionally, run on Aer simulator\n",
"aer_backend = Aer.get_backend('qasm_simulator')\n",
"aer_job = execute(qc, aer_backend, shots=1024)\n",
"aer_result = aer_job.result()\n",
"aer_counts = aer_result.get_counts(qc)\n",
"print(\"Aer simulation results:\", aer_counts)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"ename": "ImportError",
"evalue": "cannot import name 'PrimitiveResult' from 'qiskit.primitives' (/Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/primitives/__init__.py)",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[31], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QuantumCircuit\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit_ibm_runtime\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QiskitRuntimeService, Sampler\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# Initialize the Qiskit Runtime service\u001b[39;00m\n\u001b[1;32m 5\u001b[0m service \u001b[38;5;241m=\u001b[39m QiskitRuntimeService(channel\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mibm_quantum\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/__init__.py:204\u001b[0m\n\u001b[1;32m 201\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mlogging\u001b[39;00m\n\u001b[1;32m 202\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mwarnings\u001b[39;00m\n\u001b[0;32m--> 204\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mqiskit_runtime_service\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QiskitRuntimeService\n\u001b[1;32m 205\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mibm_backend\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m IBMBackend\n\u001b[1;32m 206\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mruntime_job\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m RuntimeJob\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/qiskit_runtime_service.py:27\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproviders\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexceptions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QiskitBackendNotFoundError\n\u001b[1;32m 25\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproviders\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproviderutils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m filter_backends\n\u001b[0;32m---> 27\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit_ibm_runtime\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ibm_backend\n\u001b[1;32m 28\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mproxies\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ProxyConfiguration\n\u001b[1;32m 29\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mhgp\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m to_instance_format, from_instance_format\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/ibm_backend.py:50\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mprovider_session\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 46\u001b[0m Session \u001b[38;5;28;01mas\u001b[39;00m ProviderSession,\n\u001b[1;32m 47\u001b[0m )\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m qiskit_runtime_service \u001b[38;5;66;03m# pylint: disable=unused-import,cyclic-import\u001b[39;00m\n\u001b[0;32m---> 50\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mruntime_job\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m RuntimeJob\n\u001b[1;32m 52\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mclients\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m RuntimeClient\n\u001b[1;32m 53\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexceptions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m IBMBackendApiProtocolError, IBMBackendValueError, IBMBackendApiError\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/runtime_job.py:28\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[38;5;66;03m# pylint: disable=unused-import,cyclic-import\u001b[39;00m\n\u001b[1;32m 27\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit_ibm_runtime\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m qiskit_runtime_service\n\u001b[0;32m---> 28\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mconstants\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m API_TO_JOB_STATUS\n\u001b[1;32m 29\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexceptions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 30\u001b[0m RuntimeJobFailureError,\n\u001b[1;32m 31\u001b[0m RuntimeInvalidStateError,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 34\u001b[0m RuntimeJobTimeoutError,\n\u001b[1;32m 35\u001b[0m )\n\u001b[1;32m 36\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mresult_decoder\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ResultDecoder\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/constants.py:20\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mnoise_learner_result_decoder\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m NoiseLearnerResultDecoder\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mestimator_result_decoder\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m EstimatorResultDecoder\n\u001b[0;32m---> 20\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msampler_result_decoder\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m SamplerResultDecoder\n\u001b[1;32m 21\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mrunner_result\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m RunnerResult\n\u001b[1;32m 24\u001b[0m QISKIT_IBM_RUNTIME_API_URL \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhttps://auth.quantum-computing.ibm.com/api\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit_ibm_runtime/utils/sampler_result_decoder.py:17\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;124;03m\"\"\"Sampler result decoder.\"\"\"\u001b[39;00m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Dict\n\u001b[0;32m---> 17\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mprimitives\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m PrimitiveResult\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mresult_decoder\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ResultDecoder\n\u001b[1;32m 22\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mSamplerResultDecoder\u001b[39;00m(ResultDecoder):\n",
"\u001b[0;31mImportError\u001b[0m: cannot import name 'PrimitiveResult' from 'qiskit.primitives' (/Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/primitives/__init__.py)"
]
}
],
"source": [
"from qiskit import QuantumCircuit\n",
"from qiskit_ibm_runtime import QiskitRuntimeService, Sampler\n",
"\n",
"# Initialize the Qiskit Runtime service\n",
"service = QiskitRuntimeService(channel=\"ibm_quantum\")\n",
"\n",
"# Define a simple quantum circuit\n",
"def qiskit_circuit(theta):\n",
" qc = QuantumCircuit(4)\n",
" qc.rx(theta[0], 0)\n",
" qc.ry(theta[1], 1)\n",
" qc.cx(0, 1)\n",
" qc.ry(theta[2], 2)\n",
" qc.cx(1, 2)\n",
" qc.rx(theta[3], 3)\n",
" qc.measure_all()\n",
" return qc\n",
"\n",
"# Define theta values and create the circuit\n",
"theta_values = [0.3, 0.7, 1.2, 0.5]\n",
"qc = qiskit_circuit(theta_values)\n",
"\n",
"# Use the Sampler primitive to run the circuit on ibm_brisbane\n",
"with Sampler(session=service) as sampler:\n",
" job = sampler.run(circuits=qc, shots=1024)\n",
" result = job.result()\n",
" counts = result.get_counts(qc)\n",
" print(\"Results from ibm_brisbane using Qiskit Runtime Sampler:\", counts)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: qiskit in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (1.2.4)\n",
"Requirement already satisfied: qiskit-ibm-runtime in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (0.32.0)\n",
"Requirement already satisfied: rustworkx>=0.15.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.15.1)\n",
"Requirement already satisfied: numpy<3,>=1.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.23.5)\n",
"Requirement already satisfied: scipy>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.14.1)\n",
"Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.13.1)\n",
"Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.3.9)\n",
"Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (2.9.0.post0)\n",
"Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (5.3.0)\n",
"Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (4.12.2)\n",
"Requirement already satisfied: symengine<0.14,>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.13.0)\n",
"Requirement already satisfied: requests>=2.19 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.32.3)\n",
"Requirement already satisfied: requests-ntlm>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.1.0)\n",
"Requirement already satisfied: urllib3>=1.21.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.2.3)\n",
"Requirement already satisfied: websocket-client>=1.5.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.8.0)\n",
"Requirement already satisfied: ibm-platform-services>=0.22.6 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (0.59.0)\n",
"Requirement already satisfied: pydantic>=2.5.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.9.2)\n",
"Requirement already satisfied: ibm-cloud-sdk-core<4.0.0,>=3.22.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (3.22.0)\n",
"Requirement already satisfied: annotated-types>=0.6.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (0.7.0)\n",
"Requirement already satisfied: pydantic-core==2.23.4 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (2.23.4)\n",
"Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit) (1.16.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.4.0)\n",
"Requirement already satisfied: idna<4,>=2.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.10)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (2024.8.30)\n",
"Requirement already satisfied: ntlm-auth>=1.0.2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.5.0)\n",
"Requirement already satisfied: cryptography>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (43.0.3)\n",
"Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit) (6.1.0)\n",
"Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit) (1.3.0)\n",
"Requirement already satisfied: cffi>=1.12 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.17.1)\n",
"Requirement already satisfied: PyJWT<3.0.0,>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from ibm-cloud-sdk-core<4.0.0,>=3.22.0->ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (2.9.0)\n",
"Requirement already satisfied: pycparser in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (2.22)\n"
]
}
],
"source": [
"!pip install --upgrade qiskit qiskit-ibm-runtime"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"ename": "ImportError",
"evalue": "Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail.",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QuantumCircuit\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mqiskit_ibm_runtime\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m QiskitRuntimeService, Sampler\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# Initialize the Qiskit Runtime service\u001b[39;00m\n",
"File \u001b[0;32m~/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages/qiskit/__init__.py:38\u001b[0m\n\u001b[1;32m 36\u001b[0m _suppress_error \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39menviron\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQISKIT_SUPPRESS_1_0_IMPORT_ERROR\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mFalse\u001b[39;00m) \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m1\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mint\u001b[39m(_major) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _suppress_error:\n\u001b[0;32m---> 38\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(\n\u001b[1;32m 39\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQiskit is installed in an invalid environment that has both Qiskit >=1.0\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m and an earlier version.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m You should create a new virtual environment, and ensure that you do not mix\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 42\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m dependencies between Qiskit <1.0 and >=1.0.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 43\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Any packages that depend on \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mqiskit-terra\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m are not compatible with Qiskit 1.0 and\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m will need to be updated.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Qiskit unfortunately cannot enforce this requirement during environment resolution.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 46\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m See https://qisk.it/packaging-1-0 for more detail.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 47\u001b[0m )\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_accelerate\u001b[39;00m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mqiskit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_numpy_compat\u001b[39;00m\n",
"\u001b[0;31mImportError\u001b[0m: Qiskit is installed in an invalid environment that has both Qiskit >=1.0 and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit <1.0 and >=1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution. See https://qisk.it/packaging-1-0 for more detail."
]
}
],
"source": [
"from qiskit import QuantumCircuit\n",
"from qiskit_ibm_runtime import QiskitRuntimeService, Sampler\n",
"\n",
"# Initialize the Qiskit Runtime service\n",
"service = QiskitRuntimeService(channel=\"ibm_quantum\")\n",
"\n",
"# Define a simple quantum circuit\n",
"def qiskit_circuit(theta):\n",
" qc = QuantumCircuit(4)\n",
" qc.rx(theta[0], 0)\n",
" qc.ry(theta[1], 1)\n",
" qc.cx(0, 1)\n",
" qc.ry(theta[2], 2)\n",
" qc.cx(1, 2)\n",
" qc.rx(theta[3], 3)\n",
" qc.measure_all()\n",
" return qc\n",
"\n",
"# Define theta values and create the circuit\n",
"theta_values = [0.3, 0.7, 1.2, 0.5]\n",
"qc = qiskit_circuit(theta_values)\n",
"\n",
"# Use the Sampler primitive to run the circuit on ibm_brisbane\n",
"with Sampler(session=service) as sampler:\n",
" job = sampler.run(circuits=qc, shots=1024)\n",
" result = job.result()\n",
" counts = result.get_counts(qc)\n",
" print(\"Results from ibm_brisbane using Qiskit Runtime Sampler:\", counts)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'IBMQ' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[1], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mcsv\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m \u001b[43mIBMQ\u001b[49m\u001b[38;5;241m.\u001b[39msave_account(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mlog_execution_time\u001b[39m(execution_time, file_name\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbenchmark_log.csv\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(file_name, mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m file:\n",
"\u001b[0;31mNameError\u001b[0m: name 'IBMQ' is not defined"
]
}
],
"source": [
"import csv\n",
"\n",
"IBMQ.save_account('86a3bf838145fe6863cd15adf39b4678715f07c28e66cf2e1e3c7a9f9020a4f4215b71b9c664db90690e99ed2760c6e973c993257ace55c7ae6d5dfacd2d13fc')\n",
"\n",
"\n",
"def log_execution_time(execution_time, file_name=\"benchmark_log.csv\"):\n",
" with open(file_name, mode='a') as file:\n",
" writer = csv.writer(file)\n",
" writer.writerow([execution_time])\n",
"\n",
"# Example of logging execution time within the benchmark function\n",
"def run_benchmark_with_logging(iterations=100):\n",
" total_time = 0\n",
" for _ in range(iterations):\n",
" theta = np.random.rand(4)\n",
" start_time = time.time()\n",
" probabilities = quantum_decision_circuit(theta)\n",
" end_time = time.time()\n",
" exec_time = end_time - start_time\n",
" total_time += exec_time\n",
" log_execution_time(exec_time) # Log each execution time\n",
" \n",
" avg_time = total_time / iterations\n",
" print(f\"Average execution time per iteration: {avg_time:.4f} seconds\")"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: qiskit in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (1.2.4)\n",
"Requirement already satisfied: qiskit-ibm-runtime in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (0.32.0)\n",
"Requirement already satisfied: rustworkx>=0.15.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.15.1)\n",
"Requirement already satisfied: numpy<3,>=1.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.23.5)\n",
"Requirement already satisfied: scipy>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.14.1)\n",
"Requirement already satisfied: sympy>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (1.13.1)\n",
"Requirement already satisfied: dill>=0.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.3.9)\n",
"Requirement already satisfied: python-dateutil>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (2.9.0.post0)\n",
"Requirement already satisfied: stevedore>=3.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (5.3.0)\n",
"Requirement already satisfied: typing-extensions in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (4.12.2)\n",
"Requirement already satisfied: symengine<0.14,>=0.11 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit) (0.13.0)\n",
"Requirement already satisfied: requests>=2.19 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.32.3)\n",
"Requirement already satisfied: requests-ntlm>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.1.0)\n",
"Requirement already satisfied: urllib3>=1.21.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.2.3)\n",
"Requirement already satisfied: websocket-client>=1.5.1 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (1.8.0)\n",
"Requirement already satisfied: ibm-platform-services>=0.22.6 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (0.59.0)\n",
"Requirement already satisfied: pydantic>=2.5.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from qiskit-ibm-runtime) (2.9.2)\n",
"Requirement already satisfied: ibm-cloud-sdk-core<4.0.0,>=3.22.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (3.22.0)\n",
"Requirement already satisfied: annotated-types>=0.6.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (0.7.0)\n",
"Requirement already satisfied: pydantic-core==2.23.4 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (2.23.4)\n",
"Requirement already satisfied: six>=1.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from python-dateutil>=2.8.0->qiskit) (1.16.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.4.0)\n",
"Requirement already satisfied: idna<4,>=2.5 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.10)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests>=2.19->qiskit-ibm-runtime) (2024.8.30)\n",
"Requirement already satisfied: ntlm-auth>=1.0.2 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.5.0)\n",
"Requirement already satisfied: cryptography>=1.3 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (43.0.3)\n",
"Requirement already satisfied: pbr>=2.0.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from stevedore>=3.0.0->qiskit) (6.1.0)\n",
"Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from sympy>=1.3->qiskit) (1.3.0)\n",
"Requirement already satisfied: cffi>=1.12 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (1.17.1)\n",
"Requirement already satisfied: PyJWT<3.0.0,>=2.8.0 in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from ibm-cloud-sdk-core<4.0.0,>=3.22.0->ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (2.9.0)\n",
"Requirement already satisfied: pycparser in /Users/callum/Git/ActiveGraphNetworks/.venv/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (2.22)\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install -U qiskit qiskit-ibm-runtime"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.15"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
|