def featureList(pairs): features = list() markov = Markov() # go from the feature representation of the data (features) to the original data (pairs) dataFeatToData = {} for bar in pairs: seq = pairs[bar] isoFeatures = {} isoFeaturesOrig = {} rootScores = {} # each data element should have as a features all the features of the previous and subsequent tslices for i in range(len(seq)): data,label = seq[i] chordKey = data[8] # isolated features isoFeatures[i] = (getIsoFeatures(data),label) isoFeaturesOrig[i] = isoFeatures[i] rootScores[i] = [int(dat) for dat in data[:7]] for i in range(len(seq)): # subsequent measure subBar = bar.split('_')[0] + str(int(bar.split('_')[1])+1) if i < len(seq) - 1: subFeats = dict([('S_' + key, val) for (key,val) in isoFeaturesOrig[i+1][0].items()]) isoFeatures[i] = (dict(isoFeatures[i][0].items() + subFeats.items()) , isoFeatures[i][1]) elif subBar in pairs: subFeats = dict([('S_' + key, val) for (kev,val) in getIsoFeatures(pairs[subBar][0][0]).items()]) isoFeatures[i] = (dict(isoFeatures[i][0].items() + subFeats.items()) , isoFeatures[i][1]) # prev measure prevBar = bar.split('_')[0] + str(int(bar.split('_')[1])-1) if i > 0: prevFeats = dict([('P_' + key, val) for (key,val) in isoFeaturesOrig[i-1][0].items()]) #markovPred = markov.predict(chordKey, tuple([rootScores[i-1]]), markov.markov2) markovFeats = [('markov2', markov.predict(chordKey, tuple([rootScores[i-1]]), markov.markov2))] if i > 1: markovFeats += [('markov3', markov.predict(chordKey, tuple([rootScores[i-2], rootScores[i-1]]), markov.markov3))] if i > 2: markovFeats += [('markov4', markov.predict(chordKey, tuple([rootScores[i-3], rootScores[i-2], rootScores[i-1]]), markov.markov4))] isoFeatures[i] = (dict(isoFeatures[i][0].items() + prevFeats.items() + markovFeats) , isoFeatures[i][1]) #isoFeatures[i] = (dict(isoFeatures[i][0].items() + prevFeats.items()) , isoFeatures[i][1]) elif prevBar in pairs: prevFeats = dict([('P_' + key, val) for (kev,val) in getIsoFeatures(pairs[prevBar][-1][0]).items()]) isoFeatures[i] = (dict(isoFeatures[i][0].items() + subFeats.items()) , isoFeatures[i][1]) dataFeatToData[str(isoFeatures[i])] = seq[i] features += isoFeatures.values() return dataFeatToData, features