sflkit 0.2.4__tar.gz → 0.2.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sflkit-0.2.4/src/SFLKit.egg-info → sflkit-0.2.5}/PKG-INFO +1 -1
- {sflkit-0.2.4 → sflkit-0.2.5}/pyproject.toml +1 -1
- {sflkit-0.2.4 → sflkit-0.2.5/src/SFLKit.egg-info}/PKG-INFO +1 -1
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/__init__.py +1 -1
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/analysis/analysis_type.py +7 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/analysis/predicate.py +21 -1
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/analysis/spectra.py +13 -1
- {sflkit-0.2.4 → sflkit-0.2.5}/LICENSE +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/README.md +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/setup.cfg +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/setup.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/SFLKit.egg-info/SOURCES.txt +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/SFLKit.egg-info/dependency_links.txt +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/SFLKit.egg-info/entry_points.txt +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/SFLKit.egg-info/requires.txt +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/SFLKit.egg-info/top_level.txt +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/analysis/__init__.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/analysis/analyzer.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/analysis/factory.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/analysis/mapping.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/analysis/similarity.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/analysis/suggestion.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/cli.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/color.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/config.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/instrumentation/__init__.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/instrumentation/dir_instrumentation.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/instrumentation/file_instrumentation.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/__init__.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/extract.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/finder.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/language.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/meta.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/python/__init__.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/python/extract.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/python/factory.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/python/finder.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/python/visitor.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/language/visitor.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/model/__init__.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/model/event_file.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/model/model.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/model/scope.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/runners/__init__.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/src/sflkit/runners/run.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_analysis_objects.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_cli.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_color.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_config.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_events.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_execution.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_instrumentation.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_language.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_predicates.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_runner.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_scope.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_spectra.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_suggestions.py +0 -0
- {sflkit-0.2.4 → sflkit-0.2.5}/tests/test_visitors.py +0 -0
|
@@ -6,7 +6,7 @@ from sflkit.analysis.predicate import Predicate
|
|
|
6
6
|
from sflkit.config import Config, parse_config
|
|
7
7
|
from sflkit.instrumentation.dir_instrumentation import DirInstrumentation
|
|
8
8
|
|
|
9
|
-
__version__ = "0.2.
|
|
9
|
+
__version__ = "0.2.5"
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def instrument_config(conf: Config, event_dump: str = None):
|
|
@@ -5,6 +5,12 @@ from typing import List, Type
|
|
|
5
5
|
from sflkit.model.scope import Scope
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
class EvaluationResult(enum.Enum):
|
|
9
|
+
TRUE = 1
|
|
10
|
+
FALSE = 0
|
|
11
|
+
UNOBSERVED = -1
|
|
12
|
+
|
|
13
|
+
|
|
8
14
|
class AnalysisType(enum.Enum):
|
|
9
15
|
LINE = 0
|
|
10
16
|
BRANCH = 1
|
|
@@ -48,6 +54,7 @@ class AnalysisObject(object):
|
|
|
48
54
|
# noinspection PyUnusedLocal
|
|
49
55
|
def __init__(self, event):
|
|
50
56
|
self.suspiciousness: float = 0
|
|
57
|
+
self.last_evaluation: EvaluationResult = EvaluationResult.UNOBSERVED
|
|
51
58
|
|
|
52
59
|
def __repr__(self):
|
|
53
60
|
return f"{self.analysis_type()}:{self.suspiciousness}"
|
|
@@ -5,7 +5,7 @@ from typing import Tuple, Callable, Optional
|
|
|
5
5
|
from sflkitlib.events import EventType
|
|
6
6
|
from sflkitlib.events.event import BranchEvent, FunctionExitEvent, DefEvent
|
|
7
7
|
|
|
8
|
-
from sflkit.analysis.analysis_type import AnalysisType
|
|
8
|
+
from sflkit.analysis.analysis_type import AnalysisType, EvaluationResult
|
|
9
9
|
from sflkit.analysis.spectra import Spectrum
|
|
10
10
|
from sflkit.analysis.suggestion import Suggestion, Location
|
|
11
11
|
from sflkit.model import scope
|
|
@@ -24,6 +24,17 @@ class Predicate(Spectrum, ABC):
|
|
|
24
24
|
self.increase_true = 0
|
|
25
25
|
self.increase_false = 0
|
|
26
26
|
self.true_hits = dict()
|
|
27
|
+
self.last_evaluation = EvaluationResult.UNOBSERVED
|
|
28
|
+
|
|
29
|
+
@staticmethod
|
|
30
|
+
def default_evaluation() -> EvaluationResult:
|
|
31
|
+
return EvaluationResult.UNOBSERVED
|
|
32
|
+
|
|
33
|
+
def get_last_evaluation(self, id_: int) -> EvaluationResult:
|
|
34
|
+
if id_ not in self.true_hits:
|
|
35
|
+
return self.default_evaluation()
|
|
36
|
+
else:
|
|
37
|
+
return self.last_evaluation
|
|
27
38
|
|
|
28
39
|
def finalize(self, passed: list, failed: list):
|
|
29
40
|
super().finalize(passed, failed)
|
|
@@ -46,6 +57,9 @@ class Predicate(Spectrum, ABC):
|
|
|
46
57
|
self.true_hits[id_] = 0
|
|
47
58
|
if self._evaluate_predicate(scope_):
|
|
48
59
|
self.true_hits[id_] += 1
|
|
60
|
+
self.last_evaluation = EvaluationResult.TRUE
|
|
61
|
+
else:
|
|
62
|
+
self.last_evaluation = EvaluationResult.FALSE
|
|
49
63
|
|
|
50
64
|
def get_metric(self, metric: Callable = None):
|
|
51
65
|
if metric is None:
|
|
@@ -131,6 +145,9 @@ class Branch(Predicate):
|
|
|
131
145
|
if event.then_id == self.then_id:
|
|
132
146
|
super(Predicate, self).hit(id_, event, scope_)
|
|
133
147
|
self.true_hits[id_] += 1
|
|
148
|
+
self.last_evaluation = EvaluationResult.TRUE
|
|
149
|
+
else:
|
|
150
|
+
self.last_evaluation = EvaluationResult.FALSE
|
|
134
151
|
|
|
135
152
|
def get_suggestion(self, metric: Callable = None, base_dir: str = ""):
|
|
136
153
|
if metric == Predicate.IncreaseFalse:
|
|
@@ -427,6 +444,9 @@ class Condition(Predicate):
|
|
|
427
444
|
self.true_hits[id_] = 0
|
|
428
445
|
if event.value:
|
|
429
446
|
self.true_hits[id_] += 1
|
|
447
|
+
self.last_evaluation = EvaluationResult.TRUE
|
|
448
|
+
else:
|
|
449
|
+
self.last_evaluation = EvaluationResult.FALSE
|
|
430
450
|
|
|
431
451
|
def __str__(self):
|
|
432
452
|
return f"{self.analysis_type()}:{self.file}:{self.line}:{self.condition}"
|
|
@@ -14,7 +14,7 @@ from sflkitlib.events.event import (
|
|
|
14
14
|
UseEvent,
|
|
15
15
|
)
|
|
16
16
|
|
|
17
|
-
from sflkit.analysis.analysis_type import AnalysisObject, AnalysisType
|
|
17
|
+
from sflkit.analysis.analysis_type import AnalysisObject, AnalysisType, EvaluationResult
|
|
18
18
|
from sflkit.analysis.suggestion import Suggestion, Location
|
|
19
19
|
from sflkit.model.scope import Scope
|
|
20
20
|
|
|
@@ -39,10 +39,21 @@ class Spectrum(AnalysisObject, ABC):
|
|
|
39
39
|
self.failed_observed = failed_observed
|
|
40
40
|
self.failed_not_observed = failed_not_observed
|
|
41
41
|
self.hits = dict()
|
|
42
|
+
self.last_evaluation: EvaluationResult = EvaluationResult.FALSE
|
|
42
43
|
|
|
43
44
|
def __str__(self):
|
|
44
45
|
return f"{self.analysis_type()}:{self.file}:{self.line}"
|
|
45
46
|
|
|
47
|
+
@staticmethod
|
|
48
|
+
def default_evaluation() -> EvaluationResult:
|
|
49
|
+
return EvaluationResult.FALSE
|
|
50
|
+
|
|
51
|
+
def get_last_evaluation(self, id_: int) -> EvaluationResult:
|
|
52
|
+
if id_ not in self.hits:
|
|
53
|
+
return self.default_evaluation()
|
|
54
|
+
else:
|
|
55
|
+
return self.last_evaluation
|
|
56
|
+
|
|
46
57
|
def get_metric(self, metric: Callable = None):
|
|
47
58
|
if metric is None:
|
|
48
59
|
metric = Spectrum.Ochiai
|
|
@@ -62,6 +73,7 @@ class Spectrum(AnalysisObject, ABC):
|
|
|
62
73
|
self.suspiciousness = self.get_metric(metric)
|
|
63
74
|
|
|
64
75
|
def hit(self, id_, event, scope_: Scope = None):
|
|
76
|
+
self.last_evaluation = True
|
|
65
77
|
if id_ not in self.hits:
|
|
66
78
|
self.hits[id_] = 1
|
|
67
79
|
else:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|