def test_operation_from_json():
    expected = Operation()
    assert Operation.from_json('{}') == expected

    expected = Operation("H")
    assert Operation.from_json('{"label": "H"}') == expected
    assert Operation.from_json('{"label": "Z"}') != expected

    expected = Operation(targets=[0])
    op = Operation.from_json('{"targets": [0]}')
    assert isinstance(op.targets[0], int)
    assert Operation.from_json('{"targets": [0]}') == expected
    assert Operation.from_json('{"targets": [1]}') != expected
Exemple #2
0
 def from_json(json_obj: Union[str, dict]):
     if isinstance(json_obj, str):
         json_obj = json.loads(json_obj)
     num_qubits = json_obj.get("num_qubits", 0)
     operations = [
         Operation.from_json(x) for x in json_obj.get("operations", [])
     ]
     circ = Circuit(num_qubits, operations)
     return circ
def test_equality():
    a = Circuit()
    b = Circuit()
    assert a == b

    a = Circuit(2)
    b = Circuit(2)
    assert a == b
    b = Circuit(1)
    assert a != b

    a = Circuit(operations=[Operation("H", [0])])
    b = Circuit(operations=[Operation("H", [0])])
    assert a == b
    b = Circuit(operations=[Operation("Z", [0])])
    assert a != b

    a = Circuit(2, [Operation("H", [0])])
    b = Circuit(2, [Operation("H", [0])])
    assert a == b
def test_circuit_from_json():
    expected = Circuit()
    assert Circuit.from_json('{}') == expected

    expected = Circuit(2)
    assert Circuit.from_json('{"num_qubits": 2}') == expected
    expected = Circuit(1)
    assert Circuit.from_json('{"num_qubits": 2}') != expected

    expected = Circuit(operations=[Operation("H", [0])])
    circ = Circuit.from_json(
        '{"num_qubits": 0, "operations": [{"label": "H", "targets": [0]}]}')
    assert isinstance(circ.operations[0], Operation)
    assert circ == expected, str(circ)
def test_create_circuit():
    circ = Circuit()
    assert circ.num_qubits == 0
    assert circ.operations == []

    circ = Circuit(2)
    assert circ.num_qubits == 2
    assert circ.operations == []

    operations = [Operation('H', [0])]
    circ = Circuit(operations=operations)
    assert circ.num_qubits == 0
    assert circ.operations == operations

    circ = Circuit(2, operations)
    assert circ.num_qubits == 2
    assert circ.operations == operations
def test_apply_gates():
    expected = Circuit(3)
    circ = handle_message('create new circuit with 3 qubits')
    assert circ == expected

    # Test single qubit
    expected.add_operation(Operation('H', [0]))
    circ = handle_message('apply H gate on qubit 0', circ)
    assert circ == expected
    expected.add_operation(Operation('X', [1]))
    circ = handle_message('apply X gate on qubit 1', circ)
    assert circ == expected

    # Test measure gate
    expected.add_operation(Operation('Measure', [0]))
    circ = handle_message('measure qubit 0', circ)
    assert circ == expected
    expected.add_operation(Operation('Measure', [0, 1, 2]))
    circ = handle_message('measure all qubits', circ)
    assert circ == expected

    # Test no qubits
    assert handle_message('apply X gate', circ) == expected

    # Test invalid qubits
    assert handle_message('apply X gate on qubit 3', circ) == expected

    # Test multiple qubits
    # Add qubit
    expected.add_qubits(2)
    circ = handle_message('add 2 qubits', circ)
    assert circ == expected
    expected.add_operation(Operation('CNOT', [1, 4]))
    circ = handle_message('apply CNOT on qubits 1 and 4', circ)
    assert circ == expected
    # Add qubit
    expected.add_qubits(1)
    circ = handle_message('add 1 qubit', circ)
    assert circ == expected
    expected.add_operation(Operation('U', [1, 2, 3]))
    circ = handle_message('apply U gate on qubits 1, 2, and 3', circ)
    assert circ == expected
    expected.add_operation(Operation('U', [1, 2, 0]))
    circ = handle_message('apply U gate on qubits 1, 2, and 3', circ)
    assert circ != expected
def test_equality():
    a = Operation()
    b = Operation()
    assert a == b

    a = Operation("H")
    b = Operation("H")
    assert a == b
    b = Operation("X")
    assert a != b

    a = Operation(targets=[0])
    b = Operation(targets=[0])
    assert a == b
    b = Operation(targets=[1])
    assert a != b

    a = Operation(targets=[0, 2])
    b = Operation(targets=[0, 2])
    assert a == b
    b = Operation(targets=[1, 2])
    assert a != b
    b = Operation(targets=[0, 1])
    assert a != b

    a = Operation("H", [0])
    b = Operation("H", [0])
    assert a == b