def testClassifyKeywordsSingleAndMultiClass(self):
        """Tests simple classification with multiple labels for Keywords model."""
        model = ClassificationModelKeywords()

        samples = {
            0: (["Pickachu"], numpy.array([0, 2, 2])),
            1: (["Eevee"], numpy.array([2])),
            2: (["Charmander"], numpy.array([0, 1, 1])),
            3: (["Abra"], numpy.array([1])),
            4: (["Squirtle"], numpy.array([1, 0, 1]))
        }

        patterns = model.encodeSamples(samples)
        for i in xrange(len(samples)):
            model.trainModel(i)

        output = [model.testModel(i) for i in xrange(len(patterns))]

        self.assertSequenceEqual(output[0].tolist(), [2, 0],
                                 "Incorrect output for first sample.")
        self.assertSequenceEqual(output[1].tolist(), [2],
                                 "Incorrect output for second sample.")
        self.assertSequenceEqual(output[2].tolist(), [1, 0],
                                 "Incorrect output for third sample.")
        self.assertSequenceEqual(output[3].tolist(), [1],
                                 "Incorrect output for fourth sample.")

        # Test the order of class labels doesn't matter when training.
        self.assertTrue(numpy.allclose(output[2], output[4]),
                        "Outputs for samples 2 and 4 should be identical.")
def createModel(args):
    """
  Return a classification model of the appropriate type. The model could be any
  supported subclass of ClassficationModel based on args.
  """
    if args.modelName == "htm":
        # Instantiate the HTM model
        model = ClassificationModelHTM(networkConfig=getNetworkConfig(
            args.networkConfigPath),
                                       inputFilePath=None,
                                       retina=args.retina,
                                       verbosity=args.verbosity,
                                       numLabels=2,
                                       prepData=False,
                                       modelDir="tempdir")

    elif args.modelName == "keywords":
        # Instantiate the keywords model
        model = ClassificationModelKeywords(verbosity=args.verbosity,
                                            numLabels=2,
                                            k=9,
                                            modelDir="tempdir")

    elif args.modelName == "docfp":
        # Instantiate the document fingerprint model
        model = ClassificationModelDocumentFingerprint(
            verbosity=args.verbosity, retina=args.retina, numLabels=2, k=3)

    else:
        raise RuntimeError("Unknown model type: " + args.modelName)

    return model