QiskitFlow. Reproducible quantum experiments.
Project description
QiskitFlow. Reproducible quantum experiments.
Platform for tracking, sharing and running quantum experiments in a clean and understandable for developers, researchers and students manner.
Alpha release is in the works. Files from hackathon project are located in hackathon folder
General overview
Hot to run
Flow
Flow of actions while using QiskitFlow is following:
- Install QiskitFlow if not installed yet
- Annotate your code with
Experiment
abstraction QiskitFlow library provides - Run your code as usual: QiskitFlow will write metadata of your experiment execution in local folder
- You can review experiments using CLI interface
We are tracking metrics, parameters, state vectors and counts of experiments. Artifacts, circuits, sourcecode and other useful things are on their way.
Note: qiskitflow creates
_experiments
folder in place of execution of code, where all serialized information is stored in json format, so it's easy to track it even in git
Installation
pip install qiskitflow
Code annotation
Library for quantum programs annotation
Sample example of annotation:
from qiskitflow import Experiment
with Experiment("awesome_experiment") as experiment:
# your quantum program here!
experiment.write_metric("test metric", 0.1)
experiment.write_metric("test metric 2", 2)
experiment.write_parameter("test parameter", "test parameter value")
experiment.write_parameter("test parameter 2", "test paraeter value 2")
experiment.write_counts("measurement", {"00": 1024, "11": 0})
Full example with quantum teleportation
import numpy as np
import time
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, execute, BasicAer, IBMQ
from qiskit.visualization import plot_histogram, plot_bloch_multivector
from qiskit.extensions import Initialize
from qiskit_textbook.tools import random_state, array_to_latex
from qiskitflow import Experiment
with Experiment("quantum teleportation") as experiment:
start_time = time.time()
# conduct experiment as usual
psi = random_state(1)
init_gate = Initialize(psi)
init_gate.label = "init"
inverse_init_gate = init_gate.gates_to_uncompute()
qr = QuantumRegister(3, name="q")
crz = ClassicalRegister(1, name="crz")
crx = ClassicalRegister(1, name="crx")
qc = QuantumCircuit(qr, crz, crx)
qc.append(init_gate, [0])
qc.barrier()
create_bell_pair(qc, 1, 2)
qc.barrier()
alice_gates(qc, 0, 1)
measure_and_send(qc, 0, 1)
bob_gates(qc, 2, crz, crx)
qc.append(inverse_init_gate, [2])
cr_result = ClassicalRegister(1)
qc.add_register(cr_result)
qc.measure(2,2)
backend_name = "qasm_simulator"
backend = BasicAer.get_backend(backend_name)
counts = execute(qc, backend, shots=1024).result().get_counts()
end_time = time.time()
runtime = end_time - start_time
# qiskitflow =========
# log parameters used
experiment.write_parameter("backend name", backend_name)
# log metrics of experiment
experiment.write_metric("runtime", runtime)
# log counts of experiment
experiment.write_counts("experiment counts", counts)
CLI
List of experiment runs
qiskitflow runs [--search=<SEARCH_BY_RUN_ID>] [--experiment=<EXPERIMENT_NAME>] [--order_by=<METRIC_TO_ORDER_BY>] [--order_type=<asc or desc>]
experiments list screenshot
Experiment run information
qiskitflow run <RUN_ID>
experiment information screenshots
Experiment information
Share experiment run
qiskitflow share <RUN_ID> --user=<USER> --password=<password> --host=<HOST> --port=<PORT>
Example for local backend server
qiskitflow share 86b6e7ba32f04d34b842a91079482454 --user=<USER> --password=<password> --host=http://localhost --port=8000
experiment share screenshots
Experiment information
Examples
Jupyter notebook with quantum teleportation example
Run local
- Install
docker compose
- Run
docker-compose up
UI
Screenshots
Experiment information
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for qiskitflow-0.0.10a0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8f6a6480486452b57c24f994c48f6292014db77d436d6641f3de2df1421f4aa5 |
|
MD5 | 2789a1b6954e8150160a212019b1031a |
|
BLAKE2b-256 | d2b134d4c77030706688095f5e32297f272607cbd9680a07c81d3800df991b00 |