def testSerialization(self):
        """ test to ensure serialization preserves the state of the region
        correctly. """
        anomalyLikelihoodRegion1 = AnomalyLikelihoodRegion()
        inputs = AnomalyLikelihoodRegion.getSpec()['inputs']
        outputs = AnomalyLikelihoodRegion.getSpec()['outputs']

        for _ in range(0, 6):
            inputs['rawAnomalyScore'] = numpy.array([random.random()])
            inputs['metricValue'] = numpy.array([random.random()])
            anomalyLikelihoodRegion1.compute(inputs, outputs)
            score1 = outputs['anomalyLikelihood'][0]

        proto1 = AnomalyLikelihoodRegionProto.new_message()
        anomalyLikelihoodRegion1.write(proto1)

        # Write the proto to a temp file and read it back into a new proto
        with tempfile.TemporaryFile() as f:
            proto1.write(f)
            f.seek(0)
            proto2 = AnomalyLikelihoodRegionProto.read(f)

        # # Load the deserialized proto

        anomalyLikelihoodRegion2 = AnomalyLikelihoodRegion.read(proto2)
        self.assertEqual(anomalyLikelihoodRegion1, anomalyLikelihoodRegion2)

        for _ in range(6, 500):
            inputs['rawAnomalyScore'] = numpy.array([random.random()])
            inputs['metricValue'] = numpy.array([random.random()])
            anomalyLikelihoodRegion1.compute(inputs, outputs)
            score1 = outputs['anomalyLikelihood'][0]
            anomalyLikelihoodRegion2.compute(inputs, outputs)
            score2 = outputs['anomalyLikelihood'][0]
            self.assertEqual(score1, score2)
 def testParamterError(self):
     """ ensure historicWindowSize is greater than estimationSamples """
     try:
         anomalyLikelihoodRegion = AnomalyLikelihoodRegion(
             estimationSamples=100, historicWindowSize=99)
         self.assertEqual(False, True, "Should have failed with ValueError")
     except ValueError:
         pass
    def testSerialization(self):
        """ test to ensure serialization preserves the state of the region
        correctly. """
        anomalyLikelihoodRegion1 = AnomalyLikelihoodRegion()
        inputs = AnomalyLikelihoodRegion.getSpec()['inputs']
        outputs = AnomalyLikelihoodRegion.getSpec()['outputs']
        parameters = AnomalyLikelihoodRegion.getSpec()['parameters']

        # Make sure to calculate distribution by passing the probation period
        learningPeriod = parameters['learningPeriod']['defaultValue']
        reestimationPeriod = parameters['reestimationPeriod']['defaultValue']
        probation = learningPeriod + reestimationPeriod
        for _ in xrange(0, probation + 1):
            inputs['rawAnomalyScore'] = numpy.array([random.random()])
            inputs['metricValue'] = numpy.array([random.random()])
            anomalyLikelihoodRegion1.compute(inputs, outputs)
            score1 = outputs['anomalyLikelihood'][0]

        proto1 = AnomalyLikelihoodRegionProto.new_message()
        anomalyLikelihoodRegion1.write(proto1)

        # Write the proto to a temp file and read it back into a new proto
        with tempfile.TemporaryFile() as f:
            proto1.write(f)
            f.seek(0)
            proto2 = AnomalyLikelihoodRegionProto.read(f)

        # # Load the deserialized proto

        anomalyLikelihoodRegion2 = AnomalyLikelihoodRegion.read(proto2)
        self.assertEqual(anomalyLikelihoodRegion1, anomalyLikelihoodRegion2)

        window = parameters['historicWindowSize']['defaultValue']
        for _ in xrange(0, window + 1):
            inputs['rawAnomalyScore'] = numpy.array([random.random()])
            inputs['metricValue'] = numpy.array([random.random()])
            anomalyLikelihoodRegion1.compute(inputs, outputs)
            score1 = outputs['anomalyLikelihood'][0]
            anomalyLikelihoodRegion2.compute(inputs, outputs)
            score2 = outputs['anomalyLikelihood'][0]
            self.assertEqual(score1, score2)
    def testLikelihoodValues(self):
        """ test to see if the region keeps track of state correctly and produces
        the same likelihoods as the AnomalyLikelihood module """
        anomalyLikelihoodRegion = AnomalyLikelihoodRegion()
        anomalyLikelihood = AnomalyLikelihood()

        inputs = AnomalyLikelihoodRegion.getSpec()['inputs']
        outputs = AnomalyLikelihoodRegion.getSpec()['outputs']
        with open(_INPUT_DATA_FILE) as f:
            reader = csv.reader(f)
            reader.next()
            for record in reader:
                consumption = float(record[1])
                anomalyScore = float(record[2])
                likelihood1 = anomalyLikelihood.anomalyProbability(
                    consumption, anomalyScore)

                inputs['rawAnomalyScore'] = numpy.array([anomalyScore])
                inputs['metricValue'] = numpy.array([consumption])
                anomalyLikelihoodRegion.compute(inputs, outputs)
                likelihood2 = outputs['anomalyLikelihood'][0]

                self.assertEqual(likelihood1, likelihood2)