# Path: note_seq/constants.py
# DEFAULT_QUARTERS_PER_MINUTE = 120.0
# DEFAULT_STEPS_PER_BAR = 16  # 4/4 music sampled at 4 steps per quarter note.
# DEFAULT_STEPS_PER_QUARTER = 4
# DEFAULT_STEPS_PER_SECOND = 100
# STANDARD_PPQ = 220
# NUM_SPECIAL_MELODY_EVENTS = 2
# MELODY_NOTE_OFF = -1
# MELODY_NO_EVENT = -2
# MIN_MELODY_EVENT = -2
# MAX_MELODY_EVENT = 127
# MIN_MIDI_PITCH = 0  # Inclusive.
# MAX_MIDI_PITCH = 127  # Inclusive.
# NUM_MIDI_PITCHES = MAX_MIDI_PITCH - MIN_MIDI_PITCH + 1
# NOTES_PER_OCTAVE = 12
# MIN_MIDI_VELOCITY = 1  # Inclusive.
# MAX_MIDI_VELOCITY = 127  # Inclusive.
# MIN_MIDI_PROGRAM = 0
# MAX_MIDI_PROGRAM = 127
# UNPITCHED_PROGRAMS = (
#     list(range(96, 104)) + list(range(112, 120)) + list(range(120, 128)))
# NO_CHORD = 'N.C.'
# MAJOR_SCALE = [0, 2, 4, 5, 7, 9, 11]
# NOTE_KEYS = [
#     [0, 1, 3, 5, 7, 8, 10],
#     [1, 2, 4, 6, 8, 9, 11],
#     [0, 2, 3, 5, 7, 9, 10],
#     [1, 3, 4, 6, 8, 10, 11],
#     [0, 2, 4, 5, 7, 9, 11],
#     [0, 1, 3, 5, 6, 8, 10],
#     [1, 2, 4, 6, 7, 9, 11],
#     [0, 2, 3, 5, 7, 8, 10],
#     [1, 3, 4, 6, 8, 9, 11],
#     [0, 2, 4, 5, 7, 9, 10],
#     [1, 3, 5, 6, 8, 10, 11],
#     [0, 2, 4, 6, 7, 9, 11]
# ]


import fractions
import re
from absl import logging
from note_seq import constants
from note_seq.protobuf import music_pb2
          pitch_change = 0
          for accidental in match.group(1).split():
            if accidental == '^':
              pitch_change += 1
            elif accidental == '_':
              pitch_change -= 1
            elif accidental == '=':
              pass
            else:
              raise ABCParseError(
                  'Invalid accidental: {}'.format(accidental))
          note.pitch += pitch_change
          self._bar_accidentals[note_name] = pitch_change
        elif note_name in self._bar_accidentals:
          note.pitch += self._bar_accidentals[note_name]
        else:
          # No accidentals, so modify according to current key.
          note.pitch += self._accidentals[note_name]

        # Octaves
        if match.group(3):
          for octave in match.group(3):
            if octave == '\'':
              note.pitch += 12
            elif octave == ',':
              note.pitch -= 12
            else:
              raise ABCParseError('Invalid octave: {}'.format(octave))

        if (note.pitch < constants.MIN_MIDI_PITCH or

# Path: note_seq/constants.py
# DEFAULT_QUARTERS_PER_MINUTE = 120.0
# DEFAULT_STEPS_PER_BAR = 16  # 4/4 music sampled at 4 steps per quarter note.
# DEFAULT_STEPS_PER_QUARTER = 4
# DEFAULT_STEPS_PER_SECOND = 100
# STANDARD_PPQ = 220
# NUM_SPECIAL_MELODY_EVENTS = 2
# MELODY_NOTE_OFF = -1
# MELODY_NO_EVENT = -2
# MIN_MELODY_EVENT = -2
# MAX_MELODY_EVENT = 127
# MIN_MIDI_PITCH = 0  # Inclusive.
# MAX_MIDI_PITCH = 127  # Inclusive.
# NUM_MIDI_PITCHES = MAX_MIDI_PITCH - MIN_MIDI_PITCH + 1
# NOTES_PER_OCTAVE = 12
# MIN_MIDI_VELOCITY = 1  # Inclusive.
# MAX_MIDI_VELOCITY = 127  # Inclusive.
# MIN_MIDI_PROGRAM = 0
# MAX_MIDI_PROGRAM = 127
# UNPITCHED_PROGRAMS = (
#     list(range(96, 104)) + list(range(112, 120)) + list(range(120, 128)))
# NO_CHORD = 'N.C.'
# MAJOR_SCALE = [0, 2, 4, 5, 7, 9, 11]
# NOTE_KEYS = [
#     [0, 1, 3, 5, 7, 8, 10],
#     [1, 2, 4, 6, 8, 9, 11],
#     [0, 2, 3, 5, 7, 9, 10],
#     [1, 3, 4, 6, 8, 10, 11],
#     [0, 2, 4, 5, 7, 9, 11],
#     [0, 1, 3, 5, 6, 8, 10],
#     [1, 2, 4, 6, 7, 9, 11],
#     [0, 2, 3, 5, 7, 8, 10],
#     [1, 3, 4, 6, 8, 9, 11],
#     [0, 2, 4, 5, 7, 9, 10],
#     [1, 3, 5, 6, 8, 10, 11],
#     [0, 2, 4, 6, 7, 9, 11]
# ]


# Path: note_seq/abc_parser.py
import fractions
import re
from absl import logging
from note_seq import constants
from note_seq.protobuf import music_pb2

          pitch_change = 0
          for accidental in match.group(1).split():
            if accidental == '^':
              pitch_change += 1
            elif accidental == '_':
              pitch_change -= 1
            elif accidental == '=':
              pass
            else:
              raise ABCParseError(
                  'Invalid accidental: {}'.format(accidental))
          note.pitch += pitch_change
          self._bar_accidentals[note_name] = pitch_change
        elif note_name in self._bar_accidentals:
          note.pitch += self._bar_accidentals[note_name]
        else:
          # No accidentals, so modify according to current key.
          note.pitch += self._accidentals[note_name]

        # Octaves
        if match.group(3):
          for octave in match.group(3):
            if octave == '\'':
              note.pitch += 12
            elif octave == ',':
              note.pitch -= 12
            else:
              raise ABCParseError('Invalid octave: {}'.format(octave))

        if (note.pitch < constants.MIN_MIDI_PITCH or

            note.pitch > constants.MAX_MIDI_PITCH):