A Quantum Computing SDK
https://github.com/Blueqat/Blueqat-tutorials
The back end has been changed to tensor network. The previous backend environment can still be used with .run(backend="numpy").
git clone https://github.com/Blueqat/Blueqat
cd Blueqat
pip3 install -e .
or
pip3 install blueqat
from blueqat import Circuit
import math
#number of qubit is not specified
c = Circuit()
#if you want to specified the number of qubit
c = Circuit(50) #50qubits
# write as chain
Circuit().h[0].x[0].z[0]
# write in separately
c = Circuit().h[0]
c.x[0].z[0]
Circuit().z[1:3] # Zgate on 1,2
Circuit().x[:3] # Xgate on (0, 1, 2)
Circuit().h[:] # Hgate on all qubits
Circuit().x[1, 2] # 1qubit gate with comma
Circuit().rz(math.pi / 4)[0]
from blueqat import Circuit
Circuit(50).h[:].run()
Circuit(100).x[:].run(shots=100)
# => Counter({'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111': 100})
Circuit(4).h[:].run(amplitude="0101")
from blueqat.pauli import Z
hamiltonian = 1*Z[0]+1*Z[1]
Circuit(4).x[:].run(hamiltonian=hamiltonian)
# => -2.0
Circuit().h[0].to_qasm()
#OPENQASM 2.0;
#include "qelib1.inc";
#qreg q[1];
#creg c[1];
#h q[0];
from blueqat.pauli import *
hamiltonian1 = (1.23 * Z[0] + 4.56 * X[1] * Z[2]) ** 2
hamiltonian2 = (2.46 * Y[0] + 5.55 * Z[1] * X[2] * X[1]) ** 2
hamiltonian = hamiltonian1 + hamiltonian2
print(hamiltonian)
# => 7.5645*I + 5.6088*Z[0]*X[1]*Z[2] + 5.6088*X[1]*Z[2]*Z[0] + 20.793599999999998*X[1]*Z[2]*X[1]*Z[2] + 13.652999999999999*Y[0]*Z[1]*X[2]*X[1] + 13.652999999999999*Z[1]*X[2]*X[1]*Y[0] + 30.8025*Z[1]*X[2]*X[1]*Z[1]*X[2]*X[1]
hamiltonian = hamiltonian.simplify()
print(hamiltonian)
#=>-2.4444000000000017*I + 27.305999999999997j*Y[0]*Y[1]*X[2] + 11.2176*Z[0]*X[1]*Z[2]
from blueqat.pauli import qubo_bit as q
hamiltonian = -3*q(0)-3*q(1)-3*q(2)-3*q(3)-3*q(4)+2*q(0)*q(1)+2*q(0)*q(2)+2*q(0)*q(3)+2*q(0)*q(4)
print(hamiltonian)
# => -5.5*I + 1.0*Z[1] + 1.0*Z[2] + 1.0*Z[3] + 1.0*Z[4] + 0.5*Z[0]*Z[1] + 0.5*Z[0]*Z[2] + 0.5*Z[0]*Z[3] - 0.5*Z[0] + 0.5*Z[0]*Z[4]
hamiltonian = [1.0*Z(0), 1.0*X[0]]
a = [term.get_time_evolution() for term in hamiltonian]
time_evolution = Circuit().h[0]
for evo in a:
evo(time_evolution, np.random.rand())
print(time_evolution)
# => Circuit(1).h[0].rz(-1.4543063361067243)[0].h[0].rz(-1.8400416676737137)[0].h[0]
from blueqat import Circuit
from blueqat.utils import qaoa
from blueqat.pauli import qubo_bit as q
from blueqat.pauli import X,Y,Z,I
hamiltonian = q(0)-q(1)
step = 1
result = qaoa(hamiltonian, step)
result.circuit.run(shots=100)
# => Counter({'01': 99, '11': 1})
from blueqat import vqe
from blueqat.pauli import *
from blueqat.pauli import qubo_bit as q
#hamiltonian = q(0)-3*q(1)+2*q(0)*q(1)+3*q(2)*q(3)+q(4)*q(7)
hamiltonian = Z[0]-3*Z[1]+2*Z[0]*Z[1]+3*Z[2]*Z[3]+Z[4]
step = 8
result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step)).run()
result.circuit.run(backend='draw')
from bqcloud import register_api
api = register_api("Your API Key")
from bqcloud import load_api
api = load_api()
from blueqat import Circuit
from bqcloud import Device
task = api.execute(Circuit().h[0].cx[0, 1], Device.IonQDevice, 10)
#task = api.execute(Circuit().h[0].cx[0, 1], Device.AspenM1, 10)
# Wait 10 sec. If complete, result is returned, otherwise, None is returned.
result = task.wait(timeout=10)
if result:
print(result.shots())
else:
print("timeout")
from blueqat import photonqat as pq
import numpy as np
import matplotlib.pyplot as plt
# mode number = 2, cutoff dimension = 15
F = pq.Fock(2, cutoff = 15)
alpha = (1 + 1j)
r = -0.5
F.D(0, alpha) # Displacement to mode 0
F.S(1, r) # Squeezeng to mode 1
method chain is also available
F.D(0, alpha).S(1, r)
F.run()
# Plot Wigner fucntion for mode 0 using matplotlib
(x, p, W) = F.Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0)
from blueqat import photonqat as pq
import numpy as np
import matplotlib.pyplot as plt
# mode number = 2
G = pq.Gaussian(2)
Applying gate, run the circuit, and plotting Wigner function are also available in same fasion as Fock basis. But there are differences in availavle getes and measurement methods.
from blueqat import Circuit
Circuit().h[0].cx[0,1].cx[1,2].m[:].run(shots=100)
# => Counter({'000': 48, '111': 52})
https://blueqat.readthedocs.io/en/latest/
Copyright 2022 The Blueqat Developers.