From 1106bc3d4223605bc7db62a24d05c329d5e99ed5 Mon Sep 17 00:00:00 2001 From: Kristina Kirova Date: Sat, 1 Feb 2020 20:45:05 +0000 Subject: [PATCH] experiments with qiskit --- .gitignore | 3 +- 07_project_qiskit.py | 69 ++++++++++++++++++++++---------------- 07_project_qiskit_phase.py | 34 +++++++++---------- requirements.txt | 36 ++++++++++++++++++++ 4 files changed, 93 insertions(+), 49 deletions(-) diff --git a/.gitignore b/.gitignore index 685450e..078b1a9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ venv .idea -__pycache__ \ No newline at end of file +__pycache__ +*.png diff --git a/07_project_qiskit.py b/07_project_qiskit.py index 98081f1..5578f41 100644 --- a/07_project_qiskit.py +++ b/07_project_qiskit.py @@ -7,75 +7,86 @@ Created on Fri Jan 31 13:37:47 2020 """ import numpy as np -from qiskit import( - QuantumCircuit, - execute, - Aer) -from qiskit.visualization import plot_histogram +from qiskit import ( + QuantumCircuit, + execute, + Aer) +from qiskit.visualization import plot_histogram, plot_bloch_vector +from matplotlib import pyplot as plt from scipy.stats import unitary_group from collections import defaultdict - from qiskit.quantum_info.random.utils import random_state # Use Aer's qasm_simulator simulator = Aer.get_backend('qasm_simulator') +def create_bloch_vector(theta, phi): + x =np.sin(theta)*np.cos(phi) + y =np.sin(theta)*np.sin(phi) + z =np.cos(theta) + return [x,y,z] def perform_exp(iterations=100): simulator = Aer.get_backend('qasm_simulator') all_counts = defaultdict(int) - + for i in range(iterations): qc = QuantumCircuit(2, 2) # uniform distribution on the sphere t = round(np.random.uniform(0, 1), 10) - theta = np.arccos(1-2*t) - phi = round(np.random.uniform(0, 2*np.pi), 10) - + theta = np.arccos(1 - 2 * t) + phi = round(np.random.uniform(0, 2 * np.pi), 10) # 0_case, identical states - # qc.r(theta, phi, 0) - # qc.r(theta, phi, 1) + # qc.r(theta, phi, 0) + # qc.r(theta, phi, 1) # 1_case, orthogonal states on the same meridian - # qc.r(theta, phi, 0) - # qc.r(theta+np.pi, phi, 1) - + # qc.r(theta, phi, 0) + # qc.r(theta+np.pi, phi, 1) + # my_case, phase difference DOESNT WORK + phi1 = 2 * np.pi - phi qc.r(theta, phi, 0) - qc.r(theta, 2*np.pi - phi, 1) - + qc.r(theta, phi1, 1) + + # print(theta, phi, phi1) + + # q0 = create_bloch_vector(theta, phi) + # plot_bloch_vector(q0) + # plt.show() + # + # q1 = create_bloch_vector(theta, phi1) + # plot_bloch_vector(q1) + # plt.show() + + # Measure in the Bell's basis qc.cx(0, 1) qc.h(0) - # qc.measure_all() + # qc.measure_all() qc.measure([0, 1], [0, 1]) - # print(qc) - + # print(qc) job = execute(qc, simulator, shots=1) result = job.result() - #print(result) + # print(result) counts = result.get_counts(qc) - - # print(counts.keys()) - + + # print(counts.keys()) + for k, v in counts.items(): all_counts[k] += v - + print("\nTotal counts are:\n") for k, v in sorted(all_counts.items(), key=lambda x: x[0]): print("{}: {}".format(k, v)) - - - - if __name__ == "__main__": perform_exp() diff --git a/07_project_qiskit_phase.py b/07_project_qiskit_phase.py index f40e5cd..76ec2a5 100644 --- a/07_project_qiskit_phase.py +++ b/07_project_qiskit_phase.py @@ -7,25 +7,26 @@ Created on Fri Jan 31 13:37:47 2020 """ import numpy as np -from qiskit import( - QuantumCircuit, - execute, - Aer) +from qiskit import ( + QuantumCircuit, + execute, + Aer) from qiskit.visualization import plot_histogram from scipy.stats import unitary_group from collections import defaultdict + def perform_exp(iterations=1000): simulator = Aer.get_backend('qasm_simulator') all_counts = defaultdict(int) - + for i in range(iterations): qc = QuantumCircuit(2, 2) t = round(np.random.uniform(0, 1), 10) - phi = round(np.random.uniform(0, 2*np.pi), 10) - theta = np.arccos(1-2*t) + phi = round(np.random.uniform(0, 2 * np.pi), 10) + theta = np.arccos(1 - 2 * t) qc.r(theta, phi, 0) qc.r(theta, -phi, 1) @@ -33,30 +34,25 @@ def perform_exp(iterations=1000): # Measure in the Bell's basis qc.cx(0, 1) qc.h(0) - # qc.measure_all() + # qc.measure_all() qc.measure([0, 1], [0, 1]) - # print(qc) - + # print(qc) job = execute(qc, simulator, shots=1) result = job.result() - #print(result) + # print(result) counts = result.get_counts(qc) - - # print(counts.keys()) - + + # print(counts.keys()) + for k, v in counts.items(): all_counts[k] += v - + print("\nTotal counts are:\n") for k, v in sorted(all_counts.items(), key=lambda x: x[0]): print("{}: {}".format(k, v)) - - - - if __name__ == "__main__": perform_exp() diff --git a/requirements.txt b/requirements.txt index f5144c5..c014b97 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,41 +1,75 @@ +attrs==19.3.0 backcall==0.1.0 cachetools==3.1.1 certifi==2019.9.11 +cffi==1.13.2 chardet==3.0.4 cirq==0.7.0 +cryptography==2.8 +cvxopt==1.2.4 cycler==0.10.0 Cython==0.29.14 +dataclasses==0.7 decorator==4.4.0 +dill==0.3.1.1 +dlx==1.0.4 +docloud==1.0.375 +docplex==2.12.182 +fastdtw==0.3.4 google-api-python-client==1.7.11 google-auth==1.6.3 google-auth-httplib2==0.0.3 +h5py==2.10.0 httplib2==0.13.1 idna==2.8 +importlib-metadata==1.5.0 +inflection==0.3.1 ipython==7.8.0 ipython-genutils==0.2.0 jedi==0.15.1 +joblib==0.14.1 +jsonschema==3.2.0 kiwisolver==1.1.0 llvmlite==0.31.0 +marshmallow==3.3.0 +marshmallow-polyfield==5.8 matplotlib==3.1.2 +more-itertools==8.2.0 mpmath==1.1.0 +nest-asyncio==1.2.3 networkx==2.3 +ntlm-auth==1.4.0 numba==0.47.0 numpy==1.17.2 pandas==0.25.3 parso==0.5.1 pexpect==4.7.0 pickleshare==0.7.5 +ply==3.11 prompt-toolkit==2.0.9 protobuf==3.8.0 +psutil==5.6.7 ptyprocess==0.6.0 pyasn1==0.4.7 pyasn1-modules==0.2.6 +pycparser==2.19 Pygments==2.4.2 pyparsing==2.4.2 +pyrsistent==0.15.7 +pyscf==1.7.0 python-dateutil==2.8.0 pytz==2019.2 +qiskit==0.14.1 +qiskit-aer==0.3.4 +qiskit-aqua==0.6.2 +qiskit-ibmq-provider==0.4.5 +qiskit-ignis==0.2.0 +qiskit-terra==0.11.1 +Quandl==3.5.0 requests==2.22.0 +requests-ntlm==1.1.0 rsa==4.0 +scikit-learn==0.22.1 scipy==1.3.1 six==1.12.0 sortedcontainers==2.1.0 @@ -45,3 +79,5 @@ typing-extensions==3.7.4 uritemplate==3.0.0 urllib3==1.25.6 wcwidth==0.1.7 +websockets==7.0 +zipp==2.1.0