예제 #1
0
def random_unitary_gate(delta,alpha,theta,beta,value):
    gate = qt.Qobj(qt.phasegate(delta)*qt.rz(alpha)*qt.ry(theta)*qt.rz(beta))
    if value == True:
        gate = gate *qt.Qobj([[0,1],[1,0]])
    else:
        gate = gate
    return gate
예제 #2
0
def rando(orig):
    (n, n) = orig.shape
    theta = uniform(0.0, math.pi * 2.0)
    #pick a rotation any rotation
    phaser = randint(0, 3)
    if phaser == 0:
        gate = qt.phasegate(theta)
    elif phaser == 1:
        gate = qt.rz(theta)
    elif phaser == 2:
        gate = qt.ry(theta)
    else:
        gate = qt.globalphase(theta)
    (m, m) = gate.shape
    cc = 0
    while n != m and cc < 10:
        pick = randint(0, 1)
        if not pick:
            gate = qt.tensor(gate, id2)
            gate = tensor_fix(gate)
        else:
            gate = tensor_fix(qt.tensor(id2, gate))
        (m, m) = gate.shape
        cc += 1
    gate = gate * orig
    return gate
예제 #3
0
def alter_hadamard(hada,seed):
    (n,n)=hada.shape
    theta = uniform(0.0,math.pi*2.0)
    
    #pick a rotation any rotation
    phaser=randint(0,3)
    if phaser ==0:
        gate=qt.phasegate(theta)
    elif phaser == 1:
        gate=qt.rz(theta)
    elif phaser==2:
        gate = qt.ry(theta)
    else:
        gate=qt.globalphase(theta)
        
    #alter gate
    if seed == 0:
        u1=gate
    else:
        u1=id2
    i=1
    while u1.shape != (n,n):
        if i ==seed: #set a alteration on specified qubit
            u1=qt.tensor(u1,gate)
            u1=tensor_fix(u1)
        else:
            u1=qt.tensor(u1,id2)
            u1=tensor_fix(u1)
        i+=1
    final_gate=u1*hada
    return final_gate
예제 #4
0
def MU_rot(Chromosome, phi):
    pauli_x = np.array([[0.0, 1.0], [1.0, 0.0]])
    l = Chromosome.shape[0]
    for k0 in range(l):
        C = Chromosome[k0,:]
        C = np.dot(C,np.array(qc.phasegate(phi).full()))
        C = np.array(np.dot(C, pauli_x))

        Chromosome[k0,:] = C
    return Chromosome
예제 #5
0
def random_altered_unitary_gate(delta,alpha,theta,beta,value):
    if delta == 0.0 and alpha == 0.0 and theta == math.pi and value == True:
        angles = ['delta','alpha','beta']
    else:
        angles = ['delta','alpha','theta','beta']
    altered_variable = choice(angles)
    if altered_variable == 'delta':
        delta = uniform(0.0,2.0*math.pi)
    if altered_variable == 'alpha':
        alpha = uniform(0.0,2.0*math.pi)
    if altered_variable == 'theta':
        theta = uniform(0.0,2.0*math.pi)
    if altered_variable == 'beta':
        beta = uniform(0.0,2.0*math.pi)
    gate = qt.Qobj(qt.phasegate(delta)*qt.rz(alpha)*qt.ry(theta)*qt.rz(beta))
    if value == True:
        gate = gate *qt.Qobj([[0,1],[1,0]])
    else:
        gate = gate
    return gate
예제 #6
0
def MU_Phase_shift(Chromosome, phase=np.pi / 8.0):
    r = np.array(qc.phasegate(phase).full())
    return np.dot(Chromosome, r)
예제 #7
0
 def as_qobj_operator(self, instance: "GateInstance") -> qutip.Qobj:
     return qutip.phasegate(instance.params[0])
예제 #8
0
def Phase(angle):
    return qt.phasegate(angle)
예제 #9
0
import qutip as qt
import numpy as np
from utils import det

# 1 qubit gates
I = qt.qeye(2)
X = qt.sigmax()
Y = qt.sigmay()
Z = qt.sigmaz()
H = qt.hadamard_transform()
S = qt.phasegate(np.pi / 2)
T = qt.phasegate(np.pi / 4)
SQNOT = qt.sqrtnot()

def Rx(angle):
    return qt.rx(angle)

def Ry(angle):
    return qt.ry(angle)

def Rz(angle):
    return qt.rz(angle)

def R(axis, angle):
    angle = np.remainder(angle, 2 * np.pi)
    if not (type(axis) is np.ndarray):
        axis = np.array(axis)
    axis = axis / np.linalg.norm(axis)
    return qt.Qobj(np.cos(angle / 2) * I - 1j * np.sin(angle / 2) * (axis[0] * X + axis[1] * Y + axis[2] * Z))

def Phase(angle):