def testCapnpWriteRead(self):
    m1 = previous_value_model.PreviousValueModel(
      opf_utils.InferenceType.TemporalMultiStep, predictedField ='a',
      predictionSteps = [1, 3, 5])

    m1.run(dict_utils.DictObj({'a' : 0}))

    # Serialize
    builderProto = PreviousValueModelProto.new_message()
    m1.write(builderProto)

    # Construct reader from populated builder
    readerProto = PreviousValueModelProto.from_bytes(builderProto.to_bytes())

    # Deserialize
    m2 = previous_value_model.PreviousValueModel.read(readerProto)

    self.assertIs(m1.getSchema(), PreviousValueModelProto)
    self.assertIs(m2.getSchema(), PreviousValueModelProto)

    self.assertEqual(m2._numPredictions, m1._numPredictions)
    self.assertEqual(m2.getInferenceType(), m1.getInferenceType())
    self.assertEqual(m2.isLearningEnabled(), m1.isLearningEnabled())
    self.assertEqual(m2.isInferenceEnabled(), m1.isInferenceEnabled())
    self.assertEqual(m2.getInferenceArgs(), m1.getInferenceArgs())
    self.assertEqual(m2._predictedField, m1._predictedField)
    self.assertEqual(m2._fieldNames, m1._fieldNames)
    self.assertEqual(m2._fieldTypes, m1._fieldTypes)
    self.assertEqual(m2._predictionSteps, m1._predictionSteps)

    # Run computes on m1 & m2 and compare results
    r1 = m1.run(dict_utils.DictObj({'a' : 1}))
    r2 = m2.run(dict_utils.DictObj({'a' : 1}))

    self.assertEqual(r2.predictionNumber, r1.predictionNumber)
    self.assertEqual(r2.rawInput, r1.rawInput)

    self.assertEqual(r2.predictionNumber, r1.predictionNumber)
    self.assertEqual(r2.inferences[opf_utils.InferenceElement.prediction],
                     r1.inferences[opf_utils.InferenceElement.prediction])
    self.assertEqual(
      r2.inferences[opf_utils.InferenceElement.multiStepBestPredictions][1],
      r1.inferences[opf_utils.InferenceElement.multiStepBestPredictions][1])
    self.assertEqual(
      r2.inferences[opf_utils.InferenceElement.multiStepBestPredictions][3],
      r1.inferences[opf_utils.InferenceElement.multiStepBestPredictions][3])
    self.assertEqual(
      r2.inferences[opf_utils.InferenceElement.multiStepBestPredictions][5],
      r1.inferences[opf_utils.InferenceElement.multiStepBestPredictions][5])
Exemplo n.º 2
0
 def testSequenceReset(self):
     encoders = {
         "a": {
             "fieldname": u"a",
             "maxval": 9,
             "minval": 0,
             "n": 10,
             "w": 1,
             "clipInput": True,
             "forced": True,
             "type": "ScalarEncoder"
         }
     }
     inferenceType = opf_utils.InferenceType.TemporalNextStep
     twoGramModel = two_gram_model.TwoGramModel(inferenceType, encoders)
     inputRecords = (dict_utils.DictObj(d) for d in ({
         "a": 5
     }, {
         "a": 6
     }, {
         "a": 5
     }, {
         "a": 6
     }))
     inferences = ((0, ), (0, ), (6, ), (0, ))
     resets = (False, False, True, False)
     for i, (inputRecord, expectedInference,
             reset) in enumerate(zip(inputRecords, inferences, resets)):
         if reset:
             twoGramModel.resetSequenceStates()
         results = twoGramModel.run(inputRecord)
         self.assertEqual(results.predictionNumber, i)
         self.assertSequenceEqual(
             results.inferences[opf_utils.InferenceElement.prediction],
             expectedInference)
Exemplo n.º 3
0
 def testCategoryPredictions(self):
     encoders = {
         "a": {
             "fieldname": u"a",
             "n": 10,
             "w": 3,
             "forced": True,
             "type": "SDRCategoryEncoder"
         }
     }
     inferenceType = opf_utils.InferenceType.TemporalNextStep
     twoGramModel = two_gram_model.TwoGramModel(inferenceType, encoders)
     inputRecords = (dict_utils.DictObj(d) for d in ({
         "a": "A"
     }, {
         "a": "B"
     }, {
         "a": "A"
     }, {
         "a": "B"
     }))
     inferences = (("", ), ("", ), ("B", ), ("A", ))
     for i, (inputRecord,
             expectedInference) in enumerate(zip(inputRecords, inferences)):
         results = twoGramModel.run(inputRecord)
         self.assertEqual(results.predictionNumber, i)
         self.assertSequenceEqual(
             results.inferences[opf_utils.InferenceElement.prediction],
             expectedInference)
  def _runNextStep(self, data):
    model = previous_value_model.PreviousValueModel(
      opf_utils.InferenceType.TemporalNextStep, predictedField ='a')

    inputRecords = (dict_utils.DictObj({'a' : d}) for d in data)

    for i, (inputRecord, expectedInference) in enumerate(zip(inputRecords,
                                                             data)):
      results = model.run(inputRecord)
      self.assertEqual(results.predictionNumber, i)
      self.assertEqual(results.inferences[
        opf_utils.InferenceElement.prediction], expectedInference)
      self.assertEqual(results.inferences[
        opf_utils.InferenceElement.multiStepBestPredictions][1],
                       expectedInference)
