docs: def from_shorthand(note, interval, up=True):
      """Return the note on interval up or down.
  
      Examples:
      >>> from_shorthand('A', 'b3')
      'C'
      >>> from_shorthand('D', '2')
      'E'
      >>> from_shorthand('E', '2', False)
      'D'
      """
      # warning should be a valid note.
      if not notes.is_valid_note(note):
          return False
  
      # [shorthand, interval function up, interval function down]
      shorthand_lookup = [
          ['1', major_unison, major_unison],
          ['2', major_second, minor_seventh],
          ['3', major_third, minor_sixth],
          ['4', major_fourth, major_fifth],
          ['5', major_fifth, major_fourth],
          ['6', major_sixth, minor_third],
          ['7', major_seventh, minor_second],
          ]
  
      # Looking up last character in interval in shorthand_lookup and calling that
      # function.
      val = False
      for shorthand in shorthand_lookup:
          if shorthand[0] == interval[-1]:
              if up:
                  val = shorthand[1](note)
              else:
                  val = shorthand[2](note)
  
      # warning Last character in interval should be 1-7
      if val == False:
          return False
  
      # Collect accidentals
      for x in interval:
          if x == '#':
              if up:
                  val = notes.augment(val)
              else:
                  val = notes.diminish(val)
          elif x == 'b':
              if up:
                  val = notes.diminish(val)
              else:
                  val = notes.augment(val)
          else:
              return val