sflkit 0.3.4__tar.gz → 0.4.0__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.3.4/src/sflkit.egg-info → sflkit-0.4.0}/PKG-INFO +3 -2
- {sflkit-0.3.4 → sflkit-0.4.0}/pyproject.toml +1 -1
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/config.py +1 -1
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/features/handler.py +4 -4
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/python/extract.py +2 -5
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/runners/run.py +1 -0
- {sflkit-0.3.4 → sflkit-0.4.0/src/sflkit.egg-info}/PKG-INFO +3 -2
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_visitors.py +6 -6
- {sflkit-0.3.4 → sflkit-0.4.0}/LICENSE +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/README.md +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/setup.cfg +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/analysis_type.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/analyzer.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/factory.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/mapping.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/predicate.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/similarity.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/spectra.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/suggestion.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/cli.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/color.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/evaluation.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/events/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/events/event_file.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/events/mapping.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/features/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/features/value.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/features/vector.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/instrumentation/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/instrumentation/dir_instrumentation.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/instrumentation/file_instrumentation.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/extract.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/finder.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/java/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/java/extract.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/java/factory.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/java/finder.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/java/visitor.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/language.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/meta.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/python/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/python/factory.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/python/finder.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/python/visitor.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/visitor.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/logger.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/model/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/model/model.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/model/scope.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/runners/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/weights/__init__.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/weights/analyzer.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/weights/models.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit.egg-info/SOURCES.txt +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit.egg-info/dependency_links.txt +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit.egg-info/entry_points.txt +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit.egg-info/requires.txt +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit.egg-info/top_level.txt +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_analysis_objects.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_analyzer.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_cli.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_color.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_config.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_coverage.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_dependency_weights.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_evaluation.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_events.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_execution.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_instrumentation.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_language.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_predicates.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_runner.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_runner_pytest_versions.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_scope.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_spectra.py +0 -0
- {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_suggestions.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: sflkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: SFLKit: : A Workbench for Statistical Fault Localization
|
|
5
5
|
Author-email: Marius Smytzek <marius.smytzek@cispa.de>
|
|
6
6
|
License: MIT License
|
|
@@ -47,6 +47,7 @@ Requires-Dist: pytest-cov>=6.0.0; extra == "test"
|
|
|
47
47
|
Requires-Dist: pytest-html>=4.1.1; extra == "test"
|
|
48
48
|
Requires-Dist: pytest-rerunfailures>=15.0; extra == "test"
|
|
49
49
|
Requires-Dist: parameterized>=0.9.0; extra == "test"
|
|
50
|
+
Dynamic: license-file
|
|
50
51
|
|
|
51
52
|
# SFLKit: A Workbench for Statistical Fault Localization
|
|
52
53
|
|
|
@@ -78,14 +78,14 @@ class FeatureBuilder(CombinationFactory):
|
|
|
78
78
|
def hit(self, id_, *args, **kwargs):
|
|
79
79
|
event: Event
|
|
80
80
|
for a in self.analysis:
|
|
81
|
-
if isinstance(a,
|
|
82
|
-
feature =
|
|
81
|
+
if isinstance(a, Predicate):
|
|
82
|
+
feature = TertiaryFeature(str(a), a)
|
|
83
83
|
self.feature_vectors[id_].set_feature(
|
|
84
84
|
feature, self.map_evaluation(a, id_)
|
|
85
85
|
)
|
|
86
86
|
self.all_features.add(feature)
|
|
87
|
-
elif isinstance(a,
|
|
88
|
-
feature =
|
|
87
|
+
elif isinstance(a, Spectrum):
|
|
88
|
+
feature = BinaryFeature(str(a), a)
|
|
89
89
|
self.feature_vectors[id_].set_feature(
|
|
90
90
|
feature, self.map_evaluation(a, id_)
|
|
91
91
|
)
|
|
@@ -54,11 +54,8 @@ class PythonVarExtract(ast.NodeVisitor, VariableExtract):
|
|
|
54
54
|
def visit_Attribute(self, node: ast.Attribute) -> Any:
|
|
55
55
|
variables = self.visit(node.value)
|
|
56
56
|
if self.check_Attribute(node):
|
|
57
|
-
return (variables if self.use else {}) | OrderedSet(
|
|
58
|
-
|
|
59
|
-
for variable in variables
|
|
60
|
-
if variable not in self.current_ignores
|
|
61
|
-
)
|
|
57
|
+
return (variables if self.use else {}) | OrderedSet([
|
|
58
|
+
ast.unparse(node)])
|
|
62
59
|
else:
|
|
63
60
|
return variables
|
|
64
61
|
|
|
@@ -401,6 +401,7 @@ class PytestRunner(Runner):
|
|
|
401
401
|
cwd=directory,
|
|
402
402
|
)
|
|
403
403
|
LOGGER.debug(f"pytest collection finished with {process.returncode}")
|
|
404
|
+
LOGGER.debug(process.stderr.decode("utf8"))
|
|
404
405
|
tests = PytestStructure.parse_tests(process.stdout.decode("utf8"))
|
|
405
406
|
LOGGER.debug(f"pytest collection found {len(tests)} tests")
|
|
406
407
|
return self.normalize_paths(tests, file_bases, directory, root_dir)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: sflkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: SFLKit: : A Workbench for Statistical Fault Localization
|
|
5
5
|
Author-email: Marius Smytzek <marius.smytzek@cispa.de>
|
|
6
6
|
License: MIT License
|
|
@@ -47,6 +47,7 @@ Requires-Dist: pytest-cov>=6.0.0; extra == "test"
|
|
|
47
47
|
Requires-Dist: pytest-html>=4.1.1; extra == "test"
|
|
48
48
|
Requires-Dist: pytest-rerunfailures>=15.0; extra == "test"
|
|
49
49
|
Requires-Dist: parameterized>=0.9.0; extra == "test"
|
|
50
|
+
Dynamic: license-file
|
|
50
51
|
|
|
51
52
|
# SFLKit: A Workbench for Statistical Fault Localization
|
|
52
53
|
|
|
@@ -24,7 +24,7 @@ class VarExtractionTest(unittest.TestCase):
|
|
|
24
24
|
"[d + r for d in ds if any(r for r in ds)]", ["ds", "r"], ["d"]
|
|
25
25
|
)
|
|
26
26
|
self._test_extract(
|
|
27
|
-
'[d for d in ds if d.name == "test"]', ["ds"
|
|
27
|
+
'[d for d in ds if d.name == "test"]', ["ds", "d.name"], ["d"]
|
|
28
28
|
)
|
|
29
29
|
self._test_extract("(d for d in ds)", ["ds"], ["d"])
|
|
30
30
|
self._test_extract("(d for d in ds if any(r for r in ds))", ["ds"], ["d", "r"])
|
|
@@ -32,7 +32,7 @@ class VarExtractionTest(unittest.TestCase):
|
|
|
32
32
|
"(d + r for d in ds if any(r for r in ds))", ["ds", "r"], ["d"]
|
|
33
33
|
)
|
|
34
34
|
self._test_extract(
|
|
35
|
-
'(d for d in ds if d.name == "test")', ["ds"
|
|
35
|
+
'(d for d in ds if d.name == "test")', ["ds", "d.name"], ["d"]
|
|
36
36
|
)
|
|
37
37
|
self._test_extract("{d for d in ds}", ["ds"], ["d"])
|
|
38
38
|
self._test_extract("{d for d in ds if any(r for r in ds)}", ["ds"], ["d", "r"])
|
|
@@ -40,12 +40,12 @@ class VarExtractionTest(unittest.TestCase):
|
|
|
40
40
|
"{d + r for d in ds if any(r for r in ds)}", ["ds", "r"], ["d"]
|
|
41
41
|
)
|
|
42
42
|
self._test_extract(
|
|
43
|
-
'{d for d in ds if d.name == "test"}', ["ds"
|
|
43
|
+
'{d for d in ds if d.name == "test"}', ["ds", "d.name"], ["d"]
|
|
44
44
|
)
|
|
45
45
|
|
|
46
46
|
def test_lambda(self):
|
|
47
47
|
self._test_extract("lambda d: d + r", ["r"], ["d"])
|
|
48
|
-
self._test_extract("lambda d: d.name", [
|
|
48
|
+
self._test_extract("lambda d: d.name", ["d.name"], ["d"])
|
|
49
49
|
|
|
50
50
|
def test_arguments(self):
|
|
51
51
|
self._test_extract("def f(x=y):\n pass", ["x"], ["y"], use=False)
|
|
@@ -53,9 +53,9 @@ class VarExtractionTest(unittest.TestCase):
|
|
|
53
53
|
|
|
54
54
|
def test_attribute(self):
|
|
55
55
|
self._test_extract("x.y", ["x", "x.y"], ["y"])
|
|
56
|
-
self._test_extract("x.y.z", ["x", "x.y", "x.y.z"], ["y", "z", "y.z"])
|
|
56
|
+
self._test_extract("x.y.z", ["x", "x.y", "x.y.z"], ["y", "z", "y.z", "x.z"])
|
|
57
57
|
self._test_extract("x.y", ["x.y"], ["x", "y"], use=False)
|
|
58
|
-
self._test_extract("x.y.z", ["x.y.z"], ["x", "x.y", "y", "z", "y.z"], use=False)
|
|
58
|
+
self._test_extract("x.y.z", ["x.y.z"], ["x", "x.y", "y", "z", "y.z", "x.z"], use=False)
|
|
59
59
|
self._test_extract(
|
|
60
60
|
"x.f().z", ["x", "x.f"], ["f()", "z", "x.f()", "x.f().z", "f().z"]
|
|
61
61
|
)
|
|
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
|
|
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
|