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.
Files changed (79) hide show
  1. {sflkit-0.3.4/src/sflkit.egg-info → sflkit-0.4.0}/PKG-INFO +3 -2
  2. {sflkit-0.3.4 → sflkit-0.4.0}/pyproject.toml +1 -1
  3. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/config.py +1 -1
  4. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/features/handler.py +4 -4
  5. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/python/extract.py +2 -5
  6. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/runners/run.py +1 -0
  7. {sflkit-0.3.4 → sflkit-0.4.0/src/sflkit.egg-info}/PKG-INFO +3 -2
  8. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_visitors.py +6 -6
  9. {sflkit-0.3.4 → sflkit-0.4.0}/LICENSE +0 -0
  10. {sflkit-0.3.4 → sflkit-0.4.0}/README.md +0 -0
  11. {sflkit-0.3.4 → sflkit-0.4.0}/setup.cfg +0 -0
  12. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/__init__.py +0 -0
  13. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/__init__.py +0 -0
  14. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/analysis_type.py +0 -0
  15. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/analyzer.py +0 -0
  16. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/factory.py +0 -0
  17. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/mapping.py +0 -0
  18. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/predicate.py +0 -0
  19. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/similarity.py +0 -0
  20. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/spectra.py +0 -0
  21. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/analysis/suggestion.py +0 -0
  22. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/cli.py +0 -0
  23. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/color.py +0 -0
  24. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/evaluation.py +0 -0
  25. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/events/__init__.py +0 -0
  26. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/events/event_file.py +0 -0
  27. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/events/mapping.py +0 -0
  28. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/features/__init__.py +0 -0
  29. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/features/value.py +0 -0
  30. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/features/vector.py +0 -0
  31. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/instrumentation/__init__.py +0 -0
  32. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/instrumentation/dir_instrumentation.py +0 -0
  33. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/instrumentation/file_instrumentation.py +0 -0
  34. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/__init__.py +0 -0
  35. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/extract.py +0 -0
  36. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/finder.py +0 -0
  37. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/java/__init__.py +0 -0
  38. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/java/extract.py +0 -0
  39. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/java/factory.py +0 -0
  40. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/java/finder.py +0 -0
  41. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/java/visitor.py +0 -0
  42. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/language.py +0 -0
  43. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/meta.py +0 -0
  44. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/python/__init__.py +0 -0
  45. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/python/factory.py +0 -0
  46. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/python/finder.py +0 -0
  47. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/python/visitor.py +0 -0
  48. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/language/visitor.py +0 -0
  49. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/logger.py +0 -0
  50. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/model/__init__.py +0 -0
  51. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/model/model.py +0 -0
  52. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/model/scope.py +0 -0
  53. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/runners/__init__.py +0 -0
  54. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/weights/__init__.py +0 -0
  55. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/weights/analyzer.py +0 -0
  56. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit/weights/models.py +0 -0
  57. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit.egg-info/SOURCES.txt +0 -0
  58. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit.egg-info/dependency_links.txt +0 -0
  59. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit.egg-info/entry_points.txt +0 -0
  60. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit.egg-info/requires.txt +0 -0
  61. {sflkit-0.3.4 → sflkit-0.4.0}/src/sflkit.egg-info/top_level.txt +0 -0
  62. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_analysis_objects.py +0 -0
  63. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_analyzer.py +0 -0
  64. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_cli.py +0 -0
  65. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_color.py +0 -0
  66. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_config.py +0 -0
  67. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_coverage.py +0 -0
  68. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_dependency_weights.py +0 -0
  69. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_evaluation.py +0 -0
  70. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_events.py +0 -0
  71. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_execution.py +0 -0
  72. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_instrumentation.py +0 -0
  73. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_language.py +0 -0
  74. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_predicates.py +0 -0
  75. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_runner.py +0 -0
  76. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_runner_pytest_versions.py +0 -0
  77. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_scope.py +0 -0
  78. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_spectra.py +0 -0
  79. {sflkit-0.3.4 → sflkit-0.4.0}/tests/test_suggestions.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: sflkit
3
- Version: 0.3.4
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
 
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "sflkit"
10
- version = "0.3.4"
10
+ version = "0.4.0"
11
11
  authors = [
12
12
  { name = "Marius Smytzek", email = "marius.smytzek@cispa.de" },
13
13
  ]
@@ -62,7 +62,7 @@ class Config:
62
62
 
63
63
  def __init__(self, path: Union[str, configparser.ConfigParser] = None):
64
64
  self.target_path = None
65
- self.language = None
65
+ self.language: Language = None
66
66
  self.predicates = list()
67
67
  self.factory = None
68
68
  self.test_factory = None
@@ -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, Spectrum):
82
- feature = BinaryFeature(str(a), a)
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, Predicate):
88
- feature = TertiaryFeature(str(a), a)
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
- f"{variable}.{node.attr}"
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.2
1
+ Metadata-Version: 2.4
2
2
  Name: sflkit
3
- Version: 0.3.4
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"], ["d", "d.name"]
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"], ["d", "d.name"]
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"], ["d", "d.name"]
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", [], ["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