sflkit 0.5.5__tar.gz → 0.5.6__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.5/src/sflkit.egg-info → sflkit-0.5.6}/PKG-INFO +1 -1
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/__init__.py +1 -2
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/runners/run.py +1 -1
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/weights/__init__.py +2 -2
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/weights/analyzer.py +5 -3
- {sflkit-0.5.5 → sflkit-0.5.6/src/sflkit.egg-info}/PKG-INFO +1 -1
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_dependency_weights.py +8 -8
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_runner_parallel.py +3 -1
- {sflkit-0.5.5 → sflkit-0.5.6}/LICENSE +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/README.md +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/pyproject.toml +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/setup.cfg +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/analysis/__init__.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/analysis/analysis_type.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/analysis/analyzer.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/analysis/factory.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/analysis/mapping.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/analysis/predicate.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/analysis/similarity.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/analysis/spectra.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/analysis/suggestion.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/cli.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/color.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/config.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/evaluation.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/events/__init__.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/events/event_file.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/events/mapping.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/features/__init__.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/features/handler.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/features/value.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/features/vector.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/instrumentation/__init__.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/instrumentation/dir_instrumentation.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/instrumentation/file_instrumentation.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/__init__.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/extract.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/finder.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/java/__init__.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/java/extract.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/java/factory.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/java/finder.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/java/visitor.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/language.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/meta.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/python/__init__.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/python/extract.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/python/factory.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/python/finder.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/python/visitor.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/language/visitor.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/logger.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/model/__init__.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/model/model.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/model/parallel.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/model/scope.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/runners/__init__.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit/weights/models.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit.egg-info/SOURCES.txt +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit.egg-info/dependency_links.txt +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit.egg-info/entry_points.txt +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit.egg-info/requires.txt +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/src/sflkit.egg-info/top_level.txt +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_analysis_objects.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_analyzer.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_cli.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_color.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_config.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_coverage.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_evaluation.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_events.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_execution.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_expression.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_features.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_instrumentation.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_language.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_parallelization.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_predicates.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_runner.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_runner_pytest_versions.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_scope.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_spectra.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_suggestions.py +0 -0
- {sflkit-0.5.5 → sflkit-0.5.6}/tests/test_visitors.py +0 -0
|
@@ -5,8 +5,7 @@ from sflkit.analysis.analyzer import Analyzer
|
|
|
5
5
|
from sflkit.config import Config, parse_config
|
|
6
6
|
from sflkit.instrumentation.dir_instrumentation import DirInstrumentation
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
__version__ = "0.5.5"
|
|
8
|
+
__version__ = "0.5.6"
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
def instrument_config(conf: Config):
|
|
@@ -666,7 +666,7 @@ class ParallelInputRunner(InputRunner):
|
|
|
666
666
|
|
|
667
667
|
with ProcessPoolExecutor(max_workers=self.workers) as executor:
|
|
668
668
|
# Consume the iterator to ensure all tasks complete
|
|
669
|
-
executor.map(self.process_test, tests)
|
|
669
|
+
list(executor.map(self.process_test, tests))
|
|
670
670
|
|
|
671
671
|
# Ensure all files are flushed to disk (helps with race conditions in CI)
|
|
672
672
|
os.sync()
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from sflkit.weights.analyzer import
|
|
1
|
+
from sflkit.weights.analyzer import ProximityAnalyzer
|
|
2
2
|
from sflkit.weights.models import (
|
|
3
3
|
TestTimeModel,
|
|
4
4
|
TestFunctionModel,
|
|
@@ -10,7 +10,7 @@ from sflkit.weights.models import (
|
|
|
10
10
|
)
|
|
11
11
|
|
|
12
12
|
__all__ = [
|
|
13
|
-
"
|
|
13
|
+
"ProximityAnalyzer",
|
|
14
14
|
"TestTimeModel",
|
|
15
15
|
"TestFunctionModel",
|
|
16
16
|
"TestLineModel",
|
|
@@ -12,7 +12,7 @@ from sflkit.events.event_file import EventFile
|
|
|
12
12
|
from sflkit.model.model import MetaModel
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
class
|
|
15
|
+
class ProximityAnalyzer(Analyzer):
|
|
16
16
|
def __init__(
|
|
17
17
|
self,
|
|
18
18
|
model_class: Type[TestTimeModel],
|
|
@@ -51,10 +51,12 @@ class TimeAnalyzer(Analyzer):
|
|
|
51
51
|
|
|
52
52
|
@staticmethod
|
|
53
53
|
def load_with_dependencies(path: os.PathLike, model_class: Type[TestTimeModel]):
|
|
54
|
-
return
|
|
54
|
+
return ProximityAnalyzer(
|
|
55
|
+
model_class, meta_model=MetaModel(load_analysis_json(path))
|
|
56
|
+
)
|
|
55
57
|
|
|
56
58
|
@staticmethod
|
|
57
59
|
def loads_with_dependencies(data: str, model_class: Type[TestTimeModel]):
|
|
58
|
-
return
|
|
60
|
+
return ProximityAnalyzer(
|
|
59
61
|
model_class, meta_model=MetaModel(set(map(deserialize, json.loads(data))))
|
|
60
62
|
)
|
|
@@ -4,7 +4,7 @@ from pathlib import Path
|
|
|
4
4
|
from sflkit import Config, instrument_config
|
|
5
5
|
from sflkit.analysis.analysis_type import AnalysisType
|
|
6
6
|
from sflkit.analysis.suggestion import Location
|
|
7
|
-
from sflkit.weights.analyzer import
|
|
7
|
+
from sflkit.weights.analyzer import ProximityAnalyzer
|
|
8
8
|
from sflkit.weights.models import (
|
|
9
9
|
TestLineModel,
|
|
10
10
|
TestDefUseModel,
|
|
@@ -39,7 +39,7 @@ class TestTimeWeights(BaseTest):
|
|
|
39
39
|
output = Path(BaseTest.TEST_DIR, "events").absolute()
|
|
40
40
|
runner.run(Path(BaseTest.TEST_DIR), output, files=["test.py"])
|
|
41
41
|
mapping = EventMapping.load(config)
|
|
42
|
-
analyzer =
|
|
42
|
+
analyzer = ProximityAnalyzer(
|
|
43
43
|
TestFunctionModel,
|
|
44
44
|
[
|
|
45
45
|
EventFile(
|
|
@@ -82,7 +82,7 @@ class TestTimeWeights(BaseTest):
|
|
|
82
82
|
output = Path(BaseTest.TEST_DIR, "events").absolute()
|
|
83
83
|
runner.run(Path(BaseTest.TEST_DIR), output, files=["test.py"])
|
|
84
84
|
mapping = EventMapping.load(config)
|
|
85
|
-
analyzer =
|
|
85
|
+
analyzer = ProximityAnalyzer(
|
|
86
86
|
TestLineModel,
|
|
87
87
|
[
|
|
88
88
|
EventFile(
|
|
@@ -130,7 +130,7 @@ class TestTimeWeights(BaseTest):
|
|
|
130
130
|
output = Path(BaseTest.TEST_DIR, "events").absolute()
|
|
131
131
|
runner.run(Path(BaseTest.TEST_DIR), output, files=["test.py"])
|
|
132
132
|
mapping = EventMapping.load(config)
|
|
133
|
-
analyzer =
|
|
133
|
+
analyzer = ProximityAnalyzer(
|
|
134
134
|
TestDefUseModel,
|
|
135
135
|
[
|
|
136
136
|
EventFile(
|
|
@@ -178,7 +178,7 @@ class TestTimeWeights(BaseTest):
|
|
|
178
178
|
output = Path(BaseTest.TEST_DIR, "events").absolute()
|
|
179
179
|
runner.run(Path(BaseTest.TEST_DIR), output, files=["test.py"])
|
|
180
180
|
mapping = EventMapping.load(config)
|
|
181
|
-
analyzer =
|
|
181
|
+
analyzer = ProximityAnalyzer(
|
|
182
182
|
TestDefUsesModel,
|
|
183
183
|
[
|
|
184
184
|
EventFile(
|
|
@@ -225,7 +225,7 @@ class TestTimeWeights(BaseTest):
|
|
|
225
225
|
output = Path(BaseTest.TEST_DIR, "events").absolute()
|
|
226
226
|
runner.run(Path(BaseTest.TEST_DIR), output, files=["test.py"])
|
|
227
227
|
mapping = EventMapping.load(config)
|
|
228
|
-
analyzer =
|
|
228
|
+
analyzer = ProximityAnalyzer(
|
|
229
229
|
TestAssertDefUseModel,
|
|
230
230
|
[
|
|
231
231
|
EventFile(
|
|
@@ -272,7 +272,7 @@ class TestTimeWeights(BaseTest):
|
|
|
272
272
|
output = Path(BaseTest.TEST_DIR, "events").absolute()
|
|
273
273
|
runner.run(Path(BaseTest.TEST_DIR), output, files=["test.py"])
|
|
274
274
|
mapping = EventMapping.load(config)
|
|
275
|
-
analyzer =
|
|
275
|
+
analyzer = ProximityAnalyzer(
|
|
276
276
|
TestAssertDefUsesModel,
|
|
277
277
|
[
|
|
278
278
|
EventFile(
|
|
@@ -337,7 +337,7 @@ class TestTimeWeights(BaseTest):
|
|
|
337
337
|
],
|
|
338
338
|
expectations,
|
|
339
339
|
):
|
|
340
|
-
analyzer =
|
|
340
|
+
analyzer = ProximityAnalyzer(
|
|
341
341
|
model_class,
|
|
342
342
|
[
|
|
343
343
|
EventFile(
|
|
@@ -80,13 +80,15 @@ class ParallelRunnerTests(BaseTest):
|
|
|
80
80
|
working=BaseTest.TEST_DIR,
|
|
81
81
|
exclude="tests",
|
|
82
82
|
mapping_path=BaseTest.TEST_MAPPING,
|
|
83
|
+
thread_support=True,
|
|
83
84
|
)
|
|
84
85
|
instrument_config(config)
|
|
85
86
|
runner = ParallelInputRunner(
|
|
86
|
-
"main.py",
|
|
87
|
+
Path("main.py"),
|
|
87
88
|
failing=[["2", "1", "3"]],
|
|
88
89
|
passing=[["3", "2", "1"], ["3", "1", "2"]],
|
|
89
90
|
workers=4,
|
|
91
|
+
thread_support=True,
|
|
90
92
|
)
|
|
91
93
|
output = Path(BaseTest.TEST_DIR, "events").absolute()
|
|
92
94
|
runner.run(Path(BaseTest.TEST_DIR), output)
|
|
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
|