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
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
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
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
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
def MU_Phase_shift(Chromosome, phase=np.pi / 8.0): r = np.array(qc.phasegate(phase).full()) return np.dot(Chromosome, r)
def as_qobj_operator(self, instance: "GateInstance") -> qutip.Qobj: return qutip.phasegate(instance.params[0])
def Phase(angle): return qt.phasegate(angle)
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):