sflkit 0.5.1__tar.gz → 0.5.2__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 (83) hide show
  1. {sflkit-0.5.1/src/sflkit.egg-info → sflkit-0.5.2}/PKG-INFO +1 -1
  2. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/__init__.py +1 -1
  3. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/factory.py +22 -14
  4. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/spectra.py +1 -1
  5. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/features/handler.py +16 -13
  6. {sflkit-0.5.1 → sflkit-0.5.2/src/sflkit.egg-info}/PKG-INFO +1 -1
  7. {sflkit-0.5.1 → sflkit-0.5.2}/LICENSE +0 -0
  8. {sflkit-0.5.1 → sflkit-0.5.2}/README.md +0 -0
  9. {sflkit-0.5.1 → sflkit-0.5.2}/pyproject.toml +0 -0
  10. {sflkit-0.5.1 → sflkit-0.5.2}/setup.cfg +0 -0
  11. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/__init__.py +0 -0
  12. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/analysis_type.py +0 -0
  13. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/analyzer.py +0 -0
  14. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/mapping.py +0 -0
  15. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/predicate.py +0 -0
  16. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/similarity.py +0 -0
  17. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/suggestion.py +0 -0
  18. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/cli.py +0 -0
  19. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/color.py +0 -0
  20. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/config.py +0 -0
  21. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/evaluation.py +0 -0
  22. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/events/__init__.py +0 -0
  23. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/events/event_file.py +0 -0
  24. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/events/mapping.py +0 -0
  25. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/features/__init__.py +0 -0
  26. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/features/value.py +0 -0
  27. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/features/vector.py +0 -0
  28. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/instrumentation/__init__.py +0 -0
  29. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/instrumentation/dir_instrumentation.py +0 -0
  30. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/instrumentation/file_instrumentation.py +0 -0
  31. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/__init__.py +0 -0
  32. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/extract.py +0 -0
  33. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/finder.py +0 -0
  34. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/java/__init__.py +0 -0
  35. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/java/extract.py +0 -0
  36. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/java/factory.py +0 -0
  37. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/java/finder.py +0 -0
  38. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/java/visitor.py +0 -0
  39. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/language.py +0 -0
  40. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/meta.py +0 -0
  41. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/python/__init__.py +0 -0
  42. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/python/extract.py +0 -0
  43. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/python/factory.py +0 -0
  44. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/python/finder.py +0 -0
  45. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/python/visitor.py +0 -0
  46. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/visitor.py +0 -0
  47. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/logger.py +0 -0
  48. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/model/__init__.py +0 -0
  49. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/model/model.py +0 -0
  50. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/model/parallel.py +0 -0
  51. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/model/scope.py +0 -0
  52. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/runners/__init__.py +0 -0
  53. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/runners/run.py +0 -0
  54. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/weights/__init__.py +0 -0
  55. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/weights/analyzer.py +0 -0
  56. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/weights/models.py +0 -0
  57. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit.egg-info/SOURCES.txt +0 -0
  58. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit.egg-info/dependency_links.txt +0 -0
  59. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit.egg-info/entry_points.txt +0 -0
  60. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit.egg-info/requires.txt +0 -0
  61. {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit.egg-info/top_level.txt +0 -0
  62. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_analysis_objects.py +0 -0
  63. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_analyzer.py +0 -0
  64. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_cli.py +0 -0
  65. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_color.py +0 -0
  66. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_config.py +0 -0
  67. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_coverage.py +0 -0
  68. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_dependency_weights.py +0 -0
  69. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_evaluation.py +0 -0
  70. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_events.py +0 -0
  71. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_execution.py +0 -0
  72. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_features.py +0 -0
  73. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_instrumentation.py +0 -0
  74. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_language.py +0 -0
  75. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_parallelization.py +0 -0
  76. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_predicates.py +0 -0
  77. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_runner.py +0 -0
  78. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_runner_parallel.py +0 -0
  79. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_runner_pytest_versions.py +0 -0
  80. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_scope.py +0 -0
  81. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_spectra.py +0 -0
  82. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_suggestions.py +0 -0
  83. {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_visitors.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sflkit
3
- Version: 0.5.1
3
+ Version: 0.5.2
4
4
  Summary: SFLKit: : A Workbench for Statistical Fault Localization
5
5
  Author-email: Marius Smytzek <marius.smytzek@cispa.de>
6
6
  Project-URL: Homepage, https://github.com/smythi93/sflkit/
@@ -6,7 +6,7 @@ from sflkit.config import Config, parse_config
6
6
  from sflkit.instrumentation.dir_instrumentation import DirInstrumentation
7
7
 
8
8
 
9
- __version__ = "0.5.1"
9
+ __version__ = "0.5.2"
10
10
 
11
11
 
12
12
  def instrument_config(conf: Config):
@@ -179,28 +179,30 @@ class DefUseFactory(AnalysisFactory):
179
179
  self.id_to_def: dict[EventFile, dict[tuple[str, int], DefEvent]] = dict()
180
180
 
181
181
  def reset(self, event_file: EventFile):
182
- self.id_to_def[event_file] = dict()
182
+ with self._lock:
183
+ self.id_to_def[event_file] = dict()
183
184
 
184
185
  def get_analysis(
185
186
  self, event, event_file: EventFile, scope: Scope = None
186
187
  ) -> List[AnalysisObject]:
187
188
  if event.event_type == EventType.DEF:
188
- self.id_to_def[event_file][(event.var, event.var_id)] = event
189
+ with self._lock:
190
+ self.id_to_def[event_file][(event.var, event.var_id)] = event
189
191
  elif event.event_type == EventType.USE:
190
- if (event.var, event.var_id) in self.id_to_def[event_file]:
192
+ with self._lock:
193
+ def_event = self.id_to_def[event_file].get((event.var, event.var_id))
194
+ if def_event:
191
195
  key = (
192
196
  DefUse.analysis_type(),
193
- self.id_to_def[event_file][(event.var, event.var_id)].file,
194
- self.id_to_def[event_file][(event.var, event.var_id)].line,
197
+ def_event.file,
198
+ def_event.line,
195
199
  event.file,
196
200
  event.line,
197
201
  event.var,
198
202
  )
199
203
  with self._lock:
200
204
  if key not in self.objects:
201
- self.objects[key] = DefUse(
202
- self.id_to_def[event_file][(event.var, event.var_id)], event
203
- )
205
+ self.objects[key] = DefUse(def_event, event)
204
206
  return [self.objects[key]]
205
207
  return None
206
208
 
@@ -365,8 +367,8 @@ class ReturnFactory(ComparisonFactory):
365
367
  self.objects[key] = ReturnPredicate(
366
368
  event, comp, value=tr
367
369
  )
368
- objects.append(self.objects[key])
369
- if event.type_ == "NoneType":
370
+ objects.append(self.objects[key])
371
+ elif event.type_ == "NoneType":
370
372
  for comp in Comp.EQ, Comp.NE:
371
373
  if comp in self.comparators:
372
374
  key = (
@@ -394,8 +396,12 @@ class ReturnFactory(ComparisonFactory):
394
396
  comp,
395
397
  "NoneType",
396
398
  )
397
- if key in self.objects:
398
- objects.append(self.objects[key])
399
+ with self._lock:
400
+ if key not in self.objects:
401
+ self.objects[key] = ReturnPredicate(
402
+ event, comp, value=None
403
+ )
404
+ objects.append(self.objects[key])
399
405
  return objects
400
406
  return None
401
407
 
@@ -525,9 +531,11 @@ class FunctionErrorFactory(AnalysisFactory):
525
531
  self, event, event_file: EventFile, scope: Scope = None
526
532
  ) -> List[AnalysisObject]:
527
533
  if event.event_type == EventType.FUNCTION_ENTER:
528
- self.function_mapping[event.function_id] = event.line
534
+ with self._lock:
535
+ self.function_mapping[event.function_id] = event.line
529
536
  if event.event_type in (EventType.FUNCTION_ERROR, EventType.FUNCTION_EXIT):
530
- line = self.function_mapping.get(event.function_id, event.line)
537
+ with self._lock:
538
+ line = self.function_mapping.get(event.function_id, event.line)
531
539
  key = (
532
540
  FunctionErrorPredicate.analysis_type(),
533
541
  event.file,
@@ -958,7 +958,7 @@ class Length(ModifiableSpectrum):
958
958
  )
959
959
  if id_ in self.hits:
960
960
  if event.thread_id in self.hits[id_]:
961
- self.hits[id_][event.thread_id].appent(event.length)
961
+ self.hits[id_][event.thread_id].append(event.length)
962
962
  else:
963
963
  self.hits[id_][event.thread_id] = [event.length]
964
964
  self.last_evaluation[id_][event.thread_id] = result
@@ -3,6 +3,7 @@ from concurrent.futures import ThreadPoolExecutor
3
3
  from typing import List, Dict, Set, Optional
4
4
 
5
5
  import pandas as pd
6
+ from sflkitlib.events.event import Event
6
7
 
7
8
  from sflkit.analysis.analysis_type import AnalysisObject, EvaluationResult
8
9
  from sflkit.analysis.factory import CombinationFactory, analysis_factory_mapping
@@ -15,10 +16,16 @@ from sflkit.model.model import Model
15
16
  from sflkit.model.parallel import ParallelModel
16
17
  from sflkit.model.scope import Scope
17
18
  from sflkit.runners.run import TestResult
18
- from sflkitlib.events.event import Event
19
19
 
20
20
 
21
21
  class FeatureBuilder(CombinationFactory):
22
+ def __init__(self):
23
+ super().__init__(list(map(lambda f: f(), analysis_factory_mapping.values())))
24
+ self.analysis: dict[EventFile, list[AnalysisObject]] = dict()
25
+ self.feature_vectors: Dict[EventFile, FeatureVector] = dict()
26
+ self.all_features: Set[Feature] = set()
27
+ self.name_map: Dict[EventFile, str] = dict()
28
+
22
29
  def __iter__(self) -> FeatureVector:
23
30
  yield from self.feature_vectors.values()
24
31
 
@@ -44,22 +51,17 @@ class FeatureBuilder(CombinationFactory):
44
51
  if run_id in self.feature_vectors:
45
52
  del self.feature_vectors[run_id]
46
53
 
47
- def __init__(self):
48
- super().__init__(list(map(lambda f: f(), analysis_factory_mapping.values())))
49
- self.analysis: List[AnalysisObject] = list()
50
- self.feature_vectors: Dict[EventFile, FeatureVector] = dict()
51
- self.all_features: Set[Feature] = set()
52
- self.name_map: Dict[EventFile, str] = dict()
53
-
54
54
  def get_analysis(
55
55
  self, event, event_file: EventFile, scope: Scope = None
56
56
  ) -> List[AnalysisObject]:
57
- self.analysis = super().get_analysis(event, event_file, scope)
58
- self.analysis.append(self)
59
- return self.analysis
57
+ self.analysis[event_file] = super().get_analysis(event, event_file, scope)
58
+ self.analysis[event_file].append(self)
59
+ return self.analysis[event_file]
60
60
 
61
61
  @staticmethod
62
- def map_evaluation(analysis: Spectrum, id_: EventFile, thread_id: Optional[int] = None):
62
+ def map_evaluation(
63
+ analysis: Spectrum, id_: EventFile, thread_id: Optional[int] = None
64
+ ):
63
65
  match analysis.get_last_evaluation(id_, thread_id):
64
66
  case EvaluationResult.TRUE:
65
67
  return FeatureValue.TRUE
@@ -73,12 +75,13 @@ class FeatureBuilder(CombinationFactory):
73
75
  return FeatureValue.UNDEFINED
74
76
 
75
77
  def prepare(self, event_file: EventFile, test_result: TestResult):
78
+ self.analysis[event_file] = list()
76
79
  self.name_map[event_file] = os.path.basename(str(event_file.path))
77
80
  self.feature_vectors[event_file] = FeatureVector(event_file, test_result)
78
81
 
79
82
  # noinspection PyUnusedLocal
80
83
  def hit(self, id_: EventFile, event: Event, *args, **kwargs):
81
- for a in self.analysis:
84
+ for a in self.analysis[id_]:
82
85
  if isinstance(a, Predicate):
83
86
  feature = TertiaryFeature(str(a), a)
84
87
  self.feature_vectors[id_].set_feature(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sflkit
3
- Version: 0.5.1
3
+ Version: 0.5.2
4
4
  Summary: SFLKit: : A Workbench for Statistical Fault Localization
5
5
  Author-email: Marius Smytzek <marius.smytzek@cispa.de>
6
6
  Project-URL: Homepage, https://github.com/smythi93/sflkit/
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