Taichi-Q: A quantum circuit simulator for both CPU and GPU
Project description
Taichi-Q
Quantum Computation Simulator Engine Based on Taichi (available for both GPU and CPU)
This is a Hackathon Project, Project Introduction available here
Intallation (only support windows right now)
- From PyPI
pip install taichi-q
pip3 install taichi-q
Usage
Import the Packages
# Required
from taichi_q import Engine, Gate
# Optional
import numpy as np
import taichi as ti
Setup Simulator Engine
Warning!! Simulator Engine could only be initialized once.
For CPU
eng=Engine(num_qubits=3,state_init=0,device='cpu')
For GPU
eng=Engine(num_qubits=3,state_init=0,device='gpu')
Initialize Qubits
- All $|0\rangle$ or $|1\rangle$
eng=Engine(num_qubits=3, state_init=0, device='cpu')
eng=Engine(num_qubits=3, state_init=1, device='cpu')
- Choose $|0\rangle$ or $|1\rangle$ of each qubit with list/tuple/ndarray
eng=Engine(num_qubits=3, state_init=[0,1,0], device='gpu')
eng=Engine(num_qubits=3, state_init=(0,1,0), device='gpu')
eng=Engine(num_qubits=3, state_init=np.array([0,1,0]), device='gpu')
- Set complex qubit state with np.array(dtype=complex)
eng = Engine(
num_qubits=3,
state_init=[[-1/np.sqrt(2), j/np.sqrt(2)], [1, 0], [0, 1]],
device='cpu')
Quantum Gate Operators
Quantum Gates could be found in taichi_q.gates
. Support $H(), X(), Y(), Z(), S(), T(), swap()$
$U(\theta, \phi, \lambda), R_x(\theta), R_y(\theta), R_z(\theta)$
$QFT(n), iQFT(n)$, and all controlled gates.
- Apply single-qubit gate to target qubit (e.g. H)
eng.Ops(Gate.H(), [0])
- Apply muti-qubit gate to target qubits (e.g. swap)
eng.Ops(Gate.swap(), [0,1])
- Apply controlled-qubit gate to target qubits (e.g. CNOT=CX)
eng.Ops(Gate.X(), [0], [1])
- If you want to print Operated Gate, Tgt and Ctl on the terminal
eng.Ops(Gate.QFT(4), [0,1,2,3], [4], print_output=True)
# Output:
# OPS: QFT Tgt: [0,1,2,3] Ctl [4]
Measure the result of a qubit
Notice! Measure is an irreversible process. State of the measured qubit would collapsed into $|0\rangle$ or $|1\rangle$
q0_result=eng.Measure(0)
Check the state of all qubits without measuring any qubit
Notice! This is a cheating method from simulator. It's not available for real quantum computer.
Check the state of all qubits is useful for quantum computation algorithm design and debug.
- Print all qubit states
eng.State_Check(print_state=True)
# Output:
# Q: (0, 0, 0) State:[+0.0000+0.0000j] P:0.0000
# Q: (0, 0, 1) State:[+0.0000+0.0000j] P:0.0000
# Q: (0, 1, 0) State:[+0.0000+0.0000j] P:0.0000
# Q: (0, 1, 1) State:[+0.0000+0.0000j] P:0.0000
# Q: (1, 0, 0) State:[+0.0000+0.0000j] P:0.0000
# Q: (1, 0, 1) State:[+0.0000+0.0000j] P:0.0000
# Q: (1, 1, 0) State:[-0.4472+0.0000j] P:0.2000
# Q: (1, 1, 1) State:[+0.0000+0.8944j] P:0.8000
- Display Box-plot of qubit state probability
eng.State_Check(plot_state=True)
Print Quantum Circuit
Quantum Gates and its order are recorded by the engine, and could be displayed on the terminal.
eng.circuit_print()
# Output:
# Q0 →|' ' ' ' '■' 'H' 'M' ' ' ' ' '■'|→ Q0
# Q1 →|'H' '■' 'X' ' ' ' ' 'M' '■' ' '|→ Q1
# Q2 →|' ' 'X' ' ' ' ' ' ' ' ' 'X' 'Z'|→ Q2
Visualize Quantum Circuit (with ti.GUI)
The circuit visualization provides a more elegant approach for circuit visualization, based on ti.GUI.
eng.circuit_visualize()
Examples
Development
Welcome any contribution!
License
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 taichi_q-0.0.10-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2595e2e314cb155b61c949df768f46abfd60a3191e836d23afcdc1c367075ec7 |
|
MD5 | 9f11bc1141df631de4812f7088ada3b3 |
|
BLAKE2b-256 | 8bc118a1211a06aead12234fe60f574e27de58c939edb1366446d206ed15aeba |