예제 #1
0
def sqrt(real):
    """
    >>> sqrt(2)  # doctest: +ELLIPSIS
    Gate('sqrt(2)', 0, [1.41...])
    """
    return Gate('sqrt({})'.format(real), 0, np.sqrt(real), _dagger=None)
예제 #2
0
    return Gate('scalar({:.3f})'.format(complex),
                0,
                complex,
                _dagger=None if np.conjugate(complex) == complex else False)


SWAP = Gate('SWAP',
            2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1],
            _dagger=None)
CX = Gate('CX',
          2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0],
          _dagger=None)
CZ = Gate('CZ',
          2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1],
          _dagger=None)
H = Gate('H', 1, 1 / np.sqrt(2) * np.array([1, 1, 1, -1]), _dagger=None)
S = Gate('S', 1, [1, 0, 0, 1j])
T = Gate('T', 1, [1, 0, 0, np.exp(1j * np.pi / 4)])
X = Gate('X', 1, [0, 1, 1, 0], _dagger=None)
Y = Gate('Y', 1, [0, -1j, 1j, 0])
Z = Gate('Z', 1, [1, 0, 0, -1], _dagger=None)


def Euler(thetas):
    return Rx(thetas[0]) >> Rz(thetas[1]) >> Rx(thetas[2])


def Hlayer(n):
    layer = H
    for nn in range(1, n):
        layer = layer @ H