Ejemplo n.º 1
0
def controlled_zgate(control_edge: tn.Edge,
                     target_edge: tn.Edge) -> Tuple[tn.Edge, tn.Edge]:
    tensor = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, -1]]
    gate = backend.create_node(tensor, with_shape=[2, 2, 2, 2])
    gate[0] ^ control_edge
    gate[3] ^ target_edge
    return gate[1], gate[2]
Ejemplo n.º 2
0
def tgate(edge: tn.Edge) -> tn.Edge:
    gate = backend.create_node([[1, 0], [0, exp((1j * pi) / 4)]])
    edge ^ gate[1]
    return gate[0]
Ejemplo n.º 3
0
def hgate(edge: tn.Edge) -> tn.Edge:
    gate = backend.create_node([[1 / sqrt(2), 1 / sqrt(2)],
                                [1 / sqrt(2), -1 / sqrt(2)]])
    edge ^ gate[1]
    return gate[0]
Ejemplo n.º 4
0
def zgate(edge: tn.Edge) -> tn.Edge:
    gate = backend.create_node([[1, 0], [0, -1]])
    edge ^ gate[1]
    return gate[0]
Ejemplo n.º 5
0
def ygate(edge: tn.Edge) -> tn.Edge:
    gate = backend.create_node([[0, 0 - 1j], [0 + 1j, 0]])
    edge ^ gate[1]
    return gate[0]
Ejemplo n.º 6
0
def xgate(edge: tn.Edge) -> tn.Edge:
    gate = backend.create_node([[0, 1], [1, 0]])
    edge ^ gate[1]
    return gate[0]