Ejemplo n.º 1
0
def test_basic_gate_compare():
    gate1 = _basics.BasicGate()
    gate2 = _basics.BasicGate()
    assert gate1 == gate2
    assert not (gate1 != gate2)
    gate3 = _basics.MatrixGate()
    gate3.matrix = np.matrix([[1, 0], [0, -1]])
    assert gate1 != gate3
    gate4 = _basics.MatrixGate()
    gate4.matrix = [[1, 0], [0, -1]]
    assert gate4 == gate3
Ejemplo n.º 2
0
def test_basic_gate_compare():
    gate1 = _basics.BasicGate()
    gate2 = _basics.BasicGate()
    assert gate1 == gate2
    assert not (gate1 != gate2)
    gate3 = _basics.BasicGate()
    gate3.matrix = np.matrix([[1, 0], [0, -1]])
    assert gate1 != gate3
    gate4 = _basics.BasicGate()
    gate4.matrix = [[1, 0], [0, -1]]
    with pytest.raises(TypeError):
        gate4 == gate3
Ejemplo n.º 3
0
def test_basic_gate_or():
	saving_backend = DummyEngine(save_commands=True)
	main_engine = MainEngine(backend=saving_backend,
		engine_list=[DummyEngine()])
	qubit0 = Qubit(main_engine, 0)
	qubit1 = Qubit(main_engine, 1)
	qubit2 = Qubit(main_engine, 2)
	qubit3 = Qubit(main_engine, 3)
	qureg = Qureg([qubit2, qubit3])
	basic_gate = _basics.BasicGate()
	command1 = basic_gate.generate_command(qubit0)
	basic_gate | qubit0
	command2 = basic_gate.generate_command([qubit0, qubit1])
	basic_gate | [qubit0, qubit1]
	command3 = basic_gate.generate_command(qureg)
	basic_gate | qureg
	command4 = basic_gate.generate_command((qubit0,))
	basic_gate | (qubit0,)
	command5 = basic_gate.generate_command((qureg, qubit0))
	basic_gate | (qureg, qubit0)
	received_commands = []
	# Remove Deallocate gates
	for cmd in saving_backend.received_commands:
		if not isinstance(cmd.gate, _basics.FastForwardingGate):
			received_commands.append(cmd)
	assert received_commands == ([command1, command2, command3, command4, 
		command5])
Ejemplo n.º 4
0
def test_basic_gate_init():
	basic_gate = _basics.BasicGate()
	assert basic_gate.interchangeable_qubit_indices == []
	with pytest.raises(_basics.NotInvertible):
		basic_gate.get_inverse()
	with pytest.raises(_basics.NotMergeable):
		basic_gate.get_merged("other gate")
Ejemplo n.º 5
0
def test_comparing_different_gates(main_engine):
	basic_gate = _basics.BasicGate()
	basic_rotation_gate = _basics.BasicRotationGate(1.0)
	self_inverse_gate = _basics.SelfInverseGate()
	assert not basic_gate == basic_rotation_gate
	assert not basic_gate == self_inverse_gate
	assert not self_inverse_gate == basic_rotation_gate
Ejemplo n.º 6
0
def test_basic_gate_generate_command_invalid():
    qb0 = WeakQubitRef(1, idx=0)
    qb1 = WeakQubitRef(2, idx=0)

    basic_gate = _basics.BasicGate()
    with pytest.raises(ValueError):
        basic_gate.generate_command([qb0, qb1])
Ejemplo n.º 7
0
def test_matrix_gate():
    gate1 = _basics.MatrixGate()
    gate2 = _basics.MatrixGate()
    with pytest.raises(TypeError):
        assert gate1 == gate2
    gate3 = _basics.MatrixGate([[0, 1], [1, 0]])
    gate4 = _basics.MatrixGate([[0, 1], [1, 0]])
    gate5 = _basics.MatrixGate([[1, 0], [0, -1]])
    assert gate3 == gate4
    assert gate4 != gate5
    with pytest.raises(TypeError):
        assert gate1 != gate3
    with pytest.raises(TypeError):
        assert gate3 != gate1
    gate6 = _basics.BasicGate()
    assert gate6 != gate1
    assert gate6 != gate3
    assert gate1 != gate6
    assert gate3 != gate6
    gate7 = gate5.get_inverse()
    gate8 = _basics.MatrixGate([[1, 0], [0, (1 + 1j) / math.sqrt(2)]])
    assert gate7 == gate5
    assert gate7 != gate8
    gate9 = _basics.MatrixGate([[1, 0], [0, (1 - 1j) / math.sqrt(2)]])
    gate10 = gate9.get_inverse()
    assert gate10 == gate8
    assert gate3 == X
    assert X == gate3
    assert str(gate3) == "MatrixGate([[0, 1], [1, 0]])"
    assert hash(gate3) == hash("MatrixGate([[0, 1], [1, 0]])")
Ejemplo n.º 8
0
def test_basic_rotation_gate_get_merged():
	basic_gate = _basics.BasicGate()
	basic_rotation_gate1 = _basics.BasicRotationGate(0.5)
	basic_rotation_gate2 = _basics.BasicRotationGate(1.0)
	basic_rotation_gate3 = _basics.BasicRotationGate(1.5)
	with pytest.raises(_basics.NotMergeable):
		basic_rotation_gate1.get_merged(basic_gate)
	merged_gate = basic_rotation_gate1.get_merged(basic_rotation_gate2)
	assert merged_gate == basic_rotation_gate3
