def test_defcircuit_measure_qubit(): defcircuit_measure_named_qubits = """ DEFCIRCUIT test_defcirc_measure_named a b: MEASURE a b """.strip() defcircuit_measure_qubits = """ DEFCIRCUIT test_defcirc_measure_qubits: MEASURE 0 ro """.strip() defcircuit_measure_qubits_mixed = """ DEFCIRCUIT test_defcirc_measure_mixed q: MEASURE q ro """.strip() parse_equals(defcircuit_measure_named_qubits, RawInstr(defcircuit_measure_named_qubits)) parse_equals(defcircuit_measure_qubits, RawInstr(defcircuit_measure_qubits)) parse_equals(defcircuit_measure_qubits_mixed, RawInstr(defcircuit_measure_qubits_mixed))
def def_circuit(self, name, variables, qubits, instrs): qubits = qubits if qubits else [] space = " " if qubits else "" if variables: raw_defcircuit = "DEFCIRCUIT {}({}){}{}:".format( name, ", ".join(map(str, variables)), space, " ".join(map(str, qubits)) ) else: raw_defcircuit = "DEFCIRCUIT {}{}{}:".format(name, space, " ".join(map(str, qubits))) raw_defcircuit += "\n ".join([""] + [str(instr) for instr in instrs]) return RawInstr(raw_defcircuit)
def test_def_circuit(): defcircuit = """ DEFCIRCUIT bell a b: H a CNOT a b """.strip() defcircuit_no_qubits = """ DEFCIRCUIT bell: H 0 CNOT 0 1 """.strip() defcircuit_param = """ DEFCIRCUIT parameterized(%theta, %phi) a: RX(%theta) a RZ(%phi) a """.strip() parse_equals(defcircuit, RawInstr(defcircuit)) parse_equals(defcircuit_no_qubits, RawInstr(defcircuit_no_qubits)) parse_equals(defcircuit_param, RawInstr(defcircuit_param))
def exitDefCircuit(self, ctx: QuilParser.DefCircuitContext): circuit_name = ctx.name().getText() variables = [variable.getText() for variable in ctx.variable()] qubitVariables = [qubitVariable.getText() for qubitVariable in ctx.qubitVariable()] if variables: raw_defcircuit = 'DEFCIRCUIT {}({}) {}:'.format(circuit_name, ', '.join(variables), ' '.join(qubitVariables)) else: raw_defcircuit = 'DEFCIRCUIT {} {}:'.format(circuit_name, ' '.join(qubitVariables)) raw_defcircuit += '\n '.join([''] + [instr.out() for instr in self.result]) self.previous_result.append(RawInstr(raw_defcircuit)) self.result = self.previous_result self.previous_result = None
def include(self, string): return RawInstr(f"INCLUDE {string}")
def gate_no_qubits(self, name): return RawInstr(name)
def exitInclude(self, ctx): # type: (QuilParser.IncludeContext) -> None self.result.append(RawInstr(ctx.INCLUDE().getText() + ' ' + ctx.STRING().getText()))
def exitDefCircuit(self, ctx): # type: (QuilParser.DefCircuitContext) -> None self.result.append(RawInstr(ctx.getText()))
def exitCircuitResetState(self, ctx: QuilParser.ResetStateContext): qubit = ctx.circuitQubit().getText() self.result.append(RawInstr(f'RESET {qubit}'))
def exitCircuitMeasure(self, ctx: QuilParser.CircuitMeasureContext): qubit = ctx.circuitQubit().getText() classical = None if ctx.addr(): classical = ctx.addr().getText() self.result.append(RawInstr(f'MEASURE {qubit} {classical}' if classical else f'MEASURE {qubit}'))
def test_pragma(): _test('PRAGMA gate_time H "10 ns"', RawInstr('PRAGMA gate_time H "10 ns"'))
def counterpoint(): pitch_index = int(request.args['pitch_index']) #print("pitch_index: ", pitch_index) if (pitch_index >= NUM_PITCHES): pitch_index %= (NUM_PITCHES - 1) melodic_degrees = request.args['melodic_degrees'].split(",") #print("melodic_degrees: ", melodic_degrees) harmonic_degrees = request.args['harmonic_degrees'].split(",") #print("harmonic_degrees: ", harmonic_degrees) if (len(melodic_degrees) == DEGREES_OF_FREEDOM and len(harmonic_degrees) == DEGREES_OF_FREEDOM and 0 <= pitch_index < NUM_PITCHES): melodic_gate_matrix = compute_matrix(melodic_degrees) harmonic_gate_matrix = compute_matrix(harmonic_degrees) qvm = api.QVMConnection() p = Program() p.defgate("MELODIC_GATE", melodic_gate_matrix) p.defgate("HARMONIC_GATE", harmonic_gate_matrix) # Convert the pitch index to a binary string, and use it to create # the initial gates on the three wires of the quantum circuit, # least significant qubit on the lowest number wire. # Also, place initial pitch into Lead Note #1 qubit_string = format(pitch_index, '03b') for idx, qubit_char in enumerate(qubit_string): if qubit_char == '0': p.inst(I(NUM_CIRCUIT_WIRES - 1 - idx)) p.inst(FALSE(NUM_CIRCUIT_WIRES - 1 - idx)) else: p.inst(X(NUM_CIRCUIT_WIRES - 1 - idx)) p.inst(TRUE(NUM_CIRCUIT_WIRES - 1 - idx)) p.inst( RawInstr(""" DEFCIRCUIT ACTIVE-RESET q scratch_bit: MEASURE q scratch_bit JUMP-UNLESS @END-ACTIVE-SET scratch_bit X q LABEL @END-ACTIVE-SET DEFCIRCUIT ACTIVE-SET q scratch_bit: MEASURE q scratch_bit JUMP-WHEN @END-ACTIVE-RESET scratch_bit X q LABEL @END-ACTIVE-RESET # == Produce melody == # ---- Produce pitch for Lead Note #2 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [5] MEASURE 1 [4] MEASURE 0 [3] JUMP-UNLESS @RESET-Q5 [5] ACTIVE-SET 2 [63] JUMP @END-Q5 LABEL @RESET-Q5 ACTIVE-RESET 5 [63] LABEL @END-Q5 JUMP-UNLESS @RESET-Q4 [4] ACTIVE-SET 1 [63] JUMP @END-Q4 LABEL @RESET-Q4 ACTIVE-RESET 4 [63] LABEL @END-Q4 JUMP-UNLESS @RESET-Q3 [3] ACTIVE-SET 0 [63] JUMP @END-Q3 LABEL @RESET-Q3 ACTIVE-RESET 3 [63] LABEL @END-Q3 # ---- Produce pitch for Lead Note #3 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [8] MEASURE 1 [7] MEASURE 0 [6] JUMP-UNLESS @RESET-Q8 [8] ACTIVE-SET 2 [63] JUMP @END-Q8 LABEL @RESET-Q8 ACTIVE-RESET 2 [63] LABEL @END-Q8 JUMP-UNLESS @RESET-Q7 [7] ACTIVE-SET 1 [63] JUMP @END-Q7 LABEL @RESET-Q7 ACTIVE-RESET 1 [63] LABEL @END-Q7 JUMP-UNLESS @RESET-Q6 [6] ACTIVE-SET 0 [63] JUMP @END-Q6 LABEL @RESET-Q6 ACTIVE-RESET 0 [63] LABEL @END-Q6 # ---- Produce pitch for Lead Note #4 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [11] MEASURE 1 [10] MEASURE 0 [9] JUMP-UNLESS @RESET-Q11 [11] ACTIVE-SET 2 [63] JUMP @END-Q11 LABEL @RESET-Q11 ACTIVE-RESET 2 [63] LABEL @END-Q11 JUMP-UNLESS @RESET-Q10 [10] ACTIVE-SET 1 [63] JUMP @END-Q10 LABEL @RESET-Q10 ACTIVE-RESET 1 [63] LABEL @END-Q10 JUMP-UNLESS @RESET-Q9 [9] ACTIVE-SET 0 [63] JUMP @END-Q9 LABEL @RESET-Q9 ACTIVE-RESET 0 [63] LABEL @END-Q9 # ---- Produce pitch for Lead Note #5 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [14] MEASURE 1 [13] MEASURE 0 [12] JUMP-UNLESS @RESET-Q14 [14] ACTIVE-SET 2 [63] JUMP @END-Q14 LABEL @RESET-Q14 ACTIVE-RESET 2 [63] LABEL @END-Q14 JUMP-UNLESS @RESET-Q13 [13] ACTIVE-SET 1 [63] JUMP @END-Q13 LABEL @RESET-Q13 ACTIVE-RESET 1 [63] LABEL @END-Q13 JUMP-UNLESS @RESET-Q12 [12] ACTIVE-SET 0 [63] JUMP @END-Q12 LABEL @RESET-Q12 ACTIVE-RESET 0 [63] LABEL @END-Q12 # ---- Produce pitch for Lead Note #6 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [17] MEASURE 1 [16] MEASURE 0 [15] JUMP-UNLESS @RESET-Q17 [17] ACTIVE-SET 2 [63] JUMP @END-Q17 LABEL @RESET-Q17 ACTIVE-RESET 2 [63] LABEL @END-Q17 JUMP-UNLESS @RESET-Q16 [16] ACTIVE-SET 1 [63] JUMP @END-Q16 LABEL @RESET-Q16 ACTIVE-RESET 1 [63] LABEL @END-Q16 JUMP-UNLESS @RESET-Q15 [15] ACTIVE-SET 0 [63] JUMP @END-Q15 LABEL @RESET-Q15 ACTIVE-RESET 0 [63] LABEL @END-Q15 # ---- Produce pitch for Lead Note #7 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [20] MEASURE 1 [19] MEASURE 0 [18] # == Produce harmony == # ---- Retrieve pitch for Lead Note #1, replicate it into qubits, and produce pitch for Harmony Note #1a ---- JUMP-UNLESS @RESET-Q2a [2] ACTIVE-SET 2 [63] JUMP @END-Q2a LABEL @RESET-Q2a ACTIVE-RESET 2 [63] LABEL @END-Q2a JUMP-UNLESS @RESET-Q1a [1] ACTIVE-SET 1 [63] JUMP @END-Q1a LABEL @RESET-Q1a ACTIVE-RESET 1 [63] LABEL @END-Q1a JUMP-UNLESS @RESET-Q0a [0] ACTIVE-SET 0 [63] JUMP @END-Q0a LABEL @RESET-Q0a ACTIVE-RESET 0 [63] LABEL @END-Q0a HARMONIC_GATE 2 1 0 MEASURE 2 [23] MEASURE 1 [22] MEASURE 0 [21] # ---- Replicate Harmony Note #1a into qubits, and produce pitch for Harmony Note #1b ---- JUMP-UNLESS @RESET-Q23 [23] ACTIVE-SET 2 [63] JUMP @END-Q23 LABEL @RESET-Q23 ACTIVE-RESET 2 [63] LABEL @END-Q23 JUMP-UNLESS @RESET-Q22 [22] ACTIVE-SET 1 [63] JUMP @END-Q22 LABEL @RESET-Q22 ACTIVE-RESET 1 [63] LABEL @END-Q22 JUMP-UNLESS @RESET-Q21 [21] ACTIVE-SET 0 [63] JUMP @END-Q21 LABEL @RESET-Q21 ACTIVE-RESET 0 [63] LABEL @END-Q21 MELODIC_GATE 2 1 0 MEASURE 2 [44] MEASURE 1 [43] MEASURE 0 [42] # ---- Retrieve pitch for Lead Note #2, replicate it into qubits, and produce pitch for Harmony Note #2a ---- JUMP-UNLESS @RESET-Q5a [5] ACTIVE-SET 2 [63] JUMP @END-Q5a LABEL @RESET-Q5a ACTIVE-RESET 2 [63] LABEL @END-Q5a JUMP-UNLESS @RESET-Q4a [4] ACTIVE-SET 1 [63] JUMP @END-Q4a LABEL @RESET-Q4a ACTIVE-RESET 1 [63] LABEL @END-Q4a JUMP-UNLESS @RESET-Q3a [3] ACTIVE-SET 0 [63] JUMP @END-Q3a LABEL @RESET-Q3a ACTIVE-RESET 0 [63] LABEL @END-Q3a HARMONIC_GATE 2 1 0 MEASURE 2 [26] MEASURE 1 [25] MEASURE 0 [24] # ---- Replicate Harmony Note #2a into qubits, and produce pitch for Harmony Note #2b ---- JUMP-UNLESS @RESET-Q26 [26] ACTIVE-SET 2 [63] JUMP @END-Q26 LABEL @RESET-Q26 ACTIVE-RESET 2 [63] LABEL @END-Q26 JUMP-UNLESS @RESET-Q25 [25] ACTIVE-SET 1 [63] JUMP @END-Q25 LABEL @RESET-Q25 ACTIVE-RESET 1 [63] LABEL @END-Q25 JUMP-UNLESS @RESET-Q24 [24] ACTIVE-SET 0 [63] JUMP @END-Q24 LABEL @RESET-Q24 ACTIVE-RESET 0 [63] LABEL @END-Q24 MELODIC_GATE 2 1 0 MEASURE 2 [47] MEASURE 1 [46] MEASURE 0 [45] # ---- Retrieve pitch for Lead Note #3, replicate it into qubits, and produce pitch for Harmony Note #3a ---- JUMP-UNLESS @RESET-Q8a [8] ACTIVE-SET 2 [63] JUMP @END-Q8a LABEL @RESET-Q8a ACTIVE-RESET 2 [63] LABEL @END-Q8a JUMP-UNLESS @RESET-Q7a [7] ACTIVE-SET 1 [63] JUMP @END-Q7a LABEL @RESET-Q7a ACTIVE-RESET 1 [63] LABEL @END-Q7a JUMP-UNLESS @RESET-Q6a [6] ACTIVE-SET 0 [63] JUMP @END-Q6a LABEL @RESET-Q6a ACTIVE-RESET 0 [63] LABEL @END-Q6a HARMONIC_GATE 2 1 0 MEASURE 2 [29] MEASURE 1 [28] MEASURE 0 [27] # ---- Replicate Harmony Note #3a into qubits, and produce pitch for Harmony Note #3b ---- JUMP-UNLESS @RESET-Q29 [29] ACTIVE-SET 2 [63] JUMP @END-Q29 LABEL @RESET-Q29 ACTIVE-RESET 2 [63] LABEL @END-Q29 JUMP-UNLESS @RESET-Q28 [28] ACTIVE-SET 1 [63] JUMP @END-Q28 LABEL @RESET-Q28 ACTIVE-RESET 1 [63] LABEL @END-Q28 JUMP-UNLESS @RESET-Q27 [27] ACTIVE-SET 0 [63] JUMP @END-Q27 LABEL @RESET-Q27 ACTIVE-RESET 0 [63] LABEL @END-Q27 MELODIC_GATE 2 1 0 MEASURE 2 [50] MEASURE 1 [49] MEASURE 0 [48] # ---- Retrieve pitch for Lead Note #4, replicate it into qubits, and produce pitch for Harmony Note #4a ---- JUMP-UNLESS @RESET-Q11a [11] ACTIVE-SET 2 [63] JUMP @END-Q11a LABEL @RESET-Q11a ACTIVE-RESET 2 [63] LABEL @END-Q11a JUMP-UNLESS @RESET-Q10a [10] ACTIVE-SET 1 [63] JUMP @END-Q10a LABEL @RESET-Q10a ACTIVE-RESET 1 [63] LABEL @END-Q10a JUMP-UNLESS @RESET-Q9a [9] ACTIVE-SET 0 [63] JUMP @END-Q9a LABEL @RESET-Q9a ACTIVE-RESET 0 [63] LABEL @END-Q9a HARMONIC_GATE 2 1 0 MEASURE 2 [32] MEASURE 1 [31] MEASURE 0 [30] # ---- Replicate Harmony Note #4a into qubits, and produce pitch for Harmony Note #4b ---- JUMP-UNLESS @RESET-Q32 [32] ACTIVE-SET 2 [63] JUMP @END-Q32 LABEL @RESET-Q32 ACTIVE-RESET 2 [63] LABEL @END-Q32 JUMP-UNLESS @RESET-Q31 [31] ACTIVE-SET 1 [63] JUMP @END-Q31 LABEL @RESET-Q31 ACTIVE-RESET 1 [63] LABEL @END-Q31 JUMP-UNLESS @RESET-Q30 [30] ACTIVE-SET 0 [63] JUMP @END-Q30 LABEL @RESET-Q30 ACTIVE-RESET 0 [63] LABEL @END-Q30 MELODIC_GATE 2 1 0 MEASURE 2 [53] MEASURE 1 [52] MEASURE 0 [51] # ---- Retrieve pitch for Lead Note #5, replicate it into qubits, and produce pitch for Harmony Note #5a ---- JUMP-UNLESS @RESET-Q14a [14] ACTIVE-SET 2 [63] JUMP @END-Q14a LABEL @RESET-Q14a ACTIVE-RESET 2 [63] LABEL @END-Q14a JUMP-UNLESS @RESET-Q13a [13] ACTIVE-SET 1 [63] JUMP @END-Q13a LABEL @RESET-Q13a ACTIVE-RESET 1 [63] LABEL @END-Q13a JUMP-UNLESS @RESET-Q12a [12] ACTIVE-SET 0 [63] JUMP @END-Q12a LABEL @RESET-Q12a ACTIVE-RESET 0 [63] LABEL @END-Q12a HARMONIC_GATE 2 1 0 MEASURE 2 [35] MEASURE 1 [34] MEASURE 0 [33] # ---- Replicate Harmony Note #5a into qubits, and produce pitch for Harmony Note #5b ---- JUMP-UNLESS @RESET-Q35 [35] ACTIVE-SET 2 [63] JUMP @END-Q35 LABEL @RESET-Q35 ACTIVE-RESET 2 [63] LABEL @END-Q35 JUMP-UNLESS @RESET-Q34 [34] ACTIVE-SET 1 [63] JUMP @END-Q34 LABEL @RESET-Q34 ACTIVE-RESET 1 [63] LABEL @END-Q34 JUMP-UNLESS @RESET-Q33 [33] ACTIVE-SET 0 [63] JUMP @END-Q33 LABEL @RESET-Q33 ACTIVE-RESET 0 [63] LABEL @END-Q33 MELODIC_GATE 2 1 0 MEASURE 2 [56] MEASURE 1 [55] MEASURE 0 [54] # ---- Retrieve pitch for Lead Note #6, replicate it into qubits, and produce pitch for Harmony Note #6a ---- JUMP-UNLESS @RESET-Q17a [17] ACTIVE-SET 2 [63] JUMP @END-Q17a LABEL @RESET-Q17a ACTIVE-RESET 2 [63] LABEL @END-Q17a JUMP-UNLESS @RESET-Q16a [16] ACTIVE-SET 1 [63] JUMP @END-Q16a LABEL @RESET-Q16a ACTIVE-RESET 1 [63] LABEL @END-Q16a JUMP-UNLESS @RESET-Q15a [15] ACTIVE-SET 0 [63] JUMP @END-Q15a LABEL @RESET-Q15a ACTIVE-RESET 0 [63] LABEL @END-Q15a HARMONIC_GATE 2 1 0 MEASURE 2 [38] MEASURE 1 [37] MEASURE 0 [36] # ---- Replicate Harmony Note #6a into qubits, and produce pitch for Harmony Note #6b ---- JUMP-UNLESS @RESET-Q38 [38] ACTIVE-SET 2 [63] JUMP @END-Q38 LABEL @RESET-Q38 ACTIVE-RESET 2 [63] LABEL @END-Q38 JUMP-UNLESS @RESET-Q37 [37] ACTIVE-SET 1 [63] JUMP @END-Q37 LABEL @RESET-Q37 ACTIVE-RESET 1 [63] LABEL @END-Q37 JUMP-UNLESS @RESET-Q36 [36] ACTIVE-SET 0 [63] JUMP @END-Q36 LABEL @RESET-Q36 ACTIVE-RESET 0 [63] LABEL @END-Q36 MELODIC_GATE 2 1 0 MEASURE 2 [59] MEASURE 1 [58] MEASURE 0 [57] # ---- Retrieve pitch for Lead Note #7, replicate it into qubits, and produce pitch for Harmony Note #7a ---- JUMP-UNLESS @RESET-Q20a [20] ACTIVE-SET 2 [63] JUMP @END-Q20a LABEL @RESET-Q20a ACTIVE-RESET 2 [63] LABEL @END-Q20a JUMP-UNLESS @RESET-Q19a [19] ACTIVE-SET 1 [63] JUMP @END-Q19a LABEL @RESET-Q19a ACTIVE-RESET 1 [63] LABEL @END-Q19a JUMP-UNLESS @RESET-Q18a [18] ACTIVE-SET 0 [63] JUMP @END-Q18a LABEL @RESET-Q18a ACTIVE-RESET 0 [63] LABEL @END-Q18a HARMONIC_GATE 2 1 0 MEASURE 2 [41] MEASURE 1 [40] MEASURE 0 [39] # ---- Replicate Harmony Note #7a into qubits, and produce pitch for Harmony Note #7b ---- JUMP-UNLESS @RESET-Q41 [41] ACTIVE-SET 2 [63] JUMP @END-Q41 LABEL @RESET-Q41 ACTIVE-RESET 2 [63] LABEL @END-Q41 JUMP-UNLESS @RESET-Q40 [40] ACTIVE-SET 1 [63] JUMP @END-Q40 LABEL @RESET-Q40 ACTIVE-RESET 1 [63] LABEL @END-Q40 JUMP-UNLESS @RESET-Q39 [39] ACTIVE-SET 0 [63] JUMP @END-Q39 LABEL @RESET-Q39 ACTIVE-RESET 0 [63] LABEL @END-Q39 MELODIC_GATE 2 1 0 MEASURE 2 [62] MEASURE 1 [61] MEASURE 0 [60] """)) #print(p) use_simulator = True if use_simulator: num_runs = 1 res = qvm.run(p, [ 2, 1, 0, 5, 4, 3, 8, 7, 6, 11, 10, 9, 14, 13, 12, 17, 16, 15, 20, 19, 18, 23, 22, 21, 44, 43, 42, 26, 25, 24, 47, 46, 45, 29, 28, 27, 50, 49, 48, 32, 31, 30, 53, 52, 51, 35, 34, 33, 56, 55, 54, 38, 37, 36, 59, 58, 57, 41, 40, 39, 62, 61, 60 ], num_runs) #print(res) all_note_nums = create_note_nums_array(res[0]) melody_note_nums = all_note_nums[0:7] harmony_note_nums = all_note_nums[7:21] else: melody_note_nums = [0, 1, 2, 3, 4, 5, 6] harmony_note_nums = [2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 4, 3, 2] ret_dict = { "melody": melody_note_nums, "harmony": harmony_note_nums, "lilypond": create_lilypond(melody_note_nums, harmony_note_nums), "toy_piano": create_toy_piano(melody_note_nums, harmony_note_nums) } return jsonify(ret_dict)
def exitPragma(self, ctx): # type: (QuilParser.PragmaContext) -> None pragma_names = ' '.join(map(lambda x: x.getText(), ctx.IDENTIFIER())) self.result.append( RawInstr(ctx.PRAGMA().getText() + ' ' + pragma_names + ' ' + ctx.STRING().getText()))
RawInstr(""" DEFCIRCUIT ACTIVE-RESET q scratch_bit: MEASURE q scratch_bit JUMP-UNLESS @END-ACTIVE-SET scratch_bit X q LABEL @END-ACTIVE-SET DEFCIRCUIT ACTIVE-SET q scratch_bit: MEASURE q scratch_bit JUMP-WHEN @END-ACTIVE-RESET scratch_bit X q LABEL @END-ACTIVE-RESET # == Produce melody == # ---- Produce pitch for Lead Note #2 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [5] MEASURE 1 [4] MEASURE 0 [3] JUMP-UNLESS @RESET-Q5 [5] ACTIVE-SET 2 [63] JUMP @END-Q5 LABEL @RESET-Q5 ACTIVE-RESET 5 [63] LABEL @END-Q5 JUMP-UNLESS @RESET-Q4 [4] ACTIVE-SET 1 [63] JUMP @END-Q4 LABEL @RESET-Q4 ACTIVE-RESET 4 [63] LABEL @END-Q4 JUMP-UNLESS @RESET-Q3 [3] ACTIVE-SET 0 [63] JUMP @END-Q3 LABEL @RESET-Q3 ACTIVE-RESET 3 [63] LABEL @END-Q3 # ---- Produce pitch for Lead Note #3 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [8] MEASURE 1 [7] MEASURE 0 [6] JUMP-UNLESS @RESET-Q8 [8] ACTIVE-SET 2 [63] JUMP @END-Q8 LABEL @RESET-Q8 ACTIVE-RESET 2 [63] LABEL @END-Q8 JUMP-UNLESS @RESET-Q7 [7] ACTIVE-SET 1 [63] JUMP @END-Q7 LABEL @RESET-Q7 ACTIVE-RESET 1 [63] LABEL @END-Q7 JUMP-UNLESS @RESET-Q6 [6] ACTIVE-SET 0 [63] JUMP @END-Q6 LABEL @RESET-Q6 ACTIVE-RESET 0 [63] LABEL @END-Q6 # ---- Produce pitch for Lead Note #4 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [11] MEASURE 1 [10] MEASURE 0 [9] JUMP-UNLESS @RESET-Q11 [11] ACTIVE-SET 2 [63] JUMP @END-Q11 LABEL @RESET-Q11 ACTIVE-RESET 2 [63] LABEL @END-Q11 JUMP-UNLESS @RESET-Q10 [10] ACTIVE-SET 1 [63] JUMP @END-Q10 LABEL @RESET-Q10 ACTIVE-RESET 1 [63] LABEL @END-Q10 JUMP-UNLESS @RESET-Q9 [9] ACTIVE-SET 0 [63] JUMP @END-Q9 LABEL @RESET-Q9 ACTIVE-RESET 0 [63] LABEL @END-Q9 # ---- Produce pitch for Lead Note #5 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [14] MEASURE 1 [13] MEASURE 0 [12] JUMP-UNLESS @RESET-Q14 [14] ACTIVE-SET 2 [63] JUMP @END-Q14 LABEL @RESET-Q14 ACTIVE-RESET 2 [63] LABEL @END-Q14 JUMP-UNLESS @RESET-Q13 [13] ACTIVE-SET 1 [63] JUMP @END-Q13 LABEL @RESET-Q13 ACTIVE-RESET 1 [63] LABEL @END-Q13 JUMP-UNLESS @RESET-Q12 [12] ACTIVE-SET 0 [63] JUMP @END-Q12 LABEL @RESET-Q12 ACTIVE-RESET 0 [63] LABEL @END-Q12 # ---- Produce pitch for Lead Note #6 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [17] MEASURE 1 [16] MEASURE 0 [15] JUMP-UNLESS @RESET-Q17 [17] ACTIVE-SET 2 [63] JUMP @END-Q17 LABEL @RESET-Q17 ACTIVE-RESET 2 [63] LABEL @END-Q17 JUMP-UNLESS @RESET-Q16 [16] ACTIVE-SET 1 [63] JUMP @END-Q16 LABEL @RESET-Q16 ACTIVE-RESET 1 [63] LABEL @END-Q16 JUMP-UNLESS @RESET-Q15 [15] ACTIVE-SET 0 [63] JUMP @END-Q15 LABEL @RESET-Q15 ACTIVE-RESET 0 [63] LABEL @END-Q15 # ---- Produce pitch for Lead Note #7 and replicate measurement results into qubits ---- MELODIC_GATE 2 1 0 MEASURE 2 [20] MEASURE 1 [19] MEASURE 0 [18] # == Produce harmony == # ---- Retrieve pitch for Lead Note #1, replicate it into qubits, and produce pitch for Harmony Note #1a ---- JUMP-UNLESS @RESET-Q2a [2] ACTIVE-SET 2 [63] JUMP @END-Q2a LABEL @RESET-Q2a ACTIVE-RESET 2 [63] LABEL @END-Q2a JUMP-UNLESS @RESET-Q1a [1] ACTIVE-SET 1 [63] JUMP @END-Q1a LABEL @RESET-Q1a ACTIVE-RESET 1 [63] LABEL @END-Q1a JUMP-UNLESS @RESET-Q0a [0] ACTIVE-SET 0 [63] JUMP @END-Q0a LABEL @RESET-Q0a ACTIVE-RESET 0 [63] LABEL @END-Q0a HARMONIC_GATE 2 1 0 MEASURE 2 [23] MEASURE 1 [22] MEASURE 0 [21] # ---- Replicate Harmony Note #1a into qubits, and produce pitch for Harmony Note #1b ---- JUMP-UNLESS @RESET-Q23 [23] ACTIVE-SET 2 [63] JUMP @END-Q23 LABEL @RESET-Q23 ACTIVE-RESET 2 [63] LABEL @END-Q23 JUMP-UNLESS @RESET-Q22 [22] ACTIVE-SET 1 [63] JUMP @END-Q22 LABEL @RESET-Q22 ACTIVE-RESET 1 [63] LABEL @END-Q22 JUMP-UNLESS @RESET-Q21 [21] ACTIVE-SET 0 [63] JUMP @END-Q21 LABEL @RESET-Q21 ACTIVE-RESET 0 [63] LABEL @END-Q21 MELODIC_GATE 2 1 0 MEASURE 2 [44] MEASURE 1 [43] MEASURE 0 [42] # ---- Retrieve pitch for Lead Note #2, replicate it into qubits, and produce pitch for Harmony Note #2a ---- JUMP-UNLESS @RESET-Q5a [5] ACTIVE-SET 2 [63] JUMP @END-Q5a LABEL @RESET-Q5a ACTIVE-RESET 2 [63] LABEL @END-Q5a JUMP-UNLESS @RESET-Q4a [4] ACTIVE-SET 1 [63] JUMP @END-Q4a LABEL @RESET-Q4a ACTIVE-RESET 1 [63] LABEL @END-Q4a JUMP-UNLESS @RESET-Q3a [3] ACTIVE-SET 0 [63] JUMP @END-Q3a LABEL @RESET-Q3a ACTIVE-RESET 0 [63] LABEL @END-Q3a HARMONIC_GATE 2 1 0 MEASURE 2 [26] MEASURE 1 [25] MEASURE 0 [24] # ---- Replicate Harmony Note #2a into qubits, and produce pitch for Harmony Note #2b ---- JUMP-UNLESS @RESET-Q26 [26] ACTIVE-SET 2 [63] JUMP @END-Q26 LABEL @RESET-Q26 ACTIVE-RESET 2 [63] LABEL @END-Q26 JUMP-UNLESS @RESET-Q25 [25] ACTIVE-SET 1 [63] JUMP @END-Q25 LABEL @RESET-Q25 ACTIVE-RESET 1 [63] LABEL @END-Q25 JUMP-UNLESS @RESET-Q24 [24] ACTIVE-SET 0 [63] JUMP @END-Q24 LABEL @RESET-Q24 ACTIVE-RESET 0 [63] LABEL @END-Q24 MELODIC_GATE 2 1 0 MEASURE 2 [47] MEASURE 1 [46] MEASURE 0 [45] # ---- Retrieve pitch for Lead Note #3, replicate it into qubits, and produce pitch for Harmony Note #3a ---- JUMP-UNLESS @RESET-Q8a [8] ACTIVE-SET 2 [63] JUMP @END-Q8a LABEL @RESET-Q8a ACTIVE-RESET 2 [63] LABEL @END-Q8a JUMP-UNLESS @RESET-Q7a [7] ACTIVE-SET 1 [63] JUMP @END-Q7a LABEL @RESET-Q7a ACTIVE-RESET 1 [63] LABEL @END-Q7a JUMP-UNLESS @RESET-Q6a [6] ACTIVE-SET 0 [63] JUMP @END-Q6a LABEL @RESET-Q6a ACTIVE-RESET 0 [63] LABEL @END-Q6a HARMONIC_GATE 2 1 0 MEASURE 2 [29] MEASURE 1 [28] MEASURE 0 [27] # ---- Replicate Harmony Note #3a into qubits, and produce pitch for Harmony Note #3b ---- JUMP-UNLESS @RESET-Q29 [29] ACTIVE-SET 2 [63] JUMP @END-Q29 LABEL @RESET-Q29 ACTIVE-RESET 2 [63] LABEL @END-Q29 JUMP-UNLESS @RESET-Q28 [28] ACTIVE-SET 1 [63] JUMP @END-Q28 LABEL @RESET-Q28 ACTIVE-RESET 1 [63] LABEL @END-Q28 JUMP-UNLESS @RESET-Q27 [27] ACTIVE-SET 0 [63] JUMP @END-Q27 LABEL @RESET-Q27 ACTIVE-RESET 0 [63] LABEL @END-Q27 MELODIC_GATE 2 1 0 MEASURE 2 [50] MEASURE 1 [49] MEASURE 0 [48] # ---- Retrieve pitch for Lead Note #4, replicate it into qubits, and produce pitch for Harmony Note #4a ---- JUMP-UNLESS @RESET-Q11a [11] ACTIVE-SET 2 [63] JUMP @END-Q11a LABEL @RESET-Q11a ACTIVE-RESET 2 [63] LABEL @END-Q11a JUMP-UNLESS @RESET-Q10a [10] ACTIVE-SET 1 [63] JUMP @END-Q10a LABEL @RESET-Q10a ACTIVE-RESET 1 [63] LABEL @END-Q10a JUMP-UNLESS @RESET-Q9a [9] ACTIVE-SET 0 [63] JUMP @END-Q9a LABEL @RESET-Q9a ACTIVE-RESET 0 [63] LABEL @END-Q9a HARMONIC_GATE 2 1 0 MEASURE 2 [32] MEASURE 1 [31] MEASURE 0 [30] # ---- Replicate Harmony Note #4a into qubits, and produce pitch for Harmony Note #4b ---- JUMP-UNLESS @RESET-Q32 [32] ACTIVE-SET 2 [63] JUMP @END-Q32 LABEL @RESET-Q32 ACTIVE-RESET 2 [63] LABEL @END-Q32 JUMP-UNLESS @RESET-Q31 [31] ACTIVE-SET 1 [63] JUMP @END-Q31 LABEL @RESET-Q31 ACTIVE-RESET 1 [63] LABEL @END-Q31 JUMP-UNLESS @RESET-Q30 [30] ACTIVE-SET 0 [63] JUMP @END-Q30 LABEL @RESET-Q30 ACTIVE-RESET 0 [63] LABEL @END-Q30 MELODIC_GATE 2 1 0 MEASURE 2 [53] MEASURE 1 [52] MEASURE 0 [51] # ---- Retrieve pitch for Lead Note #5, replicate it into qubits, and produce pitch for Harmony Note #5a ---- JUMP-UNLESS @RESET-Q14a [14] ACTIVE-SET 2 [63] JUMP @END-Q14a LABEL @RESET-Q14a ACTIVE-RESET 2 [63] LABEL @END-Q14a JUMP-UNLESS @RESET-Q13a [13] ACTIVE-SET 1 [63] JUMP @END-Q13a LABEL @RESET-Q13a ACTIVE-RESET 1 [63] LABEL @END-Q13a JUMP-UNLESS @RESET-Q12a [12] ACTIVE-SET 0 [63] JUMP @END-Q12a LABEL @RESET-Q12a ACTIVE-RESET 0 [63] LABEL @END-Q12a HARMONIC_GATE 2 1 0 MEASURE 2 [35] MEASURE 1 [34] MEASURE 0 [33] # ---- Replicate Harmony Note #5a into qubits, and produce pitch for Harmony Note #5b ---- JUMP-UNLESS @RESET-Q35 [35] ACTIVE-SET 2 [63] JUMP @END-Q35 LABEL @RESET-Q35 ACTIVE-RESET 2 [63] LABEL @END-Q35 JUMP-UNLESS @RESET-Q34 [34] ACTIVE-SET 1 [63] JUMP @END-Q34 LABEL @RESET-Q34 ACTIVE-RESET 1 [63] LABEL @END-Q34 JUMP-UNLESS @RESET-Q33 [33] ACTIVE-SET 0 [63] JUMP @END-Q33 LABEL @RESET-Q33 ACTIVE-RESET 0 [63] LABEL @END-Q33 MELODIC_GATE 2 1 0 MEASURE 2 [56] MEASURE 1 [55] MEASURE 0 [54] # ---- Retrieve pitch for Lead Note #6, replicate it into qubits, and produce pitch for Harmony Note #6a ---- JUMP-UNLESS @RESET-Q17a [17] ACTIVE-SET 2 [63] JUMP @END-Q17a LABEL @RESET-Q17a ACTIVE-RESET 2 [63] LABEL @END-Q17a JUMP-UNLESS @RESET-Q16a [16] ACTIVE-SET 1 [63] JUMP @END-Q16a LABEL @RESET-Q16a ACTIVE-RESET 1 [63] LABEL @END-Q16a JUMP-UNLESS @RESET-Q15a [15] ACTIVE-SET 0 [63] JUMP @END-Q15a LABEL @RESET-Q15a ACTIVE-RESET 0 [63] LABEL @END-Q15a HARMONIC_GATE 2 1 0 MEASURE 2 [38] MEASURE 1 [37] MEASURE 0 [36] # ---- Replicate Harmony Note #6a into qubits, and produce pitch for Harmony Note #6b ---- JUMP-UNLESS @RESET-Q38 [38] ACTIVE-SET 2 [63] JUMP @END-Q38 LABEL @RESET-Q38 ACTIVE-RESET 2 [63] LABEL @END-Q38 JUMP-UNLESS @RESET-Q37 [37] ACTIVE-SET 1 [63] JUMP @END-Q37 LABEL @RESET-Q37 ACTIVE-RESET 1 [63] LABEL @END-Q37 JUMP-UNLESS @RESET-Q36 [36] ACTIVE-SET 0 [63] JUMP @END-Q36 LABEL @RESET-Q36 ACTIVE-RESET 0 [63] LABEL @END-Q36 MELODIC_GATE 2 1 0 MEASURE 2 [59] MEASURE 1 [58] MEASURE 0 [57] # ---- Retrieve pitch for Lead Note #7, replicate it into qubits, and produce pitch for Harmony Note #7a ---- JUMP-UNLESS @RESET-Q20a [20] ACTIVE-SET 2 [63] JUMP @END-Q20a LABEL @RESET-Q20a ACTIVE-RESET 2 [63] LABEL @END-Q20a JUMP-UNLESS @RESET-Q19a [19] ACTIVE-SET 1 [63] JUMP @END-Q19a LABEL @RESET-Q19a ACTIVE-RESET 1 [63] LABEL @END-Q19a JUMP-UNLESS @RESET-Q18a [18] ACTIVE-SET 0 [63] JUMP @END-Q18a LABEL @RESET-Q18a ACTIVE-RESET 0 [63] LABEL @END-Q18a HARMONIC_GATE 2 1 0 MEASURE 2 [41] MEASURE 1 [40] MEASURE 0 [39] # ---- Replicate Harmony Note #7a into qubits, and produce pitch for Harmony Note #7b ---- JUMP-UNLESS @RESET-Q41 [41] ACTIVE-SET 2 [63] JUMP @END-Q41 LABEL @RESET-Q41 ACTIVE-RESET 2 [63] LABEL @END-Q41 JUMP-UNLESS @RESET-Q40 [40] ACTIVE-SET 1 [63] JUMP @END-Q40 LABEL @RESET-Q40 ACTIVE-RESET 1 [63] LABEL @END-Q40 JUMP-UNLESS @RESET-Q39 [39] ACTIVE-SET 0 [63] JUMP @END-Q39 LABEL @RESET-Q39 ACTIVE-RESET 0 [63] LABEL @END-Q39 MELODIC_GATE 2 1 0 MEASURE 2 [62] MEASURE 1 [61] MEASURE 0 [60] """))