def phase_fac(ang_rads, lib='np'): """ Returns exp(1j*ang_rads*I_2) = [[x, 0],[0, x]] with x = exp(1j*ang_rads) Parameters ---------- ang_rads : float lib : str Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: tlist = [0.] * 4 tlist[0] = ang_rads return pu2(*tlist) mat_dict = OneBitGates.const_dict(0) x = OneBitGates.get_fun(lib, 'exp')(1j * ang_rads) mat_dict['11'] = x mat_dict['00'] = x return OneBitGates.get_mat(lib, mat_dict)
def u2(rads0, rads1, rads2, rads3, lib='np'): """ Returns arbitrary 2-dim unitary matrix (U(2) group) parametrized as follows: exp(1j*(rads0 + rads1*sig_x + rads2*sig_y + rads3*sig_z)) where rads1 is an angle in radians and sig_x is the x Pauli matrix, etc. Parameters ---------- rads0 : float rads1 : float rads2 : float rads3 : float lib : str Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: tlist = [rads0, rads1, rads2, rads3] return pu2(*tlist) return OneBitGates.get_fun(lib, 'exp')(1j * rads0) * \ OneBitGates.rot(rads1, rads2, rads3, lib=lib)
def u2(rads0, rads1, rads2, rads3): """ Returns arbitrary 2-dim unitary matrix (U(2) group) parametrized as follows: exp(1j*(rads0 + rads1*sig_x + rads2*sig_y + rads3*sig_z)) where rads1 is an angle in radians and sig_x is the x Pauli matrix, etc. Parameters ---------- rads0 : float rads1 : float rads2 : float rads3 : float Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: tlist = [rads0, rads1, rads2, rads3] return pu2(*tlist) return np.exp(1j*rads0)*OneBitGates.rot(rads1, rads2, rads3)
def P_0_phase_fac(ang_rads): """ Returns exp(1j*ang_rads*P_0) = [[x, 0],[0, 1]] with x = exp(1j*ang_rads) Parameters ---------- ang_rads : float Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: tlist = [0.]*4 tlist[0] = ang_rads/2 tlist[3] = ang_rads/2 return np.exp(1j*ang_rads/2)*pu2(*tlist) ty = np.complex128 mat = np.zeros([2, 2], dtype=ty) mat[0, 0] = np.exp(1j*ang_rads) mat[1, 1] = 1 return mat
def phase_fac(ang_rads): """ Returns exp(1j*ang_rads*I_2) = [[x, 0],[0, x]] with x = exp(1j*ang_rads) Parameters ---------- ang_rads : float Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: tlist = [0.]*4 tlist[0] = ang_rads return pu2(*tlist) ty = np.complex128 mat = np.zeros([2, 2], dtype=ty) x = np.exp(1j*ang_rads) mat[1, 1] = x mat[0, 0] = x return mat
def P_0_phase_fac(ang_rads): """ Returns exp(1j*ang_rads*P_0) = [[x, 0],[0, 1]] with x = exp(1j*ang_rads) Parameters ---------- ang_rads : float Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: tlist = [0.] * 4 tlist[0] = ang_rads / 2 tlist[3] = ang_rads / 2 return np.exp(1j * ang_rads / 2) * pu2(*tlist) ty = np.complex128 mat = np.zeros([2, 2], dtype=ty) mat[0, 0] = np.exp(1j * ang_rads) mat[1, 1] = 1 return mat
def phase_fac(ang_rads): """ Returns exp(1j*ang_rads*I_2) = [[x, 0],[0, x]] with x = exp(1j*ang_rads) Parameters ---------- ang_rads : float Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: tlist = [0.] * 4 tlist[0] = ang_rads return pu2(*tlist) ty = np.complex128 mat = np.zeros([2, 2], dtype=ty) x = np.exp(1j * ang_rads) mat[1, 1] = x mat[0, 0] = x return mat
def rot_ax(rad_ang, axis, lib='np'): """ Returns exp(1j*rad_ang*sig_n) where n = x if axis = 1, n = y if axis = 2 and n = z if axis = 3 Parameters ---------- rad_ang : float axis : int lib : str Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: assert axis in [1, 2, 3] tlist = [0.] * 4 tlist[axis] = rad_ang # print('mmbbvv', axis, pu2(*tlist)) return pu2(*tlist) mat_dict = OneBitGates.const_dict(0) c = OneBitGates.get_fun(lib, 'cos')(rad_ang) s = OneBitGates.get_fun(lib, 'sin')(rad_ang) if axis == 1: mat_dict['00'] = c mat_dict['01'] = 1j * s mat_dict['10'] = 1j * s mat_dict['11'] = c elif axis == 2: mat_dict['00'] = c mat_dict['01'] = s mat_dict['10'] = -s mat_dict['11'] = c elif axis == 3: mat_dict['00'] = c + 1j * s mat_dict['11'] = c - 1j * s else: assert False, "axis not in [1,2,3]" return OneBitGates.get_mat(lib, mat_dict)
def rot_ax(rad_ang, axis): """ Returns exp(1j*rad_ang*sig_n) where n = x if axis = 1, n = y if axis = 2 and n = z if axis = 3 Parameters ---------- rad_ang : float axis : int Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: assert axis in [1, 2, 3] tlist = [0.]*4 tlist[axis] = rad_ang # print('mmbbvv', axis, pu2(*tlist)) return pu2(*tlist) ty = np.complex128 mat = np.zeros([2, 2], dtype=ty) c = np.cos(rad_ang) s = np.sin(rad_ang) if axis == 1: mat[0, 0] = c mat[0, 1] = 1j*s mat[1, 0] = 1j*s mat[1, 1] = c elif axis == 2: mat[0, 0] = c mat[0, 1] = s mat[1, 0] = -s mat[1, 1] = c elif axis == 3: mat[0, 0] = c + 1j*s mat[1, 1] = c - 1j*s else: assert False, "axis not in [1,2,3]" return mat
def rot_ax(rad_ang, axis): """ Returns exp(1j*rad_ang*sig_n) where n = x if axis = 1, n = y if axis = 2 and n = z if axis = 3 Parameters ---------- rad_ang : float axis : int Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: assert axis in [1, 2, 3] tlist = [0.] * 4 tlist[axis] = rad_ang # print('mmbbvv', axis, pu2(*tlist)) return pu2(*tlist) ty = np.complex128 mat = np.zeros([2, 2], dtype=ty) c = np.cos(rad_ang) s = np.sin(rad_ang) if axis == 1: mat[0, 0] = c mat[0, 1] = 1j * s mat[1, 0] = 1j * s mat[1, 1] = c elif axis == 2: mat[0, 0] = c mat[0, 1] = s mat[1, 0] = -s mat[1, 1] = c elif axis == 3: mat[0, 0] = c + 1j * s mat[1, 1] = c - 1j * s else: assert False, "axis not in [1,2,3]" return mat
def rot(rad_ang_x, rad_ang_y, rad_ang_z, lib='np'): """ Returns exp(1j*(rad_ang_x*sig_x + rad_ang_y*sig_y + rad_ang_z*sig_z)) where rad_ang_x is an angle in radians and sig_x is the x Pauli matrix, etc. Parameters ---------- rad_ang_x : float rad_ang_y : float rad_ang_z : float lib : str Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: tlist = [0., rad_ang_x, rad_ang_y, rad_ang_z] return pu2(*tlist) mat_dict = OneBitGates.const_dict(0) vec = [rad_ang_x, rad_ang_y, rad_ang_z] n = OneBitGates.get_fun(lib, 'sqrt')(vec[0]**2 + vec[1]**2 + vec[2]**2) if abs(n) < 1e-8: mat_dict['00'] = 1 mat_dict['11'] = 1 else: nx = rad_ang_x / n ny = rad_ang_y / n nz = rad_ang_z / n c = OneBitGates.get_fun(lib, 'cos')(n) s = OneBitGates.get_fun(lib, 'sin')(n) mat_dict['00'] = c + 1j * s * nz mat_dict['01'] = s * ny + 1j * s * nx mat_dict['10'] = -s * ny + 1j * s * nx mat_dict['11'] = c - 1j * s * nz return OneBitGates.get_mat(lib, mat_dict)
def rot(rad_ang_x, rad_ang_y, rad_ang_z): """ Returns exp(1j*(rad_ang_x*sig_x + rad_ang_y*sig_y + rad_ang_z*sig_z)) where rad_ang_x is an angle in radians and sig_x is the x Pauli matrix, etc. Parameters ---------- rad_ang_x : float rad_ang_y : float rad_ang_z : float Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: tlist = [0., rad_ang_x, rad_ang_y, rad_ang_z] return pu2(*tlist) ty = np.complex128 mat = np.zeros([2, 2], dtype=ty) vec = np.array([rad_ang_x, rad_ang_y, rad_ang_z]) n = np.linalg.norm(vec) # sqrt(dot(vec, vec.conj)) if abs(n) < 1e-8: mat[0, 0] = 1 mat[1, 1] = 1 else: nx = rad_ang_x/n ny = rad_ang_y/n nz = rad_ang_z/n c = np.cos(n) s = np.sin(n) mat[0, 0] = c + 1j*s*nz mat[0, 1] = s*ny + 1j*s*nx mat[1, 0] = -s*ny + 1j*s*nx mat[1, 1] = c - 1j*s*nz return mat
def rot(rad_ang_x, rad_ang_y, rad_ang_z): """ Returns exp(1j*(rad_ang_x*sig_x + rad_ang_y*sig_y + rad_ang_z*sig_z)) where rad_ang_x is an angle in radians and sig_x is the x Pauli matrix, etc. Parameters ---------- rad_ang_x : float rad_ang_y : float rad_ang_z : float Returns ------- np.ndarray """ if 'autograd.numpy' in sys.modules: tlist = [0., rad_ang_x, rad_ang_y, rad_ang_z] return pu2(*tlist) ty = np.complex128 mat = np.zeros([2, 2], dtype=ty) vec = np.array([rad_ang_x, rad_ang_y, rad_ang_z]) n = np.linalg.norm(vec) # sqrt(dot(vec, vec.conj)) if abs(n) < 1e-8: mat[0, 0] = 1 mat[1, 1] = 1 else: nx = rad_ang_x / n ny = rad_ang_y / n nz = rad_ang_z / n c = np.cos(n) s = np.sin(n) mat[0, 0] = c + 1j * s * nz mat[0, 1] = s * ny + 1j * s * nx mat[1, 0] = -s * ny + 1j * s * nx mat[1, 1] = c - 1j * s * nz return mat