docs: def search(title=None, artist=None, artist_id=None, combined=None, description=None, style=None, mood=None,
             results=None, start=None, max_tempo=None, min_tempo=None,
             max_duration=None, min_duration=None, max_loudness=None, min_loudness=None,
             artist_max_familiarity=None, artist_min_familiarity=None, artist_max_hotttnesss=None,
             artist_min_hotttnesss=None, song_max_hotttnesss=None, song_min_hotttnesss=None, mode=None,
             min_energy=None, max_energy=None, min_danceability=None, max_danceability=None,
             key=None, max_latitude=None, min_latitude=None, max_longitude=None, min_longitude=None,
             sort=None, buckets=None, limit=False, test_new_things=None, rank_type=None,
             artist_start_year_after=None, artist_start_year_before=None, artist_end_year_after=None,
             artist_end_year_before=None,song_type=None,min_song_currency=None,max_song_currency=None,
             min_song_discovery=None, max_song_discovery=None, max_acousticness=None, min_acousticness=None,
             max_liveness=None, min_liveness=None, max_speechiness=None, min_speechiness=None,
             max_valence=None, min_valence=None):
      """Search for songs by name, description, or constraint.
  
      Args:
  
      Kwargs:
          title (str): the name of a song
          artist (str): the name of an artist
          artist_id (str): the artist_id
          combined (str): the artist name and song title
          description (str): A string describing the artist and song
          style (str): A string describing the style/genre of the artist and song
          mood (str): A string describing the mood of the artist and song
          results (int): An integer number of results to return
          max_acousticness (float): The max acousticness of song results
          min_acousticness (float): The min acousticness of song results
          max_tempo (float): The max tempo of song results
          min_tempo (float): The min tempo of song results
          max_duration (float): The max duration of song results
          min_duration (float): The min duration of song results
          max_liveness (float): The max liveness of song results
          min_liveness (float): The min liveness of song results
          max_loudness (float): The max loudness of song results
          min_loudness (float): The min loudness of song results
          max_speechiness (float): The max speechiness of song results        
          min_speechiess (float): The min speechiness of song results
          max_valence (float): The max valence of song results
          min_valence (float): The min valence of song results
          artist_max_familiarity (float): A float specifying the max familiarity of artists to search for
          artist_min_familiarity (float): A float specifying the min familiarity of artists to search for
          artist_max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for
          artist_min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for
          song_max_hotttnesss (float): A float specifying the max hotttnesss of songs to search for
          song_min_hotttnesss (float): A float specifying the max hotttnesss of songs to search for
          max_energy (float): The max energy of song results
          min_energy (float): The min energy of song results
          max_dancibility (float): The max dancibility of song results
          min_dancibility (float): The min dancibility of song results
          mode (int): 0 or 1 (minor or major)
          key (int): 0-11 (c, c-sharp, d, e-flat, e, f, f-sharp, g, a-flat, a, b-flat, b)
          max_latitude (float): A float specifying the max latitude of artists to search for
          min_latitude (float): A float specifying the min latitude of artists to search for
          max_longitude (float): A float specifying the max longitude of artists to search for
          min_longitude (float): A float specifying the min longitude of artists to search for                        
          sort (str): A string indicating an attribute and order for sorting the results
          buckets (list): A list of strings specifying which buckets to retrieve
          limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets
          rank_type (str): A string denoting the desired ranking for description searches, either 'relevance' or 'familiarity
          artist_start_year_before (int): Returned songs's artists will have started recording music before this year.
          artist_start_year_after (int): Returned songs's artists will have started recording music after this year.
          artist_end_year_before (int): Returned songs's artists will have stopped recording music before this year.
          artist_end_year_after (int): Returned songs's artists will have stopped recording music after this year.
          song_type (string): A string or list of strings specifiying the type of song to search for.
  
      Returns:
          A list of Song objects
  
      Example:
  
      >>> results = song.search(artist='shakira', title='she wolf', buckets=['id:7digital', 'tracks'], limit=True, results=1)
      >>> results
      [<song - She Wolf>]
      >>> results[0].get_tracks('7digital')[0]
      {u'catalog': u'7digital',
       u'foreign_id': u'7digital:track:7854109',
       u'id': u'TRTOBSE12903CACEC4',
       u'preview_url': u'http://previews.7digital.com/clips/34/7854109.clip.mp3',
       u'release_image': u'http://cdn.7static.com/static/img/sleeveart/00/007/081/0000708184_200.jpg'}
      >>> 
      """
      
      limit = str(limit).lower()
      kwargs = locals()
      kwargs['bucket'] = buckets
      del kwargs['buckets']
      
      result = util.callm("%s/%s" % ('song', 'search'), kwargs)
      return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]