Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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
Пример #5
0
    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
Пример #6
0
    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
Пример #7
0
    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
Пример #8
0
    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)
Пример #9
0
    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
Пример #10
0
    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
Пример #11
0
    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)
Пример #12
0
    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
Пример #13
0
    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