Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
819 changes: 819 additions & 0 deletions .ipynb_checkpoints/IonQ Challenge-checkpoint.ipynb

Large diffs are not rendered by default.

File renamed without changes.
File renamed without changes.
819 changes: 819 additions & 0 deletions IonQ Challenge.ipynb

Large diffs are not rendered by default.

79 changes: 79 additions & 0 deletions IonQ Challenge/mock_data_creator.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "edbfcaa1",
"metadata": {},
"outputs": [],
"source": [
"import cirq\n",
"import numpy as np\n",
"import pickle\n",
"import json"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3d1a8015",
"metadata": {},
"outputs": [],
"source": [
"#making mock data data1.json and data2.json\n",
"\n",
"image1={\"image\":[[0,0],[0,0]],\"category\":1}\n",
"image2={\"image\":[[1,1],[1,1]],\"category\":0}\n",
"\n",
"with open('data1.json', \"w\") as outfile:\n",
" json.dump(image1, outfile)\n",
" \n",
"with open('data2.json', \"w\") as outfile:\n",
" json.dump(image2, outfile)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "d36c16ef",
"metadata": {},
"outputs": [],
"source": [
"circuit=cirq.Circuit()\n",
"circuit.append(cirq.rx(np.pi).on(cirq.LineQubit(0)))\n",
"#making mock submission for part2\n",
"with open('part2.pickle', 'wb') as f:\n",
" pickle.dump(circuit,f)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "55574177",
"metadata": {},
"outputs": [],
"source": []
}
],
"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.10.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
File renamed without changes.
220 changes: 220 additions & 0 deletions IonQ Challenge/part1_example_qiskit.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import qiskit\n",
"from qiskit import quantum_info\n",
"from qiskit.execute_function import execute\n",
"from qiskit import BasicAer\n",
"import numpy as np\n",
"import pickle\n",
"import json\n",
"import os\n",
"from collections import Counter\n",
"from sklearn.metrics import mean_squared_error\n",
"from typing import Dict, List\n",
"import matplotlib.pyplot as plt\n",
"\n",
"#define utility functions\n",
"\n",
"def simulate(circuit: qiskit.QuantumCircuit) -> dict:\n",
" \"\"\"Simulate the circuit, give the state vector as the result.\"\"\"\n",
" backend = BasicAer.get_backend('statevector_simulator')\n",
" job = execute(circuit, backend)\n",
" result = job.result()\n",
" state_vector = result.get_statevector()\n",
" \n",
" histogram = dict()\n",
" for i in range(len(state_vector)):\n",
" population = abs(state_vector[i]) ** 2\n",
" if population > 1e-9:\n",
" histogram[i] = population\n",
" \n",
" return histogram\n",
"\n",
"\n",
"def histogram_to_category(histogram):\n",
" \"\"\"This function take a histogram representations of circuit execution results, and process into labels as described in \n",
" the problem description.\"\"\"\n",
" assert abs(sum(histogram.values())-1)<1e-8\n",
" positive=0\n",
" for key in histogram.keys():\n",
" digits = bin(int(key))[2:].zfill(20)\n",
" if digits[-1]=='0':\n",
" positive+=histogram[key]\n",
" \n",
" return positive\n",
"\n",
"\n",
"def count_gates(circuit: qiskit.QuantumCircuit) -> Dict[int, int]:\n",
" \"\"\"Returns the number of gate operations with each number of qubits.\"\"\"\n",
" counter = Counter([len(gate[1]) for gate in circuit.data])\n",
" #feel free to comment out the following two lines. But make sure you don't have k-qubit gates in your circuit\n",
" #for k>2\n",
" for i in range(2,20):\n",
" assert counter[i]==0\n",
" \n",
" return counter\n",
"\n",
"\n",
"def image_mse(image1,image2):\n",
" # Using sklearns mean squared error:\n",
" # https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html\n",
" return mean_squared_error(255*image1,255*image2)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x126d3ebe0>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"data_path='mock_data'\n",
"#load the actual hackthon data (fashion-mnist)\n",
"images=np.load(data_path+'/images.npy')\n",
"labels=np.load(data_path+'/labels.npy')\n",
"#you can visualize it\n",
"import matplotlib.pyplot as plt\n",
"plt.imshow(images[1])"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"#submission to part 1, you should make this into a .py file\n",
"\n",
"n=len(images)\n",
"mse=0\n",
"gatecount=0\n",
"\n",
"# Functions 'encode' and 'decode' are dummy.\n",
"def encode(image):\n",
" q = qiskit.QuantumRegister(3)\n",
" circuit = qiskit.QuantumCircuit(q)\n",
" if image[0][0]==0:\n",
" circuit.rx(np.pi,0)\n",
" return circuit\n",
"\n",
"def decode(histogram):\n",
" if 1 in histogram.keys():\n",
" image=[[0,0],[0,0]]\n",
" else:\n",
" image=[[1,1],[1,1]]\n",
" return image\n",
"\n",
"def run_part1(image):\n",
" #encode image into a circuit\n",
" circuit=encode(image)\n",
"\n",
" #simulate circuit\n",
" histogram=simulate(circuit)\n",
"\n",
" #reconstruct the image\n",
" image_re=decode(histogram)\n",
"\n",
" return circuit,image_re"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.0\n"
]
}
],
"source": [
"#how we grade your submission\n",
"\n",
"n=len(images)\n",
"mse=0\n",
"gatecount=0\n",
"\n",
"for data in images:\n",
" #encode image into circuit\n",
" circuit,image_re=run_part1(data['image'])\n",
" \n",
" #count the number of 2qubit gates used\n",
" gatecount+=count_gates(circuit)[2]\n",
" \n",
" #calculate mse\n",
" mse+=image_mse(data['image'],image_re)\n",
" \n",
"#fidelity of reconstruction\n",
"f=1-mse/n\n",
"gatecount=gatecount/n\n",
"\n",
"#score for part1 \n",
"print(f*(0.999**gatecount))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.10.6"
},
"vscode": {
"interpreter": {
"hash": "397704579725e15f5c7cb49fe5f0341eb7531c82d19f2c29d197e8b64ab5776b"
}
}
},
"nbformat": 4,
"nbformat_minor": 4
}
File renamed without changes.
Loading