def testClassificationAccuracy(self):
    """Test classification accuracy for sensor data."""

    networkConfigurations = generateSampleNetworkConfig(
      self.templateNetworkConfig, NUM_CATEGORIES)

    for networkConfig in networkConfigurations:
      for noiseAmplitude in WHITE_NOISE_AMPLITUDES:
        for signalMean in SIGNAL_MEANS:
          for signalAmplitude in SIGNAL_AMPLITUDES:
            for signalPeriod in SIGNAL_PERIODS:
              sensorType = networkConfig["sensorRegionConfig"].get(
                "regionType")
              spEnabled = networkConfig["sensorRegionConfig"].get(
                "regionEnabled")
              tmEnabled = networkConfig["tmRegionConfig"].get(
                "regionEnabled")
              upEnabled = networkConfig["tpRegionConfig"].get(
                "regionEnabled")
              classifierType = networkConfig["classifierRegionConfig"].get(
                "regionType")

              expParams = ("RUNNING EXPERIMENT WITH PARAMS:\n"
                           " * numRecords=%s\n"
                           " * signalAmplitude=%s\n"
                           " * signalMean=%s\n"
                           " * signalPeriod=%s\n"
                           " * noiseAmplitude=%s\n"
                           " * sensorType=%s\n"
                           " * spEnabled=%s\n"
                           " * tmEnabled=%s\n"
                           " * tpEnabled=%s\n"
                           " * classifierType=%s\n"
                           ) % (NUM_RECORDS,
                                signalAmplitude,
                                signalMean,
                                signalPeriod,
                                noiseAmplitude,
                                sensorType.split(".")[1],
                                spEnabled,
                                tmEnabled,
                                upEnabled,
                                classifierType.split(".")[1])
              print expParams

              inputFile = generateSensorData(DATA_DIR,
                                             OUTFILE_NAME,
                                             signalMean,
                                             signalPeriod,
                                             SEQUENCE_LENGTH,
                                             NUM_RECORDS,
                                             signalAmplitude,
                                             NUM_CATEGORIES,
                                             noiseAmplitude)
              
              inputFile="mu/right_test.csv"

              classifier = HTMClassifier(networkConfig, inputFile, CATEGORIES)
              minval, maxval = classifier.initialize()
              points = []
              
              classifier2 = HTMClassifier(networkConfig, inputFile, CATEGORIES)
              classifier2.initialize()
              net = classifier.network
              sensorRegion = net.regions["sensor"]
              classifierRegion = net.regions["classifier"]
              with open(inputFile, 'rb') as csvfile:
                reader = csv.reader(csvfile)
                reader.next()
                reader.next()
                reader.next()

                numCorrect = 0
                numCorrect2 = 0
                numRecords = 0

                for row in reader:
                  timestamp = row[0]
                  inputData = float(row[1])
                  points.append(inputData)
                  target = int(row[2])
                  result = classifier.start(inputData, target,
                                            learning_is_on=False)
                  sensorRegion.setParameter("useDataSource", True)
                  net.run(1)
                  result2 = CATEGORIES[int(_getClassifierInference(
                    classifierRegion))]

                  if result2 != result:
                    print "numRecords = %s" % numRecords
                    print "target = %s" % target
                    print "result = %s" % result
                    print "result2 = %s" % result2
                  if int(result) == int(target):
                    if numRecords > START_TEST:
                      numCorrect += 1
                  if int(result2) == int(target):
                    if numRecords > START_TEST:
                      numCorrect2 += 1

                  numRecords += 1

              classificationAccuracy = round(100.0 * numCorrect / (
                numRecords - START_TEST), 2)
              classificationAccuracy2 = round(100.0 *
                                              numCorrect / (
                                                numRecords - START_TEST), 2)
              print classificationAccuracy
              print classificationAccuracy2
              
              import numpy as np
              bins = np.linspace(0, 1, 10)
              histogram = np.histogram(np.array(points), bins)

              if (noiseAmplitude == 0
                  and signalMean == 1.0
                  and signalAmplitude == 1.0
                  and signalPeriod == 20.0
                  and classifierType == KNN_CLASSIFIER_TYPE
                  and spEnabled
                  and tmEnabled
                  and not upEnabled):
                self.assertEqual(classificationAccuracy, 100.00)
              elif (noiseAmplitude == 0
                    and signalMean == 1.0
                    and signalAmplitude == 1.0
                    and signalPeriod == 20.0
                    and classifierType == CLA_CLASSIFIER_TYPE
                    and spEnabled
                    and tmEnabled
                    and not upEnabled):
                self.assertEqual(classificationAccuracy, 100.00)
              elif (noiseAmplitude == 0
                    and signalMean == 1.0
                    and signalAmplitude == 1.0
                    and signalPeriod == 20.0
                    and classifierType == CLA_CLASSIFIER_TYPE
                    and spEnabled
                    and not tmEnabled
                    and not upEnabled):
                self.assertEqual(classificationAccuracy, 100.00)
              elif (noiseAmplitude == 1.0
                    and signalMean == 1.0
                    and signalAmplitude == 1.0
                    and signalPeriod == 20.0
                    and classifierType == CLA_CLASSIFIER_TYPE
                    and spEnabled
                    and tmEnabled
                    and not upEnabled):
                # using AlmostEqual until the random bug issue is fixed
                self.assertAlmostEqual(classificationAccuracy, 80, delta=5)
              elif (noiseAmplitude == 1.0
                    and signalMean == 1.0
                    and signalAmplitude == 1.0
                    and signalPeriod == 20.0
                    and classifierType == CLA_CLASSIFIER_TYPE
                    and spEnabled
                    and not tmEnabled
                    and not upEnabled):
                # using AlmostEqual until the random bug issue is fixed
                self.assertAlmostEqual(classificationAccuracy, 81, delta=5)
if __name__ == "__main__":
  dataSource = FileRecordStream(streamID="backup/training-data-attention.csv")
  network = configureNetwork(dataSource, _CONFIG)
  setNetworkLearningMode(network, _REGION_NAMES, True)

  
  sensorRegion = network.regions[
  _CONFIG["sensorRegionConfig"].get("regionName")]
  classifierRegion = network.regions[
  _CONFIG["classifierRegionConfig"].get("regionName")]
  num_correct = 0.0
  for row_id in range(_NUM_RECORDS * _NUM_CATEGORIES):
    network.run(1)
    actualValue = sensorRegion.getOutputData("categoryOut")[0]
    inferredCategory = _getClassifierInference(classifierRegion)

    if int(inferredCategory) == int(actualValue):
      num_correct += 1

  # headers = ["x", "y", "label"]
  # readers = {category: None for category in range(_NUM_CATEGORIES)}
  # for category in range(_NUM_CATEGORIES):
  #   csvFile = open(_INPUT_FILES[category], "rb")
  #   reader = csv.reader(csvFile)
  #   # skip 3 header rows
  #   reader.next()
  #   reader.next()
  #   reader.next()
  #   readers[category] = reader
  #