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
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