def test_qasm_wait_timing_trigger_T1(self): # Tests the timing of the qasm sequences using a T1 sequence # 'q1' contains "trigger" instructions qasm_file = sqqs.T1('q1', self.times) qasm_fn = qasm_file.name qumis_fn = join(self.test_file_dir, "T1_xf.qumis") compiler = qcx.QASM_QuMIS_Compiler(self.simple_config_fn, verbosity_level=2) compiler.compile(qasm_fn, qumis_fn) asm = Assembler(qumis_fn) asm.convert_to_instructions() instrs = compiler.qumis_instructions self.assertEqual(instrs[2], 'Exp_Start: ') wait_instrs = instrs[7:-4:6] # -4 in slicing exists to take out the calibration points for clock, wait_instr in zip(self.clocks[:-4], wait_instrs[:-4]): exp_wait = clock + 4 # +4 includes the length of the pulse instr_wait = int(wait_instr.split()[1]) self.assertEqual(instr_wait, exp_wait) init_instrs = instrs[3:-4:6] init_time = 200e-6 / 5e-9 - 1 # -1 is for the prepare codeword clock RO_time = 300e-9 / 5e-9 self.assertEqual(init_instrs[0], 'wait {:d}'.format(int(init_time))) for init_instr in init_instrs[1:-4]: self.assertEqual(init_instr, 'wait {:d}'.format(int(init_time + RO_time))) self.assertEqual(instrs[-1], self.jump_to_start)
def test_qwg_swapN(self): nr_pulses = [1, 3, 5, 11] qasm_file = qwfs.SWAPN('q0', 'q1', RO_target='q0', nr_pulses=nr_pulses) qasm_fn = qasm_file.name qumis_fn = join(self.test_file_dir, "output.qumis") compiler = qcx.QASM_QuMIS_Compiler(self.simple_config_fn, verbosity_level=2) compiler.compile(qasm_fn, qumis_fn) qumis = compiler.qumis_instructions m = open(compiler.qumis_fn).read() qumis_from_file = m.splitlines() self.assertEqual(qumis, qumis_from_file) self.assertEqual(compiler.qumis_instructions[2], 'Exp_Start: ') self.assertEqual(compiler.qumis_instructions[-1], self.jump_to_start) for i in range(3): time_pts = get_timepoints_from_label( target_label='square', timing_grid=compiler.timing_grid, start_label='qwg_trigger_{}'.format(i), end_label='ro') self.assertEqual(len(time_pts['target_tps']), nr_pulses[i]) time_pts = get_timepoints_from_label(target_label='ro', timing_grid=compiler.timing_grid) self.assertEqual(len(time_pts['target_tps']), len(nr_pulses) + 4) # finally test that it can be converted into valid instructions asm = Assembler(qumis_fn) asm.convert_to_instructions()
def test_qasm_seq_echo(self): for q_name in ['q0', 'q1']: qasm_file = sqqs.echo(q_name, times=self.times) qasm_fn = qasm_file.name qumis_fn = join(self.test_file_dir, "echo_{}.qumis".format(q_name)) compiler = qcx.QASM_QuMIS_Compiler(self.config_fn, verbosity_level=0) compiler.compile(qasm_fn, qumis_fn) asm = Assembler(qumis_fn) asm.convert_to_instructions() self.assertEqual(compiler.qumis_instructions[2], 'Exp_Start: ') self.assertEqual(compiler.qumis_instructions[-1], self.jump_to_start)
def test_two_qubit_off_on(self): for RO_target in ['q0', 'q1', 'all']: qasm_file = mqqs.two_qubit_off_on('q0', 'q1', RO_target='all') qasm_fn = qasm_file.name qumis_fn = join(self.test_file_dir, "TwoQ_off_on.qumis") compiler = qcx.QASM_QuMIS_Compiler(self.simple_config_fn, verbosity_level=2) compiler.compile(qasm_fn, qumis_fn) asm = Assembler(qumis_fn) asm.convert_to_instructions() self.assertEqual(compiler.qumis_instructions[2], 'Exp_Start: ') self.assertEqual(compiler.qumis_instructions[-1], self.jump_to_start) self.assertEqual( compiler.qumis_instructions.count('trigger 0000001, 3'), 4)
def test_qasm_seq_randomized_benchmarking(self): ncl = [2, 4, 6, 20] nr_seeds = 10 for q_name in ['q0', 'q1']: qasm_file = sqqs.randomized_benchmarking(q_name, ncl, nr_seeds) qasm_fn = qasm_file.name qumis_fn = join(self.test_file_dir, "randomized_benchmarking_{}.qumis".format(q_name)) compiler = qcx.QASM_QuMIS_Compiler(self.config_fn, verbosity_level=0) compiler.compile(qasm_fn, qumis_fn) asm = Assembler(qumis_fn) asm.convert_to_instructions() self.assertEqual(compiler.qumis_instructions[2], 'Exp_Start: ') self.assertEqual(compiler.qumis_instructions[-1], self.jump_to_start)
def test_qasm_seq_butterfly(self): for q_name in ['q1', 'q1']: qasm_file = sqqs.butterfly(q_name, initialize=True) qasm_fn = qasm_file.name qumis_fn = join(self.test_file_dir, "butterfly_{}.qumis".format(q_name)) compiler = qcx.QASM_QuMIS_Compiler(self.simple_config_fn, verbosity_level=2) compiler.compile(qasm_fn, qumis_fn) asm = Assembler(qumis_fn) asm.convert_to_instructions() self.assertEqual(compiler.qumis_instructions[2], 'Exp_Start: ') self.assertEqual(compiler.qumis_instructions[-1], self.jump_to_start) # The sequence should contain 6 RO instructions self.assertEqual( compiler.qumis_instructions.count('trigger 0000001, 3'), 6)
def test_compiler_example(self): qasm_fn = join(self.test_file_dir, 'dev_test.qasm') qumis_fn = join(self.test_file_dir, "output.qumis") compiler = qcx.QASM_QuMIS_Compiler(self.config_fn, verbosity_level=6) compiler.compile(qasm_fn, qumis_fn) qumis = compiler.qumis_instructions m = open(compiler.qumis_fn).read() qumis_from_file = m.splitlines() self.assertEqual(qumis, qumis_from_file) self.assertEqual(compiler.qumis_instructions[2], 'Exp_Start: ') # Test that the final wait after the last instruction is not trimmed self.assertEqual(compiler.qumis_instructions[-2], 'wait 60') self.assertEqual(compiler.qumis_instructions[-1], self.jump_to_start) # finally test that it can be converted into valid instructions asm = Assembler(qumis_fn) asm.convert_to_instructions()
def test_chevron_block_seq(self): qasm_file = qwfs.chevron_block_seq('q0', 'q1', RO_target='q0', no_of_points=5) qasm_fn = qasm_file.name qumis_fn = join(self.test_file_dir, "chevron_block.qumis") compiler = qcx.QASM_QuMIS_Compiler(self.simple_config_fn, verbosity_level=6) compiler.compile(qasm_fn, qumis_fn) asm = Assembler(qumis_fn) asm.convert_to_instructions() self.assertEqual(compiler.qumis_instructions[2], 'Exp_Start: ') self.assertEqual(compiler.qumis_instructions[-1], self.jump_to_start) self.assertEqual( compiler.qumis_instructions.count('trigger 0000001, 3'), 5) compiler.timing_event_list
def test_qwg_chevron(self): qasm_file = qwfs.chevron_block_seq('q0', 'q1', RO_target='q0', no_of_points=5) qasm_fn = qasm_file.name qumis_fn = join(self.test_file_dir, "output.qumis") compiler = qcx.QASM_QuMIS_Compiler(self.simple_config_fn, verbosity_level=6) compiler.compile(qasm_fn, qumis_fn) qumis = compiler.qumis_instructions m = open(compiler.qumis_fn).read() qumis_from_file = m.splitlines() self.assertEqual(qumis, qumis_from_file) self.assertEqual(compiler.qumis_instructions[2], 'Exp_Start: ') self.assertEqual(compiler.qumis_instructions[-1], self.jump_to_start) # finally test that it can be converted into valid instructions asm = Assembler(qumis_fn) asm.convert_to_instructions()
def test_restless_RB_seq(self): ncl = [10] nr_seeds = 15 for q_name in ['q0', 'q1']: qasm_file = sqqs.randomized_benchmarking(q_name, ncl, nr_seeds, restless=True, cal_points=False) qasm_fn = qasm_file.name qumis_fn = join(self.test_file_dir, "randomized_benchmarking_{}.qumis".format(q_name)) compiler = qcx.QASM_QuMIS_Compiler(self.simple_config_fn, verbosity_level=0) compiler.compile(qasm_fn, qumis_fn) asm = Assembler(qumis_fn) asm.convert_to_instructions() self.assertEqual(compiler.qumis_instructions[2], 'Exp_Start: ') self.assertEqual(compiler.qumis_instructions[-1], self.jump_to_start) self.assertEqual( compiler.qumis_instructions.count('trigger 0000001, 3'), 15)