def testAlignments(test_data, classifiers):
    x0 = Symbol('x0')
    featuresets = []
    correctlyAlignedIndicesList = []
    for (i, iIndex, wordproblem, equationTemplate, solution) in test_data:
        try:
            classifier = classifiers[str(equationTemplate)]
        except KeyError:
            continue
        alignmentFeatures, correctlyAlignedIndices = extractAlignmentFeatures(wordproblem, equationTemplate, solution, i)        
        featuresets.append(alignmentFeatures)
        alignedString = ''
        for c in correctlyAlignedIndices:
            alignedString += str(c)

        correctlyAlignedIndicesList.append(alignedString)
    prediction = classifier.predict(featuresets)

    predictedAlignedIndices = []
    correct = 0

    for each in prediction:
        item = []
        for char in each:
            item.append(int(char))
        predictedAlignedIndices.append(item)

    #print 'sdsdsdsdsdsdsd'
    #print predictedAlignedIndices
    predictedAlignedValues = []
    for x in range(0, len(test_data)):
        try:
            i, iIndex,wordproblem, equationTemplate, solution = test_data[x]
            numberVector = extractNumberVectorFromQuestion(wordproblem)
            correctAlignValues = []
            for each in predictedAlignedIndices[x]:
                correctAlignValues.append(numberVector[each])
            predictedAlignedValues.append(correctAlignValues)
            #print 'correctalignedvalues'
            #print correctAlignValues
            result = solveEquations(equationTemplate, getNumberslots(equationTemplate), correctAlignValues)
            if solution[0] == result[x0]:
                correct += 1
        except:
            pass
        #print 'all values'
        #print predictedAlignedValues


    for i in range(0,len(prediction)):
        print correctlyAlignedIndicesList[i], prediction[i]
        if correctlyAlignedIndicesList[i] == prediction[i]:
            correct += 1
    print 'Correct: ' + str(correct)
def extractAlignmentFeatures(wordproblem, equationTemplate, solution, templateIndex):
    featureVector = []
    correctAlignment = []
    # numberVector = extractNumberVectorFromQuestion(wordproblem)
    noOfNumberSlots = len(getNumberslots(equationTemplate))

    correctAlignment, numberVector = findAlignment(wordproblem, equationTemplate, solution)
    numberVector = extractNumberVectorFromQuestion(wordproblem)
    # print numberVector
    correctAlignedIndices = []
    if len(correctAlignment) != 0:
        for each in correctAlignment:
            correctAlignedIndices.append(numberVector.index(each))

    while len(numberVector) != 10:
        numberVector.append(0)

    # featureVector.append(noOfNumberSlots)
    # featureVector = featureVector + numberVector + [templateIndex]
    featureVector = findFeatures(equationTemplate, wordproblem)

    # print (featureVector, correctAlignedIndices)
    return (featureVector, correctAlignedIndices)