diff --git a/Kidney_Exchange_Problem_Quattro.ipynb b/Kidney_Exchange_Problem_Quattro.ipynb new file mode 100644 index 0000000..615ec59 --- /dev/null +++ b/Kidney_Exchange_Problem_Quattro.ipynb @@ -0,0 +1,1590 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8f3e145e", + "metadata": { + "id": "8f3e145e" + }, + "source": [ + "## The Kidney Exchange Problem" + ] + }, + { + "cell_type": "markdown", + "id": "479d8809", + "metadata": { + "id": "479d8809" + }, + "source": [ + "### A) Motivation. First approach.\n", + "\n", + "\n", + "**In order to familiarize ourselves with the kidney donor problem, we proceed to invent a statement and construct its Ising model.**" + ] + }, + { + "cell_type": "markdown", + "id": "ab6066e2", + "metadata": { + "id": "ab6066e2" + }, + "source": [ + "Let $D$ and $R$ be a list of donors and recipients, respectively.\n", + "\n", + "**Objective function:** maximize the number of successful transplants. This is achieved by matching kidney donors and recipients in a way that maximizes the number of people receiving compatible kidneys.\n", + "\n", + "**Compatibility constraints:**\n", + "\n", + "1. **Blood group compatibility.** It is important to ensure the donor and the recipient have blood compatibility.\n", + "\n", + "There are four main blood types: A, B, AB and O. Combination of proteins and sugars (antigens) on the surface of red blood cells are what make the blood type either compatible or incompatible with other blood types. Specifically:\n", + "\n", + "- Type A blood can only receive type A or type O blood.\n", + "\n", + "- Type B blood can only receive type B or type O blood.\n", + "\n", + "- Type AB blood can receive all blood types.\n", + "\n", + "- Type O blood can only receive type O blood.\n", + "\n", + "\n", + "2. **Immunological conmpatibility between donor and recipient (Human Leukocyte Antigens - HLA).** HLA compatibility is important to minimize the risk of organ rejection. In this work, we will consider that a donor can only be matched with a recipient if they have HLA compatibility or incompatibility at two specific sites, referred to as site $s_1$ and site $s_2$. At each site, there are two possible alleles, referred to as $a_1$ and $a_2$.\n", + "\n", + "Let $S = \\lbrace{s_1, s_2}\\rbrace$ and $Alleles = \\lbrace{a_1, a_2}\\rbrace$.\n", + "For each site, let's define a binary variable $IC[i, j, s, a]$ to indicate whether donor $i$ and recipient $j$ has allele $a$ of the HLA at site $s$.\n", + "\n", + "+ $IC[i, j, s, a] = 1$ if donor $i$ and recipient $j$ have allele $a$ compatibility at site $s$.\n", + "\n", + "+ $IC[i, j, s, a] = 0$ if donor $i$ and recipient $j$ do not have compatibility at site $s$\n", + "\n", + "3. **Antibody compatibility (Panel Reactive Antibodies Coefficient - CPRA).** The CPRA is a value that indicates the probability of finding a compatible donor based on the recipient's antibody presence. In particular, it ensures the minimization of the risk of organ rejection due to antibody incompatibility.\n", + "\n", + "A CPRA of 0% means that the recipient has no detectable antibodies against any HLA antigens in the reference population, increasing the chances of finding a compatible donor. A CPRA of 100% means that the recipient has antibodies against all HLA antigens in the reference population, making it extremely difficult to find a compatible donor.\n", + "\n", + "For each recipient $r \\in R$, $$CPRA(r) \\leq threshold_1,$$\n", + "\n", + "where $threshold_1$ is the maximum acceptable value of CPRA for that recipient.\n", + " \n", + "4. **Kidney size compatibility and age.** Both factors are important to determine if a kidney is suitable for a particular recipient.\n", + "\n", + "Let's define a numerical variable to represent the age of each donor, $A(i)$, and each recipient, $A(j)$ and a variable to represent the size or volume of each kidney, both from the donor, $V(i)$, and from the recipient, $V(j)$.\n", + "\n", + "+ The age difference between the donor and the recipient cannot exceed $10$ years.\n", + "\n", + "$$|A(i)-A(j)| \\leq 10$$\n", + "\n", + "+ The donor's kidney size must be at least 80% of the recipient's kidney size.\n", + "\n", + "$$V(i) \\geq 0.8 · V(j)$$\n", + "\n", + "5. **Immunosupression considerations.** Requirements related to the recipient's capacity to undergo immunosupressive therapy, necessary to prevent rejection of the transplanted organ.\n", + "\n", + "Let's define a numerical variable to represent the recipient's capacity for immunosuppression tolerance, $DT(j)$. It must be ensured that such tolerance is equal to or greater than a certain threshold, $threshold_2$, to guarantee that the recipient can undergo immunosuppression therapy. Specifically:\n", + "\n", + "$$DT(j) \\geq threshold_2.$$\n", + "\n", + "6. **Psychological evaluation.** This is considered to ensure that donors and recipients are mentally prepared for the transplantation process.\n", + "\n", + "Let's define a binary variable to represent the result of the psychological evaluation for the donor, P(i), and for the recipient, P(j), such that:\n", + "\n", + "\n", + "+ If $P(i)·P(j) = 1$ they have passed the psychological evaluation.\n", + "\n", + "+ If $P(i)·P(j) = 0$ they have not passed the psychological evaluation." + ] + }, + { + "cell_type": "code", + "source": [ + "# Instala OpenQAOA\n", + "!pip install OpenQAOA\n", + "# Instala Qiskit Optimization, si aún no lo tienes\n", + "!pip install qiskit-optimization\n", + "# Instala Qiskit Algorithms, si aún no lo tienes\n", + "!pip install qiskit_algorithms\n", + "\n", + "!pip install qiskit==0.44.1\n", + "!pip install azure-quantum[qiskit] --upgrade" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "LM6GqRp0e8o0", + "outputId": "763b5f1a-d341-491d-f039-768bca8fb247" + }, + "id": "LM6GqRp0e8o0", + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting OpenQAOA\n", + " Downloading openqaoa-0.2.3-py3-none-any.whl (477 kB)\n", + "\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/478.0 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m225.3/478.0 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m478.0/478.0 kB\u001b[0m \u001b[31m9.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting openqaoa-qiskit==0.2.3 (from OpenQAOA)\n", + " Downloading openqaoa_qiskit-0.2.3-py3-none-any.whl (14 kB)\n", + "Collecting openqaoa-core==0.2.3 (from OpenQAOA)\n", + " Downloading openqaoa_core-0.2.3-py3-none-any.whl (280 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m280.4/280.4 kB\u001b[0m \u001b[31m35.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting openqaoa-pyquil==0.2.3 (from OpenQAOA)\n", + " Downloading openqaoa_pyquil-0.2.3-py3-none-any.whl (13 kB)\n", + "Collecting openqaoa-braket==0.2.3 (from OpenQAOA)\n", + " Downloading openqaoa_braket-0.2.3-py3-none-any.whl (13 kB)\n", + "Collecting openqaoa-azure==0.2.3 (from OpenQAOA)\n", + " Downloading openqaoa_azure-0.2.3-py3-none-any.whl (6.1 kB)\n", + "Collecting qdk (from openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading qdk-0.28.302812-py3-none-any.whl (35 kB)\n", + "Collecting qiskit-qir (from openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading qiskit_qir-0.3.1-py2.py3-none-any.whl (19 kB)\n", + "Collecting qiskit-ionq (from openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading qiskit_ionq-0.4.4-py3-none-any.whl (37 kB)\n", + "Collecting azure-quantum[qiskit] (from openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading azure_quantum-0.28.302812-py3-none-any.whl (180 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m180.2/180.2 kB\u001b[0m \u001b[31m26.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting amazon-braket-sdk>=1.23.0 (from openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading amazon_braket_sdk-1.62.0-py3-none-any.whl (288 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m288.6/288.6 kB\u001b[0m \u001b[31m35.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: pandas>=1.3.5 in /usr/local/lib/python3.10/dist-packages (from openqaoa-core==0.2.3->OpenQAOA) (1.5.3)\n", + "Requirement already satisfied: sympy>=1.10.1 in /usr/local/lib/python3.10/dist-packages (from openqaoa-core==0.2.3->OpenQAOA) (1.12)\n", + "Requirement already satisfied: numpy>=1.22.3 in /usr/local/lib/python3.10/dist-packages (from openqaoa-core==0.2.3->OpenQAOA) (1.23.5)\n", + "Requirement already satisfied: networkx>=2.8 in /usr/local/lib/python3.10/dist-packages (from openqaoa-core==0.2.3->OpenQAOA) (3.2.1)\n", + "Requirement already satisfied: matplotlib>=3.4.3 in /usr/local/lib/python3.10/dist-packages (from openqaoa-core==0.2.3->OpenQAOA) (3.7.1)\n", + "Requirement already satisfied: scipy>=1.8 in /usr/local/lib/python3.10/dist-packages (from openqaoa-core==0.2.3->OpenQAOA) (1.11.3)\n", + "Collecting docplex==2.25.236 (from openqaoa-core==0.2.3->OpenQAOA)\n", + " Downloading docplex-2.25.236.tar.gz (633 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m633.5/633.5 kB\u001b[0m \u001b[31m42.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Requirement already satisfied: autograd>=1.4 in /usr/local/lib/python3.10/dist-packages (from openqaoa-core==0.2.3->OpenQAOA) (1.6.2)\n", + "Collecting semantic-version>=2.10 (from openqaoa-core==0.2.3->OpenQAOA)\n", + " Downloading semantic_version-2.10.0-py2.py3-none-any.whl (15 kB)\n", + "Collecting autoray>=0.3.1 (from openqaoa-core==0.2.3->OpenQAOA)\n", + " Downloading autoray-0.6.7-py3-none-any.whl (49 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.9/49.9 kB\u001b[0m \u001b[31m7.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from openqaoa-core==0.2.3->OpenQAOA) (2.31.0)\n", + "Collecting ipython>=8.2.0 (from openqaoa-core==0.2.3->OpenQAOA)\n", + " Downloading ipython-8.17.2-py3-none-any.whl (808 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m808.4/808.4 kB\u001b[0m \u001b[31m77.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting pyquil<4.0.0,>=3.1.0 (from openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading pyquil-3.5.4-py3-none-any.whl (223 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m223.8/223.8 kB\u001b[0m \u001b[31m30.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting qiskit>=0.36.1 (from openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading qiskit-0.45.0-py3-none-any.whl (9.6 kB)\n", + "Collecting qiskit-ibm-provider (from openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading qiskit_ibm_provider-0.7.2-py3-none-any.whl (243 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m243.3/243.3 kB\u001b[0m \u001b[31m34.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting qiskit-aer (from openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading qiskit_aer-0.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.3/12.3 MB\u001b[0m \u001b[31m127.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from docplex==2.25.236->openqaoa-core==0.2.3->OpenQAOA) (1.16.0)\n", + "Collecting amazon-braket-schemas>=1.19.1 (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading amazon_braket_schemas-1.19.1.post0-py3-none-any.whl (117 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m117.6/117.6 kB\u001b[0m \u001b[31m17.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting amazon-braket-default-simulator>=1.19.1 (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading amazon_braket_default_simulator-1.20.1-py3-none-any.whl (218 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m218.9/218.9 kB\u001b[0m \u001b[31m29.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting oqpy~=0.2.1 (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading oqpy-0.2.1-py3-none-any.whl (30 kB)\n", + "Requirement already satisfied: setuptools in /usr/local/lib/python3.10/dist-packages (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA) (67.7.2)\n", + "Collecting backoff (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading backoff-2.2.1-py3-none-any.whl (15 kB)\n", + "Collecting boltons (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading boltons-23.1.1-py2.py3-none-any.whl (195 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m195.3/195.3 kB\u001b[0m \u001b[31m31.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting boto3>=1.28.53 (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading boto3-1.28.83-py3-none-any.whl (135 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m135.8/135.8 kB\u001b[0m \u001b[31m14.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA) (2.2.1)\n", + "Requirement already satisfied: nest-asyncio in /usr/local/lib/python3.10/dist-packages (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA) (1.5.8)\n", + "Collecting openpulse (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading openpulse-0.5.0-py3-none-any.whl (377 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m377.0/377.0 kB\u001b[0m \u001b[31m16.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting openqasm3 (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading openqasm3-0.5.0-py3-none-any.whl (524 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m524.0/524.0 kB\u001b[0m \u001b[31m52.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: future>=0.15.2 in /usr/local/lib/python3.10/dist-packages (from autograd>=1.4->openqaoa-core==0.2.3->OpenQAOA) (0.18.3)\n", + "Requirement already satisfied: decorator in /usr/local/lib/python3.10/dist-packages (from ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA) (4.4.2)\n", + "Collecting jedi>=0.16 (from ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA)\n", + " Downloading jedi-0.19.1-py2.py3-none-any.whl (1.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m82.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: matplotlib-inline in /usr/local/lib/python3.10/dist-packages (from ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA) (0.1.6)\n", + "Requirement already satisfied: prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30 in /usr/local/lib/python3.10/dist-packages (from ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA) (3.0.39)\n", + "Requirement already satisfied: pygments>=2.4.0 in /usr/local/lib/python3.10/dist-packages (from ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA) (2.16.1)\n", + "Collecting stack-data (from ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA)\n", + " Downloading stack_data-0.6.3-py3-none-any.whl (24 kB)\n", + "Requirement already satisfied: traitlets>=5 in /usr/local/lib/python3.10/dist-packages (from ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA) (5.7.1)\n", + "Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA) (1.1.3)\n", + "Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.10/dist-packages (from ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA) (4.8.0)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.4.3->openqaoa-core==0.2.3->OpenQAOA) (1.2.0)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.4.3->openqaoa-core==0.2.3->OpenQAOA) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.4.3->openqaoa-core==0.2.3->OpenQAOA) (4.44.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.4.3->openqaoa-core==0.2.3->OpenQAOA) (1.4.5)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.4.3->openqaoa-core==0.2.3->OpenQAOA) (23.2)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.4.3->openqaoa-core==0.2.3->OpenQAOA) (9.4.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.4.3->openqaoa-core==0.2.3->OpenQAOA) (3.1.1)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.4.3->openqaoa-core==0.2.3->OpenQAOA) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.3.5->openqaoa-core==0.2.3->OpenQAOA) (2023.3.post1)\n", + "Collecting deprecated<2.0.0,>=1.2.13 (from pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading Deprecated-1.2.14-py2.py3-none-any.whl (9.6 kB)\n", + "Collecting lark<0.12.0,>=0.11.1 (from pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading lark-0.11.3.tar.gz (229 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m229.9/229.9 kB\u001b[0m \u001b[31m28.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Collecting qcs-api-client<0.22.0,>=0.21.0 (from pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading qcs_api_client-0.21.6-py3-none-any.whl (151 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m151.7/151.7 kB\u001b[0m \u001b[31m10.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting rpcq<4.0.0,>=3.10.0 (from pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading rpcq-3.11.0.tar.gz (45 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m45.6/45.6 kB\u001b[0m \u001b[31m2.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Requirement already satisfied: tenacity<9.0.0,>=8.2.2 in /usr/local/lib/python3.10/dist-packages (from pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA) (8.2.3)\n", + "Collecting types-deprecated<2.0.0.0,>=1.2.9.2 (from pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading types_Deprecated-1.2.9.3-py3-none-any.whl (3.3 kB)\n", + "Collecting types-python-dateutil<3.0.0,>=2.8.19 (from pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading types_python_dateutil-2.8.19.14-py3-none-any.whl (9.4 kB)\n", + "Collecting types-retry<0.10.0,>=0.9.9 (from pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading types_retry-0.9.9.4-py3-none-any.whl (2.5 kB)\n", + "Collecting qiskit-terra==0.45.0 (from qiskit>=0.36.1->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading qiskit_terra-0.45.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.3/6.3 MB\u001b[0m \u001b[31m132.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting rustworkx>=0.13.0 (from qiskit-terra==0.45.0->qiskit>=0.36.1->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading rustworkx-0.13.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m122.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting ply>=3.10 (from qiskit-terra==0.45.0->qiskit>=0.36.1->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading ply-3.11-py2.py3-none-any.whl (49 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.6/49.6 kB\u001b[0m \u001b[31m7.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: psutil>=5 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.45.0->qiskit>=0.36.1->openqaoa-qiskit==0.2.3->OpenQAOA) (5.9.5)\n", + "Collecting dill>=0.3 (from qiskit-terra==0.45.0->qiskit>=0.36.1->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading dill-0.3.7-py3-none-any.whl (115 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m115.3/115.3 kB\u001b[0m \u001b[31m19.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting stevedore>=3.0.0 (from qiskit-terra==0.45.0->qiskit>=0.36.1->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading stevedore-5.1.0-py3-none-any.whl (49 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.6/49.6 kB\u001b[0m \u001b[31m7.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting symengine<0.10,>=0.9 (from qiskit-terra==0.45.0->qiskit>=0.36.1->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading symengine-0.9.2-cp310-cp310-manylinux2010_x86_64.whl (37.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m37.5/37.5 MB\u001b[0m \u001b[31m23.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.45.0->qiskit>=0.36.1->openqaoa-qiskit==0.2.3->OpenQAOA) (4.5.0)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy>=1.10.1->openqaoa-core==0.2.3->OpenQAOA) (1.3.0)\n", + "Collecting azure-core<2.0.0,>=1.26.2 (from azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading azure_core-1.29.5-py3-none-any.whl (192 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m192.4/192.4 kB\u001b[0m \u001b[31m24.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting azure-identity<2.0.0,>=1.12.0 (from azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading azure_identity-1.15.0-py3-none-any.whl (164 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m164.7/164.7 kB\u001b[0m \u001b[31m22.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting azure-storage-blob<13.0.0,>=12.14.1 (from azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading azure_storage_blob-12.19.0-py3-none-any.whl (394 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m394.2/394.2 kB\u001b[0m \u001b[31m43.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting msrest<1.0,>=0.7.1 (from azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading msrest-0.7.1-py3-none-any.whl (85 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.4/85.4 kB\u001b[0m \u001b[31m12.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: aiohttp<4.0,>=3.7.0 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (3.8.6)\n", + "Collecting aiofile<4.0,>=3.7.2 (from azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading aiofile-3.8.8-py3-none-any.whl (19 kB)\n", + "Requirement already satisfied: Markdown>=3.4.1 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (3.5.1)\n", + "Collecting python-markdown-math>=0.8 (from azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading python_markdown_math-0.8-py3-none-any.whl (5.9 kB)\n", + "INFO: pip is looking at multiple versions of azure-quantum[qiskit] to determine which version is compatible with other requirements. This could take a while.\n", + "Collecting azure-quantum[qiskit] (from openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading azure_quantum-0.28.291394-py3-none-any.whl (179 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m179.1/179.1 kB\u001b[0m \u001b[31m25.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Downloading azure_quantum-0.28.277227-py3-none-any.whl (199 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m199.6/199.6 kB\u001b[0m \u001b[31m24.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: protobuf<4.0,>=3.14.0 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (3.20.3)\n", + "Collecting decorator (from ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA)\n", + " Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB)\n", + "Collecting retry>=0.9.0 (from qiskit-ionq->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading retry-0.9.2-py2.py3-none-any.whl (8.0 kB)\n", + "Requirement already satisfied: importlib-metadata>=4.11.4 in /usr/local/lib/python3.10/dist-packages (from qiskit-ionq->openqaoa-azure==0.2.3->OpenQAOA) (6.8.0)\n", + "Collecting pyqir==0.8.0 (from qiskit-qir->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading pyqir-0.8.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.5/2.5 MB\u001b[0m \u001b[31m119.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->openqaoa-core==0.2.3->OpenQAOA) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->openqaoa-core==0.2.3->OpenQAOA) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->openqaoa-core==0.2.3->OpenQAOA) (2.0.7)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->openqaoa-core==0.2.3->OpenQAOA) (2023.7.22)\n", + "Collecting qsharp (from qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading qsharp-0.28.302812-py3-none-any.whl (2.2 kB)\n", + "Collecting jupyter-jsmol (from qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading jupyter_jsmol-2022.1.0-py2.py3-none-any.whl (7.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.4/7.4 MB\u001b[0m \u001b[31m88.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting varname (from qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading varname-0.12.0-py3-none-any.whl (23 kB)\n", + "Collecting ruamel-yaml (from qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading ruamel.yaml-0.18.5-py3-none-any.whl (116 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m116.4/116.4 kB\u001b[0m \u001b[31m15.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting basis-set-exchange (from qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading basis_set_exchange-0.9.1.tar.gz (33.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m33.1/33.1 MB\u001b[0m \u001b[31m24.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Collecting jupyter-nbextensions-configurator (from qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading jupyter_nbextensions_configurator-0.6.3-py2.py3-none-any.whl (466 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m466.9/466.9 kB\u001b[0m \u001b[31m45.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting ipywidgets==8.0.4 (from qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading ipywidgets-8.0.4-py3-none-any.whl (137 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m137.8/137.8 kB\u001b[0m \u001b[31m16.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: ipykernel>=4.5.1 in /usr/local/lib/python3.10/dist-packages (from ipywidgets==8.0.4->qdk->openqaoa-azure==0.2.3->OpenQAOA) (5.5.6)\n", + "Collecting widgetsnbextension~=4.0 (from ipywidgets==8.0.4->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading widgetsnbextension-4.0.9-py3-none-any.whl (2.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.3/2.3 MB\u001b[0m \u001b[31m117.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: jupyterlab-widgets~=3.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets==8.0.4->qdk->openqaoa-azure==0.2.3->OpenQAOA) (3.0.9)\n", + "Collecting requests-ntlm>=1.1.0 (from qiskit-ibm-provider->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading requests_ntlm-1.2.0-py3-none-any.whl (6.0 kB)\n", + "Requirement already satisfied: websocket-client>=1.5.1 in /usr/local/lib/python3.10/dist-packages (from qiskit-ibm-provider->openqaoa-qiskit==0.2.3->OpenQAOA) (1.6.4)\n", + "Collecting websockets>=10.0 (from qiskit-ibm-provider->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (130 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.2/130.2 kB\u001b[0m \u001b[31m13.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting caio~=0.9.0 (from aiofile<4.0,>=3.7.2->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading caio-0.9.13-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (79 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m79.3/79.3 kB\u001b[0m \u001b[31m7.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (23.1.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (6.0.4)\n", + "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (4.0.3)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (1.9.2)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (1.4.0)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (1.3.1)\n", + "Requirement already satisfied: opt-einsum in /usr/local/lib/python3.10/dist-packages (from amazon-braket-default-simulator>=1.19.1->amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA) (3.3.0)\n", + "Requirement already satisfied: pydantic<2.0,>=1.9 in /usr/local/lib/python3.10/dist-packages (from amazon-braket-default-simulator>=1.19.1->amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA) (1.10.13)\n", + "Collecting antlr4-python3-runtime==4.9.2 (from amazon-braket-default-simulator>=1.19.1->amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading antlr4-python3-runtime-4.9.2.tar.gz (117 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m117.2/117.2 kB\u001b[0m \u001b[31m15.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Collecting typing-extensions (from qiskit-terra==0.45.0->qiskit>=0.36.1->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading typing_extensions-4.8.0-py3-none-any.whl (31 kB)\n", + "Requirement already satisfied: cryptography>=2.5 in /usr/local/lib/python3.10/dist-packages (from azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (41.0.5)\n", + "Collecting msal<2.0.0,>=1.24.0 (from azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading msal-1.25.0-py2.py3-none-any.whl (97 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m97.7/97.7 kB\u001b[0m \u001b[31m14.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting msal-extensions<2.0.0,>=0.3.0 (from azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading msal_extensions-1.0.0-py2.py3-none-any.whl (19 kB)\n", + "Collecting isodate>=0.6.1 (from azure-storage-blob<13.0.0,>=12.14.1->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading isodate-0.6.1-py2.py3-none-any.whl (41 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m41.7/41.7 kB\u001b[0m \u001b[31m5.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting botocore<1.32.0,>=1.31.83 (from boto3>=1.28.53->amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading botocore-1.31.83-py3-none-any.whl (11.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.3/11.3 MB\u001b[0m \u001b[31m141.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting jmespath<2.0.0,>=0.7.1 (from boto3>=1.28.53->amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading jmespath-1.0.1-py3-none-any.whl (20 kB)\n", + "Collecting s3transfer<0.8.0,>=0.7.0 (from boto3>=1.28.53->amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading s3transfer-0.7.0-py3-none-any.whl (79 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m79.8/79.8 kB\u001b[0m \u001b[31m11.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: wrapt<2,>=1.10 in /usr/local/lib/python3.10/dist-packages (from deprecated<2.0.0,>=1.2.13->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA) (1.14.1)\n", + "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.10/dist-packages (from importlib-metadata>=4.11.4->qiskit-ionq->openqaoa-azure==0.2.3->OpenQAOA) (3.17.0)\n", + "Requirement already satisfied: parso<0.9.0,>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from jedi>=0.16->ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA) (0.8.3)\n", + "Requirement already satisfied: requests-oauthlib>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from msrest<1.0,>=0.7.1->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (1.3.1)\n", + "Collecting mypy-extensions>=0.2.0 (from oqpy~=0.2.1->amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)\n", + "Collecting openpulse (from amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading openpulse-0.4.2-py3-none-any.whl (377 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m377.0/377.0 kB\u001b[0m \u001b[31m45.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting openqasm3[parser]==0.4.0 (from openpulse->amazon-braket-sdk>=1.23.0->openqaoa-braket==0.2.3->OpenQAOA)\n", + " Downloading openqasm3-0.4.0-py3-none-any.whl (385 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m385.3/385.3 kB\u001b[0m \u001b[31m45.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.10/dist-packages (from pexpect>4.3->ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA) (0.7.0)\n", + "Requirement already satisfied: wcwidth in /usr/local/lib/python3.10/dist-packages (from prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30->ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA) (0.2.9)\n", + "Collecting PyJWT<3.0.0,>=2.4.0 (from qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading PyJWT-2.8.0-py3-none-any.whl (22 kB)\n", + "Collecting attrs>=17.3.0 (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading attrs-21.4.0-py2.py3-none-any.whl (60 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m60.6/60.6 kB\u001b[0m \u001b[31m10.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting httpx<0.24.0,>=0.23.0 (from qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading httpx-0.23.3-py3-none-any.whl (71 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m71.5/71.5 kB\u001b[0m \u001b[31m10.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting iso8601<2.0.0,>=1.0.2 (from qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading iso8601-1.1.0-py3-none-any.whl (9.9 kB)\n", + "Collecting retrying<2.0.0,>=1.3.3 (from qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading retrying-1.3.4-py3-none-any.whl (11 kB)\n", + "Collecting rfc3339<7.0,>=6.2 (from qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading rfc3339-6.2-py3-none-any.whl (5.5 kB)\n", + "Requirement already satisfied: toml<0.11.0,>=0.10.2 in /usr/local/lib/python3.10/dist-packages (from qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA) (0.10.2)\n", + "Collecting pyspnego>=0.1.6 (from requests-ntlm>=1.1.0->qiskit-ibm-provider->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading pyspnego-0.10.2-py3-none-any.whl (129 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m129.9/129.9 kB\u001b[0m \u001b[31m19.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting py<2.0.0,>=1.4.26 (from retry>=0.9.0->qiskit-ionq->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading py-1.11.0-py2.py3-none-any.whl (98 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m98.7/98.7 kB\u001b[0m \u001b[31m14.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: msgpack<2.0,>=0.6 in /usr/local/lib/python3.10/dist-packages (from rpcq<4.0.0,>=3.10.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA) (1.0.7)\n", + "Collecting python-rapidjson (from rpcq<4.0.0,>=3.10.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading python_rapidjson-1.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m106.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: pyzmq>=17 in /usr/local/lib/python3.10/dist-packages (from rpcq<4.0.0,>=3.10.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA) (23.2.1)\n", + "Requirement already satisfied: jsonschema in /usr/local/lib/python3.10/dist-packages (from basis-set-exchange->qdk->openqaoa-azure==0.2.3->OpenQAOA) (4.19.2)\n", + "Collecting argcomplete (from basis-set-exchange->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading argcomplete-3.1.4-py3-none-any.whl (41 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m41.6/41.6 kB\u001b[0m \u001b[31m5.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: regex in /usr/local/lib/python3.10/dist-packages (from basis-set-exchange->qdk->openqaoa-azure==0.2.3->OpenQAOA) (2023.6.3)\n", + "Collecting unidecode (from basis-set-exchange->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading Unidecode-1.3.7-py3-none-any.whl (235 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m235.5/235.5 kB\u001b[0m \u001b[31m31.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting jupyter-contrib-core>=0.3.3 (from jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading jupyter_contrib_core-0.4.2.tar.gz (17 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Requirement already satisfied: jupyter-core in /usr/local/lib/python3.10/dist-packages (from jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (5.5.0)\n", + "Requirement already satisfied: notebook>=6.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (6.5.5)\n", + "Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (6.0.1)\n", + "Requirement already satisfied: tornado in /usr/local/lib/python3.10/dist-packages (from jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (6.3.2)\n", + "Collecting qsharp-core==0.28.302812 (from qsharp->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading qsharp_core-0.28.302812-py3-none-any.whl (43 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m43.0/43.0 kB\u001b[0m \u001b[31m6.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting qsharp-chemistry==0.28.302812 (from qsharp->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading qsharp_chemistry-0.28.302812-py3-none-any.whl (5.6 kB)\n", + "Collecting jupyter-client>=7.3.4 (from qsharp-core==0.28.302812->qsharp->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading jupyter_client-8.6.0-py3-none-any.whl (105 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m105.9/105.9 kB\u001b[0m \u001b[31m15.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting ruamel.yaml.clib>=0.2.7 (from ruamel-yaml->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (526 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m526.7/526.7 kB\u001b[0m \u001b[31m59.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting executing>=1.2.0 (from stack-data->ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA)\n", + " Downloading executing-2.0.1-py2.py3-none-any.whl (24 kB)\n", + "Collecting asttokens>=2.1.0 (from stack-data->ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA)\n", + " Downloading asttokens-2.4.1-py2.py3-none-any.whl (27 kB)\n", + "Collecting pure-eval (from stack-data->ipython>=8.2.0->openqaoa-core==0.2.3->OpenQAOA)\n", + " Downloading pure_eval-0.2.2-py3-none-any.whl (11 kB)\n", + "Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.10/dist-packages (from cryptography>=2.5->azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (1.16.0)\n", + "Collecting httpcore<0.17.0,>=0.15.0 (from httpx<0.24.0,>=0.23.0->qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading httpcore-0.16.3-py3-none-any.whl (69 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m69.6/69.6 kB\u001b[0m \u001b[31m11.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting rfc3986[idna2008]<2,>=1.3 (from httpx<0.24.0,>=0.23.0->qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading rfc3986-1.5.0-py2.py3-none-any.whl (31 kB)\n", + "Requirement already satisfied: sniffio in /usr/local/lib/python3.10/dist-packages (from httpx<0.24.0,>=0.23.0->qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA) (1.3.0)\n", + "Requirement already satisfied: ipython-genutils in /usr/local/lib/python3.10/dist-packages (from ipykernel>=4.5.1->ipywidgets==8.0.4->qdk->openqaoa-azure==0.2.3->OpenQAOA) (0.2.0)\n", + "Requirement already satisfied: PyJWT[crypto]<3,>=1.0.0 in /usr/lib/python3/dist-packages (from msal<2.0.0,>=1.24.0->azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (2.3.0)\n", + "Collecting portalocker<3,>=1.0 (from msal-extensions<2.0.0,>=0.3.0->azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading portalocker-2.8.2-py3-none-any.whl (17 kB)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (3.1.2)\n", + "Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.10/dist-packages (from notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (23.1.0)\n", + "Collecting jupyter-client>=7.3.4 (from qsharp-core==0.28.302812->qsharp->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading jupyter_client-7.4.9-py3-none-any.whl (133 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m133.5/133.5 kB\u001b[0m \u001b[31m20.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: nbformat in /usr/local/lib/python3.10/dist-packages (from notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (5.9.2)\n", + "Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.10/dist-packages (from notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (6.5.4)\n", + "Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.10/dist-packages (from notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (1.8.2)\n", + "Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (0.17.1)\n", + "Requirement already satisfied: prometheus-client in /usr/local/lib/python3.10/dist-packages (from notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (0.18.0)\n", + "Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.10/dist-packages (from notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (1.0.0)\n", + "Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (3.11.0)\n", + "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.10/dist-packages (from requests-oauthlib>=0.5.0->msrest<1.0,>=0.7.1->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (3.2.2)\n", + "Collecting pbr!=2.1.0,>=2.0.0 (from stevedore>=3.0.0->qiskit-terra==0.45.0->qiskit>=0.36.1->openqaoa-qiskit==0.2.3->OpenQAOA)\n", + " Downloading pbr-6.0.0-py2.py3-none-any.whl (107 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m107.5/107.5 kB\u001b[0m \u001b[31m16.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hINFO: pip is looking at multiple versions of jsonschema to determine which version is compatible with other requirements. This could take a while.\n", + "Collecting jsonschema (from basis-set-exchange->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading jsonschema-4.19.1-py3-none-any.whl (83 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m83.3/83.3 kB\u001b[0m \u001b[31m12.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Downloading jsonschema-4.19.0-py3-none-any.whl (83 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m83.4/83.4 kB\u001b[0m \u001b[31m12.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Downloading jsonschema-4.18.6-py3-none-any.whl (83 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m83.2/83.2 kB\u001b[0m \u001b[31m12.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Downloading jsonschema-4.18.5-py3-none-any.whl (82 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m82.5/82.5 kB\u001b[0m \u001b[31m12.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Downloading jsonschema-4.18.4-py3-none-any.whl (80 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m81.0/81.0 kB\u001b[0m \u001b[31m12.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Downloading jsonschema-4.18.3-py3-none-any.whl (80 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m81.0/81.0 kB\u001b[0m \u001b[31m13.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Downloading jsonschema-4.18.2-py3-none-any.whl (80 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m80.8/80.8 kB\u001b[0m \u001b[31m12.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hINFO: pip is looking at multiple versions of jsonschema to determine which version is compatible with other requirements. This could take a while.\n", + " Downloading jsonschema-4.18.1-py3-none-any.whl (80 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m80.7/80.7 kB\u001b[0m \u001b[31m13.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Downloading jsonschema-4.18.0-py3-none-any.whl (81 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m81.5/81.5 kB\u001b[0m \u001b[31m11.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Downloading jsonschema-4.17.3-py3-none-any.whl (90 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m90.4/90.4 kB\u001b[0m \u001b[31m14.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 (from jsonschema->basis-set-exchange->qdk->openqaoa-azure==0.2.3->OpenQAOA)\n", + " Downloading pyrsistent-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (117 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m117.7/117.7 kB\u001b[0m \u001b[31m18.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.12->cryptography>=2.5->azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]->openqaoa-azure==0.2.3->OpenQAOA) (2.21)\n", + "Collecting h11<0.15,>=0.13 (from httpcore<0.17.0,>=0.15.0->httpx<0.24.0,>=0.23.0->qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA)\n", + " Downloading h11-0.14.0-py3-none-any.whl (58 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.3/58.3 kB\u001b[0m \u001b[31m9.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: anyio<5.0,>=3.0 in /usr/local/lib/python3.10/dist-packages (from httpcore<0.17.0,>=0.15.0->httpx<0.24.0,>=0.23.0->qcs-api-client<0.22.0,>=0.21.0->pyquil<4.0.0,>=3.1.0->openqaoa-pyquil==0.2.3->OpenQAOA) (3.7.1)\n", + "Requirement already satisfied: entrypoints in /usr/local/lib/python3.10/dist-packages (from jupyter-client>=7.3.4->qsharp-core==0.28.302812->qsharp->qdk->openqaoa-azure==0.2.3->OpenQAOA) (0.4)\n", + "Requirement already satisfied: jupyter-server>=1.8 in /usr/local/lib/python3.10/dist-packages (from nbclassic>=0.4.7->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (1.24.0)\n", + "Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.10/dist-packages (from nbclassic>=0.4.7->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (0.2.3)\n", + "Requirement already satisfied: lxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (4.9.3)\n", + "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (4.11.2)\n", + "Requirement already satisfied: bleach in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (6.1.0)\n", + "Requirement already satisfied: defusedxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (0.7.1)\n", + "Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (0.2.2)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (2.1.3)\n", + "Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (0.8.4)\n", + "Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (0.9.0)\n", + "Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (1.5.0)\n", + "Requirement already satisfied: tinycss2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (1.2.1)\n", + "Requirement already satisfied: fastjsonschema in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (2.18.1)\n", + "INFO: pip is looking at multiple versions of pyjwt[crypto] to determine which version is compatible with other requirements. This could take a while.\n", + "Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.10/dist-packages (from argon2-cffi->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (21.2.0)\n", + "Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (2.5)\n", + "Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach->nbconvert>=5->notebook>=6.0->jupyter-nbextensions-configurator->qdk->openqaoa-azure==0.2.3->OpenQAOA) (0.5.1)\n", + "Building wheels for collected packages: docplex, antlr4-python3-runtime, lark, rpcq, basis-set-exchange, jupyter-contrib-core\n", + " Building wheel for docplex (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for docplex: filename=docplex-2.25.236-py3-none-any.whl size=671350 sha256=3909fa843dc4fd32f1efbc1a9b289ad7d50a7e6254312ced159eeaed60af661a\n", + " Stored in directory: /root/.cache/pip/wheels/3b/e5/00/0bf0173d67188fe73a13e3a61412b3f975f60205e3fab93a69\n", + " Building wheel for antlr4-python3-runtime (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for antlr4-python3-runtime: filename=antlr4_python3_runtime-4.9.2-py3-none-any.whl size=144549 sha256=0d62f30dec036cd2aac5582fd10252b028d700c10ace7a8fb4d6f42010324ba8\n", + " Stored in directory: /root/.cache/pip/wheels/af/c8/1f/dd6d90c5974896e85709e017986a6f72fcf32343bea042bc03\n", + " Building wheel for lark (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for lark: filename=lark-0.11.3-py2.py3-none-any.whl size=99632 sha256=8b553f8ffee7ea8ea30a55e1a5e8e390c93ae8c809eb1ce6fa85150f5d907e83\n", + " Stored in directory: /root/.cache/pip/wheels/7d/72/22/a2dbd112cf05c55adf2e1ead5fba8aa527b848f01cdd99687c\n", + " Building wheel for rpcq (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for rpcq: filename=rpcq-3.11.0-py3-none-any.whl size=45966 sha256=1c1e4728b505c8e99d37e48d624cdfd9e783a66b00a03fdc3286fc9e94f891a0\n", + " Stored in directory: /root/.cache/pip/wheels/91/97/0a/b384d94155345284ec00712ab814cbfb5bc2b631080b4fa4c3\n", + " Building wheel for basis-set-exchange (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for basis-set-exchange: filename=basis_set_exchange-0.9.1-py3-none-any.whl size=35993276 sha256=5e74cea7ebf052496752f3c7e0b51f5694981043105bb88c54743e2e10df6924\n", + " Stored in directory: /root/.cache/pip/wheels/ea/db/eb/59352fa4d92ab5916c0573c1ac7c314cc79054faa9661d5cb0\n", + " Building wheel for jupyter-contrib-core (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for jupyter-contrib-core: filename=jupyter_contrib_core-0.4.2-py2.py3-none-any.whl size=17483 sha256=97cb31cfcb95923f2733576f2d2304a511fa6f644354381cc6f0207b505614a7\n", + " Stored in directory: /root/.cache/pip/wheels/a9/52/88/e0643cdfd68f0562087918c37dd583378648dbc3df68b907f7\n", + "Successfully built docplex antlr4-python3-runtime lark rpcq basis-set-exchange jupyter-contrib-core\n", + "Installing collected packages: types-retry, types-python-dateutil, types-deprecated, rfc3986, rfc3339, pure-eval, ply, openqasm3, lark, boltons, antlr4-python3-runtime, widgetsnbextension, websockets, unidecode, typing-extensions, symengine, semantic-version, rustworkx, ruamel.yaml.clib, retrying, python-rapidjson, python-markdown-math, pyrsistent, pyqir, PyJWT, py, portalocker, pbr, mypy-extensions, jmespath, jedi, isodate, iso8601, h11, executing, docplex, dill, deprecated, decorator, caio, backoff, autoray, attrs, asttokens, argcomplete, varname, stevedore, stack-data, ruamel-yaml, retry, openpulse, jupyter-client, jsonschema, httpcore, botocore, azure-core, aiofile, s3transfer, rpcq, qsharp-core, qiskit-terra, pyspnego, oqpy, msrest, ipython, httpx, basis-set-exchange, azure-storage-blob, amazon-braket-schemas, requests-ntlm, qsharp-chemistry, qiskit-ionq, qiskit, qcs-api-client, openqaoa-core, msal, boto3, amazon-braket-default-simulator, qsharp, qiskit-qir, qiskit-ibm-provider, qiskit-aer, pyquil, msal-extensions, ipywidgets, amazon-braket-sdk, openqaoa-qiskit, openqaoa-pyquil, openqaoa-braket, jupyter-jsmol, azure-identity, azure-quantum, jupyter-contrib-core, jupyter-nbextensions-configurator, qdk, openqaoa-azure, OpenQAOA\n", + " Attempting uninstall: widgetsnbextension\n", + " Found existing installation: widgetsnbextension 3.6.6\n", + " Uninstalling widgetsnbextension-3.6.6:\n", + " Successfully uninstalled widgetsnbextension-3.6.6\n", + " Attempting uninstall: typing-extensions\n", + " Found existing installation: typing_extensions 4.5.0\n", + " Uninstalling typing_extensions-4.5.0:\n", + " Successfully uninstalled typing_extensions-4.5.0\n", + " Attempting uninstall: PyJWT\n", + " Found existing installation: PyJWT 2.3.0\n", + " Uninstalling PyJWT-2.3.0:\n", + " Successfully uninstalled PyJWT-2.3.0\n", + " Attempting uninstall: decorator\n", + " Found existing installation: decorator 4.4.2\n", + " Uninstalling decorator-4.4.2:\n", + " Successfully uninstalled decorator-4.4.2\n", + " Attempting uninstall: attrs\n", + " Found existing installation: attrs 23.1.0\n", + " Uninstalling attrs-23.1.0:\n", + " Successfully uninstalled attrs-23.1.0\n", + " Attempting uninstall: jupyter-client\n", + " Found existing installation: jupyter-client 6.1.12\n", + " Uninstalling jupyter-client-6.1.12:\n", + " Successfully uninstalled jupyter-client-6.1.12\n", + " Attempting uninstall: jsonschema\n", + " Found existing installation: jsonschema 4.19.2\n", + " Uninstalling jsonschema-4.19.2:\n", + " Successfully uninstalled jsonschema-4.19.2\n", + " Attempting uninstall: ipython\n", + " Found existing installation: ipython 7.34.0\n", + " Uninstalling ipython-7.34.0:\n", + " Successfully uninstalled ipython-7.34.0\n", + " Attempting uninstall: ipywidgets\n", + " Found existing installation: ipywidgets 7.7.1\n", + " Uninstalling ipywidgets-7.7.1:\n", + " Successfully uninstalled ipywidgets-7.7.1\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "lida 0.0.10 requires fastapi, which is not installed.\n", + "lida 0.0.10 requires kaleido, which is not installed.\n", + "lida 0.0.10 requires python-multipart, which is not installed.\n", + "lida 0.0.10 requires uvicorn, which is not installed.\n", + "google-colab 1.0.0 requires ipython==7.34.0, but you have ipython 8.17.2 which is incompatible.\n", + "moviepy 1.0.3 requires decorator<5.0,>=4.0.2, but you have decorator 5.1.1 which is incompatible.\n", + "referencing 0.30.2 requires attrs>=22.2.0, but you have attrs 21.4.0 which is incompatible.\n", + "tensorflow-probability 0.22.0 requires typing-extensions<4.6.0, but you have typing-extensions 4.8.0 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed OpenQAOA-0.2.3 PyJWT-2.8.0 aiofile-3.8.8 amazon-braket-default-simulator-1.20.1 amazon-braket-schemas-1.19.1.post0 amazon-braket-sdk-1.62.0 antlr4-python3-runtime-4.9.2 argcomplete-3.1.4 asttokens-2.4.1 attrs-21.4.0 autoray-0.6.7 azure-core-1.29.5 azure-identity-1.15.0 azure-quantum-0.28.277227 azure-storage-blob-12.19.0 backoff-2.2.1 basis-set-exchange-0.9.1 boltons-23.1.1 boto3-1.28.83 botocore-1.31.83 caio-0.9.13 decorator-5.1.1 deprecated-1.2.14 dill-0.3.7 docplex-2.25.236 executing-2.0.1 h11-0.14.0 httpcore-0.16.3 httpx-0.23.3 ipython-8.17.2 ipywidgets-8.0.4 iso8601-1.1.0 isodate-0.6.1 jedi-0.19.1 jmespath-1.0.1 jsonschema-4.17.3 jupyter-client-7.4.9 jupyter-contrib-core-0.4.2 jupyter-jsmol-2022.1.0 jupyter-nbextensions-configurator-0.6.3 lark-0.11.3 msal-1.25.0 msal-extensions-1.0.0 msrest-0.7.1 mypy-extensions-1.0.0 openpulse-0.4.2 openqaoa-azure-0.2.3 openqaoa-braket-0.2.3 openqaoa-core-0.2.3 openqaoa-pyquil-0.2.3 openqaoa-qiskit-0.2.3 openqasm3-0.4.0 oqpy-0.2.1 pbr-6.0.0 ply-3.11 portalocker-2.8.2 pure-eval-0.2.2 py-1.11.0 pyqir-0.8.0 pyquil-3.5.4 pyrsistent-0.20.0 pyspnego-0.10.2 python-markdown-math-0.8 python-rapidjson-1.13 qcs-api-client-0.21.6 qdk-0.28.302812 qiskit-0.45.0 qiskit-aer-0.13.0 qiskit-ibm-provider-0.7.2 qiskit-ionq-0.4.4 qiskit-qir-0.3.1 qiskit-terra-0.45.0 qsharp-0.28.302812 qsharp-chemistry-0.28.302812 qsharp-core-0.28.302812 requests-ntlm-1.2.0 retry-0.9.2 retrying-1.3.4 rfc3339-6.2 rfc3986-1.5.0 rpcq-3.11.0 ruamel-yaml-0.18.5 ruamel.yaml.clib-0.2.8 rustworkx-0.13.2 s3transfer-0.7.0 semantic-version-2.10.0 stack-data-0.6.3 stevedore-5.1.0 symengine-0.9.2 types-deprecated-1.2.9.3 types-python-dateutil-2.8.19.14 types-retry-0.9.9.4 typing-extensions-4.8.0 unidecode-1.3.7 varname-0.12.0 websockets-12.0 widgetsnbextension-4.0.9\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "IPython", + "decorator" + ] + } + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting qiskit-optimization\n", + " Downloading qiskit_optimization-0.5.0-py3-none-any.whl (156 kB)\n", + "\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/156.5 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[90m╺\u001b[0m \u001b[32m153.6/156.5 kB\u001b[0m \u001b[31m5.0 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m156.5/156.5 kB\u001b[0m \u001b[31m4.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: qiskit-terra>=0.22.4 in /usr/local/lib/python3.10/dist-packages (from qiskit-optimization) (0.45.0)\n", + "Requirement already satisfied: scipy>=1.4 in /usr/local/lib/python3.10/dist-packages (from qiskit-optimization) (1.11.3)\n", + "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from qiskit-optimization) (1.23.5)\n", + "Requirement already satisfied: docplex!=2.24.231,>=2.21.207 in /usr/local/lib/python3.10/dist-packages (from qiskit-optimization) (2.25.236)\n", + "Requirement already satisfied: setuptools>=40.1.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-optimization) (67.7.2)\n", + "Requirement already satisfied: networkx>=2.6.3 in /usr/local/lib/python3.10/dist-packages (from qiskit-optimization) (3.2.1)\n", + "Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from docplex!=2.24.231,>=2.21.207->qiskit-optimization) (1.16.0)\n", + "Requirement already satisfied: rustworkx>=0.13.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.22.4->qiskit-optimization) (0.13.2)\n", + "Requirement already satisfied: ply>=3.10 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.22.4->qiskit-optimization) (3.11)\n", + "Requirement already satisfied: psutil>=5 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.22.4->qiskit-optimization) (5.9.5)\n", + "Requirement already satisfied: sympy>=1.3 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.22.4->qiskit-optimization) (1.12)\n", + "Requirement already satisfied: dill>=0.3 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.22.4->qiskit-optimization) (0.3.7)\n", + "Requirement already satisfied: python-dateutil>=2.8.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.22.4->qiskit-optimization) (2.8.2)\n", + "Requirement already satisfied: stevedore>=3.0.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.22.4->qiskit-optimization) (5.1.0)\n", + "Requirement already satisfied: symengine<0.10,>=0.9 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.22.4->qiskit-optimization) (0.9.2)\n", + "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.22.4->qiskit-optimization) (4.8.0)\n", + "Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from stevedore>=3.0.0->qiskit-terra>=0.22.4->qiskit-optimization) (6.0.0)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy>=1.3->qiskit-terra>=0.22.4->qiskit-optimization) (1.3.0)\n", + "Installing collected packages: qiskit-optimization\n", + "Successfully installed qiskit-optimization-0.5.0\n", + "Collecting qiskit_algorithms\n", + " Downloading qiskit_algorithms-0.2.1-py3-none-any.whl (306 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m306.9/306.9 kB\u001b[0m \u001b[31m6.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: qiskit-terra>=0.24 in /usr/local/lib/python3.10/dist-packages (from qiskit_algorithms) (0.45.0)\n", + "Requirement already satisfied: scipy>=1.4 in /usr/local/lib/python3.10/dist-packages (from qiskit_algorithms) (1.11.3)\n", + "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from qiskit_algorithms) (1.23.5)\n", + "Requirement already satisfied: rustworkx>=0.13.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.24->qiskit_algorithms) (0.13.2)\n", + "Requirement already satisfied: ply>=3.10 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.24->qiskit_algorithms) (3.11)\n", + "Requirement already satisfied: psutil>=5 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.24->qiskit_algorithms) (5.9.5)\n", + "Requirement already satisfied: sympy>=1.3 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.24->qiskit_algorithms) (1.12)\n", + "Requirement already satisfied: dill>=0.3 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.24->qiskit_algorithms) (0.3.7)\n", + "Requirement already satisfied: python-dateutil>=2.8.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.24->qiskit_algorithms) (2.8.2)\n", + "Requirement already satisfied: stevedore>=3.0.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.24->qiskit_algorithms) (5.1.0)\n", + "Requirement already satisfied: symengine<0.10,>=0.9 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.24->qiskit_algorithms) (0.9.2)\n", + "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from qiskit-terra>=0.24->qiskit_algorithms) (4.8.0)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.0->qiskit-terra>=0.24->qiskit_algorithms) (1.16.0)\n", + "Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from stevedore>=3.0.0->qiskit-terra>=0.24->qiskit_algorithms) (6.0.0)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy>=1.3->qiskit-terra>=0.24->qiskit_algorithms) (1.3.0)\n", + "Installing collected packages: qiskit_algorithms\n", + "Successfully installed qiskit_algorithms-0.2.1\n", + "Collecting qiskit==0.44.1\n", + " Downloading qiskit-0.44.1-py3-none-any.whl (8.2 kB)\n", + "Collecting qiskit-terra==0.25.1 (from qiskit==0.44.1)\n", + " Downloading qiskit_terra-0.25.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.1/6.1 MB\u001b[0m \u001b[31m12.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: rustworkx>=0.13.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (0.13.2)\n", + "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (1.23.5)\n", + "Requirement already satisfied: ply>=3.10 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (3.11)\n", + "Requirement already satisfied: psutil>=5 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (5.9.5)\n", + "Requirement already satisfied: scipy>=1.5 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (1.11.3)\n", + "Requirement already satisfied: sympy>=1.3 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (1.12)\n", + "Requirement already satisfied: dill>=0.3 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (0.3.7)\n", + "Requirement already satisfied: python-dateutil>=2.8.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (2.8.2)\n", + "Requirement already satisfied: stevedore>=3.0.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (5.1.0)\n", + "Requirement already satisfied: symengine<0.10,>=0.9 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (0.9.2)\n", + "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from qiskit-terra==0.25.1->qiskit==0.44.1) (4.8.0)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.0->qiskit-terra==0.25.1->qiskit==0.44.1) (1.16.0)\n", + "Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from stevedore>=3.0.0->qiskit-terra==0.25.1->qiskit==0.44.1) (6.0.0)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy>=1.3->qiskit-terra==0.25.1->qiskit==0.44.1) (1.3.0)\n", + "Installing collected packages: qiskit-terra, qiskit\n", + " Attempting uninstall: qiskit-terra\n", + " Found existing installation: qiskit-terra 0.45.0\n", + " Uninstalling qiskit-terra-0.45.0:\n", + " Successfully uninstalled qiskit-terra-0.45.0\n", + " Attempting uninstall: qiskit\n", + " Found existing installation: qiskit 0.45.0\n", + " Uninstalling qiskit-0.45.0:\n", + " Successfully uninstalled qiskit-0.45.0\n", + "Successfully installed qiskit-0.44.1 qiskit-terra-0.25.1\n", + "Requirement already satisfied: azure-quantum[qiskit] in /usr/local/lib/python3.10/dist-packages (0.28.277227)\n", + "Collecting azure-quantum[qiskit]\n", + " Using cached azure_quantum-0.28.302812-py3-none-any.whl (180 kB)\n", + "Requirement already satisfied: azure-core<2.0.0,>=1.26.2 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (1.29.5)\n", + "Requirement already satisfied: azure-identity<2.0.0,>=1.12.0 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (1.15.0)\n", + "Requirement already satisfied: azure-storage-blob<13.0.0,>=12.14.1 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (12.19.0)\n", + "Requirement already satisfied: msrest<1.0,>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (0.7.1)\n", + "Requirement already satisfied: numpy<2.0,>=1.21.0 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (1.23.5)\n", + "Requirement already satisfied: deprecated<2.0,>=1.2.12 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (1.2.14)\n", + "Requirement already satisfied: aiohttp<4.0,>=3.7.0 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (3.8.6)\n", + "Requirement already satisfied: aiofile<4.0,>=3.7.2 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (3.8.8)\n", + "Requirement already satisfied: Markdown>=3.4.1 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (3.5.1)\n", + "Requirement already satisfied: python-markdown-math>=0.8 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (0.8)\n", + "Requirement already satisfied: qiskit-ionq<1.0,>=0.3.3 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (0.4.4)\n", + "Collecting qiskit-terra<0.25.0,>=0.19.1 (from azure-quantum[qiskit])\n", + " Downloading qiskit_terra-0.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.0 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.0/6.0 MB\u001b[0m \u001b[31m47.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: qiskit-qir<0.4,>=0.3.1 in /usr/local/lib/python3.10/dist-packages (from azure-quantum[qiskit]) (0.3.1)\n", + "Requirement already satisfied: caio~=0.9.0 in /usr/local/lib/python3.10/dist-packages (from aiofile<4.0,>=3.7.2->azure-quantum[qiskit]) (0.9.13)\n", + "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]) (21.4.0)\n", + "Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]) (3.3.2)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]) (6.0.4)\n", + "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]) (4.0.3)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]) (1.9.2)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]) (1.4.0)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0,>=3.7.0->azure-quantum[qiskit]) (1.3.1)\n", + "Requirement already satisfied: requests>=2.18.4 in /usr/local/lib/python3.10/dist-packages (from azure-core<2.0.0,>=1.26.2->azure-quantum[qiskit]) (2.31.0)\n", + "Requirement already satisfied: six>=1.11.0 in /usr/local/lib/python3.10/dist-packages (from azure-core<2.0.0,>=1.26.2->azure-quantum[qiskit]) (1.16.0)\n", + "Requirement already satisfied: typing-extensions>=4.6.0 in /usr/local/lib/python3.10/dist-packages (from azure-core<2.0.0,>=1.26.2->azure-quantum[qiskit]) (4.8.0)\n", + "Requirement already satisfied: cryptography>=2.5 in /usr/local/lib/python3.10/dist-packages (from azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]) (41.0.5)\n", + "Requirement already satisfied: msal<2.0.0,>=1.24.0 in /usr/local/lib/python3.10/dist-packages (from azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]) (1.25.0)\n", + "Requirement already satisfied: msal-extensions<2.0.0,>=0.3.0 in /usr/local/lib/python3.10/dist-packages (from azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]) (1.0.0)\n", + "Requirement already satisfied: isodate>=0.6.1 in /usr/local/lib/python3.10/dist-packages (from azure-storage-blob<13.0.0,>=12.14.1->azure-quantum[qiskit]) (0.6.1)\n", + "Requirement already satisfied: wrapt<2,>=1.10 in /usr/local/lib/python3.10/dist-packages (from deprecated<2.0,>=1.2.12->azure-quantum[qiskit]) (1.14.1)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from msrest<1.0,>=0.7.1->azure-quantum[qiskit]) (2023.7.22)\n", + "Requirement already satisfied: requests-oauthlib>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from msrest<1.0,>=0.7.1->azure-quantum[qiskit]) (1.3.1)\n", + "Requirement already satisfied: decorator>=5.1.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-ionq<1.0,>=0.3.3->azure-quantum[qiskit]) (5.1.1)\n", + "Requirement already satisfied: retry>=0.9.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-ionq<1.0,>=0.3.3->azure-quantum[qiskit]) (0.9.2)\n", + "Requirement already satisfied: importlib-metadata>=4.11.4 in /usr/local/lib/python3.10/dist-packages (from qiskit-ionq<1.0,>=0.3.3->azure-quantum[qiskit]) (6.8.0)\n", + "Requirement already satisfied: qiskit>=0.34.2 in /usr/local/lib/python3.10/dist-packages (from qiskit-qir<0.4,>=0.3.1->azure-quantum[qiskit]) (0.44.1)\n", + "Requirement already satisfied: pyqir==0.8.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-qir<0.4,>=0.3.1->azure-quantum[qiskit]) (0.8.0)\n", + "Requirement already satisfied: rustworkx>=0.12.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (0.13.2)\n", + "Requirement already satisfied: ply>=3.10 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (3.11)\n", + "Requirement already satisfied: psutil>=5 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (5.9.5)\n", + "Requirement already satisfied: scipy>=1.5 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (1.11.3)\n", + "Requirement already satisfied: sympy>=1.3 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (1.12)\n", + "Requirement already satisfied: dill>=0.3 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (0.3.7)\n", + "Requirement already satisfied: python-dateutil>=2.8.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (2.8.2)\n", + "Requirement already satisfied: stevedore>=3.0.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (5.1.0)\n", + "Requirement already satisfied: symengine<0.10,>=0.9 in /usr/local/lib/python3.10/dist-packages (from qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (0.9.2)\n", + "Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.10/dist-packages (from cryptography>=2.5->azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]) (1.16.0)\n", + "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.10/dist-packages (from importlib-metadata>=4.11.4->qiskit-ionq<1.0,>=0.3.3->azure-quantum[qiskit]) (3.17.0)\n", + "Requirement already satisfied: PyJWT[crypto]<3,>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from msal<2.0.0,>=1.24.0->azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]) (2.8.0)\n", + "Requirement already satisfied: portalocker<3,>=1.0 in /usr/local/lib/python3.10/dist-packages (from msal-extensions<2.0.0,>=0.3.0->azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]) (2.8.2)\n", + "INFO: pip is looking at multiple versions of qiskit to determine which version is compatible with other requirements. This could take a while.\n", + "Collecting qiskit>=0.34.2 (from qiskit-qir<0.4,>=0.3.1->azure-quantum[qiskit])\n", + " Using cached qiskit-0.45.0-py3-none-any.whl (9.6 kB)\n", + " Downloading qiskit-0.44.3-py3-none-any.whl (8.2 kB)\n", + " Downloading qiskit-0.44.2-py3-none-any.whl (8.2 kB)\n", + " Downloading qiskit-0.44.0.tar.gz (8.9 kB)\n", + " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Installing backend dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + " Downloading qiskit-0.43.3.tar.gz (9.1 kB)\n", + " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Installing backend dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + "Collecting qiskit-aer==0.12.2 (from qiskit>=0.34.2->qiskit-qir<0.4,>=0.3.1->azure-quantum[qiskit])\n", + " Downloading qiskit_aer-0.12.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.8/12.8 MB\u001b[0m \u001b[31m78.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting qiskit-ibmq-provider==0.20.2 (from qiskit>=0.34.2->qiskit-qir<0.4,>=0.3.1->azure-quantum[qiskit])\n", + " Downloading qiskit_ibmq_provider-0.20.2-py3-none-any.whl (241 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m241.5/241.5 kB\u001b[0m \u001b[31m26.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting requests-ntlm<=1.1.0 (from qiskit-ibmq-provider==0.20.2->qiskit>=0.34.2->qiskit-qir<0.4,>=0.3.1->azure-quantum[qiskit])\n", + " Downloading requests_ntlm-1.1.0-py2.py3-none-any.whl (5.7 kB)\n", + "Requirement already satisfied: urllib3>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from qiskit-ibmq-provider==0.20.2->qiskit>=0.34.2->qiskit-qir<0.4,>=0.3.1->azure-quantum[qiskit]) (2.0.7)\n", + "Requirement already satisfied: websocket-client>=1.5.1 in /usr/local/lib/python3.10/dist-packages (from qiskit-ibmq-provider==0.20.2->qiskit>=0.34.2->qiskit-qir<0.4,>=0.3.1->azure-quantum[qiskit]) (1.6.4)\n", + "Requirement already satisfied: websockets>=10.0 in /usr/local/lib/python3.10/dist-packages (from qiskit-ibmq-provider==0.20.2->qiskit>=0.34.2->qiskit-qir<0.4,>=0.3.1->azure-quantum[qiskit]) (12.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.18.4->azure-core<2.0.0,>=1.26.2->azure-quantum[qiskit]) (3.4)\n", + "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.10/dist-packages (from requests-oauthlib>=0.5.0->msrest<1.0,>=0.7.1->azure-quantum[qiskit]) (3.2.2)\n", + "Requirement already satisfied: py<2.0.0,>=1.4.26 in /usr/local/lib/python3.10/dist-packages (from retry>=0.9.0->qiskit-ionq<1.0,>=0.3.3->azure-quantum[qiskit]) (1.11.0)\n", + "Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from stevedore>=3.0.0->qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (6.0.0)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy>=1.3->qiskit-terra<0.25.0,>=0.19.1->azure-quantum[qiskit]) (1.3.0)\n", + "Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.12->cryptography>=2.5->azure-identity<2.0.0,>=1.12.0->azure-quantum[qiskit]) (2.21)\n", + "Collecting ntlm-auth>=1.0.2 (from requests-ntlm<=1.1.0->qiskit-ibmq-provider==0.20.2->qiskit>=0.34.2->qiskit-qir<0.4,>=0.3.1->azure-quantum[qiskit])\n", + " Downloading ntlm_auth-1.5.0-py2.py3-none-any.whl (29 kB)\n", + "Building wheels for collected packages: qiskit\n", + " Building wheel for qiskit (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for qiskit: filename=qiskit-0.43.3-py3-none-any.whl size=7632 sha256=7bb7d34cf261368eb98b9446ec8aa30c4b3c1a394464db3260e313ffff396e23\n", + " Stored in directory: /root/.cache/pip/wheels/c3/88/e5/483e1c761b53470dad74ee047f8ad4d67d4f52ec9dc9d13563\n", + "Successfully built qiskit\n", + "Installing collected packages: ntlm-auth, qiskit-terra, requests-ntlm, qiskit-aer, qiskit-ibmq-provider, qiskit, azure-quantum\n", + " Attempting uninstall: qiskit-terra\n", + " Found existing installation: qiskit-terra 0.25.1\n", + " Uninstalling qiskit-terra-0.25.1:\n", + " Successfully uninstalled qiskit-terra-0.25.1\n", + " Attempting uninstall: requests-ntlm\n", + " Found existing installation: requests-ntlm 1.2.0\n", + " Uninstalling requests-ntlm-1.2.0:\n", + " Successfully uninstalled requests-ntlm-1.2.0\n", + " Attempting uninstall: qiskit-aer\n", + " Found existing installation: qiskit-aer 0.13.0\n", + " Uninstalling qiskit-aer-0.13.0:\n", + " Successfully uninstalled qiskit-aer-0.13.0\n", + " Attempting uninstall: qiskit\n", + " Found existing installation: qiskit 0.44.1\n", + " Uninstalling qiskit-0.44.1:\n", + " Successfully uninstalled qiskit-0.44.1\n", + " Attempting uninstall: azure-quantum\n", + " Found existing installation: azure-quantum 0.28.277227\n", + " Uninstalling azure-quantum-0.28.277227:\n", + " Successfully uninstalled azure-quantum-0.28.277227\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "qiskit-ibm-provider 0.7.2 requires qiskit>=0.44.1, but you have qiskit 0.43.3 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed azure-quantum-0.28.302812 ntlm-auth-1.5.0 qiskit-0.43.3 qiskit-aer-0.12.2 qiskit-ibmq-provider-0.20.2 qiskit-terra-0.24.2 requests-ntlm-1.1.0\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "id": "105a7a7f", + "metadata": { + "id": "105a7a7f" + }, + "source": [ + "**Given 1 donor and 1 recipient.**" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "81934926", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "81934926", + "outputId": "d29815d3-2c35-43f5-92e8-b7e45bc6475b" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[1. 1. 1. 1. 0. 0. 0. 1.]\n", + "[1. 1. 1. 1. 1. 0. 0. 1.]\n", + "[1. 1. 1. 1. 1. 1. 0. 1.]\n", + "[1. 1. 1. 1. 1. 1. 1. 1.]\n", + "1\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "# Recipient = [blood_group, a_1, a_2, CPRA(recipient), age, kidney_size, 0, psy_eval]\n", + "# Donant = [blood_group, a_1, a_2, CPRA(donant), age, kidney_size, 0, psy_eval]\n", + "\n", + "R = np.array(['A', '2', '1', 0.5, 43, 0.75, 0, 1])\n", + "D = np.array(['A', '2', '1', 0, 51, 0.80, 0.9, 1])\n", + "\n", + "R_bin = np.zeros(8)\n", + "\n", + "# For all elements in the position i in vector R and vector D check if they are equal.\n", + "# If so, put a 1 in position i of vector R_bin.\n", + "\n", + "for i in [0, 1, 2, 7]:\n", + " if R[i] == D[i]:\n", + " R_bin[i] = 1\n", + " #print(R_bin[0])\n", + "\n", + "# CPRA\n", + "\n", + "if R[3].astype(float) <= 0.5:\n", + " R_bin[3] = 1\n", + " print(R_bin)\n", + "\n", + "# Kidney size and age\n", + "\n", + "if abs(R[4].astype(float) - D[4].astype(float)).astype(float) <= 10:\n", + " R_bin[4] = 1\n", + " print(R_bin)\n", + "\n", + "if R[5].astype(float) >= 0.8 * D[5].astype(float):\n", + " R_bin[5] = 1\n", + " print(R_bin)\n", + "\n", + "if D[6].astype(float) >= 0.75:\n", + " R_bin[6] = 1\n", + " print(R_bin)\n", + "\n", + "# This piece of code let us know if the donor and the recipient are compatibles.\n", + "\n", + "R_value = 0\n", + "\n", + "if R_bin.all() == np.ones(8).all():\n", + " R_value = 1\n", + "\n", + "print(R_value)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "0e2231dc", + "metadata": { + "id": "0e2231dc" + }, + "source": [ + "**Given _n_ donors and _m_ recipients.**" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "535d42f5", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "535d42f5", + "outputId": "caf4dc01-83f9-444c-aa68-c0680713a249" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[1, 0, 1], [0, 0, 0], [0, 0, 0]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "def compatibility_check(R, D):\n", + " R_bin = np.zeros(8)\n", + "\n", + " for i in [0, 1, 2, 7]:\n", + " if str(R[i]) == str(D[i]):\n", + " R_bin[i] = 1\n", + "\n", + " if float(R[3]) <= 0.5:\n", + " R_bin[3] = 1\n", + "\n", + " if abs(float(R[4]) - float(D[4])) <= 10:\n", + " R_bin[4] = 1\n", + "\n", + " if float(R[5]) >= 0.8 * float(D[5]):\n", + " R_bin[5] = 1\n", + "\n", + " if float(D[6]) >= 0.75:\n", + " R_bin[6] = 1\n", + "\n", + " if R_bin.all() == np.ones(8).all():\n", + " return 1\n", + " else:\n", + " return 0\n", + "\n", + "# Lista de listas R\n", + "list_R = [['A', '2', '1', 0.5, 43, 0.75, 0, 1], ['B', '3', '2', 0.6, 50, 0.80, 0.7, 1], ['A', '2', '1', 0.5, 45, 0.70, 0.5, 0]]\n", + "\n", + "# Lista de listas D\n", + "list_D = [['A', '2', '1', 0, 51, 0.80, 0.9, 1], ['B', '2', '3', 0.2, 40, 0.85, 0.95, 0], ['A', '2', '1', 0.2, 48, 0.75, 0.8, 1]]\n", + "\n", + "results = []\n", + "\n", + "for R in list_R:\n", + " for D in list_D:\n", + " result = compatibility_check(R, D)\n", + " results.append(result)\n", + "\n", + "results = [results[i:i + len(list_D)] for i in range(0, len(results), len(list_D))]\n", + "\n", + "print(results)\n" + ] + }, + { + "cell_type": "markdown", + "id": "e339b8e8", + "metadata": { + "id": "e339b8e8" + }, + "source": [ + "### Mathematical expression for constraints and objective function\n", + "\n", + "Suppose there are _n_ kidney donors and _m_ kidney recipients.\n", + "Let's define the following binary variables, such that\n", + "\n", + "$x_{ij} = 1$ means that donor i is assigned to recipient j,\n", + "\n", + "$x_{ij} = 0$ otherwise.\n", + "\n", + "+ **Objective function.**\n", + "\n", + "The objective function aims to maximize the compatibility between donors and recipients, which can be expressed as the sum of individual compatibilities as follows,\n", + "\n", + "$$\n", + "max \\sum_{i=0}^{m-1} \\sum_{j=0}^{n-1} Compatibility_{ij} · x_{ij}\n", + "$$\n", + "\n", + "where $Compatibility_{ij}$ is a measure of compatibility between donor i and recipient j, which corresponds exactly to element j in the i-th list of _results_.\n", + "\n", + "(i.e. $Compatibility_{ij}$ = _results[i][j]_)\n", + "\n", + "Then,\n", + "\n", + "$$\n", + "H_{objective} = - \\sum_{i=0}^{m-1} \\sum_{j=0}^{n-1} Compatibility_{ij} · x_{ij}\n", + "$$\n", + "\n", + "+ **Unique assignment constraint (Each donor is assigned to one recipient, and vice versa).**\n", + "\n", + "$$\\sum_{j=0}^{m-1} x_{ij} \\leq 1$$\n", + "\n", + "$\\forall i\\in{0, ..., n-1}$ and\n", + "\n", + "$$\\sum_{i=0}^{n-1} x_{ij} \\leq 1$$\n", + "\n", + "$\\forall j\\in{0, ..., m-1}.$\n", + "\n", + "Therefore,\n", + "\n", + "$$\n", + "H_{uniqueness} = \\sum_{i=0}^{n-1}(\\sum_{j=0}^{m-1} x_{ij} - 1)^2 + \\sum_{j=0}^{m-1}(\\sum_{i=0}^{n-1} x_{ij} - 1)^2\n", + "$$\n", + "\n", + "So that,\n", + "\n", + "$$\n", + "H_{total} = - \\sum_{i=0}^{m-1} \\sum_{j=0}^{n-1} Compatibility_{ij} · x_{ij} + \\sum_{i=0}^{n-1}(\\sum_{j=0}^{m-1} x_{ij} - 1)^2 + \\sum_{j=0}^{m-1}(\\sum_{i=0}^{n-1} x_{ij} - 1)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "12eb932f", + "metadata": { + "id": "12eb932f" + }, + "source": [ + "### B) Practical exercise implemented using openqaoa.\n", + "\n", + "**Next, using the article https://doi.org/10.1007/978-3-031-06668-9_21 as a resource, we implement the kidney transplant problem by applying the stable marriage algorithm adapted to the context in which we find ourselves.**" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "417c5505", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "417c5505", + "outputId": "da5154ce-d887-4d6d-ad9d-211806fcdb2d" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0, 2], [0, 1], [1, 2], [1, 3], [1, 1], [2, 2], [2, 3], [3, 2], [3, 0]]\n" + ] + } + ], + "source": [ + "#Define preference matrix of the first set\n", + "#m[i] represents individuals from the second set with preferences, from highest to lowest, of individual i from set m\n", + "m = [[2,1], [2,3,1], [0,2,1,3], [1,2,0]]\n", + "\n", + "#Preferences of the second set\n", + "w = [[1,3,0], [0,1], [2,3,0,1], [2,1]]\n", + "\n", + "#Initialize list of admitted pairs\n", + "couples = []\n", + "\n", + "#Iterate over members of the first set\n", + "for i in range(4):\n", + " # Select indices from the preference list of that individual and check for reciprocity\n", + " for j in range(len(m[i])):\n", + " if i in w[m[i][j]]:\n", + " # Individual i from set 1 is in the preferences of individual j from set 2\n", + " couples.append([i, m[i][j]])\n", + "\n", + "print(couples)\n", + "\n", + "#Each variable will correspond to a pair from the couples list\n", + "#In other words, variable x_i will correspond to the pair with index i in the list\n", + "n_variables = len(couples)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6b7936f2", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6b7936f2", + "outputId": "a841b517-5e26-4242-eee1-4695356d17d6" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[-1, -1, -1, -1, -1, -1, -1, -1, -1]\n", + "[[0], [1], [2], [3], [4], [5], [6], [7], [8]]\n" + ] + } + ], + "source": [ + "#The way to call the QUBO class from openqaoa.problems will be, for example, for 3x_0 + 2x_1 + 6x_0x_1 + 4x_1x_2\n", + "#qubo = QUBO(n=3, terms=[[0],[1], [0,1], [1,2]], weights=[3, 2, 6, 4])\n", + "#Initialize the coefficients and linear terms of the objective function\n", + "#C(x) = -x_0 - x_1 - ... - x_{n_variables-1}\n", + "#Therefore, the coefficients will be [-1,-1,-1,-1,...,-1] and the variables [[0],[1],...,[n_variables-1]]\n", + "coefficients = [-1 for i in range(n_variables)]\n", + "variables = [[i] for i in range(n_variables)]\n", + "\n", + "print(coefficients)\n", + "print(variables)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4630f003", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4630f003", + "outputId": "d5985790-91b9-4764-813c-87538d1a8ac5" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0], [1], [2], [3], [4], [5], [6], [7], [8], [0, 1], [0, 2], [0, 5], [0, 7], [1, 4], [2, 3], [2, 4], [2, 5], [2, 7], [3, 4], [3, 6], [5, 6], [5, 7], [7, 8]]\n", + "[-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17]\n" + ] + } + ], + "source": [ + "# First constraint: No one can be paired twice\n", + "\n", + "# Penalty term, which we'll call p3\n", + "# n**2 + p1 where n is the size of both sets\n", + "n = len(m)\n", + "p3 = n**2 + 1\n", + "\n", + "# For each x_i, check if the rest of x_j share any component\n", + "for i in range(n_variables):\n", + " # Ensure that the same pairs of variables are not repeated with the order changed\n", + " for j in range(i+1, n_variables):\n", + " if couples[i][0] == couples[j][0] or couples[i][1] == couples[j][1]:\n", + " coefficients.append(p3)\n", + " variables.append([i, j])\n", + "\n", + "print(variables)\n", + "print(coefficients)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b0a38b0f", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "b0a38b0f", + "outputId": "ed88d814-b2fe-4284-ee2a-41b137b093c7" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0], [1], [2], [3], [4], [5], [6], [7], [8], [0, 1], [0, 2], [0, 5], [0, 7], [1, 4], [2, 3], [2, 4], [2, 5], [2, 7], [3, 4], [3, 6], [5, 6], [5, 7], [7, 8], [5], [7], [0], [0], [5], [7], [2], [6], [2, 6], [1], [2], [3], [2, 1], [3, 1], [5], [5], [7]]\n", + "[-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, -4, -4, -4, -4, -4, -4, -4, -4, 4, -4, -4, -4, 4, 4, -4, -4, -4]\n" + ] + } + ], + "source": [ + "# Second constraint: Stability.\n", + "# We will aim to penalize the existence of pairs where both individuals prefer to be together rather than with their assigned partners,\n", + "# and favor those that can be more stable.\n", + "\n", + "# Penalty term p2 = n, where n is the size of each of the two sets\n", + "p2 = n\n", + "\n", + "# For each possible pair, look for cases where one of the two prefers another individual with whom they can be paired\n", + "for k, l in couples:\n", + " # Initialize a list of other pairs with individual k from the first set\n", + " alternatives1 = []\n", + " # List of other possible pairs for individual l from the second set\n", + " alternatives2 = []\n", + " for i, j in couples:\n", + " # Look for other possible pairs of individual k from the first set and compare the order of preference with that of individual l\n", + " if i == k and j != l and m[k].index(j) < m[k].index(l):\n", + " coefficients.append(-p2)\n", + " variables.append([couples.index([k, j])])\n", + " alternatives1.append(couples.index([k, j]))\n", + " if i != k and j == l and w[l].index(i) < w[l].index(k):\n", + " coefficients.append(-p2)\n", + " variables.append([couples.index([i, l])])\n", + " alternatives2.append(couples.index([i, l]))\n", + " # Penalize pairs that may break the pairing\n", + " for alternative1 in alternatives1:\n", + " for alternative2 in alternatives2:\n", + " coefficients.append(p2)\n", + " variables.append([alternative1, alternative2])\n", + "\n", + "print(variables)\n", + "print(coefficients)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a6aa1ddf", + "metadata": { + "id": "a6aa1ddf" + }, + "outputs": [], + "source": [ + "#!pip install openqaoa" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "b21f00a9", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "b21f00a9", + "outputId": "a55c48b0-3879-499d-9bb2-22488ca25456" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "The qiskit module has not been installed.\n", + "No module named 'qiskit.circuit.classical'\n", + "The azure module has not been installed.\n", + "No module named 'qiskit.circuit.classical'\n", + "-9.0*Z_{0} + -5.0*Z_{1} + -9.0*Z_{2} + -5.0*Z_{3} + -1.0*Z_{4} + -17.0*Z_{5} + -5.0*Z_{6} + -13.0*Z_{7} + -1.0*Z_{8} + 17.0*Z_{0}Z_{1} + 17.0*Z_{0}Z_{2} + 17.0*Z_{0}Z_{5} + 17.0*Z_{0}Z_{7} + 17.0*Z_{1}Z_{4} + 17.0*Z_{2}Z_{3} + 17.0*Z_{2}Z_{4} + 17.0*Z_{2}Z_{5} + 17.0*Z_{2}Z_{7} + 17.0*Z_{3}Z_{4} + 17.0*Z_{3}Z_{6} + 17.0*Z_{5}Z_{6} + 17.0*Z_{5}Z_{7} + 17.0*Z_{7}Z_{8} + 4.0*Z_{2}Z_{6} + 4.0*Z_{1}Z_{2} + 4.0*Z_{1}Z_{3} + 0\n" + ] + } + ], + "source": [ + "from openqaoa.problems import QUBO\n", + "\n", + "# Create a QUBO instance with the specified variables and coefficients\n", + "qubo = QUBO(n=n_variables, terms=variables, weights=coefficients)\n", + "\n", + "# Print the QUBO Hamiltonian (coefficients need to be changed to correspond to an Ising model)\n", + "print(qubo.hamiltonian)\n", + "\n", + "# Convert the QUBO to an Ising model\n", + "qubo.terms, qubo.weights = qubo.convert_qubo_to_ising(n_variables, variables, coefficients)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "21f2630c", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "21f2630c", + "outputId": "e2f25e34-7dfe-4ea1-ba62-f17e376238fc" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "4.25*Z_{0}Z_{1} + 4.25*Z_{0}Z_{2} + 4.25*Z_{0}Z_{5} + 4.25*Z_{0}Z_{7} + 4.25*Z_{1}Z_{4} + 4.25*Z_{2}Z_{3} + 4.25*Z_{2}Z_{4} + 4.25*Z_{2}Z_{5} + 4.25*Z_{2}Z_{7} + 4.25*Z_{3}Z_{4} + 4.25*Z_{3}Z_{6} + 4.25*Z_{5}Z_{6} + 4.25*Z_{5}Z_{7} + 4.25*Z_{7}Z_{8} + 1.0*Z_{2}Z_{6} + 1.0*Z_{1}Z_{2} + 1.0*Z_{1}Z_{3} + -12.5*Z_{0} + -8.0*Z_{1} + -18.75*Z_{2} + -11.25*Z_{3} + -12.25*Z_{4} + -8.5*Z_{5} + -7.0*Z_{6} + -10.5*Z_{7} + -3.75*Z_{8} + 30.0\n" + ] + } + ], + "source": [ + "print(qubo.hamiltonian) # Now the Hamiltonian is correct\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "62b1ff9d", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "62b1ff9d", + "outputId": "45a49c3b-eec7-40ea-94fe-c620ec2abb7e" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Ground State energy: -24.0, Solution: ['010101001']\n" + ] + } + ], + "source": [ + "hamiltonian = qubo.hamiltonian\n", + "\n", + "# Import the brute-force solver to obtain the exact solution\n", + "from openqaoa.utilities import ground_state_hamiltonian\n", + "energy, configuration = ground_state_hamiltonian(hamiltonian)\n", + "print(f\"Ground State energy: {energy}, Solution: {configuration}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "e2982b55", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "e2982b55", + "outputId": "57de27a0-f619-4b16-c4bd-a5a4684ea60a" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0, 1], [1, 3], [2, 2], [3, 0]]\n" + ] + } + ], + "source": [ + "solution_pairs = []\n", + "for i in range(n_variables):\n", + " if configuration[0][i] == \"1\":\n", + " solution_pairs.append(couples[i])\n", + "\n", + "print(solution_pairs)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d404d397", + "metadata": { + "id": "d404d397" + }, + "outputs": [], + "source": [ + "#[[0, 1], [1, 3], [2, 2], [3, 0]] is the correct solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "501a8751", + "metadata": { + "id": "501a8751" + }, + "outputs": [], + "source": [ + "#from openqaoa import QAOA\n", + "#q = QAOA()\n", + "\n", + "from openqaoa.backends import create_device\n", + "\n", + "for optimizer in [\"Nelder-Mead\", \"BFGS\", \"COBYLA\", \"SLSQP\"]:\n", + " for k in range(1, 30):\n", + " q = QAOA()\n", + "\n", + " device = create_device(location='local', name='vectorized')\n", + " q.set_device(device)\n", + "\n", + " # Circuit properties\n", + " q.set_circuit_properties(p=k, param_type='standard', init_type='rand', mixer_hamiltonian='x')\n", + "\n", + " # Backend properties (already set by default)\n", + " q.set_backend_properties(prepend_state=None, append_state=None)\n", + "\n", + " # Classical optimizer properties\n", + " q.set_classical_optimizer(method=optimizer,\n", + " maxiter=500, tol=0.001,\n", + " optimization_progress=True, cost_progress=True, parameter_log=True)\n", + " q.compile(qubo)\n", + " q.optimize()\n", + " results = q.result\n", + "\n", + " solution = results.most_probable_states[\"solutions_bitstrings\"][0]\n", + " solution_pairs = []\n", + " for i in range(n_variables):\n", + " if solution[i] == \"1\":\n", + " solution_pairs.append(couples[i])\n", + " print(optimizer, k, solution, solution_pairs)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ade1b4f5", + "metadata": { + "id": "ade1b4f5" + }, + "outputs": [], + "source": [ + "for optimizer in [\"COBYLA\", \"SLSQP\"]:\n", + " for k in range(1, 30):\n", + " q = QAOA()\n", + "\n", + " device = create_device(location='local', name='vectorized')\n", + " q.set_device(device)\n", + "\n", + " # Circuit properties\n", + " q.set_circuit_properties(p=k, param_type='standard', init_type='rand', mixer_hamiltonian='x')\n", + "\n", + " # Backend properties (already set by default)\n", + " q.set_backend_properties(prepend_state=None, append_state=None)\n", + "\n", + " # Classical optimizer properties\n", + " q.set_classical_optimizer(method=optimizer,\n", + " maxiter=500, tol=0.001,\n", + " optimization_progress=True, cost_progress=True, parameter_log=True)\n", + " q.compile(qubo)\n", + " q.optimize()\n", + " results = q.result\n", + "\n", + " solution = results.most_probable_states[\"solutions_bitstrings\"][0]\n", + " solution_pairs = []\n", + " for i in range(n_variables):\n", + " if solution[i] == \"1\":\n", + " solution_pairs.append(couples[i])\n", + " print(optimizer, k, solution, solution_pairs)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "82e80554", + "metadata": { + "id": "82e80554" + }, + "outputs": [], + "source": [ + "from openqaoa.backends import create_device\n", + "from openqaoa import QAOA\n", + "\n", + "q = QAOA()\n", + "\n", + "qiskit_device = create_device(location='local', name='vectorized')\n", + "q.set_device(qiskit_device)\n", + "\n", + "# circuit properties\n", + "q.set_circuit_properties(p=13, param_type='standard', init_type='rand', mixer_hamiltonian='x')\n", + "\n", + "# backend properties (already set by default)\n", + "q.set_backend_properties(prepend_state=None, append_state=None)\n", + "\n", + "# classical optimizer properties\n", + "q.set_classical_optimizer(method='SLSQP',\n", + " maxiter=500, tol=0.001,\n", + " optimization_progress=True, cost_progress=True, parameter_log=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "4dbee2d9", + "metadata": { + "id": "4dbee2d9" + }, + "outputs": [], + "source": [ + "q.compile(qubo)\n", + "q.optimize()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "eaa9dfa9", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 718 + }, + "id": "eaa9dfa9", + "outputId": "b391e01c-7aa6-4c32-ae2e-c5ca229fb8c5" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1UAAAK9CAYAAADMn0adAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADNDUlEQVR4nOzdd5gUxdYG8HdZWPLuknOUDAoKqIgkQVCRq2LACGZFMIA5i14/s2JADNdr5ooYMCsSxABIEkEUECWHJecM8/1xLLq6prunZ3Z2esL7e555aqZ7uvvM7Cp9tqpOZYVCoRCIiIiIiIgoJsWCDoCIiIiIiCiVMakiIiIiIiIqBCZVREREREREhcCkioiIiIiIqBCYVBERERERERUCkyoiIiIiIqJCYFJFRERERERUCEyqiIiIiIiICoFJFRERERERUSEwqSIiooz1xhtvICsrCzNnzoz43q5du6Jr165FHxQREaUcJlVERFRk/vrrL1xzzTVo2LAhSpUqhdzcXHTs2BHPPvssdu/eHffr7dq1Cw888AC+++67uJ87FlOmTMEDDzyALVu2BB0KEREVoeJBB0BEROnpiy++wLnnnouSJUuif//+aNWqFfbt24cff/wRt956K+bPn49XXnklrtfctWsXhg0bBgBx71UaN25c1MdMmTIFw4YNw6WXXor8/Py4xkNERMmDSRUREcXdkiVLcP7556NevXqYOHEiatSocXjfoEGDsHjxYnzxxRcBRhi9nJycoEMAAIRCIezZswelS5cOOhQiIvoHh/8REVHcPf7449ixYwdee+01W0KlNGrUCDfeeOPh1wcOHMBDDz2EI444AiVLlkT9+vVx1113Ye/evbbjZs6ciV69eqFy5cooXbo0GjRogMsvvxwAsHTpUlSpUgUAMGzYMGRlZSErKwsPPPBAxHj37t2LoUOHokqVKihbtizOOussrF+/3vYepzlVzz//PFq2bIkyZcqgQoUKaNeuHUaNGgUAeOCBB3DrrbcCABo0aHA4nqVLl0b1mevXr4/TTz8d33zzDdq1a4fSpUvj5ZdfRpcuXdC6dWvHz9O0aVP06tUr4ucmIqL4YE8VERHF3WeffYaGDRvihBNO8PX+K6+8Em+++SbOOecc3Hzzzfj555/xyCOP4I8//sDHH38MAFi3bh169uyJKlWq4I477kB+fj6WLl2Kjz76CABQpUoVjBw5EgMHDsRZZ52Fvn37AgCOOuqoiNe//vrrUaFCBdx///1YunQphg8fjsGDB2P06NGux7z66qu44YYbcM455+DGG2/Enj17MHfuXPz888+48MIL0bdvXyxatAj/+9//8Mwzz6By5cqH4/T7mZWFCxfiggsuwDXXXIOrrroKTZs2Rbly5XDVVVfht99+Q6tWrQ6/d8aMGVi0aBHuueceX989ERHFQYiIiCiOtm7dGgIQOuOMM3y9f86cOSEAoSuvvNK2/ZZbbgkBCE2cODEUCoVCH3/8cQhAaMaMGa7nWr9+fQhA6P777/d17ddffz0EINSjR4/QoUOHDm8fMmRIKDs7O7Rly5bD27p06RLq0qXL4ddnnHFGqGXLlp7nf+KJJ0IAQkuWLLFt9/uZQ6FQqF69eiEAoa+//tr23i1btoRKlSoVuv32223bb7jhhlDZsmVDO3bs8IyNiIjih8P/iIgorrZt2wYAKF++vK/3f/nllwCAoUOH2rbffPPNAHB47pUq9PD5559j//798Qj1sKuvvhpZWVmHX3fq1AkHDx7EsmXLXI/Jz8/HypUrMWPGjKiv5/czKw0aNAgbzpeXl4czzjgD//vf/xAKhQAABw8exOjRo3HmmWeibNmyUcdFRESxYVJFRERxlZubCwDYvn27r/cvW7YMxYoVQ6NGjWzbq1evjvz8/MOJTZcuXXD22Wdj2LBhqFy5Ms444wy8/vrrYXOQYlG3bl3b6woVKgAANm/e7HrM7bffjnLlyuHYY49F48aNMWjQIPz000++ruf3MysNGjRwPE///v2xfPly/PDDDwCA8ePHo6CgAJdccomvOIiIKD6YVBERUVzl5uaiZs2a+O2336I6Tu8pctv/wQcfYOrUqRg8eDBWrVqFyy+/HG3btsWOHTsKEzKys7Mdt6seICfNmzfHwoUL8d577+HEE0/Ehx9+iBNPPBH333+/7+tG+syKW6W/Xr16oVq1anjnnXcAAO+88w6qV6+OHj16+I6BiIgKj0kVERHF3emnn46//voLU6dOjfjeevXq4dChQ/jzzz9t2wsKCrBlyxbUq1fPtv3444/Hww8/jJkzZ+Ldd9/F/Pnz8d577wHwn6TES9myZdGvXz+8/vrrWL58OXr37o2HH34Ye/bs8Ywn2s/sJjs7GxdeeCE++OADbN68GWPHjsUFF1zgmiQSEVHRYFJFRERxd9ttt6Fs2bK48sorUVBQELb/r7/+wrPPPgsAOO200wAAw4cPt73n6aefBgD07t0bgAzFM3uO2rRpAwCHhwCWKVMGALBly5a4fA4vGzdutL3OyclBixYtEAqFDs/5UvOazHj8fmY/LrnkEmzevBnXXHMNduzYgYsvvjiaj0FERHHAkupERBR3RxxxBEaNGoV+/fqhefPm6N+/P1q1aoV9+/ZhypQpGDNmDC699FIAQOvWrTFgwAC88sor2LJlC7p06YLp06fjzTffxJlnnolu3boBAN588028+OKLOOuss3DEEUdg+/btePXVV5Gbm3s4SSldujRatGiB0aNHo0mTJqhYsSJatWplKzkeLz179kT16tXRsWNHVKtWDX/88QdeeOEF9O7d+3CRjrZt2wIA7r77bpx//vkoUaIE+vTp4/sz+3H00UejVatWGDNmDJo3b45jjjkm7p+ViIgiCLb4IBERpbNFixaFrrrqqlD9+vVDOTk5ofLly4c6duwYev7550N79uw5/L79+/eHhg0bFmrQoEGoRIkSoTp16oTuvPNO23tmz54duuCCC0J169YNlSxZMlS1atXQ6aefHpo5c6btmlOmTAm1bds2lJOTE7G8uiqpbpZpnzRpUghAaNKkSYe3mSXVX3755VDnzp1DlSpVCpUsWTJ0xBFHhG699dbQ1q1bbed66KGHQrVq1QoVK1bMVl7dz2cOhaSkeu/evb2+5tDjjz8eAhD6v//7P8/3ERFR0cgKhTxm4RIREVHSe/bZZzFkyBAsXbo0rJIhEREVPSZVREREKSwUCqF169aoVKkSJk2aFHQ4REQZiXOqiIiIUtDOnTvx6aefYtKkSZg3bx4++eSToEMiIspY7KkiIiJKQUuXLkWDBg2Qn5+P6667Dg8//HDQIRERZSwmVURERERERIXAdaqIiIiIiIgKgUkVERERERFRIbBQheHQoUNYvXo1ypcvj6ysrKDDISIiIiKigIRCIWzfvh01a9ZEsWLu/VFMqgyrV69GnTp1gg6DiIiIiIiSxIoVK1C7dm3X/UyqDOXLlwcgX1xubm7A0RARERERUVC2bduGOnXqHM4R3DCpMqghf7m5uUyqiIiIiIgo4rQgFqogIiIiIiIqBCZVREREREREhcCkioiIiIiIqBA4p4qIiIiIKMUdPHgQ+/fvDzqM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46Cis2eP9VBefdX+ngEDgPvvB1q2tG+/+WZp//jDvl3Ns5o717792GOlLV3avv3CCyVB+2dENREREUUhKxRKjcFF1113HUaNGoVPPvkETZs2Pbw9Ly8Ppf+5Oxg4cCC+/PJLvPHGG8jNzcX1118PAJgyZYrv62zbtg15eXnYunUrcnNz4/shiGKgeiIqVOCCrelq5UprWBogwwXNpGf3bqkaWLw40KSJtb1pU2DRInmu/998wADgrbfCt7vJy7MKVaTGvwqxKVNGvsuSJe1JLBERkRO/uUHKDP8bOXIkAKBr16627a+//jouvfRSAMAzzzyDYsWK4eyzz8bevXvRq1cvvBhpNjhRikjnG91Mp41kdvX558B550nRC728/nHHSVL1xBNFF186UcMitaKvREREhZYySZWfDrVSpUphxIgRGGHOCCdKA8cdF3QElAgzZgDffgs0bw6cdZa1/Z+/HYWVPXf7X+Oxx1o9VbqDB6WHJisrMwpTEBERJULKzKkiylR9+khrFiig9DR1qhSleP/96I4zC1acfLK0ZnXB004DypUDypaNPUYiIiKyY1JFRJREsrOlPXDA3/t/+UXaW26xb3erCrhlS0xhpY2ePaU1C34QEREVBpMqoiSn5oColtJb8X8GZR886O/9O3Y4b1fDBPX5V14yZc7eSSdJ2759sHEQEVF6YVJFlOQqVJD211+DjYMSI9qeqho1nLe/80501zWrDRIREZF/TKqIkly9etJWrBhsHJQY0fZUPf64tNpKEwCASpWkvfpqf+dZvFgWF1broqWrFSuk3bgx2DiIiCi9pEz1P6JMlSnDski49VRVrSpJz9FHOx9n/p5E+3tTvrw80p0qpX788cHGQURE6YVJFVGSGz1a2lmzgo2DEsOtp+rWW4Fly4D+/e3b3QpSqOThjz/iGx8RERGFY1JFlORWrpR29uxg46DE6NED+PFHay6dct11zu+/805pFy2yb1e/Nz/8YN9+5JHA9Onh57n8cuD114GOHeX6RERE5F9WyM+quhlk27ZtyMvLw9atW5Gbmxt0OESHeyLy84HNmwMNhQK0bx+wejVQrBhQt661vXFjmQ8F2If8DRhgLf7r5//yeXlWxcB0/lchNxfYvp3/PRERkT9+cwMWqiAiSgETJwINGoSvr3TccdI+/XTiY0pF27dLm+nrdRERUXwxqSJK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smWB+fOBVq0CC4uIiCgMC1UQEVFSys+XtanUY9Ei4LHHgNmzYz/nX39JO2lSXEIkIiICwKSKiIhSRDzWqfr9d2lHjSp8PERERAqTKiIiSglqLlVhkioiIqKiwKSKiIhSgkqq9PLqREREyYBJFRERpYR4DP8rUyY+sRAREelSKqn6/vvv0adPH9SsWRNZWVkYO3asbX8oFMJ9992HGjVqoHTp0ujRowf+/PPPYIIlIqK4isfwvxdflPbUUwsfDxERkZJSSdXOnTvRunVrjBgxwnH/448/jueeew4vvfQSfv75Z5QtWxa9evXCnj17EhwpERHFG+dUERFRskqpdapOPfVUnOry58VQKIThw4fjnnvuwRlnnAEAeOutt1CtWjWMHTsW559/fiJDJSKiOPu//wNuuQVo3DjoSIiIiOxSKqnysmTJEqxduxY9evQ4vC0vLw/HHXccpk6d6ppU7d27F3v37j38etu2bUUeKxERRa9ly8KfY/RoaZs0Kfy5iIiIlJQa/udl7dq1AIBq1arZtlerVu3wPiePPPII8vLyDj/q1KlTpHESEVFwVLGL1q2DjYOIiNJL2iRVsbrzzjuxdevWw48VK1YEHRIRETn46ivgueeAuXODjoSIiMgubZKq6tWrAwAKCgps2wsKCg7vc1KyZEnk5ubaHkRElHz++1/gxhuBH36I/RzLl0v700/xiYmIiAhIo6SqQYMGqF69OiZMmHB427Zt2/Dzzz+jQ4cOAUZGRETxoKr/vf02cNll1mPBAv/nmDdP2tdei398RESUuVKqUMWOHTuwePHiw6+XLFmCOXPmoGLFiqhbty5uuukm/Pvf/0bjxo3RoEED3HvvvahZsybOPPPM4IImIqK4qFRJ2p9/locyYADQrFkwMREREQEpllTNnDkT3bp1O/x66NChAIABAwbgjTfewG233YadO3fi6quvxpYtW3DiiSfi66+/RqlSpYIKmYiI4mTYMKB5c8BcerBhw2DiISIiUrJCIS6jqNu2bRvy8vKwdetWzq8iIkoz2dnAoUPynP/6ERFRJH5zg7SZU0VERJmnoACoV08efrzxhrQ9exZZSERElIFSavgfERGRLivLqugXClnFLIiIiBKJPVVERJSyimt/Gjx4MLg4iIgoszGpIiKilFWihPV8//7I7x89WtrGjYsmHiIiykxMqoiIKGVFm1Sp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4DCpIiIiikL58rIQ8L59QPfu1vZffwU2bJAKgURElFmYVBEREUWhWDHg+efDtw8ZAnz3HVCxYsJDIiKigDGpIiIiioNnngk6AiIiCgqn0hIRERERERUCkyoiIiIiIqJCYFJFREQUBzfeCDRqBLz9dtCREBFRojGpIiIiioO1a4G//gK2bLFv37MH+PPPQEIiIqIEYVJFREQUB1lZ0oZC9u3HHgs0aQJMnJj4mIiIKDGYVBEREcWBW1Kltps9WERElD6YVBEREcVBsX/+RT10yL69VClpS5RIbDxERJQ4TKqIiIjiwK2nSiVZxfgvLhFR2uL/4omIiOLALamaOVPaWbMSGw8RESUOkyoiIqI4qFEDaNwYyM933r98eULDISKiBCoedABERETp4PHH5UFERJmHPVVERERERESFwKSKiIioCFWpIm27dsHGQURERYdJFRERURw8+CDQujXw6qv27UcdJW1ubuJjIiKixGBSRUREFAcrVwJz5wIFBfbtblUBiYgofTCpIiIiigO35Gn8eGlXrEhsPERElDhMqoiIiOLALaninCoiovTHpIqIiCgOiv3zL6qZVOXlSVumTGLjISKixGFSRUREFAeqp+rQIft29VrtJyKi9JOWSdWIESNQv359lCpVCscddxymT58edEhERJTm3Ib//f23tD//nNh4iIgocdIuqRo9ejSGDh2K+++/H7Nnz0br1q3Rq1cvrFu3LujQiIgojVWoANSqBZQv77x/4cLExkNERImTFQqlV5HX4447Du3bt8cLL7wAADh06BDq1KmD66+/HnfccUfE47dt24a8vDxs3boVuVxUhIiICkn1YF17LTByZLCxEBFRdPzmBmnVU7Vv3z7MmjULPXr0OLytWLFi6NGjB6ZOnep4zN69e7Ft2zbbg4iIiIiIyK+0Sqo2bNiAgwcPolq1arbt1apVw9q1ax2PeeSRR5CXl3f4UadOnUSESkREGUKVVG/UKNg4iIio6KRVUhWLO++8E1u3bj38WMHVGYmIKAbPPw906ACMGGHffsIJ0pYrl/iYiIgoMYoHHUA8Va5cGdnZ2SgoKLBtLygoQPXq1R2PKVmyJEqWLJmI8IiIKI0tWwZMmwZ06mTf7lYVkIiI0kda9VTl5OSgbdu2mDBhwuFthw4dwoQJE9ChQ4cAIyMionTnljyNHSvtxo0JDYeIiBIorXqqAGDo0KEYMGAA2rVrh2OPPRbDhw/Hzp07cdlllwUdGhERpbFIPVLduycuFiIiSqy0S6r69euH9evX47777sPatWvRpk0bfP3112HFK4iIiOKp2D9jPw4dsm+vUAHYvBnIz094SERElCBpl1QBwODBgzF48OCgwyAiogzi1lOlXqv9RESUftJqThUREVFQVNJk9lRt2SLtlCkJDYeIiBKISRUREVEclC4tQ/xKl3be/8svCQ2HiIgSKC2H/xERESXavffKww2H/xERpS/2VBERERERERUCkyoiIqIiVLGitFWqBBsHEREVHSZVREREcfDOO0CPHsDw4fbtp50mbalSCQ+JiIgShHOqiIiI4mDJEmDCBGDrVmDHDmv7O+9I67YoMBERpT4mVURERHFQtqy0M2fKw8SkiogofTGpIiIiioP+/YGCAmtdKmXNGuCRR4Bq1QIJi4iIEoBJFRERURxUrgw89ljQURARURBYqIKIiIiIiKgQ2FNFRERUhD77DJg1CzjpJKBz56CjISKiosCkioiIqAh9+inwn/8AxYszqSIiSlcc/kdERFSEsrKkZfU/IqL0xaSKiIioCBX7519aJlVEROmLSRUREVERYk8VEVH6Y1JFRERUhJhUERGlPyZVRERERYhJFRFR+mNSRUREVISYVBERpT+WVCciIipCt9wC9O8P1KwZdCRERFRUmFQREREVofr15fHnn0CTJvZ9p50GDB8eQFBERejAAWDXLiA7GyhbNuhoiBKDw/+IiIgSYN8+Saz0x7PPAnv2BB0ZUXx9/jmQlwf07Bl0JESJw54qIiKiBKhfH/jhB3l+4ADQrZs8370bKFUqsLCIigznEVImYVJFRESUAGXLAieeKM9DIVkU+NAhSaoqVAg2NqJ4+u03aadODTYOokRiUkVERJRgWVlA167Wc6J0smhR0BEQJR6TKiIiogBMmBB0BEREFC9MqoiIiALUoQOwfbv1ukQJ4N57gb59g4uJiIiiw6SKiIgoQH/8AWzdat82ciSTKiKiVMKkioiIKECffSbVAAHg+++BBx4A9u4NNCSiQqlRI+gIiBKPSRUREVGAOnWynu/YIe2+fcHEQhQPbdpI2717oGEQJRSTKiIioiTRvj3w6adA5cpBR0IUO65PRZmISRUREVGSqF4d6NMn6CiICue004Bff5W12YgyRbGgAyAiIiKi9DF9OtC6NXDOOUFHQpQ47KkiIiJKEps2AZ9/LmXVL7gg6GiICofDACmTMKkiIiJKEitWAAMGyDBAJlWUqubOlfbXX4ONgyiRmFQREREliZwcaQsKwstS//orULVq4mMiipZKqogyCZMqIiKiJFGnDpCfD2zZAqxda9936FAQERERkR9MqoiIiJJEuXLAkiXAsmXh+/LygNWrw7dXrmz1cBERUTCYVBERESWR/Hx5mH77DTjyyPDttWoBCxeyfDURUZBYUp2IiChFZGfbHwCwahWwdGmgYRHZVKoUdAREicekioiIKAW0agUcOGB/1Kkj+3btCjY2Il2rVtKefnqwcRAlEof/ERERpagnnwT27QMaNAg6EiKLWp8qKyvYOIgSiUkVERFRijrvvKAjIAp3xhnAUUc5zw0kSldMqoiIiFLYxInA2LH2bVlZQN++QJcugYREGW7RIuCkk4DGjaXAClEmYFJFRESUwn75BXj++fDto0bJWleqoAVRooRCMix1376gIyFKHCZVREREKez444F77rFe798PPPYYsGEDsGkTUKVKcLFRZpo7V9o//ww2DqJEYlJFRESUwjp2lIfu/feBYsWkQiBRok2bFnQERInHpIqIiCjN/P130BFQJlPV/4gyCdepIiIiIiIiKgQmVURERERERIXA4X9ERERp5qKLpPpf1arAscda27OzgUGDgJNPDi42Sn+5uUFHQJR4TKqIiIjSzIYN0q5bB3z+uX3fxo1MqqhoNWsmLRenpkzCpIqIiCjNvPkm8PXXwKFD1ralS4Hly4F//Sv8/WvWANWqScVAosJShSqysoKNgyiRmFQRERGlmerVgUsv9ffezz8H+vQBLr4YePvtIg2LMkTfvsCRR8rwU6JMwb9JERERZbAHH5T2nXeCjYPSx4YNwNlnA/36BR0JUeKwp4qIiCgDbN8OzJolxSo6dbK2lykTXEyUng4eBDZv5u8WZRb2VBEREWWAv/4CunUDzj/fvr1XL2kvvzzxMVF6mjtX2lWrgo2DKJGYVBEREWWAnBxp9+2zb9+zR9pSpRIbD6WviRODjoAo8ZhUERERZYBISVXp0omNh4gonTCpIiIiygAqqdqxQyoDquF+JUpI+8ILgYRFRJQWmFQRERFlgPx8SaAOHZJ1rN56S7Z37SptkyZBRUZElPpY/Y+IiCgD5ObKgsCz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BBypIiIiIiIiMgGTKiIiIiIiIhMwqSIiIiIiIjIBkyoiIiIiIiITMKlqptatW4fOnTujXbt2GDx4MI4dO2buLrUZixcvhkajUS09evQwbr916xYiIyPRsWNH2Nvb429/+xsuXryoaiM3Nxfjxo2Dra0t3NzcMH/+fJSWljb1rrQqiYmJmDBhAry8vKDRaLBz507VdhHBm2++CU9PT7Rv3x6hoaE4c+aMqs61a9cQHh4OnU4HJycnPPvssygpKVHVSU1NRXBwMNq1awdvb2+sXr26sXetVblXnKZOnVrt+zV69GhVHcapca1cuRKDBg2Cg4MD3NzcMGnSJGRlZanqNNTvXEJCAvr37w+tVovu3btj48aNjb17rUZ94jR8+PBq36eZM2eq6jBOjefjjz9Gnz59jDfv1ev12Lt3r3E7v0dtjFCzs23bNrGxsZHPP/9cTp8+LdOnTxcnJye5ePGiubvWJkRHR0vv3r0lLy/PuFy+fNm4febMmeLt7S379++XEydOyMMPPyxDhgwxbi8tLZWAgAAJDQ2VkydPyp49e8TFxUUWLVpkjt1pNfbs2SOvvfaa7NixQwBIbGysantMTIw4OjrKzp075dSpU/LYY49Jly5d5ObNm8Y6o0ePlqCgIDly5Ih8//330r17d5k8ebJxe2Fhobi7u0t4eLikp6fL1q1bpX379vLPf/6zqXazxbtXnCIiImT06NGq79e1a9dUdRinxhUWFiYbNmyQ9PR0SUlJkbFjx4qPj4+UlJQY6zTE79y5c+fE1tZWXn75Zfnpp59k7dq1YmlpKXFxcU26vy1VfeIUEhIi06dPV32fCgsLjdsZp8a1e/du+fe//y0///yzZGVlyauvvirW1taSnp4uIvwetTVMqpqhhx56SCIjI43Py8rKxMvLS1auXGnGXrUd0dHREhQUVOO2goICsba2lu3btxvLMjIyBIAkJSWJiPJHpYWFheTn5xvrfPzxx6LT6eT27duN2ve2ouof6+Xl5eLh4SFvv/22saygoEC0Wq1s3bpVRER++uknASDHjx831tm7d69oNBr5/fffRUTko48+EmdnZ1WcFixYIP7+/o28R61TbUnVxIkTa30N49T0Ll26JADk4MGDItJwv3OvvPKK9O7dW/VeTz75pISFhTX2LrVKVeMkoiRVL730Uq2vYZyanrOzs6xfv57fozaIp/81M3fu3EFycjJCQ0ONZRYWFggNDUVSUpIZe9a2nDlzBl5eXujatSvCw8ORm5sLAEhOTsbdu3dV8enRowd8fHyM8UlKSkJgYCDc3d2NdcLCwlBUVITTp0837Y60ETk5OcjPz1fFxdHREYMHD1bFxcnJCQMHDjTWCQ0NhYWFBY4ePWqsM2zYMNjY2BjrhIWFISsrC9evX2+ivWn9EhIS4ObmBn9/f8yaNQtXr141bmOcml5hYSEAoEOHDgAa7ncuKSlJ1YahDv8t+3Oqxslgy5YtcHFxQUBAABYtWoQbN24YtzFOTaesrAzbtm3DH3/8Ab1ez+9RG2Rl7g6Q2pUrV1BWVqb6ggGAu7s7MjMzzdSrtmXw4MHYuHEj/P39kZeXhyVLliA4OBjp6enIz8+HjY0NnJycVK9xd3dHfn4+ACA/P7/G+Bm2UcMzHNeajnvluLi5uam2W1lZoUOHDqo6Xbp0qdaGYZuzs3Oj9L8tGT16NP7617+iS5cuyM7OxquvvooxY8YgKSkJlpaWjFMTKy8vx9y5czF06FAEBAQAQIP9ztVWp6ioCDdv3kT79u0bY5dapZriBABPP/00fH194eXlhdTUVCxYsABZWVnYsWMHAMapKaSlpUGv1+PWrVuwt7dHbGwsevXqhZSUFH6P2hgmVURVjBkzxrjep08fDB48GL6+vvjqq6/440Vkoqeeesq4HhgYiD59+qBbt25ISEjAyJEjzdiztikyMhLp6ek4dOiQubtCdagtTjNmzDCuBwYGwtPTEyNHjkR2dja6devW1N1sk/z9/ZGSkoLCwkJ8/fXXiIiIwMGDB83dLTIDnv7XzLi4uMDS0rLa7DAXL16Eh4eHmXrVtjk5OeHBBx/E2bNn4eHhgTt37qCgoEBVp3J8PDw8aoyfYRs1PMNxret74+HhgUuXLqm2l5aW4tq1a4ydGXXt2hUuLi44e/YsAMapKc2ePRvffvst4uPj0alTJ2N5Q/3O1VZHp9PxP6juQ21xqsngwYMBQPV9Ypwal42NDbp3744BAwZg5cqVCAoKwgcffMDvURvEpKqZsbGxwYABA7B//35jWXl5Ofbv3w+9Xm/GnrVdJSUlyM7OhqenJwYMGABra2tVfLKyspCbm2uMj16vR1pamuoPw3379kGn06FXr15N3v+2oEuXLvDw8FDFpaioCEePHlXFpaCgAMnJycY6Bw4cQHl5ufEPEb1ej8TERNy9e9dYZ9++ffD39+cpZY3kt99+w9WrV+Hp6QmAcWoKIoLZs2cjNjYWBw4cqHYqZUP9zun1elUbhjr8t6x+7hWnmqSkpACA6vvEODWt8vJy3L59m9+jtsjcM2VQddu2bROtVisbN26Un376SWbMmCFOTk6q2WGo8URFRUlCQoLk5OTI4cOHJTQ0VFxcXOTSpUsiokyR6uPjIwcOHJATJ06IXq8XvV5vfL1hitRRo0ZJSkqKxMXFiaurK6dUN1FxcbGcPHlSTp48KQBkzZo1cvLkSfn1119FRJlS3cnJSXbt2iWpqakyceLEGqdU79evnxw9elQOHTokfn5+qqm6CwoKxN3dXaZMmSLp6emybds2sbW15VTd96GuOBUXF8u8efMkKSlJcnJy5L///a/0799f/Pz85NatW8Y2GKfGNWvWLHF0dJSEhATVVNw3btww1mmI3znDVNDz58+XjIwMWbduHaeCvg/3itPZs2dl6dKlcuLECcnJyZFdu3ZJ165dZdiwYcY2GKfGtXDhQjl48KDk5ORIamqqLFy4UDQajfznP/8REX6P2homVc3U2rVrxcfHR2xsbOShhx6SI0eOmLtLbcaTTz4pnp6eYmNjIw888IA8+eSTcvbsWeP2mzdvygsvvCDOzs5ia2srjz/+uOTl5ana+OWXX2TMmDHSvn17cXFxkaioKLl7925T70qrEh8fLwCqLRERESKiTKv+xhtviLu7u2i1Whk5cqRkZWWp2rh69apMnjxZ7O3tRafTyTPPPCPFxcWqOqdOnZJHHnlEtFqtPPDAAxITE9NUu9gq1BWnGzduyKhRo8TV1VWsra3F19dXpk+fXu0/jBinxlVTfADIhg0bjHUa6ncuPj5e+vbtKzY2NtK1a1fVe1Dd7hWn3NxcGTZsmHTo0EG0Wq10795d5s+fr7pPlQjj1JimTZsmvr6+YmNjI66urjJy5EhjQiXC71FboxERabpxMSIiIiIiotaF11QRERERERGZgEkVERERERGRCZhUERERERERmYBJFRERERERkQmYVBEREREREZmASRUREREREZEJmFQRERERERGZgEkVERERERGRCZhUERG1Ab/88gs0Gg1SUlLM3RWjzMxMPPzww2jXrh369u1bYx0RwYwZM9ChQwez9785HsM/KyEhARqNBgUF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QxEdHY3U1NQ/u1tERA2CSRURURMbNmwYwsLCsGjRomrbLCwsVKd1AcqpXFVVTQY0Gk2NZeXl5fXuV0lJCSZMmICUlBTVcubMGQwbNsxYz87Ort5tNgZTjpHheLRv377xOngf/aiqpKQEAPDpp5+qYpCeno4jR44Y64WHh+Prr7/G3bt38cUXXyAwMNCYVP/xxx8ICwuDTqfDli1bcPz4ccTGxgKofWKR+hzTiIgIpKSk4IMPPsAPP/yAlJQUdOzY0aTJSupS+bgZElfDcXvuuedw7tw5TJkyBWlpaRg4cCDWrl3bKP0gIqoPJlVERGYQExODb775RnXxPaCMQuTn56v+wG3I+yJV/sO8tLQUycnJ6NmzJwCgf//+OH36NDp37ozu3burlvtJpHQ6Hby8vHD48GFV+eHDh9GrVy+T98HV1RV5eXnG50VFRcjJybmvNvr06YPvv/++xmQMAGxsbFBWVlZnGz179kRSUpIqVocPH4aDgwM6dep0X/0xcHd3h5eXF86dO1ctBl26dDHWmzhxIm7duoW4uDh88cUXqlGqzMxMXL16FTExMQgODkaPHj3qnKQCqN/n7vDhw5gzZw7Gjh2L3r17Q6vVqiYxAZREqK7j1pCfDW9vb8ycORM7duxAVFQUPv300/t6PRFRQ2JSRURkBoGBgQgPD8eHH36oKh8+fDguX76M1atXIzs7G+vWrcPevXsb7H3XrVuH2NhYZGZmIjIyEtevX8e0adMAKBf/X7t2DZMnT8bx48eRnZ2N7777Ds8888w9E4yq5s+fj1WrVuHLL79EVlYWFi5ciJSUFLz00ksm78OIESOwefNmfP/990hLS0NERAQsLS3vq43Zs2ejqKgITz31FE6cOIEzZ85g8+bNyMrKAqDMZJeamoqsrCxcuXKlxuTrhRdewPnz5/Hiiy8iMzMTu3btQnR0NF5++WXVqZn3a8mSJVi5ciU+/PBD/Pzzz0hLS8OGDRuwZs0aYx07OztMmjQJb7zxBjIyMjB58mTjNh8fH9jY2GDt2rU4d+4cdu/ejWXLltX5nvX53Pn5+WHz5s3IyMjA0aNHER4eXm3Er3Pnzti/fz/y8/NrvXVAQ3w25s6di++++w45OTn48ccfER8fb/zPASIic2BSRURkJkuXLq12GljPnj3x0UcfYd26dQgKCsKxY8dqnBnvz4qJiUFMTAyCgoJw6NAh7N69Gy4uLgBgHEEoKyvDqFGjEBgYiLlz58LJyem+k4Q5c+bg5ZdfRlRUFAIDAxEXF4fdu3fDz8/P5H1YtGgRQkJCMH78eIwbNw6TJk1Ct27d7quNjh074sCBAygpKUFISAgGDBiATz/91HjK2fTp0+Hv74+BAwfC1dW12sgKADzwwAPYs2cPjh07hqCgIMycORPPPvssXn/9dZP277nnnsP69euxYcMGBAYGIiQkBBs3blSNVAHKKYCnTp1CcHAwfHx8jOWurq7YuHEjtm/fjl69eiEmJgbvvPNOne9Zn8/dZ599huvXr6N///6YMmUK5syZAzc3N1Wdd999F/v27YO3tzf69etX43s1xGejrKwMkZGR6NmzJ0aPHo0HH3xQNe08EVFT00jVk6iJiIiIiIio3jhSRUREREREZAImVURERERERCZgUkVERERERGQCJlVEREREREQmYFJFRERERERkAiZVREREREREJmBSRUREREREZAImVURERERERCZgUkVERERERGQCJlVEREREREQmYFJFRERERERkgv8D6LGRswhztl0AAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ], + "source": [ + "results = q.result\n", + "results.plot_cost()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "c31683a8", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "c31683a8", + "outputId": "f14f693c-cd8e-46ca-d4c8-d22245806a0d" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{'solutions_bitstrings': ['010000110'], 'bitstring_energy': -23.0}\n" + ] + } + ], + "source": [ + "print(results.most_probable_states)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "cd2b62b0", + "metadata": { + "id": "cd2b62b0" + }, + "outputs": [], + "source": [ + "solution = results.most_probable_states[\"solutions_bitstrings\"][0]\n", + "solution_pairs = []\n", + "for i in range(n_variables):\n", + " if solution[i] == \"1\":\n", + " solution_pairs.append(couples[i])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "71fd3072", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "71fd3072", + "outputId": "3581192a-8233-464b-ac1b-51e92cceae67" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0, 1], [2, 3], [3, 2]]\n" + ] + } + ], + "source": [ + "print(solution_pairs)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + }, + "colab": { + "provenance": [] + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/Quantum Computing.pdf b/Quantum Computing.pdf new file mode 100644 index 0000000..2f58c41 Binary files /dev/null and b/Quantum Computing.pdf differ diff --git a/challenges/openqaoa challenge/Quattro b/challenges/openqaoa challenge/Quattro new file mode 100644 index 0000000..1c50726 --- /dev/null +++ b/challenges/openqaoa challenge/Quattro @@ -0,0 +1 @@ +E