code: 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):
      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']]