def test_maximum_generator_newerincremental_with_signature_distance(self): rg = RandomGenerator(relative_matching=1) signature = ParentChildByNameTopologySignature() alg = IncrementalDistanceAlgorithm(signature=signature) alg.prototypes = [rg.prototype] decorator = DistanceDecorator(normalized=True) decorator.algorithm = alg decorator.start_tree() for event in rg: decorator.add_event(event) decorator.finish_tree() self.assertEqual(decorator.data()[-1][-1][-1][-1], 0)
def test_creation(self): decorator = DistanceDecorator(normalized=False) self.assertEqual(decorator._name, "distances") self.assertEqual([], decorator.data()) self.assertEqual({"distances": []}, decorator.descriptive_data()) decorator = DistanceDecorator(normalized=True) self.assertEqual(decorator._name, "normalized_distances") self.assertEqual([], decorator.data()) self.assertEqual({"normalized_distances": []}, decorator.descriptive_data())
def test_maximum_generator_incremental_distance(self): rg = RandomGenerator(relative_matching=1) alg = IncrementalDistanceAlgorithm() alg.prototypes = [rg.prototype] decorator = DistanceDecorator(normalized=True) decorator.algorithm = alg decorator.start_tree() for event in rg: distance = decorator.add_event(event)[0] decorator.finish_tree() self.assertEqual(distance[0], [0])
def test_default_generator_incremental_distance(self): rg = RandomGenerator(seed=1234) alg = IncrementalDistanceAlgorithm() alg.prototypes = [rg.prototype] vector_decorator = DistanceDecorator() vector_decorator._algorithm = alg vector_decorator.start_tree() for event in rg: distance = vector_decorator.add_event(event)[0] vector_decorator.finish_tree() self.assertEqual(distance[0], [110])
def test_normalized_results(self): decorator = DistanceDecorator(normalized=True) algorithm = IncrementalDistanceAlgorithm( signature=EnsembleSignature( signatures=[ParentChildByNameTopologySignature(), ParentChildOrderByNameTopologySignature()]) ) algorithm.prototypes = [simple_prototype(), simple_monitoring_tree()] decorator.wrap_algorithm(algorithm) algorithm.start_tree() self.assertEqual([[[[], []], [[], []]]], decorator.data()) for event in Event.from_tree(simple_monitoring_tree(), supported={ProcessStartEvent: True}): algorithm.add_event(event) algorithm.finish_tree() self.assertEqual([[ [ # ParentChildByNameTopologySignature [2 / 3, 1 / 3, 1 / 3, 0.0], # simple_prototype [2 / 3, 1 / 3, 1 / 3, 0.0] # simple_monitoring_tree ], [ # ParentChildOrderByNameTopologySignature [4 / 5, 3 / 5, 3 / 5, 2 / 5], [2 / 3, 1 / 3, 1 / 3, 0.0] ]]], decorator.data())
def test_two_prototypes(self): decorator = DistanceDecorator(normalized=False) algorithm = IncrementalDistanceAlgorithm() algorithm.prototypes = [simple_prototype(), simple_monitoring_tree()] decorator.wrap_algorithm(algorithm) algorithm.start_tree() self.assertEqual([[[[], []]]], decorator.data()) for event in Event.from_tree(simple_monitoring_tree(), supported={ProcessStartEvent: True}): algorithm.add_event(event) algorithm.finish_tree() self.assertEqual([[[[2, 1, 1, 0], [2, 1, 1, 0]]]], decorator.data())
def test_ensemble(self): decorator = DistanceDecorator(normalized=False) algorithm = IncrementalDistanceAlgorithm( signature=EnsembleSignature( signatures=[ParentChildByNameTopologySignature(), ParentChildOrderByNameTopologySignature()])) algorithm.prototypes = [simple_prototype()] decorator.wrap_algorithm(algorithm) algorithm.start_tree() self.assertEqual([[[[]], [[]]]], decorator.data()) for event in Event.from_tree(simple_monitoring_tree(), supported={ProcessStartEvent: True}): algorithm.add_event(event) algorithm.finish_tree() self.assertEqual([[[[2, 1, 1, 0]], [[4, 3, 3, 2]]]], decorator.data())
def test_bigger_tree(self): rg = RandomGenerator(prototype_node_count=100, tree_node_count=200, relative_matching=.9, relative_repetition=.5, seed=1234) signature = ParentChildByNameTopologySignature() alg = IncrementalDistanceAlgorithm(signature=signature) alg.prototypes = [rg.prototype] decorator = DistanceDecorator(normalized=True) decorator.wrap_algorithm(alg) decorator.start_tree() for event in rg: decorator.add_event(event) decorator.finish_tree() self.assertAlmostEqual(decorator.data()[-1][-1][-1][-1], 0.185, 2)
def from_name(name): if "anomaly" in name: from assess.decorators.anomalydecorator import AnomalyDecorator # FIXME: how to pass parameter? return AnomalyDecorator() elif "normalized_ensembles" in name: from assess.decorators.ensemblematrixdecorator import \ EnsembleMatrixDecorator return EnsembleMatrixDecorator(normalized=True) elif "normalized_ensembledistances" in name: from assess.decorators.ensembledistancedecorator import \ EnsembleDistanceDecorator return EnsembleDistanceDecorator(normalized=True) elif "ensembledistances" in name: from assess.decorators.ensembledistancedecorator import \ EnsembleDistanceDecorator return EnsembleDistanceDecorator(normalized=False) elif "ensembleanomaly" in name: from assess.decorators.ensembleanomalydecorator import \ EnsembleAnomalyDecorator return EnsembleAnomalyDecorator() elif "compression" in name: from assess.decorators.compressionfactordecorator import \ CompressionFactorDecorator return CompressionFactorDecorator() elif "data" in name: from assess.decorators.datadecorator import DataDecorator return DataDecorator() elif "normalized_ensembles" in name: from assess.decorators.ensemblematrixdecorator import \ EnsembleMatrixDecorator return EnsembleMatrixDecorator(normalized=True) elif "ensembles" in name: from assess.decorators.ensemblematrixdecorator import \ EnsembleMatrixDecorator return EnsembleMatrixDecorator(normalized=False) elif "normalized_distances" in name: from assess.decorators.distancedecorator import \ DistanceDecorator return DistanceDecorator(normalized=True) elif "distances" in name: from assess.decorators.distancedecorator import \ DistanceDecorator return DistanceDecorator(normalized=False) elif "normalized_matrix" in name: from assess.decorators.distancematrixdecorator import \ DistanceMatrixDecorator return DistanceMatrixDecorator(normalized=True) elif "matrix" in name: from assess.decorators.distancematrixdecorator import \ DistanceMatrixDecorator return DistanceMatrixDecorator(normalized=False) elif "accumulated_distance_performance" in name: from assess.decorators.distanceperformancedecorator import \ DistancePerformanceDecorator return DistancePerformanceDecorator(accumulated=True) elif "distance_performance" in name: from assess.decorators.distanceperformancedecorator import \ DistancePerformanceDecorator return DistancePerformanceDecorator(accumulated=False) elif "accumulated_performance" in name: from assess.decorators.performancedecorator import \ PerformanceDecorator return PerformanceDecorator(accumulated=True) elif "performance" in name: from assess.decorators.performancedecorator import \ PerformanceDecorator return PerformanceDecorator(accumulated=False) elif "accumulated_signature_performance" in name: from assess.decorators.signatureperformancedecorator import \ SignaturePerformanceDecorator return SignaturePerformanceDecorator(accumulated=True) elif "signature_performance" in name: from assess.decorators.signatureperformancedecorator import \ SignaturePerformanceDecorator return SignaturePerformanceDecorator(accumulated=False) elif "signature" in name: from assess.decorators.signaturedecorator import \ SignatureDecorator return SignatureDecorator() elif "ensembles" in name: from assess.decorators.ensemblematrixdecorator import \ EnsembleMatrixDecorator return EnsembleMatrixDecorator(normalized=False)