docs: def determine(notes):
      """Determine the scales containing the notes.
  
      All major and minor scales are recognized.
  
      Example:
      >>> determine(['A', 'Bb', 'E', 'F#', 'G'])
      ['G melodic minor', 'G Bachian', 'D harmonic major']
      """
      notes = set(notes)
      res = []
  
      for key in keys:
          for scale in _Scale.__subclasses__():
              if scale.type == 'major':
                  if (notes <= set(scale(key[0]).ascending()) or
                          notes <= set(scale(key[0]).descending())):
                      res.append(scale(key[0]).name)
              elif scale.type == 'minor':
                  if (notes <= set(scale(get_notes(key[1])[0]).ascending()) or
                          notes <= set(scale(get_notes(key[1])[0]).descending())):
                      res.append(scale(get_notes(key[1])[0]).name)
      return res