Ejemplo n.º 9
0
def test_basic_rotation_gate_comparison():
	basic_rotation_gate1 = _basics.BasicRotationGate(0.5)
	basic_rotation_gate2 = _basics.BasicRotationGate(0.5)
	basic_rotation_gate3 = _basics.BasicRotationGate(0.5 + 4 * math.pi)
	assert basic_rotation_gate1 == basic_rotation_gate2
	assert basic_rotation_gate1 == basic_rotation_gate3
	basic_rotation_gate4 = _basics.BasicRotationGate(0.50000001)
	# Test __ne__:
	assert basic_rotation_gate4 != basic_rotation_gate1 
	# Test one gate close to 4*pi the other one close to 0
	basic_rotation_gate5 = _basics.BasicRotationGate(1.e-13)
	basic_rotation_gate6 = _basics.BasicRotationGate(4 * math.pi - 1.e-13)
	assert basic_rotation_gate5 == basic_rotation_gate6
	# Test different types of gates
	basic_gate = _basics.BasicGate()
	assert not basic_gate == basic_rotation_gate6
Ejemplo n.º 10
0
def test_basic_gate_generate_command(main_engine):
    qubit0 = Qubit(main_engine, 0)
    qubit1 = Qubit(main_engine, 1)
    qubit2 = Qubit(main_engine, 2)
    qubit3 = Qubit(main_engine, 3)
    qureg = Qureg([qubit2, qubit3])
    basic_gate = _basics.BasicGate()
    command1 = basic_gate.generate_command(qubit0)
    assert command1 == Command(main_engine, basic_gate, ([qubit0], ))
    command2 = basic_gate.generate_command([qubit0, qubit1])
    assert command2 == Command(main_engine, basic_gate, ([qubit0, qubit1], ))
    command3 = basic_gate.generate_command(qureg)
    assert command3 == Command(main_engine, basic_gate, (qureg, ))
    command4 = basic_gate.generate_command((qubit0, ))
    assert command4 == Command(main_engine, basic_gate, ([qubit0], ))
    command5 = basic_gate.generate_command((qureg, qubit0))
    assert command5 == Command(main_engine, basic_gate, (qureg, [qubit0]))
Ejemplo n.º 11
0
def test_basic_phase_gate_comparison():
    basic_phase_gate1 = _basics.BasicPhaseGate(0.5)
    basic_phase_gate2 = _basics.BasicPhaseGate(0.5)
    basic_phase_gate3 = _basics.BasicPhaseGate(0.5 + 2 * math.pi)
    assert basic_phase_gate1 == basic_phase_gate2
    assert basic_phase_gate1 == basic_phase_gate3
    basic_phase_gate4 = _basics.BasicPhaseGate(0.50000001)
    # Test __ne__:
    assert basic_phase_gate4 != basic_phase_gate1
    # Test one gate close to 2*pi the other one close to 0
    basic_phase_gate5 = _basics.BasicPhaseGate(1.e-13)
    basic_phase_gate6 = _basics.BasicPhaseGate(2 * math.pi - 1.e-13)
    assert basic_phase_gate5 == basic_phase_gate6
    # Test different types of gates
    basic_gate = _basics.BasicGate()
    assert not basic_gate == basic_phase_gate6
    assert basic_phase_gate2 != _basics.BasicPhaseGate(0.5 + math.pi)
Ejemplo n.º 12
0
def test_basic_rotation_gate_comparison_and_hash():
    basic_rotation_gate1 = _basics.BasicRotationGate(0.5)
    basic_rotation_gate2 = _basics.BasicRotationGate(0.5)
    basic_rotation_gate3 = _basics.BasicRotationGate(0.5 + 4 * math.pi)
    assert basic_rotation_gate1 == basic_rotation_gate2
    assert hash(basic_rotation_gate1) == hash(basic_rotation_gate2)
    assert basic_rotation_gate1 == basic_rotation_gate3
    assert hash(basic_rotation_gate1) == hash(basic_rotation_gate3)
    basic_rotation_gate4 = _basics.BasicRotationGate(0.50000001)
    # Test __ne__:
    assert basic_rotation_gate4 != basic_rotation_gate1
    # Test one gate close to 4*pi the other one close to 0
    basic_rotation_gate5 = _basics.BasicRotationGate(1.0e-13)
    basic_rotation_gate6 = _basics.BasicRotationGate(4 * math.pi - 1.0e-13)
    assert basic_rotation_gate5 == basic_rotation_gate6
    assert basic_rotation_gate6 == basic_rotation_gate5
    assert hash(basic_rotation_gate5) == hash(basic_rotation_gate6)
    # Test different types of gates
    basic_gate = _basics.BasicGate()
    assert not basic_gate == basic_rotation_gate6
    assert basic_rotation_gate2 != _basics.BasicRotationGate(0.5 + 2 * math.pi)
Ejemplo n.º 13
0
def test_basic_gate_compare(main_engine):
	gate1 = _basics.BasicGate()
	gate2 = _basics.BasicGate()
	assert gate1 == gate2
	assert not (gate1 != gate2)
Ejemplo n.º 14
0
def test_basic_gate_hash():
    basic_gate = _basics.BasicGate()
    with pytest.raises(NotImplementedError):
        _ = hash(basic_gate)