Exemple #1
0
def test_allow_permutation():
    circuit = QubitCircuit(2)
    circuit.add_gate("X", 0)
    circuit.add_gate("CNOT", 0, 1)
    circuit.add_gate("X", 1)
    result0 = gate_sequence_product(circuit.propagators())

    scheduler = Scheduler("ASAP", allow_permutation=True)
    gate_cycle_indices = scheduler.schedule(circuit)
    assert (max(gate_cycle_indices) + 1) == 2

    scheduler = Scheduler("ASAP", allow_permutation=False)
    gate_cycle_indices = scheduler.schedule(circuit)
    assert (max(gate_cycle_indices) + 1) == 3
Exemple #2
0
def test_scheduling_pulse(instructions, method, expected_length,
                          random_shuffle, gates_schedule):
    circuit = QubitCircuit(4)
    for instruction in instructions:
        circuit.add_gate(
            Gate(instruction.name, instruction.targets, instruction.controls))

    if random_shuffle:
        repeat_num = 5
    else:
        repeat_num = 0
    result0 = gate_sequence_product(circuit.propagators())

    # run the scheduler
    scheduler = Scheduler(method)
    gate_cycle_indices = scheduler.schedule(instructions,
                                            gates_schedule=gates_schedule,
                                            repeat_num=repeat_num)

    # check if the scheduled length is expected
    assert (max(gate_cycle_indices) == expected_length)
    scheduled_gate = [[] for i in range(max(gate_cycle_indices) + 1)]

    # check if the scheduled circuit is correct
    for i, cycles in enumerate(gate_cycle_indices):
        scheduled_gate[cycles].append(circuit.gates[i])
    circuit.gates = sum(scheduled_gate, [])
    result1 = gate_sequence_product(circuit.propagators())
    assert (tracedist(result0 * result1.dag(), qeye(result0.dims[0])) < 1.0e-7)
Exemple #3
0
def test_scheduling_gates4(circuit, method, expected_length, random_shuffle,
                           gates_schedule):
    if random_shuffle:
        repeat_num = 5
    else:
        repeat_num = 0
    result0 = gate_sequence_product(circuit.propagators())

    # run the scheduler
    scheduler = Scheduler(method)
    gate_cycle_indices = scheduler.schedule(circuit,
                                            gates_schedule=gates_schedule,
                                            repeat_num=repeat_num)

    assert max(gate_cycle_indices) == expected_length
    _verify_scheduled_circuit(circuit, gate_cycle_indices)
Exemple #4
0
def test_scheduling_pulse(instructions, method, expected_length,
                          random_shuffle, gates_schedule):
    circuit = QubitCircuit(4)
    for instruction in instructions:
        circuit.add_gate(
            Gate(instruction.name, instruction.targets, instruction.controls))

    if random_shuffle:
        repeat_num = 5
    else:
        repeat_num = 0
    result0 = gate_sequence_product(circuit.propagators())

    # run the scheduler
    scheduler = Scheduler(method)
    gate_cycle_indices = scheduler.schedule(instructions,
                                            gates_schedule=gates_schedule,
                                            repeat_num=repeat_num)
    assert max(gate_cycle_indices) == expected_length
Exemple #5
0
def test_commutation_rules(circuit, expected_length):
    scheduler = Scheduler("ASAP")
    gate_cycle_indices = scheduler.schedule(circuit)
    assert (max(gate_cycle_indices) + 1) == expected_length
    assert _verify_scheduled_circuit(circuit, gate_cycle_indices)