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.
- {sflkit-0.5.1/src/sflkit.egg-info → sflkit-0.5.2}/PKG-INFO +1 -1
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/__init__.py +1 -1
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/factory.py +22 -14
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/spectra.py +1 -1
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/features/handler.py +16 -13
- {sflkit-0.5.1 → sflkit-0.5.2/src/sflkit.egg-info}/PKG-INFO +1 -1
- {sflkit-0.5.1 → sflkit-0.5.2}/LICENSE +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/README.md +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/pyproject.toml +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/setup.cfg +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/__init__.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/analysis_type.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/analyzer.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/mapping.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/predicate.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/similarity.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/analysis/suggestion.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/cli.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/color.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/config.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/evaluation.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/events/__init__.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/events/event_file.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/events/mapping.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/features/__init__.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/features/value.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/features/vector.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/instrumentation/__init__.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/instrumentation/dir_instrumentation.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/instrumentation/file_instrumentation.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/__init__.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/extract.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/finder.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/java/__init__.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/java/extract.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/java/factory.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/java/finder.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/java/visitor.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/language.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/meta.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/python/__init__.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/python/extract.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/python/factory.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/python/finder.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/python/visitor.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/language/visitor.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/logger.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/model/__init__.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/model/model.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/model/parallel.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/model/scope.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/runners/__init__.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/runners/run.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/weights/__init__.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/weights/analyzer.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit/weights/models.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit.egg-info/SOURCES.txt +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit.egg-info/dependency_links.txt +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit.egg-info/entry_points.txt +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit.egg-info/requires.txt +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/src/sflkit.egg-info/top_level.txt +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_analysis_objects.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_analyzer.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_cli.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_color.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_config.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_coverage.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_dependency_weights.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_evaluation.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_events.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_execution.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_features.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_instrumentation.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_language.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_parallelization.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_predicates.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_runner.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_runner_parallel.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_runner_pytest_versions.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_scope.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_spectra.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_suggestions.py +0 -0
- {sflkit-0.5.1 → sflkit-0.5.2}/tests/test_visitors.py +0 -0
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
194
|
-
|
|
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
|
-
|
|
369
|
-
|
|
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
|
-
|
|
398
|
-
|
|
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.
|
|
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
|
-
|
|
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].
|
|
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(
|
|
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(
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|