Exemplo n.º 5
0
 def testMultipleFields(self):
     encoders = {
         "a": {
             "fieldname": u"a",
             "maxval": 9,
             "minval": 0,
             "n": 10,
             "w": 1,
             "clipInput": True,
             "forced": True,
             "type": "ScalarEncoder"
         },
         "b": {
             "fieldname": u"b",
             "maxval": 9,
             "minval": 0,
             "n": 10,
             "w": 1,
             "clipInput": True,
             "forced": True,
             "type": "ScalarEncoder"
         }
     }
     inferenceType = opf_utils.InferenceType.TemporalNextStep
     twoGramModel = two_gram_model.TwoGramModel(inferenceType, encoders)
     inputRecords = (dict_utils.DictObj(d) for d in ({
         "a": 5,
         "b": 1
     }, {
         "a": 6,
         "b": 2
     }, {
         "a": 5,
         "b": 3
     }, {
         "a": 6,
         "b": 2
     }))
     inferences = ((0, 0), (0, 0), (6, 0), (5, 3))
     for i, (inputRecord,
             expectedInference) in enumerate(zip(inputRecords, inferences)):
         results = twoGramModel.run(inputRecord)
         self.assertEqual(results.predictionNumber, i)
         self.assertSequenceEqual(
             results.inferences[opf_utils.InferenceElement.prediction],
             expectedInference)
Exemplo n.º 6
0
    def testWriteRead(self):
        encoders = {
            "a": {
                "fieldname": "a",
                "maxval": 9,
                "minval": 0,
                "n": 10,
                "w": 1,
                "clipInput": True,
                "forced": True,
                "type": "ScalarEncoder"
            },
            "b": {
                "fieldname": "b",
                "maxval": 9,
                "minval": 0,
                "n": 10,
                "w": 1,
                "clipInput": True,
                "forced": True,
                "type": "ScalarEncoder"
            }
        }
        inferenceType = opf_utils.InferenceType.TemporalNextStep
        model = two_gram_model.TwoGramModel(inferenceType, encoders)
        inputRecords = (dict_utils.DictObj(d) for d in ({
            "a": 5,
            "b": 1
        }, {
            "a": 6,
            "b": 3
        }, {
            "a": 5,
            "b": 2
        }, {
            "a": 6,
            "b": 1
        }))
        inferences = ((0, 0), (0, 0), (6, 0), (5, 3))
        for i, (inputRecord,
                expectedInference) in enumerate(zip(inputRecords, inferences)):
            results = model.run(inputRecord)
            self.assertEqual(results.predictionNumber, i)
            self.assertSequenceEqual(
                results.inferences[opf_utils.InferenceElement.prediction],
                expectedInference)

        proto = TwoGramModelProto.new_message()
        model.write(proto)
        with tempfile.TemporaryFile() as f:
            proto.write(f)
            f.seek(0)
            protoDeserialized = TwoGramModelProto.read(f)

        modelDeserialized = two_gram_model.TwoGramModel.read(protoDeserialized)

        self.assertEqual(model.getInferenceType(), inferenceType)
        self.assertEqual(modelDeserialized.getInferenceType(),
                         model.getInferenceType())

        self.assertSequenceEqual(modelDeserialized._prevValues,
                                 model._prevValues)
        self.assertSequenceEqual(modelDeserialized._hashToValueDict,
                                 model._hashToValueDict)
        self.assertSequenceEqual(modelDeserialized._fieldNames,
                                 model._fieldNames)
        self.assertSequenceEqual(modelDeserialized._twoGramDicts,
                                 model._twoGramDicts)

        for i, (inputRecord,
                expectedInference) in enumerate(zip(inputRecords, inferences)):
            expected = model.run(inputRecord)
            actual = modelDeserialized.run(inputRecord)
            self.assertEqual(expected.predictionNumber,
                             actual.predictionNumber)
            self.assertSequenceEqual(
                expected.inferences[opf_utils.InferenceElement.prediction],
                actual.inferences[opf_utils.InferenceElement.prediction])