code: def classificationAccuracyVsNoise(sp, inputVectors, noiseLevelList):
    
    numInputVector, inputSize = inputVectors.shape
  
    if sp is None:
      targetOutputColumns = copy.deepcopy(inputVectors)
    else:
      columnNumber = np.prod(sp.getColumnDimensions())
      # calculate target output given the uncorrupted input vectors
      targetOutputColumns = np.zeros((numInputVector, columnNumber),
                                     dtype=uintType)
      for i in range(numInputVector):
        sp.compute(inputVectors[i][:], False, targetOutputColumns[i][:])
  
    outcomes = np.zeros((len(noiseLevelList), numInputVector))
    for i in range(len(noiseLevelList)):
      for j in range(numInputVector):
        corruptedInputVector = copy.deepcopy(inputVectors[j][:])
        corruptSparseVector(corruptedInputVector, noiseLevelList[i])
  
        if sp is None:
          outputColumns = copy.deepcopy(corruptedInputVector)
        else:
          outputColumns = np.zeros((columnNumber, ), dtype=uintType)
          sp.compute(corruptedInputVector, False, outputColumns)
  
        predictedClassLabel = classifySPoutput(targetOutputColumns, outputColumns)
        outcomes[i][j] = predictedClassLabel == j
  
    predictionAccuracy = np.mean(outcomes, 1)
    return predictionAccuracy
docs: Evaluate whether the SP output is classifiable, with varying amount of noise
    @param sp a spatial pooler instance
    @param inputVectors (list) list of input SDRs
    @param noiseLevelList (list) list of noise levels
    :return: