cv-suite 0.0.1__py3-none-any.whl
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.
- cv_suite-0.0.1.dist-info/METADATA +115 -0
- cv_suite-0.0.1.dist-info/RECORD +309 -0
- cv_suite-0.0.1.dist-info/WHEEL +5 -0
- cv_suite-0.0.1.dist-info/entry_points.txt +2 -0
- cv_suite-0.0.1.dist-info/licenses/LICENSE +21 -0
- cv_suite-0.0.1.dist-info/top_level.txt +1 -0
- cvsuite/__init__.py +1 -0
- cvsuite/branch_cli.py +158 -0
- cvsuite/classify/__init__.py +1 -0
- cvsuite/classify/cli.py +119 -0
- cvsuite/classify/core/__init__.py +1 -0
- cvsuite/classify/core/io.py +637 -0
- cvsuite/classify/output/__init__.py +1 -0
- cvsuite/classify/output/commands/__init__.py +1 -0
- cvsuite/classify/output/commands/to_class_dir.py +108 -0
- cvsuite/classify/tests/__init__.py +1 -0
- cvsuite/classify/tests/test_output_stats.py +88 -0
- cvsuite/classify/tests/test_run_command.py +928 -0
- cvsuite/classify/transform/__init__.py +1 -0
- cvsuite/classify/transform/commands/__init__.py +1 -0
- cvsuite/classify/transform/commands/infer.py +15 -0
- cvsuite/classify/transform/commands/sample.py +15 -0
- cvsuite/classify/transform/core/__init__.py +1 -0
- cvsuite/classify/transform/core/infer.py +80 -0
- cvsuite/classify/transform/core/sample.py +199 -0
- cvsuite/cli.py +61 -0
- cvsuite/common/__init__.py +1 -0
- cvsuite/common/cache/__init__.py +1 -0
- cvsuite/common/cache/commands/__init__.py +1 -0
- cvsuite/common/cache/commands/list.py +121 -0
- cvsuite/common/cache/commands/path.py +30 -0
- cvsuite/common/cache/commands/purge.py +87 -0
- cvsuite/common/cache/core.py +255 -0
- cvsuite/common/cli.py +12 -0
- cvsuite/common/core/__init__.py +58 -0
- cvsuite/common/core/enums.py +43 -0
- cvsuite/common/core/records.py +144 -0
- cvsuite/common/core/types.py +235 -0
- cvsuite/common/core/utils.py +144 -0
- cvsuite/common/fm/__init__.py +5 -0
- cvsuite/common/fm/core/__init__.py +34 -0
- cvsuite/common/fm/core/export.py +11 -0
- cvsuite/common/fm/core/paths.py +256 -0
- cvsuite/common/fm/core/prompt_utils.py +89 -0
- cvsuite/common/fm/core/runner.py +575 -0
- cvsuite/common/fm/core/sam3_patch.py +88 -0
- cvsuite/common/fm/core/utils.py +898 -0
- cvsuite/common/fm/providers/__init__.py +41 -0
- cvsuite/common/fm/providers/_template.py +79 -0
- cvsuite/common/fm/providers/api/__init__.py +1 -0
- cvsuite/common/fm/providers/api/openrouter_common.py +103 -0
- cvsuite/common/fm/providers/api/openrouter_gen.py +230 -0
- cvsuite/common/fm/providers/api/openrouter_vlm.py +108 -0
- cvsuite/common/fm/providers/base.py +857 -0
- cvsuite/common/fm/providers/bases/__init__.py +58 -0
- cvsuite/common/fm/providers/bases/classification.py +92 -0
- cvsuite/common/fm/providers/bases/create.py +196 -0
- cvsuite/common/fm/providers/bases/diffusion.py +594 -0
- cvsuite/common/fm/providers/bases/edit.py +201 -0
- cvsuite/common/fm/providers/bases/edit_custom.py +566 -0
- cvsuite/common/fm/providers/bases/gen.py +350 -0
- cvsuite/common/fm/providers/bases/ground.py +141 -0
- cvsuite/common/fm/providers/bases/ocr.py +101 -0
- cvsuite/common/fm/providers/bases/qwen_image.py +131 -0
- cvsuite/common/fm/providers/bases/record_image.py +100 -0
- cvsuite/common/fm/providers/bases/vlm.py +504 -0
- cvsuite/common/fm/providers/classify/__init__.py +1 -0
- cvsuite/common/fm/providers/classify/clip.py +264 -0
- cvsuite/common/fm/providers/classify/deep_orientation.py +259 -0
- cvsuite/common/fm/providers/classify/siglip2.py +261 -0
- cvsuite/common/fm/providers/create/__init__.py +1 -0
- cvsuite/common/fm/providers/create/flux.py +54 -0
- cvsuite/common/fm/providers/create/qwen_image.py +61 -0
- cvsuite/common/fm/providers/create/sana.py +49 -0
- cvsuite/common/fm/providers/create/stable_diffusion.py +71 -0
- cvsuite/common/fm/providers/edit/__init__.py +1 -0
- cvsuite/common/fm/providers/edit/dim_edit.py +1205 -0
- cvsuite/common/fm/providers/edit/flux2_klein.py +50 -0
- cvsuite/common/fm/providers/edit/instruct_pix2pix.py +68 -0
- cvsuite/common/fm/providers/edit/ovis_u1_3b.py +44 -0
- cvsuite/common/fm/providers/edit/qwen_image_edit.py +60 -0
- cvsuite/common/fm/providers/edit/step1x_edit.py +48 -0
- cvsuite/common/fm/providers/ground/__init__.py +1 -0
- cvsuite/common/fm/providers/ground/gdino.py +224 -0
- cvsuite/common/fm/providers/ground/gsam.py +408 -0
- cvsuite/common/fm/providers/ground/llmdet.py +288 -0
- cvsuite/common/fm/providers/ground/locate_anything.py +424 -0
- cvsuite/common/fm/providers/ground/rex_omni.py +297 -0
- cvsuite/common/fm/providers/ground/sam3.py +468 -0
- cvsuite/common/fm/providers/ground/yolo_e.py +358 -0
- cvsuite/common/fm/providers/ocr/__init__.py +1 -0
- cvsuite/common/fm/providers/ocr/paddleocr.py +235 -0
- cvsuite/common/fm/providers/registry.py +321 -0
- cvsuite/common/fm/providers/setup_venv/blip.sh +33 -0
- cvsuite/common/fm/providers/setup_venv/clip.sh +25 -0
- cvsuite/common/fm/providers/setup_venv/cogvlm.sh +33 -0
- cvsuite/common/fm/providers/setup_venv/deep_orientation.sh +23 -0
- cvsuite/common/fm/providers/setup_venv/dim_edit.sh +72 -0
- cvsuite/common/fm/providers/setup_venv/flux.sh +51 -0
- cvsuite/common/fm/providers/setup_venv/flux2_klein.sh +51 -0
- cvsuite/common/fm/providers/setup_venv/gdino.sh +24 -0
- cvsuite/common/fm/providers/setup_venv/gsam.sh +48 -0
- cvsuite/common/fm/providers/setup_venv/instruct_pix2pix.sh +51 -0
- cvsuite/common/fm/providers/setup_venv/internvl.sh +33 -0
- cvsuite/common/fm/providers/setup_venv/llava.sh +33 -0
- cvsuite/common/fm/providers/setup_venv/llmdet.sh +40 -0
- cvsuite/common/fm/providers/setup_venv/locate_anything.sh +47 -0
- cvsuite/common/fm/providers/setup_venv/minicpm_v.sh +34 -0
- cvsuite/common/fm/providers/setup_venv/ovis_u1_3b.sh +49 -0
- cvsuite/common/fm/providers/setup_venv/paddleocr.sh +57 -0
- cvsuite/common/fm/providers/setup_venv/paligemma.sh +33 -0
- cvsuite/common/fm/providers/setup_venv/qwen.sh +33 -0
- cvsuite/common/fm/providers/setup_venv/qwen_image.sh +51 -0
- cvsuite/common/fm/providers/setup_venv/qwen_image_edit.sh +51 -0
- cvsuite/common/fm/providers/setup_venv/rex_omni.sh +27 -0
- cvsuite/common/fm/providers/setup_venv/sam3.sh +63 -0
- cvsuite/common/fm/providers/setup_venv/sana.sh +48 -0
- cvsuite/common/fm/providers/setup_venv/siglip2.sh +25 -0
- cvsuite/common/fm/providers/setup_venv/stable_diffusion.sh +51 -0
- cvsuite/common/fm/providers/setup_venv/step1x_edit.sh +48 -0
- cvsuite/common/fm/providers/setup_venv/yolo_e.sh +24 -0
- cvsuite/common/fm/providers/vlm/__init__.py +1 -0
- cvsuite/common/fm/providers/vlm/blip.py +154 -0
- cvsuite/common/fm/providers/vlm/cogvlm.py +189 -0
- cvsuite/common/fm/providers/vlm/internvl.py +839 -0
- cvsuite/common/fm/providers/vlm/llava.py +170 -0
- cvsuite/common/fm/providers/vlm/minicpm_v.py +319 -0
- cvsuite/common/fm/providers/vlm/paligemma.py +173 -0
- cvsuite/common/fm/providers/vlm/qwen.py +203 -0
- cvsuite/common/io/__init__.py +27 -0
- cvsuite/common/io/class_dir.py +535 -0
- cvsuite/common/io/coco.py +471 -0
- cvsuite/common/io/common.py +385 -0
- cvsuite/common/io/flat.py +60 -0
- cvsuite/common/io/flat_vlm_json.py +230 -0
- cvsuite/common/io/labelme.py +490 -0
- cvsuite/common/io/router.py +166 -0
- cvsuite/common/io/semseg_mask.py +110 -0
- cvsuite/common/io/shards_vlm.py +250 -0
- cvsuite/common/io/vqa_style.py +467 -0
- cvsuite/common/io/yolo.py +667 -0
- cvsuite/common/stats/__init__.py +20 -0
- cvsuite/common/stats/attach.py +11 -0
- cvsuite/common/stats/builders.py +213 -0
- cvsuite/common/stats/utils.py +168 -0
- cvsuite/common/tests/__init__.py +1 -0
- cvsuite/common/tests/test_base_model.py +240 -0
- cvsuite/common/tests/test_cache_commands.py +164 -0
- cvsuite/common/tests/test_contracts.py +37 -0
- cvsuite/common/tests/test_device_utils.py +475 -0
- cvsuite/common/tests/test_fm_hub_share.py +223 -0
- cvsuite/common/tests/test_fm_model_bases.py +450 -0
- cvsuite/common/tests/test_fm_paths.py +176 -0
- cvsuite/common/tests/test_fm_prompt_utils.py +49 -0
- cvsuite/common/tests/test_gen_model.py +152 -0
- cvsuite/common/tests/test_gen_wrappers.py +799 -0
- cvsuite/common/tests/test_grounding_wrappers.py +1331 -0
- cvsuite/common/tests/test_internvl_model.py +904 -0
- cvsuite/common/tests/test_minicpm_v_model.py +350 -0
- cvsuite/common/tests/test_model_specs.py +43 -0
- cvsuite/common/tests/test_openrouter_providers.py +134 -0
- cvsuite/common/tests/test_paddleocr_model.py +81 -0
- cvsuite/common/tests/test_qwen_model.py +404 -0
- cvsuite/common/tests/test_runner.py +851 -0
- cvsuite/common/tests/test_siglip2_model.py +19 -0
- cvsuite/common/tests/test_stats.py +163 -0
- cvsuite/gen/__init__.py +1 -0
- cvsuite/gen/cli.py +111 -0
- cvsuite/gen/core/__init__.py +22 -0
- cvsuite/gen/core/batch.py +275 -0
- cvsuite/gen/core/router.py +16 -0
- cvsuite/gen/output/__init__.py +1 -0
- cvsuite/gen/output/commands/__init__.py +1 -0
- cvsuite/gen/output/commands/to_dst.py +183 -0
- cvsuite/gen/tests/__init__.py +1 -0
- cvsuite/gen/tests/test_commands.py +1024 -0
- cvsuite/gen/tests/test_output_stats.py +45 -0
- cvsuite/gen/transform/__init__.py +1 -0
- cvsuite/gen/transform/commands/__init__.py +1 -0
- cvsuite/gen/transform/commands/create.py +47 -0
- cvsuite/gen/transform/commands/edit.py +58 -0
- cvsuite/gen/transform/core/__init__.py +3 -0
- cvsuite/gen/transform/core/runtime.py +199 -0
- cvsuite/label/__init__.py +1 -0
- cvsuite/label/cli.py +183 -0
- cvsuite/label/core/annotate/__init__.py +16 -0
- cvsuite/label/core/annotate/letterbox.py +39 -0
- cvsuite/label/core/annotate/overlay.py +316 -0
- cvsuite/label/core/annotate/preview.py +134 -0
- cvsuite/label/core/annotate/utils.py +17 -0
- cvsuite/label/core/audit.py +86 -0
- cvsuite/label/core/crops.py +117 -0
- cvsuite/label/core/router.py +260 -0
- cvsuite/label/core/schema.py +136 -0
- cvsuite/label/output/__init__.py +1 -0
- cvsuite/label/output/commands/__init__.py +1 -0
- cvsuite/label/output/commands/audit.py +45 -0
- cvsuite/label/output/commands/inspect.py +54 -0
- cvsuite/label/output/commands/to_coco.py +71 -0
- cvsuite/label/output/commands/to_labelme.py +49 -0
- cvsuite/label/output/commands/to_results.py +99 -0
- cvsuite/label/output/commands/to_yolo.py +105 -0
- cvsuite/label/output/common.py +68 -0
- cvsuite/label/tests/test_cli.py +298 -0
- cvsuite/label/tests/test_filter_transform.py +217 -0
- cvsuite/label/tests/test_full_manual.py +226 -0
- cvsuite/label/tests/test_ground_transform.py +756 -0
- cvsuite/label/tests/test_label_commands.py +1037 -0
- cvsuite/label/tests/test_multisrc.py +356 -0
- cvsuite/label/tests/test_output_stats.py +59 -0
- cvsuite/label/tests/test_preview.py +58 -0
- cvsuite/label/tests/test_sample_transform.py +87 -0
- cvsuite/label/tests/test_to_coco.py +70 -0
- cvsuite/label/tests/test_yolo_layouts.py +34 -0
- cvsuite/label/transform/filter/__init__.py +2 -0
- cvsuite/label/transform/filter/commands/__init__.py +2 -0
- cvsuite/label/transform/filter/commands/apply.py +118 -0
- cvsuite/label/transform/filter/commands/logistic_opt.py +191 -0
- cvsuite/label/transform/filter/commands/run.py +30 -0
- cvsuite/label/transform/filter/commands/threshold.py +40 -0
- cvsuite/label/transform/filter/core/__init__.py +42 -0
- cvsuite/label/transform/filter/core/config.py +142 -0
- cvsuite/label/transform/filter/core/features.py +207 -0
- cvsuite/label/transform/filter/core/filters.py +376 -0
- cvsuite/label/transform/filter/core/optimizer.py +480 -0
- cvsuite/label/transform/filter/core/records.py +220 -0
- cvsuite/label/transform/filter/core/types.py +86 -0
- cvsuite/label/transform/filter/core/utils.py +107 -0
- cvsuite/label/transform/filter/core/utils_optimizer.py +777 -0
- cvsuite/label/transform/ground/__init__.py +1 -0
- cvsuite/label/transform/ground/commands/__init__.py +1 -0
- cvsuite/label/transform/ground/commands/run.py +137 -0
- cvsuite/label/transform/ground/core.py +543 -0
- cvsuite/label/transform/ocr/__init__.py +1 -0
- cvsuite/label/transform/ocr/commands/__init__.py +1 -0
- cvsuite/label/transform/ocr/commands/run.py +45 -0
- cvsuite/label/transform/ops/__init__.py +1 -0
- cvsuite/label/transform/ops/commands/__init__.py +1 -0
- cvsuite/label/transform/ops/commands/crop_dets.py +46 -0
- cvsuite/label/transform/ops/commands/inverse_crop_dets.py +20 -0
- cvsuite/label/transform/ops/commands/make_negatives.py +109 -0
- cvsuite/label/transform/ops/commands/rebox.py +51 -0
- cvsuite/label/transform/ops/commands/run.py +32 -0
- cvsuite/label/transform/ops/core/crop_dets.py +698 -0
- cvsuite/label/transform/ops/core/inverse_crop_dets.py +448 -0
- cvsuite/label/transform/ops/core/negatives.py +53 -0
- cvsuite/label/transform/ops/core/rebox.py +29 -0
- cvsuite/label/transform/sample/__init__.py +1 -0
- cvsuite/label/transform/sample/commands/__init__.py +1 -0
- cvsuite/label/transform/sample/commands/run.py +71 -0
- cvsuite/prep/__init__.py +1 -0
- cvsuite/prep/cli.py +42 -0
- cvsuite/prep/commands/arrange.py +144 -0
- cvsuite/prep/commands/orient.py +91 -0
- cvsuite/prep/commands/process.py +171 -0
- cvsuite/prep/commands/sample.py +84 -0
- cvsuite/prep/core/actions.py +62 -0
- cvsuite/prep/core/arrange/core.py +39 -0
- cvsuite/prep/core/arrange/ops.py +260 -0
- cvsuite/prep/core/config.py +81 -0
- cvsuite/prep/core/fs.py +119 -0
- cvsuite/prep/core/logging.py +17 -0
- cvsuite/prep/core/manifest.py +46 -0
- cvsuite/prep/core/orient/clip.py +62 -0
- cvsuite/prep/core/orient/core.py +328 -0
- cvsuite/prep/core/orient/deep_orientation.py +102 -0
- cvsuite/prep/core/process/core.py +116 -0
- cvsuite/prep/core/process/ops.py +168 -0
- cvsuite/prep/core/process/vsample.py +132 -0
- cvsuite/prep/core/sample/core.py +154 -0
- cvsuite/prep/tests/__init__.py +1 -0
- cvsuite/prep/tests/manual_flow.py +136 -0
- cvsuite/prep/tests/test_fs.py +50 -0
- cvsuite/prep/tests/test_incremental_arrange_process.py +237 -0
- cvsuite/prep/tests/test_orient_command.py +162 -0
- cvsuite/prep/tests/test_sample_command.py +113 -0
- cvsuite/tests/__init__.py +1 -0
- cvsuite/tests/test_cli_structure.py +258 -0
- cvsuite/vlm/__init__.py +1 -0
- cvsuite/vlm/cli.py +160 -0
- cvsuite/vlm/core/__init__.py +5 -0
- cvsuite/vlm/core/adapters/__init__.py +8 -0
- cvsuite/vlm/core/adapters/flat_json_io.py +153 -0
- cvsuite/vlm/core/adapters/images_io.py +38 -0
- cvsuite/vlm/core/adapters/shards_io.py +220 -0
- cvsuite/vlm/core/adapters/vqa_style_io.py +460 -0
- cvsuite/vlm/core/inspect.py +133 -0
- cvsuite/vlm/core/io.py +332 -0
- cvsuite/vlm/core/router.py +61 -0
- cvsuite/vlm/output/__init__.py +1 -0
- cvsuite/vlm/output/commands/__init__.py +1 -0
- cvsuite/vlm/output/commands/inspect.py +21 -0
- cvsuite/vlm/output/commands/to_json.py +55 -0
- cvsuite/vlm/output/commands/to_shards.py +66 -0
- cvsuite/vlm/output/commands/to_vqa_style.py +55 -0
- cvsuite/vlm/output/common.py +110 -0
- cvsuite/vlm/tests/__init__.py +2 -0
- cvsuite/vlm/tests/test_commands.py +756 -0
- cvsuite/vlm/tests/test_map_answers.py +166 -0
- cvsuite/vlm/tests/test_output_stats.py +50 -0
- cvsuite/vlm/transform/__init__.py +1 -0
- cvsuite/vlm/transform/commands/__init__.py +1 -0
- cvsuite/vlm/transform/commands/ask.py +17 -0
- cvsuite/vlm/transform/commands/caption.py +16 -0
- cvsuite/vlm/transform/commands/map_answers.py +23 -0
- cvsuite/vlm/transform/commands/vqa.py +17 -0
- cvsuite/vlm/transform/core/__init__.py +1 -0
- cvsuite/vlm/transform/core/map_answers.py +355 -0
- cvsuite/vlm/transform/core/runtime.py +393 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cv-suite
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Unified computer vision toolkit with shared FM runtime and branch-owned I/O.
|
|
5
|
+
Author-email: Pedro Tonso <ptonso@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/ptonso/cv-suite
|
|
8
|
+
Project-URL: Repository, https://github.com/ptonso/cv-suite
|
|
9
|
+
Project-URL: Issues, https://github.com/ptonso/cv-suite/issues
|
|
10
|
+
Keywords: computer-vision,dataset,annotation,foundation-models,cli,yolo,coco
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Image Processing
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: numpy>=1.23
|
|
24
|
+
Requires-Dist: pillow>=9.5
|
|
25
|
+
Requires-Dist: imagehash>=4.3
|
|
26
|
+
Requires-Dist: opencv-python>=4.8
|
|
27
|
+
Requires-Dist: pyyaml>=6.0
|
|
28
|
+
Requires-Dist: tqdm>=4.66
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: pytest>=7.4; extra == "dev"
|
|
31
|
+
Requires-Dist: pytest-cov>=4.1; extra == "dev"
|
|
32
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
33
|
+
Requires-Dist: mypy>=1.7; extra == "dev"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# cvsuite
|
|
37
|
+
|
|
38
|
+
`cvsuite` is a computer vision toolkit for reproducible, filesystem-to-filesystem dataset work, organized around one CLI:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
cvsuite <branch> <src> [transform] <output>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Convert between annotation formats (YOLO, COCO, LabelMe, class folders, segmentation masks, VQA manifests). Auto-label raw images from a text prompt with foundation grounding models such as SAM 3 or Grounding DINO. Caption them or answer questions about them with vision-language models. Sort them into class folders with zero-shot classifiers. Read text off them with OCR. Generate and edit images with diffusion models. Then do the unglamorous half of the job: unzip and flatten a dump of files, drop exact and near-duplicates, fix orientation, normalize size and format, and draw a balanced sample for training.
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
cvsuite label ./dataset-yolo to-coco ./dataset-coco
|
|
48
|
+
cvsuite label ./images ground --provider gsam --prompt "fire, smoke" to-coco ./labeled
|
|
49
|
+
cvsuite vlm ./images caption --provider qwen to-json ./captions
|
|
50
|
+
cvsuite class ./images infer --provider clip --prompt "good,bad" to-class-dir ./sorted
|
|
51
|
+
cvsuite gen create --provider flux --prompt "a red fox in the snow" to-dst ./fox.png
|
|
52
|
+
cvsuite prep arrange ./dump ./clean --unzip --exact-dedup --rename-seq
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
More in the [cookbook](https://github.com/ptonso/cv-suite/blob/main/docs/cookbook.md).
|
|
56
|
+
|
|
57
|
+
You point a branch at a source, optionally run a transform, and materialize a destination layout. There is deliberately no universal "convert anything to anything" command.
|
|
58
|
+
|
|
59
|
+
## How it works
|
|
60
|
+
|
|
61
|
+
```mermaid
|
|
62
|
+
flowchart LR
|
|
63
|
+
SRC["source<br/>yolo · coco · labelme<br/>images · shards · …"] --> TOOL
|
|
64
|
+
|
|
65
|
+
TOOL{"pick a tool<br/>label · class · vlm · gen"} -->|ingest| DS["VisionDataset"]
|
|
66
|
+
|
|
67
|
+
DS --> TF["one transform<br/>sample · ground · ocr<br/>infer · caption · vqa"]
|
|
68
|
+
TF -->|"chain runs to stack"| DS
|
|
69
|
+
|
|
70
|
+
DS -->|output command| DST["destination<br/>yolo · coco · class-dir<br/>json · shards · …"]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Whichever tool you pick, the spine is the same: the source is ingested into a shared `VisionDataset`, transforms mutate that dataset, and an output command materializes it. What differs per tool is the ingest heuristics, which transforms exist, and the export rules.
|
|
74
|
+
|
|
75
|
+
Each run applies at most one transform, so you stack them by chaining runs: the destination of one becomes the source of the next. FM-backed transforms (`ground`, `ocr`, `infer`, `caption`, `vqa`, and the `gen` actions) hand the dataset to an isolated provider subprocess that mutates records in place. `cvsuite prep` is the exception to all of this, since it works directly on folders and never builds a dataset.
|
|
76
|
+
|
|
77
|
+
## Branches
|
|
78
|
+
|
|
79
|
+
| Branch | Purpose |
|
|
80
|
+
|---|---|
|
|
81
|
+
| `cvsuite label` | annotated datasets: YOLO / COCO / LabelMe / image-only ingest, `sample` / `ground` / `ocr` / `ops` / `filter` transforms, export to any label format |
|
|
82
|
+
| `cvsuite class` | class-directory datasets: `infer` with zero-shot classifiers, class-aware `sample`, export via `to-class-dir` |
|
|
83
|
+
| `cvsuite vlm` | vision-language datasets: `caption` / `ask` / `vqa` / `map-answers`, export to flat JSON / shards / VQA-style |
|
|
84
|
+
| `cvsuite gen` | text-to-image and image-edit generation, materialized via `to-dst` |
|
|
85
|
+
| `cvsuite prep` | raw image folder cleanup: `arrange` / `process` / `sample` / `orient`, file-first |
|
|
86
|
+
| `cvsuite common` | shared operations: FM cache paths, inspection, and purge |
|
|
87
|
+
|
|
88
|
+
## Install
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
pip install cv-suite
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Or from source:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
git clone https://github.com/ptonso/cv-suite
|
|
98
|
+
pip install -e ./cv-suite
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The base install ships the CLI and the I/O layer. Foundation-model backends run in isolated per-model virtualenvs provisioned on first use. See [`docs/getting-started.md`](https://github.com/ptonso/cv-suite/blob/main/docs/getting-started.md).
|
|
102
|
+
|
|
103
|
+
## Documentation
|
|
104
|
+
|
|
105
|
+
- [`docs/`](https://github.com/ptonso/cv-suite/tree/main/docs) contains the guides: the [mental model](https://github.com/ptonso/cv-suite/blob/main/docs/index.md), [getting started](https://github.com/ptonso/cv-suite/blob/main/docs/getting-started.md), and a [cookbook](https://github.com/ptonso/cv-suite/blob/main/docs/cookbook.md) of common workflows.
|
|
106
|
+
- [`specs/`](https://github.com/ptonso/cv-suite/tree/main/specs) is the technical source of truth: architecture, the dataset contract, per-branch behavior, business decisions, and the guardrails that must not break.
|
|
107
|
+
|
|
108
|
+
## Names
|
|
109
|
+
|
|
110
|
+
- PyPI distribution: `cv-suite`
|
|
111
|
+
- import package and CLI: `cvsuite`
|
|
112
|
+
|
|
113
|
+
## License
|
|
114
|
+
|
|
115
|
+
MIT. See [LICENSE](https://github.com/ptonso/cv-suite/blob/main/LICENSE).
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
cv_suite-0.0.1.dist-info/licenses/LICENSE,sha256=hWMh-9H0A6_sGpcwJLhJNoCacQ1OYCiumEt5GqpEAVg,1068
|
|
2
|
+
cvsuite/__init__.py,sha256=Ym-lVqOa3SpJ-DFlVT8eJSqtjltT-hROKz--rSMbjzA,28
|
|
3
|
+
cvsuite/branch_cli.py,sha256=6_iXCeS_NrBBC2IwwLCuUUM2AQPrWXbZjnEQTSGeqQE,5457
|
|
4
|
+
cvsuite/cli.py,sha256=6WjgWhCK1PBJ6yhicwfue5DdlODcoG2ZxEZ2SOnDG8M,1674
|
|
5
|
+
cvsuite/classify/__init__.py,sha256=A5ni2X3WQqqIRNyHTK1RwujENSiewJ_Fq8VqeRG88Mg,52
|
|
6
|
+
cvsuite/classify/cli.py,sha256=mWv7zTCb0-o7lyjXDclDQouG9vNj93mnuSJ33PzQJFA,4845
|
|
7
|
+
cvsuite/classify/core/__init__.py,sha256=Y0X--33UEjE_VTidUGJaA9hNHejmv6rip2oN81IcVaE,35
|
|
8
|
+
cvsuite/classify/core/io.py,sha256=9vuAKwV8NrUCeVHB4Um6v46gJlAFA8lQOnCfwJKTMz0,22170
|
|
9
|
+
cvsuite/classify/output/__init__.py,sha256=5UXGrKNCSSuD7r65q9vFgTxD0cBu87rEf4xEXVJgNZA,45
|
|
10
|
+
cvsuite/classify/output/commands/__init__.py,sha256=dkw7XiZBwu60NNDsgW2FPkj5C0bY6Yq2hb7gf8iysLs,54
|
|
11
|
+
cvsuite/classify/output/commands/to_class_dir.py,sha256=8p02z9sM4gGIJU8Zq2xpDXtvxK2rb23diNUvqJsSwjY,4833
|
|
12
|
+
cvsuite/classify/tests/__init__.py,sha256=pq26_5wyo9rJVk_IsT8nhCBl-tUUHtQW392P-lNWqJE,29
|
|
13
|
+
cvsuite/classify/tests/test_output_stats.py,sha256=MIvAbLdvH7-Di3ZUlEooIHawIHriJJQ7TBrCvCvv8bw,2824
|
|
14
|
+
cvsuite/classify/tests/test_run_command.py,sha256=rllzzD74RqWaaReIPL4iofbLMC2t4fH9j73XpBMZ6o4,29368
|
|
15
|
+
cvsuite/classify/transform/__init__.py,sha256=UNZ88Ll5EdvD8iJ_80mXA0aoclKb1N4ikN2nBPyPwVk,40
|
|
16
|
+
cvsuite/classify/transform/commands/__init__.py,sha256=2ZtAyJmXgAAJ6mM3F3NjFj0U3H439p6ojHvVBCw8Oz0,59
|
|
17
|
+
cvsuite/classify/transform/commands/infer.py,sha256=5Ih5asUzNYPHi1QZb6XXMxjBKHEgx76sy7P1HAHSmCU,318
|
|
18
|
+
cvsuite/classify/transform/commands/sample.py,sha256=7z3J-LQVIT696oGjjtjFPfKasKhj4ic_RtrSCFrCQx8,358
|
|
19
|
+
cvsuite/classify/transform/core/__init__.py,sha256=0nONsZqL3lFnR55cbeDqWxVcUCg1xywX5U9fWts2EXQ,44
|
|
20
|
+
cvsuite/classify/transform/core/infer.py,sha256=OVFo4Ed-YTRYWl61PxeOV1Bg0EJEWdVud7bhbHWtKU0,3321
|
|
21
|
+
cvsuite/classify/transform/core/sample.py,sha256=EHz-iz0diTC1Kum_gHJ63sFCYIn7uOjefP7QR6doGVE,7274
|
|
22
|
+
cvsuite/common/__init__.py,sha256=imfgxc2OVQ04I_vVPAIWPNCnUC8PzdTNvD9NyuDg1DU,39
|
|
23
|
+
cvsuite/common/cli.py,sha256=sgZRRXaAPoSCWtPokqd-0W1LSQ3gjaWwKFs0AQpcKoc,361
|
|
24
|
+
cvsuite/common/cache/__init__.py,sha256=5btli2EH5RwEfS7rjZ9RPRnKndDJJls_hki05o5dDqw,50
|
|
25
|
+
cvsuite/common/cache/core.py,sha256=yf4xSSSAqku3CnIz13wLEhB5esO8D_fiOsk1InAY_mk,7843
|
|
26
|
+
cvsuite/common/cache/commands/__init__.py,sha256=sCs10VGnDeIIinwcy-Ce4FfonVbhKPnsFd_xFgX3hlc,55
|
|
27
|
+
cvsuite/common/cache/commands/list.py,sha256=y2ddfqAN0uU4sWGEJK4H30GgPx05FsrRNndMik3iKsM,4586
|
|
28
|
+
cvsuite/common/cache/commands/path.py,sha256=wiBU57VJzqKKR8ve9u4IB8AWgU5oSgMDyxy1k2JbK14,1017
|
|
29
|
+
cvsuite/common/cache/commands/purge.py,sha256=KuE1NO-BBJIr3f3cACufsMrANyb02-xd_aD4hF5cLIg,3442
|
|
30
|
+
cvsuite/common/core/__init__.py,sha256=1Jzn5ywa12ynMCAa8mNjiczVGxU6qWpM6c1YBp3l-tU,1098
|
|
31
|
+
cvsuite/common/core/enums.py,sha256=PQg3MhDoC3p5XpqYOIJ282q9t-gpLK7NTWN8ErUMc6E,1190
|
|
32
|
+
cvsuite/common/core/records.py,sha256=phdCc33SvIG2x4yU83ED0wiQq95oGZyz1joFWqjABBs,4530
|
|
33
|
+
cvsuite/common/core/types.py,sha256=vOLTmgUcwqY4GF-DdgbT0DYjpOmkWv-7K1nt5xGNmyA,5767
|
|
34
|
+
cvsuite/common/core/utils.py,sha256=-lvAftu61ard8iq1NJgwWfS3wsfAsGw9B1n5Zqsq8gw,4685
|
|
35
|
+
cvsuite/common/fm/__init__.py,sha256=ub8WRIoKJ7ziPa0q-aQdeWJy0DjPTh4tCJt-mtksJpw,120
|
|
36
|
+
cvsuite/common/fm/core/__init__.py,sha256=tyekVE-pn3An780xzd4MU043dpRHEf1uE9RduOQKyQM,861
|
|
37
|
+
cvsuite/common/fm/core/export.py,sha256=Xmttxh_zNtdD8KkwJWtQ3ApdvQGzWxTpW-CZweV-Ny0,249
|
|
38
|
+
cvsuite/common/fm/core/paths.py,sha256=lKG36Wiijhx_s60DS31uIBhTSq3ntuMZJgD376uQZqY,8343
|
|
39
|
+
cvsuite/common/fm/core/prompt_utils.py,sha256=t99gvAVQ3IToOJcrUcOM9ZCaFcLzm6ies8T40ewvaPU,3060
|
|
40
|
+
cvsuite/common/fm/core/runner.py,sha256=vTcpxzs34hIYLsp8VL6iu5cURp6DkGKQhDLQNtf0cbY,22062
|
|
41
|
+
cvsuite/common/fm/core/sam3_patch.py,sha256=MxyIDu9Lj2MJ6om5plY1kQyA7POP7Xgv8YKmEE2xQH8,3442
|
|
42
|
+
cvsuite/common/fm/core/utils.py,sha256=GmZtIFUuzn7C1EWkby0qvGHtJd8qs178YgO6JyXWmzM,31168
|
|
43
|
+
cvsuite/common/fm/providers/__init__.py,sha256=RXZQ8BsuGWLMdFS8mn0dlc73P_7KVvSLO7DQOAsL8NE,1022
|
|
44
|
+
cvsuite/common/fm/providers/_template.py,sha256=woDYM7gz-Fgtj31c0W5DDKU9A9d9i2q3f1Zi0D7-GJ4,3298
|
|
45
|
+
cvsuite/common/fm/providers/base.py,sha256=_GiudSw7nJc32Qgux6kg5Bp29RvAVdy8ay9OFI_hz74,35973
|
|
46
|
+
cvsuite/common/fm/providers/registry.py,sha256=0XcPcgOOnxhRC3CdEsJmpqDdxrvoT13gvJq7Jre6aZI,11829
|
|
47
|
+
cvsuite/common/fm/providers/api/__init__.py,sha256=xat7wuh72-tGIY-EN4TfdOu3svNor0pNhnN6QXKjKS4,31
|
|
48
|
+
cvsuite/common/fm/providers/api/openrouter_common.py,sha256=EKhDye91hoNNjPZ1Oh651pdMZ_aqTEWPNT0pDsHSvXs,3406
|
|
49
|
+
cvsuite/common/fm/providers/api/openrouter_gen.py,sha256=VDfWAF5josMYM1975yEesiOLPS3pUe4Lgaq74v_kyLU,8162
|
|
50
|
+
cvsuite/common/fm/providers/api/openrouter_vlm.py,sha256=h--aDw769pdInRmV29j_bEDA6anbKVI8DPthN7Rzpu0,3450
|
|
51
|
+
cvsuite/common/fm/providers/bases/__init__.py,sha256=tZiWbRW7yAOr9zS_G_1gRvjuYGB4KTpAlf8OjFrE5M4,2887
|
|
52
|
+
cvsuite/common/fm/providers/bases/classification.py,sha256=H0Z_VDNylx81MAN3ejj_EgQ8p4QKhl0nsvbpwagwF7I,3462
|
|
53
|
+
cvsuite/common/fm/providers/bases/create.py,sha256=lU6kcs3gNnMuPtHwUC3201OA4A5N5cEghA6CB_mbfi8,7108
|
|
54
|
+
cvsuite/common/fm/providers/bases/diffusion.py,sha256=2f1Hvt3rsqlkL_8lce4hp6nEaOT_YED7xfrD-Z5ZkPw,24460
|
|
55
|
+
cvsuite/common/fm/providers/bases/edit.py,sha256=QHn43oifcUxgQkARp3WpmIhpw4npi3TL5rLo9mHlbxQ,7484
|
|
56
|
+
cvsuite/common/fm/providers/bases/edit_custom.py,sha256=L6G3LJnQJ-eomEmRUr_A7PNkLFJ6toBQRfRVDDgZPCk,25782
|
|
57
|
+
cvsuite/common/fm/providers/bases/gen.py,sha256=ajuDCdmC8ZGvC-GDO0yggnlWxa0yWMTuDi0ChsBsFkU,12406
|
|
58
|
+
cvsuite/common/fm/providers/bases/ground.py,sha256=sS8O2TKzCXQ8TuXDejCdH22mddaN-f-Aim769lHkmsM,4323
|
|
59
|
+
cvsuite/common/fm/providers/bases/ocr.py,sha256=hNn_PcSoDBqMVJTbTHZ8kwlQ4ojRPbG5QQ-4vNjJMlU,3190
|
|
60
|
+
cvsuite/common/fm/providers/bases/qwen_image.py,sha256=Dcj2QkrUealouXPZb7sjQDWXgdOG4fUHgtEL3ImAjLE,5817
|
|
61
|
+
cvsuite/common/fm/providers/bases/record_image.py,sha256=QoDtlFEDdDiJ-EYq8ym5D0KWZBRZaZja3WwUsjoYHaU,3012
|
|
62
|
+
cvsuite/common/fm/providers/bases/vlm.py,sha256=JtmIErbHT9t8nNbD_Tm36aRO0JqrJWtDR3IgEuQV7t0,17974
|
|
63
|
+
cvsuite/common/fm/providers/classify/__init__.py,sha256=d1ZsHB6fe4LQOGqFJL2OK4y1rjiuQgguBWG3d1yNRdg,34
|
|
64
|
+
cvsuite/common/fm/providers/classify/clip.py,sha256=ICOCAwWheZafsYqK7umfvrtBvqKjgI3kEczakdV6gw8,9100
|
|
65
|
+
cvsuite/common/fm/providers/classify/deep_orientation.py,sha256=hMcR-RfrIB4aB0hoHSX7Na0G1VzoJ1NHqI6xWl-FyRM,8881
|
|
66
|
+
cvsuite/common/fm/providers/classify/siglip2.py,sha256=pdNSXChdYXezJK95L2xvV8XBavnT216710N1TpV_48E,9268
|
|
67
|
+
cvsuite/common/fm/providers/create/__init__.py,sha256=1LBpw2ozmAHpuf8A-SOGXzFEuggjKfIGxaLoxyI7WGo,37
|
|
68
|
+
cvsuite/common/fm/providers/create/flux.py,sha256=xWwOWeQWHgMbMxrPfhE5v4vLW3A4d1Rb663owm_XSgM,1721
|
|
69
|
+
cvsuite/common/fm/providers/create/qwen_image.py,sha256=1JJoeXKY220Y0BOHom4QXhjhhkXfa1v2thaF4_CM1iY,2139
|
|
70
|
+
cvsuite/common/fm/providers/create/sana.py,sha256=AVvb0pwrVvw0vBRjxJNPQhd44QzO5iJ3vlGdunjSU1U,1510
|
|
71
|
+
cvsuite/common/fm/providers/create/stable_diffusion.py,sha256=Jhig8Om0YW7yzC4w3bVPFRKpLgFvTx6Mz8zRw6JEoXY,2464
|
|
72
|
+
cvsuite/common/fm/providers/edit/__init__.py,sha256=GAZBtN_Pwuifb-hYNem3jaMGLQrXMS0yCtC4f-r2tyo,35
|
|
73
|
+
cvsuite/common/fm/providers/edit/dim_edit.py,sha256=8UmsZ-TsVRpQWhlpHiGXiQ0_xUY_xDye1ax5BydViss,49699
|
|
74
|
+
cvsuite/common/fm/providers/edit/flux2_klein.py,sha256=KFe8YAW-jzy6k3kIF_xbI07TA2i3vTYWxHyGKLAmue8,1605
|
|
75
|
+
cvsuite/common/fm/providers/edit/instruct_pix2pix.py,sha256=NxMYCZUycZh2MhCCMaBOGIvCk0g79EfFO_Up0ApX1Go,2454
|
|
76
|
+
cvsuite/common/fm/providers/edit/ovis_u1_3b.py,sha256=3wRy8UQomhLJFy1I-p6glCIDX47GHrYC5mTnYNmX6Wg,1362
|
|
77
|
+
cvsuite/common/fm/providers/edit/qwen_image_edit.py,sha256=gGHl0iyU3SWhHIO-eN0aiqbRq0NCEj7r1MUf9SxSN7Y,2131
|
|
78
|
+
cvsuite/common/fm/providers/edit/step1x_edit.py,sha256=DeyoWwMBEM45JMS7Dt24MJ_r3loG2xQ1RMWHYROVNqw,1436
|
|
79
|
+
cvsuite/common/fm/providers/ground/__init__.py,sha256=Shm5gU08wxAAA2JVMB8bwdmYFdaOXaKTbsiJ2PV22Vw,29
|
|
80
|
+
cvsuite/common/fm/providers/ground/gdino.py,sha256=JnG_kwpJhsQ2xsp0NqsoIdwyNusJxSNECUTHYOBh6Sw,7714
|
|
81
|
+
cvsuite/common/fm/providers/ground/gsam.py,sha256=iIlvHDWWwyCElI7WT6DDF7S8t0FyJca0fFTKoWPfxQk,15838
|
|
82
|
+
cvsuite/common/fm/providers/ground/llmdet.py,sha256=NGoGqDIpqqlwV4o6hoyLzLD4Y32xzA0IyX5LcOPLMoo,10045
|
|
83
|
+
cvsuite/common/fm/providers/ground/locate_anything.py,sha256=ELj1Mu9gsve0JSCXESEZEvGmo5Hdy6mBEfW4o0FF3ZA,15944
|
|
84
|
+
cvsuite/common/fm/providers/ground/rex_omni.py,sha256=zvDDfyPchJ7_eQewdXnw8Y0-fmLonziou-aEyyznYXQ,11059
|
|
85
|
+
cvsuite/common/fm/providers/ground/sam3.py,sha256=RdiLEx8HFG4tZcc8f5Fr8UdtTmL2g9Cb4wfEKXVmD8A,19711
|
|
86
|
+
cvsuite/common/fm/providers/ground/yolo_e.py,sha256=kBvQCnvYzH4AHFvQtyTe4ff58JEiLSWZvz6rjV7toRQ,12292
|
|
87
|
+
cvsuite/common/fm/providers/ocr/__init__.py,sha256=Yi_VHEwXRLjyJloZjYh6TD0LItFNa1HI_geBWoxu_xA,23
|
|
88
|
+
cvsuite/common/fm/providers/ocr/paddleocr.py,sha256=0tJa4Nhw0Jv7XNqdpF5amXu7-lfSKuWQ0VKbXJEoSzw,8273
|
|
89
|
+
cvsuite/common/fm/providers/setup_venv/blip.sh,sha256=LxpwCMPJMSGBcCiy4pvYjBpAHsE-iQe52q3x9S0LjMo,1056
|
|
90
|
+
cvsuite/common/fm/providers/setup_venv/clip.sh,sha256=8gONjo4AaNGM7bGl14MIHsmVhVypEZJbzmGHgAvVrkM,734
|
|
91
|
+
cvsuite/common/fm/providers/setup_venv/cogvlm.sh,sha256=LxpwCMPJMSGBcCiy4pvYjBpAHsE-iQe52q3x9S0LjMo,1056
|
|
92
|
+
cvsuite/common/fm/providers/setup_venv/deep_orientation.sh,sha256=TEI0IcPTLcUNzd-zOgGOY_TmzDQQxYmuGwR474kqlDk,724
|
|
93
|
+
cvsuite/common/fm/providers/setup_venv/dim_edit.sh,sha256=CxFmkiWJQV5X08ubH793QUvOw6mfRJ6jyHHxSiDJoTM,1773
|
|
94
|
+
cvsuite/common/fm/providers/setup_venv/flux.sh,sha256=CDTiu6tvX0sptAWG9kx6aF_LhdLhQ4k2FPXULIVgOxg,1417
|
|
95
|
+
cvsuite/common/fm/providers/setup_venv/flux2_klein.sh,sha256=k57RMHVBocFGOtASYUJhb_8jTS3fxsHoCKPzkgq3sQM,1390
|
|
96
|
+
cvsuite/common/fm/providers/setup_venv/gdino.sh,sha256=MMpqO4LuY3x-sSEpZqbNjrbqWcsjzuMZmjdvswwkfGE,853
|
|
97
|
+
cvsuite/common/fm/providers/setup_venv/gsam.sh,sha256=Aksp9PyfUKvLGxyr3Z13iG85aGH7TMdZp_EEcUnWSnI,1563
|
|
98
|
+
cvsuite/common/fm/providers/setup_venv/instruct_pix2pix.sh,sha256=CDTiu6tvX0sptAWG9kx6aF_LhdLhQ4k2FPXULIVgOxg,1417
|
|
99
|
+
cvsuite/common/fm/providers/setup_venv/internvl.sh,sha256=Tj_82XVVoLLCPYQ1ZknuEMtLTLorQbxgkCeAyyoU0j0,1079
|
|
100
|
+
cvsuite/common/fm/providers/setup_venv/llava.sh,sha256=LxpwCMPJMSGBcCiy4pvYjBpAHsE-iQe52q3x9S0LjMo,1056
|
|
101
|
+
cvsuite/common/fm/providers/setup_venv/llmdet.sh,sha256=E4a5vnPAnEbiYIkY-Yj-bAJAeJK_1_23TnAz-svrwEY,1080
|
|
102
|
+
cvsuite/common/fm/providers/setup_venv/locate_anything.sh,sha256=qZmGXdjcmH6fgx-MoaEvQPj5hFUELPy1A_qG1UQXasg,1269
|
|
103
|
+
cvsuite/common/fm/providers/setup_venv/minicpm_v.sh,sha256=VLBIzN6ySby-l4cqgDkify38ueQOnuhd7LFEDcQih70,1141
|
|
104
|
+
cvsuite/common/fm/providers/setup_venv/ovis_u1_3b.sh,sha256=jitVp4qbZgp_bCQQXKTFYkTltxayR2iqtlFLFpDDkOY,1344
|
|
105
|
+
cvsuite/common/fm/providers/setup_venv/paddleocr.sh,sha256=tXfOHPaON2jBk21ohAgexWgrxI5Hq6ukdjrhXRUrx-E,2337
|
|
106
|
+
cvsuite/common/fm/providers/setup_venv/paligemma.sh,sha256=LxpwCMPJMSGBcCiy4pvYjBpAHsE-iQe52q3x9S0LjMo,1056
|
|
107
|
+
cvsuite/common/fm/providers/setup_venv/qwen.sh,sha256=BAjS1qlNDaIOAtglTOIvGpdnZEnSfUSDYA8fRyyc-V0,1049
|
|
108
|
+
cvsuite/common/fm/providers/setup_venv/qwen_image.sh,sha256=CDTiu6tvX0sptAWG9kx6aF_LhdLhQ4k2FPXULIVgOxg,1417
|
|
109
|
+
cvsuite/common/fm/providers/setup_venv/qwen_image_edit.sh,sha256=CDTiu6tvX0sptAWG9kx6aF_LhdLhQ4k2FPXULIVgOxg,1417
|
|
110
|
+
cvsuite/common/fm/providers/setup_venv/rex_omni.sh,sha256=Z36c37J9RMMoJq-IWnQmrrSfmC2eUKhoPsRli1B0S2E,1077
|
|
111
|
+
cvsuite/common/fm/providers/setup_venv/sam3.sh,sha256=kEErDJWzvOsygKwQ1bB7ydSD-193NODMw2Lo2BJE1jk,2142
|
|
112
|
+
cvsuite/common/fm/providers/setup_venv/sana.sh,sha256=56zOiwlgXuSCw1nFlEKjiEfYTbvdde_36cRlGET1NMI,1321
|
|
113
|
+
cvsuite/common/fm/providers/setup_venv/siglip2.sh,sha256=G_SOiWCJaD8W8iTnwQnq6fRnDF-qFhdk6JhXcVzPhq8,826
|
|
114
|
+
cvsuite/common/fm/providers/setup_venv/stable_diffusion.sh,sha256=CDTiu6tvX0sptAWG9kx6aF_LhdLhQ4k2FPXULIVgOxg,1417
|
|
115
|
+
cvsuite/common/fm/providers/setup_venv/step1x_edit.sh,sha256=56zOiwlgXuSCw1nFlEKjiEfYTbvdde_36cRlGET1NMI,1321
|
|
116
|
+
cvsuite/common/fm/providers/setup_venv/yolo_e.sh,sha256=6GUZsUrWFSSKpBQtGXDlPO_cYi9cgCCEVKI2gTvdwtk,859
|
|
117
|
+
cvsuite/common/fm/providers/vlm/__init__.py,sha256=3HNFOiS-Z_dfcfKi4q_GR7oAAnyhtkSDWJwZh0DLLRM,35
|
|
118
|
+
cvsuite/common/fm/providers/vlm/blip.py,sha256=XgsGOtMJpBVFdywKc-83wVoWyKrCrTDd4LPquP5LsrI,5442
|
|
119
|
+
cvsuite/common/fm/providers/vlm/cogvlm.py,sha256=bmPsaP02ldAvcfnzPnLzB4yCIpnrjii_yBEI8xEpReU,6536
|
|
120
|
+
cvsuite/common/fm/providers/vlm/internvl.py,sha256=O5Wjkou7hMzcjNdaa5ffWKXL2_Qo4Q5k2Ob7LnLr_w8,32183
|
|
121
|
+
cvsuite/common/fm/providers/vlm/llava.py,sha256=qDWnN-Ln_1uibHwi41_W36XDOPJiaKtte8iqCcG5lYI,5695
|
|
122
|
+
cvsuite/common/fm/providers/vlm/minicpm_v.py,sha256=47mEDS1rXOny0KjmAhJkybFUNCjXHhCH3o6eThkfFGE,11080
|
|
123
|
+
cvsuite/common/fm/providers/vlm/paligemma.py,sha256=g7zNge9xkp4SpXn0iam1V3aA8YaU131DmFpDnA5nkUE,5620
|
|
124
|
+
cvsuite/common/fm/providers/vlm/qwen.py,sha256=-DbwicZkZN1pYpahFkN0e-JDyBg1UuQpMNg5ACl6GFo,6683
|
|
125
|
+
cvsuite/common/io/__init__.py,sha256=mgJyLDt6CgCpPFOcVOd_qKtWnX-imi9SoXlHV-ZE0LU,708
|
|
126
|
+
cvsuite/common/io/class_dir.py,sha256=zbmJIol5g1Q2Zse3ifP4C2SK-bP5_gCF2RWzDOFTUSI,21627
|
|
127
|
+
cvsuite/common/io/coco.py,sha256=At1oSHo-PW2fHU4iLFJoAwX8HsRcxLaye0Ee9EK6CD8,20776
|
|
128
|
+
cvsuite/common/io/common.py,sha256=Zdj-r38ikjibj-JPO_dpy3c6WXjs597Yp_VNVfQ_tuw,12157
|
|
129
|
+
cvsuite/common/io/flat.py,sha256=RiwI-mDHoRWOAPYkFdyOLVeywaYwM_Jf5EXGP1kMGxk,2238
|
|
130
|
+
cvsuite/common/io/flat_vlm_json.py,sha256=t5aR1DnWUNoTfB4lqyGfACd6rYD1dWYRWPOFHiX0SB4,9636
|
|
131
|
+
cvsuite/common/io/labelme.py,sha256=ceV_6cpOyx3OGpQgjw5_ooVrxAd9dRr2KIUKFKnvhwY,23220
|
|
132
|
+
cvsuite/common/io/router.py,sha256=wyODN3Q2uFGxclUHMduCUjl49NqVV3lHGyBgKqT50ps,5470
|
|
133
|
+
cvsuite/common/io/semseg_mask.py,sha256=pC7ZRlEyEdXSe2gm2JM6YEgyfLGeIo8yvMLVf1JWC7A,4177
|
|
134
|
+
cvsuite/common/io/shards_vlm.py,sha256=mEL4F_Wq_DRnCU8D66AcULEsVE2XV0TiM4fUX0K6oB8,10756
|
|
135
|
+
cvsuite/common/io/vqa_style.py,sha256=cyFTM1GZLq0M5IjTUw-ElF7kOsgJIadUp7N7CiZ_-2I,20516
|
|
136
|
+
cvsuite/common/io/yolo.py,sha256=rWwvqIO8YH_bIH8zqvsxetOenWi2XOaWBK0dRRo6OEU,26945
|
|
137
|
+
cvsuite/common/stats/__init__.py,sha256=0a3WK4nnpLk0kv06UvRFAhMP0S4tJwVA3rYahO-I0CA,502
|
|
138
|
+
cvsuite/common/stats/attach.py,sha256=-21nlSc6jh85dOaH2u83_78wdug9ySt5Cu9CzaR_4m8,281
|
|
139
|
+
cvsuite/common/stats/builders.py,sha256=Fmegzo2Zp3tlYk4yHJVfotsx9IniX6jr4SR5PFtenxc,7988
|
|
140
|
+
cvsuite/common/stats/utils.py,sha256=jSxoMEtzOXum_RikLqjuMxkRLsdIfxRs6jJfUF8MaIY,5082
|
|
141
|
+
cvsuite/common/tests/__init__.py,sha256=EpzmwpXL99v3cQrogJsJbno-d0RwdAUQqiyomqvGmHQ,26
|
|
142
|
+
cvsuite/common/tests/test_base_model.py,sha256=gag-lT-IXyrOzicc1RCI_jZAFFgYnwFHRqZ7ctIM4q0,8339
|
|
143
|
+
cvsuite/common/tests/test_cache_commands.py,sha256=DcW45PTmawjBY53nFD5w3GxwdPEudn48i2MCEHiCJxY,6370
|
|
144
|
+
cvsuite/common/tests/test_contracts.py,sha256=68yD6EZh6PNEE5-cJk1z4NIYCQmrpTqXINpNLpC0j8w,1251
|
|
145
|
+
cvsuite/common/tests/test_device_utils.py,sha256=vanx0YgBLOdfbxYblrPz6402CgKu2_F9DrMlbhGqbik,19378
|
|
146
|
+
cvsuite/common/tests/test_fm_hub_share.py,sha256=57sM8B5BM-rf-TnySjdu6wpCwBuMFqoCGaSUx-ELHyo,8315
|
|
147
|
+
cvsuite/common/tests/test_fm_model_bases.py,sha256=TTHQvJMpf_ILAj3nhUiW84BFskSkBEm2N6ZsgxHSIaw,16390
|
|
148
|
+
cvsuite/common/tests/test_fm_paths.py,sha256=C4n7FDU6cNtbL9qpemrUS2X1JXbDoiTk0ZH0sVFxlaM,7387
|
|
149
|
+
cvsuite/common/tests/test_fm_prompt_utils.py,sha256=jnYCehoOq0WgJ_NdNcQ1_FQOtjxR2_VUQNlSIl4x8AY,1335
|
|
150
|
+
cvsuite/common/tests/test_gen_model.py,sha256=PxBuuIC-YqNwz-feNhTbF4yl0Ae1Nen9ALCn8Bj_Tyo,5940
|
|
151
|
+
cvsuite/common/tests/test_gen_wrappers.py,sha256=oqa6YIeQeqYhaAXMD4O6NZ8TLDhuGFMz3rAL6r5Te8o,31795
|
|
152
|
+
cvsuite/common/tests/test_grounding_wrappers.py,sha256=mQGte9yZA563pacD4eDeE6dDKg9uCNpb__j8UP-Lw0o,54733
|
|
153
|
+
cvsuite/common/tests/test_internvl_model.py,sha256=dYqGGy_GTj3PXeSLxBvcfoTiIUp90zMA-D628-vZHrk,35322
|
|
154
|
+
cvsuite/common/tests/test_minicpm_v_model.py,sha256=2_oU3E0O41R-AgLQ_RfLuqcDIFdq-I2SbFMv0hhCv6E,13317
|
|
155
|
+
cvsuite/common/tests/test_model_specs.py,sha256=ap7Z1q51imZaYPfugs0V0INVLK9TIZNveE71PZv1BB8,1920
|
|
156
|
+
cvsuite/common/tests/test_openrouter_providers.py,sha256=GLJzKCIlINn6ll2D_Fv5CmkEdd6PgfZ-D191wz7bf_Y,4597
|
|
157
|
+
cvsuite/common/tests/test_paddleocr_model.py,sha256=xcdoGN7qy8J-E8_btJkY8LKv0aDw1_3zBoDjeMrd5NA,2354
|
|
158
|
+
cvsuite/common/tests/test_qwen_model.py,sha256=NNQ_shZi7uK3EKkwpsLq1E1zJxP4KNbUwthuVPpOJXk,15792
|
|
159
|
+
cvsuite/common/tests/test_runner.py,sha256=Qs1y0E_YB17jHyevuXbGmilSSzdPF1rQGQg8SJgYQiM,33404
|
|
160
|
+
cvsuite/common/tests/test_siglip2_model.py,sha256=w4Jq3kz51zdZdmHx5T8vYPGtfpQ3mbAx0HABpiLwLkE,737
|
|
161
|
+
cvsuite/common/tests/test_stats.py,sha256=I9mOvNmIkCgrbs1X9wDQzpjSLvU-1qG7kFeGf0pLMHA,6671
|
|
162
|
+
cvsuite/gen/__init__.py,sha256=CHz6Rbyy_njz1GxLs09OQ5Y7IziIEaSKEsZIzWevWuI,56
|
|
163
|
+
cvsuite/gen/cli.py,sha256=b_gBJ-XNwxJkQRvD1bmEIQj9eUR7HSvPWWVrzIZgvi4,4172
|
|
164
|
+
cvsuite/gen/core/__init__.py,sha256=hGu13MF2s84NSuo8pylFMgSPXVo-_7myDL0bGVbDrWc,439
|
|
165
|
+
cvsuite/gen/core/batch.py,sha256=k2vuxmEITj5aphXlkt6gJuwzR1faWwtj_nQB4iq7Cus,9993
|
|
166
|
+
cvsuite/gen/core/router.py,sha256=XB2kFlay9eNTMyQ7o9S2cL3xL98mAW6qsO-CrZQJRgk,450
|
|
167
|
+
cvsuite/gen/output/__init__.py,sha256=SlAAvszathnT9stf4x3MIUFtF63yWBVO4LKj_fpyWUY,26
|
|
168
|
+
cvsuite/gen/output/commands/__init__.py,sha256=v5kSfLHPBRn-1DtP3aHHdCuimExSTzgk6F2sn2IOufk,34
|
|
169
|
+
cvsuite/gen/output/commands/to_dst.py,sha256=RNsfOa7RA9yYKqUYsBsrxPODJAjOAgRA5r7z7Uke_Gg,6494
|
|
170
|
+
cvsuite/gen/tests/__init__.py,sha256=4-XETmua5qx8cJLmxmh0La8Ud64Vs0FV4xfAl9LS52k,32
|
|
171
|
+
cvsuite/gen/tests/test_commands.py,sha256=lREkKiZG9T3ZAm_gCtVGEEKIQvy04K8gICpWkTFqugg,37734
|
|
172
|
+
cvsuite/gen/tests/test_output_stats.py,sha256=aiG5eBngKvh1xsqDeBcMCgkMHyUSdQwjqUOf2zSf1yg,1511
|
|
173
|
+
cvsuite/gen/transform/__init__.py,sha256=26X99DFS1Xu-iUfaV5R0Je02_tR8nxWZYZ8vbIke6eQ,29
|
|
174
|
+
cvsuite/gen/transform/commands/__init__.py,sha256=etDBI-zAAlYx1DGI0UExNMN_mhfbbQdwHlD2OlKKvfQ,34
|
|
175
|
+
cvsuite/gen/transform/commands/create.py,sha256=dz_Mu9_O6ciESPbSy0uuB02whN3oRzx_lkBIFmp-SQ8,1713
|
|
176
|
+
cvsuite/gen/transform/commands/edit.py,sha256=hs1zF91ZcF3nvlL5gtPB8imUN2jtWqmiArJ8kv6g3rQ,2404
|
|
177
|
+
cvsuite/gen/transform/core/__init__.py,sha256=6gNODtnr19zG1k22Mp4oXwD3OLsv7ho-2TAMv9FjKpQ,216
|
|
178
|
+
cvsuite/gen/transform/core/runtime.py,sha256=jymWlEZaEtX-xWO6-Eq5R9tCCP1YHtCSfY7PS1yvAHM,8595
|
|
179
|
+
cvsuite/label/__init__.py,sha256=SDhzSzaKBz2_w_j8ubbrHvJSM8Bth5BH9yqLHRNIjV4,20
|
|
180
|
+
cvsuite/label/cli.py,sha256=oTjxsM_pL7wa8ECGmlv_0tMuBH9VxhFsCipdXzPHnis,6942
|
|
181
|
+
cvsuite/label/core/audit.py,sha256=CIxDCK3Xqi1fgK_HBixSJ1HFo4Z9WRZz19Lqd_ucteo,2663
|
|
182
|
+
cvsuite/label/core/crops.py,sha256=4gTn4sfTY123wpYmOGxn0QC8bk20SS65v6iVxR_r0kE,3418
|
|
183
|
+
cvsuite/label/core/router.py,sha256=blqKMIhfKEbmtGS4QYbcM24fFzxjq9Cng9Z-gIDxVac,8763
|
|
184
|
+
cvsuite/label/core/schema.py,sha256=3WWbYZokQWMtIRLU959cNsJLqRsdjpkipRclNNekAXE,4158
|
|
185
|
+
cvsuite/label/core/annotate/__init__.py,sha256=mUIkxv0lInhhvdhYR0CVmdHfeMmM_FSVMjLGQTP9mkU,419
|
|
186
|
+
cvsuite/label/core/annotate/letterbox.py,sha256=8kDCbvHo-Z9MsMtFTtnLk0NUkFHZmop_Pi5JvD2yf5A,1351
|
|
187
|
+
cvsuite/label/core/annotate/overlay.py,sha256=eRUEhmaD3qyIYacbNQbESa0QTgQNmx61IVuGPy6-A4I,9872
|
|
188
|
+
cvsuite/label/core/annotate/preview.py,sha256=fepTzAJiC9Knp-85XJoxPMIDmHs4NkQopXyMPBTTYMI,3486
|
|
189
|
+
cvsuite/label/core/annotate/utils.py,sha256=5XeLyuGtnQa1qFzYA5OHcYw0q9_zgiCM7icesx4alZg,540
|
|
190
|
+
cvsuite/label/output/__init__.py,sha256=bfetAhTHDCP5W4gVy0WekVnthUMIT_V6WhafW0Oo4pk,29
|
|
191
|
+
cvsuite/label/output/common.py,sha256=JgaWjfwXS54LHC8S5RmAn2dKwqNJfAbSMzUwc7uoA_U,1904
|
|
192
|
+
cvsuite/label/output/commands/__init__.py,sha256=gO-T02jVCbpcQreRa0txb-J_WKV-KFuH7VkAB5K50xQ,36
|
|
193
|
+
cvsuite/label/output/commands/audit.py,sha256=2IlYGq4kgTqQomLcJqQ6cjvs2ET44BpEwLr1RllpwWc,1748
|
|
194
|
+
cvsuite/label/output/commands/inspect.py,sha256=vi45lbMJ9r0xxa3O5rn3YCTSwqVYXo2aznmL3fuhKv4,2151
|
|
195
|
+
cvsuite/label/output/commands/to_coco.py,sha256=rL9Pj-BN46RjmKR7fOMX0o9GqvjDhjtlz8E2IwgmL94,2706
|
|
196
|
+
cvsuite/label/output/commands/to_labelme.py,sha256=hdY9DRcZ_JhylSu29z1qovXn6YXgwVtiF_gW4GnXZRg,1870
|
|
197
|
+
cvsuite/label/output/commands/to_results.py,sha256=YOCN5Z1e51AYW-wayxCpUmtvCg2_9hNJo8j8dAUY2WU,4334
|
|
198
|
+
cvsuite/label/output/commands/to_yolo.py,sha256=-yGc9slwsIjgePmtqsx_HjJOl1185bvpZfwQh5B4OPc,3510
|
|
199
|
+
cvsuite/label/tests/test_cli.py,sha256=NnXkCw23E_c1mMB6KZnEn9hNJgvhU5g0y2zhiO1HERo,9327
|
|
200
|
+
cvsuite/label/tests/test_filter_transform.py,sha256=cL0180e7DM2WRcxi9hXsXCj1xBDFtgpdkrPin9Zet_I,6636
|
|
201
|
+
cvsuite/label/tests/test_full_manual.py,sha256=2TQB8LmIf_h8tXpitpB2lvwSfFL43nofcW57IlcbYf0,8111
|
|
202
|
+
cvsuite/label/tests/test_ground_transform.py,sha256=529CLRcr6pesJ38tXkq0pTsdYLEQiWsfyrmqu21jd_c,27985
|
|
203
|
+
cvsuite/label/tests/test_label_commands.py,sha256=vXfyKda_B9OynShn0R2MEkCj8LEl2jIzUkPwSnmZqq4,38248
|
|
204
|
+
cvsuite/label/tests/test_multisrc.py,sha256=Cd4SL3NfHp9-bxKatATl5vVvRogMKMggXLd6RpotBxM,11213
|
|
205
|
+
cvsuite/label/tests/test_output_stats.py,sha256=5l7ExIL3dc3cE6d7z3dgDAhqU3gSJpILuY5TTpU3pNI,1877
|
|
206
|
+
cvsuite/label/tests/test_preview.py,sha256=-tq3f80qqVo9NznUP6_bKNxxWS1lYAroBcvK2RahD_k,1740
|
|
207
|
+
cvsuite/label/tests/test_sample_transform.py,sha256=g2K5_yDlIaC-Z9cy0Tpl1rZkPLMU0vTZcUwjE_vESoY,3074
|
|
208
|
+
cvsuite/label/tests/test_to_coco.py,sha256=g_lGfdNqAJ33-ObdmgrCoIk-uSbCCSkgA1MH6vIlaoE,2331
|
|
209
|
+
cvsuite/label/tests/test_yolo_layouts.py,sha256=21_MwEajuheuEkw9aZxmPKBKRSppqBzrxNlfjLeATIY,1251
|
|
210
|
+
cvsuite/label/transform/filter/__init__.py,sha256=i7jvoEYQQSFOQ-W4o8MxoIereocQTvOXLnbEZcPev9A,74
|
|
211
|
+
cvsuite/label/transform/filter/commands/__init__.py,sha256=4v-ukkZmkIblbENSOLjSnpheaRHcvTxafttSxQ6cRzQ,42
|
|
212
|
+
cvsuite/label/transform/filter/commands/apply.py,sha256=AboX0dPgau8lMQoa9UiK9B7jS6IOYks-CNw9LoGq0Xw,4582
|
|
213
|
+
cvsuite/label/transform/filter/commands/logistic_opt.py,sha256=0AheJnvFhC-295GurnfgYVm58AuN_2e2T0U0ZH-gfZo,7519
|
|
214
|
+
cvsuite/label/transform/filter/commands/run.py,sha256=mhGs_DL8xF9D7RI4LARAW-Uo60e7Rx56RCC-xCthQLM,967
|
|
215
|
+
cvsuite/label/transform/filter/commands/threshold.py,sha256=5U-0GnLib3nVwfcEyto-Ua0nUIOgf88lYimrYy7TrYw,1347
|
|
216
|
+
cvsuite/label/transform/filter/core/__init__.py,sha256=PLvXO0cqWQlvOM9p947SuM8-smusQeZ-P6HEvwFFWPI,995
|
|
217
|
+
cvsuite/label/transform/filter/core/config.py,sha256=BluK-dMD6SHKwZNHO_DZt9oRJHTY1Cvf4KDxKw131Xo,4930
|
|
218
|
+
cvsuite/label/transform/filter/core/features.py,sha256=PdWbWScFiRJF5oMi-CraAPT0VQsehzoIP_XunCwSOj4,7913
|
|
219
|
+
cvsuite/label/transform/filter/core/filters.py,sha256=kZMg0JxcOgx3U8DLNsNJz-oklDd_C1aYWyEUoMoGWbo,14329
|
|
220
|
+
cvsuite/label/transform/filter/core/optimizer.py,sha256=xdaTM2O_xt4m32kwFytjD3-OWN_wLGSxsIwfFbUXO8w,18287
|
|
221
|
+
cvsuite/label/transform/filter/core/records.py,sha256=R2AjFUC8J3rGlHqJ6mSk44EjJ2Hll7Rq1Kqb1rUtib0,7706
|
|
222
|
+
cvsuite/label/transform/filter/core/types.py,sha256=aHjstEkb6Br5X5Jtihml39J2PFKkAO2POzNeYUdrn1E,2804
|
|
223
|
+
cvsuite/label/transform/filter/core/utils.py,sha256=Mxuncw2ejTcjLKHWrVhflpTc61kdypkPxTfMA7D7lgw,3549
|
|
224
|
+
cvsuite/label/transform/filter/core/utils_optimizer.py,sha256=raAwu6PavRKi0OzeMw9tzFdvO5J-5KwpSwR8np_ptwg,31552
|
|
225
|
+
cvsuite/label/transform/ground/__init__.py,sha256=Tan9uCLt-2a1LkmH65_7kcWcfdKHe_fa1wEdXHuhfJo,48
|
|
226
|
+
cvsuite/label/transform/ground/core.py,sha256=AQX5O-lQHKyRAOK6nF6O_kEHxDS6nuxGh7hWpyyCJLw,18052
|
|
227
|
+
cvsuite/label/transform/ground/commands/__init__.py,sha256=CZCDXW8D6UvMu2nNOJVDsnhGt-WYBE7B9HkB_GPa_kU,33
|
|
228
|
+
cvsuite/label/transform/ground/commands/run.py,sha256=Ok94iyiYMIBDAbQW6FT2maltjUoG0CTQICtnQpdZvfA,5421
|
|
229
|
+
cvsuite/label/transform/ocr/__init__.py,sha256=JLWp--Oo09X9QQz_XNY4lb2kiAvIFtQIZERUabTGmFs,42
|
|
230
|
+
cvsuite/label/transform/ocr/commands/__init__.py,sha256=qY8MAaHzQDAghz79MjIFTRs-8Oq6mT7LprVn3QL6BPU,30
|
|
231
|
+
cvsuite/label/transform/ocr/commands/run.py,sha256=fin7IFyOQ88cIQmL_ZPq2m0IkffDbm6s---OfP280i4,1889
|
|
232
|
+
cvsuite/label/transform/ops/__init__.py,sha256=opAVqrKUVUWX6Jl5YYi-txS6tK1x1yb3g7zPeH1O268,83
|
|
233
|
+
cvsuite/label/transform/ops/commands/__init__.py,sha256=cvk0Nz3Y_SkfAQ-4EIqAaEOhCwEHKF4NXRnZbCgUfB0,79
|
|
234
|
+
cvsuite/label/transform/ops/commands/crop_dets.py,sha256=gG5RfDn6gZqNNzFuudBMSwek8XaSi-T0WIYGvJ4nHd4,1478
|
|
235
|
+
cvsuite/label/transform/ops/commands/inverse_crop_dets.py,sha256=gWfgyT5OVIp-sRUxh9agoGnWEM5sZZ7wFsxQAJRSfRg,687
|
|
236
|
+
cvsuite/label/transform/ops/commands/make_negatives.py,sha256=idM3DorxG0HduA-s4Y2vzL2m3WF1Sv2zgs2KdXgdDmU,3374
|
|
237
|
+
cvsuite/label/transform/ops/commands/rebox.py,sha256=ilKkgdDezDNPsu1X1Zug_mkzDHUi0NN6Snp6T79YYoU,1677
|
|
238
|
+
cvsuite/label/transform/ops/commands/run.py,sha256=lbhpDm_CthgGKQezLC3cDmhk3TGv6Srp7lEXTqD8yAg,1063
|
|
239
|
+
cvsuite/label/transform/ops/core/crop_dets.py,sha256=NNnO4rS-QMyBrG-Q9c0HOEKmEdZ9r9cbmBviss25uK0,22099
|
|
240
|
+
cvsuite/label/transform/ops/core/inverse_crop_dets.py,sha256=GTzo6UWd5fVhLC6h190ZH-oWQefjaEM0YVxIZgjw9tg,16297
|
|
241
|
+
cvsuite/label/transform/ops/core/negatives.py,sha256=u1vLM-V7kEG7GoLSTbhLb_1sjdhBhNjh5BImzzRtOM4,2016
|
|
242
|
+
cvsuite/label/transform/ops/core/rebox.py,sha256=4RcNkB6AgbPDMUF8hRMJpxIlh3KQjdtMNjoDfZGjooU,820
|
|
243
|
+
cvsuite/label/transform/sample/__init__.py,sha256=G0trdQpe-V9JjOnuXSA41gRpQazvj0u4Xk37Why1Y5Y,49
|
|
244
|
+
cvsuite/label/transform/sample/commands/__init__.py,sha256=SezOe0M-vqGS11ixwXtInAzAjHck55AONzveKrGg8Gk,39
|
|
245
|
+
cvsuite/label/transform/sample/commands/run.py,sha256=vgynWAaodYSIs8gz4I5-O62lQ34KTtC4nOgBFTsvgz0,2276
|
|
246
|
+
cvsuite/prep/__init__.py,sha256=gSzIsJ75uYDjSUjFpjsx9HDOx598nRHdOJkxP-XKZY4,26
|
|
247
|
+
cvsuite/prep/cli.py,sha256=xak-4RnNjlna7OIhU19_CeTaV-VJtdvfabBKYU29EDo,1537
|
|
248
|
+
cvsuite/prep/commands/arrange.py,sha256=lm6-mw6gac1mi2cnoPlDjnRcQjO2tRCKPJcNBWPQfLk,4414
|
|
249
|
+
cvsuite/prep/commands/orient.py,sha256=pL5X4yK-HZbcLQ6zOr2FUAkioL-0j8OmyNqux2VVeiU,2853
|
|
250
|
+
cvsuite/prep/commands/process.py,sha256=f6bV7MMhTqLJ62SWp6bCfOMIsSFTBNV-zNoF12P-bSM,5389
|
|
251
|
+
cvsuite/prep/commands/sample.py,sha256=etfD9K8_N6rzjy_4HjUnnJRLy8wo3rOzs-rUwC_nZx4,2688
|
|
252
|
+
cvsuite/prep/core/actions.py,sha256=yYhE2GFMG4MqCb2_AGKzZ4yoM2rqyXg-iMAcuXnDFok,1788
|
|
253
|
+
cvsuite/prep/core/config.py,sha256=sWYovARNgI8ywMXXqFsI5hGHlr10JcREY9f7a9vdueY,1910
|
|
254
|
+
cvsuite/prep/core/fs.py,sha256=pem2DaDwXBPiOrQvq7I3xautDPzPGiO1_ro6oZYg-wM,3098
|
|
255
|
+
cvsuite/prep/core/logging.py,sha256=cbpOwyhQO3oKOG6ORpiMBhwfySWfYm24qsEx5jzXH0c,322
|
|
256
|
+
cvsuite/prep/core/manifest.py,sha256=C4Twzqn0aYuf6DERY1Un7wJuuk8j0F_UsFEJBLlk5UQ,1369
|
|
257
|
+
cvsuite/prep/core/arrange/core.py,sha256=TuVoLWQjgf_9XRkD31F8IB-IchEp0LpSkT0GnPzmu5g,1651
|
|
258
|
+
cvsuite/prep/core/arrange/ops.py,sha256=Ebm2zkKYh1GE9ial-Oywtfl_EjUFCNZj3jMrigzwFbY,8359
|
|
259
|
+
cvsuite/prep/core/orient/clip.py,sha256=AG9Rtzy4YUQH2X4seq20d65R8jMgXQSYBYn88N0moMs,2138
|
|
260
|
+
cvsuite/prep/core/orient/core.py,sha256=CWqmvDVazKaKLDGJO6FPoUDtBMGa1XMY9MAmeIyRn2Q,9925
|
|
261
|
+
cvsuite/prep/core/orient/deep_orientation.py,sha256=JFE8Cc6jkoNEQI81SoO8Alah33RKedaA-y1Jrqi-Zog,3298
|
|
262
|
+
cvsuite/prep/core/process/core.py,sha256=Ec2DgErk3QPnMLtavsMZXEqUTFs5Gv27fhoH2PB6rFc,4299
|
|
263
|
+
cvsuite/prep/core/process/ops.py,sha256=MJY44cbSPwiSVjyMQ_qv6YtnHAqk6oNYTBlWU1QbIHM,6346
|
|
264
|
+
cvsuite/prep/core/process/vsample.py,sha256=6BR_w-8b1bFbqtYwaqHVqoXWFnY_Yz9BDrZAg9UKhjE,4910
|
|
265
|
+
cvsuite/prep/core/sample/core.py,sha256=h2011QZoZv-ybofxeNcm_-3m5qU9GohJRg-ohjp3XAM,5459
|
|
266
|
+
cvsuite/prep/tests/__init__.py,sha256=zsfa7CZ36aSULa7hnpukDVhQ7FDsNJ0Haohdx0xiuDM,66
|
|
267
|
+
cvsuite/prep/tests/manual_flow.py,sha256=yDNysLNnSa5XR8lCqJhE7g_i9lLNzeYgNjlPJq7KsYE,4134
|
|
268
|
+
cvsuite/prep/tests/test_fs.py,sha256=qQODFODBY97rZjzPfhIPqQC-vk7lG4sn_yculOstjsE,1626
|
|
269
|
+
cvsuite/prep/tests/test_incremental_arrange_process.py,sha256=RaxwZCb9SogxjGOO50VFqpk2Va9qwJ4ttHETyBLHhzU,7603
|
|
270
|
+
cvsuite/prep/tests/test_orient_command.py,sha256=HohUPi9lf_OZjYdbzvSPC34bitnNLeWPrqUHomDlTx8,5678
|
|
271
|
+
cvsuite/prep/tests/test_sample_command.py,sha256=JAfEKXWSYMllZur2OImVTjchBL6SUe7D5qX1XAWqj9k,3919
|
|
272
|
+
cvsuite/tests/__init__.py,sha256=v5mLADVIwwbhZjD0WIAdSEh37Q8B8WcnSMVCRxeDYsg,31
|
|
273
|
+
cvsuite/tests/test_cli_structure.py,sha256=bhw7JjMPs2brkPTuUcTt6Bb8Zpk7FafIkdFGpI7-qcw,10404
|
|
274
|
+
cvsuite/vlm/__init__.py,sha256=jagYfnNAq1uIgdopiti_ihOyEvT3OGKa2Nl801m7x6k,60
|
|
275
|
+
cvsuite/vlm/cli.py,sha256=Y76P0MwgwtRZ5OWyHMFVkNfRFqW9jvlwS_bUFvC1_E0,6436
|
|
276
|
+
cvsuite/vlm/core/__init__.py,sha256=OnfnDDYyGRvrsbdPG1D15E7KKNGgf5hbvTsKG48mk78,115
|
|
277
|
+
cvsuite/vlm/core/inspect.py,sha256=HJw9zOANPT3QuKoPXnjGr7gLo1s77NzoIG-GyOsBtGE,4479
|
|
278
|
+
cvsuite/vlm/core/io.py,sha256=uC-gnpdQ5-4isLD2iNhhGrvsbXAwQjktdCNXt7mE18Y,10724
|
|
279
|
+
cvsuite/vlm/core/router.py,sha256=Nn8mMGp6Ftzjwf2ORG5r6f64Jb9va6PZ8ZO37WMhIsg,2050
|
|
280
|
+
cvsuite/vlm/core/adapters/__init__.py,sha256=dVVhZ7i4xpFox1hXg0Lz7tqzfPO4FLARby50bfUgyw8,250
|
|
281
|
+
cvsuite/vlm/core/adapters/flat_json_io.py,sha256=Q8vSTrsBQVk3fZHA37y4TjRZTlJI6kWsIcY0vZY1q1c,6350
|
|
282
|
+
cvsuite/vlm/core/adapters/images_io.py,sha256=qhNLND9J4NTu8bpcFo8FPLm7qqWBQBwqaERAplRB9sI,1444
|
|
283
|
+
cvsuite/vlm/core/adapters/shards_io.py,sha256=29RkSbgF0rLhb0bBUwxSY8uQsy_H8PWKl4feIgCQFeA,9424
|
|
284
|
+
cvsuite/vlm/core/adapters/vqa_style_io.py,sha256=G3mEWjw27y6xzkW0g2eo-bVPrLMrXysio30ZSSZcJLs,19596
|
|
285
|
+
cvsuite/vlm/output/__init__.py,sha256=VlIzDViW2a74sKYRsjwRI7mMgHvZZAuLkGaFjOBv26U,43
|
|
286
|
+
cvsuite/vlm/output/common.py,sha256=Vfb1eSGUKpo7lAd-LeOyPeAEFkMrJFpggxA1nflbc20,3790
|
|
287
|
+
cvsuite/vlm/output/commands/__init__.py,sha256=E0Rt8-HwgkXoN-ltYejBZpxodDsirjINXXwhQCVhHio,52
|
|
288
|
+
cvsuite/vlm/output/commands/inspect.py,sha256=VQvsOeo2PBQ9wqjPu-mAmwNsWvbD8kQ1qFdnIv6aK24,865
|
|
289
|
+
cvsuite/vlm/output/commands/to_json.py,sha256=zTQQzIi064fgRdS-0zUn5gHjKZacELYjB4I1355hyzY,2009
|
|
290
|
+
cvsuite/vlm/output/commands/to_shards.py,sha256=SKbNMIp0QRgIpTUj6ggekftc0JIwJfxA0nMDwg2ABz4,2508
|
|
291
|
+
cvsuite/vlm/output/commands/to_vqa_style.py,sha256=ku-2L-yqikJ7U6f46Ynk1jEoqcSSu4bIzIc5_2R_5Oo,2023
|
|
292
|
+
cvsuite/vlm/tests/__init__.py,sha256=7kKc0oYgTsY3z0nVBcID3NQfWAzSaENaJzNbMk2X9Js,25
|
|
293
|
+
cvsuite/vlm/tests/test_commands.py,sha256=Tv0co2O_ca-bd9hzrM2fp_s7m-Z3dy3TmpvKekcyzJk,26793
|
|
294
|
+
cvsuite/vlm/tests/test_map_answers.py,sha256=8oC5-ERmZ0VKV4tc3ToyKJMMg8F0qIbZu9S-dmMP4WA,7037
|
|
295
|
+
cvsuite/vlm/tests/test_output_stats.py,sha256=6nLzPxnF2bDQ4z5zVrqprG7YgwRs_v7dB1y5lBXEIk0,1731
|
|
296
|
+
cvsuite/vlm/transform/__init__.py,sha256=axvv1DheHxz5PIkNnmtRR7rls_zNumgv2GnMzJQQErQ,38
|
|
297
|
+
cvsuite/vlm/transform/commands/__init__.py,sha256=OT1yYNjhsS7oU96PO7MJd7Mdig-bPgO80y0Ij5C_dk0,57
|
|
298
|
+
cvsuite/vlm/transform/commands/ask.py,sha256=EXXSCHnc1fXijX9FT8cjqeMKpMbEe-P6aFzvz1g9p0o,529
|
|
299
|
+
cvsuite/vlm/transform/commands/caption.py,sha256=WYbsqAHJv7tNDbbxE8K7A4G6PKPt8SalShk9eQPpPdI,402
|
|
300
|
+
cvsuite/vlm/transform/commands/map_answers.py,sha256=WINTvYxGiPAPWhvBLhZaEFTXRtjMXuGSVozL0rUMK-I,754
|
|
301
|
+
cvsuite/vlm/transform/commands/vqa.py,sha256=gLtoCrjvlu6QgyzbKiSxCcNXMf9Vg-m-bcBn3jxU5h8,464
|
|
302
|
+
cvsuite/vlm/transform/core/__init__.py,sha256=QmfkG7zMy4stqbHNwtYvLwtUzH8-FPdN5UWn6lBuGog,39
|
|
303
|
+
cvsuite/vlm/transform/core/map_answers.py,sha256=zxcREdS2cflzHwITd6WHB9itbDasu-EJgOGg3WEUbQU,12695
|
|
304
|
+
cvsuite/vlm/transform/core/runtime.py,sha256=MV0fgEOFOyrzongim57UiON55hiZBTwJR86edPvP54c,15273
|
|
305
|
+
cv_suite-0.0.1.dist-info/METADATA,sha256=ekCdic5KMYG73R7B5g4Jc7trgkCH6Q8qxT6QvGh1Kpk,5962
|
|
306
|
+
cv_suite-0.0.1.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
307
|
+
cv_suite-0.0.1.dist-info/entry_points.txt,sha256=KKEHq1Y0eU71PL9k6Ycd3wQ1E66ve_tZyvGEEBptaV4,45
|
|
308
|
+
cv_suite-0.0.1.dist-info/top_level.txt,sha256=vq8sK4uFs7Zj4p2FmS0mfXSQKXGilyy1Qsy3E9P0cJ0,8
|
|
309
|
+
cv_suite-0.0.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Pedro Tonso
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
cvsuite
|
cvsuite/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Vision tools package."""
|
cvsuite/branch_cli.py
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import importlib
|
|
5
|
+
import os
|
|
6
|
+
import pkgutil
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any, Iterable
|
|
10
|
+
|
|
11
|
+
from cvsuite.common.core import VisionDataset
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass(frozen=True)
|
|
15
|
+
class CommandSpec:
|
|
16
|
+
cli_name: str
|
|
17
|
+
import_path: str
|
|
18
|
+
rel_parts: tuple[str, ...]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _package_root(package_name: str) -> Path:
|
|
22
|
+
pkg = importlib.import_module(package_name)
|
|
23
|
+
if hasattr(pkg, "__file__") and pkg.__file__ is not None:
|
|
24
|
+
return Path(pkg.__file__).resolve().parent
|
|
25
|
+
return Path(next(iter(pkg.__path__))).resolve()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _iter_commands_dirs(root: Path) -> Iterable[Path]:
|
|
29
|
+
for dirpath, dirnames, _filenames in os.walk(root):
|
|
30
|
+
dirnames[:] = [name for name in dirnames if name not in {"venv", "__pycache__"}]
|
|
31
|
+
current = Path(dirpath)
|
|
32
|
+
if current.name == "commands":
|
|
33
|
+
yield current
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def discover_commands(package_name: str) -> list[CommandSpec]:
|
|
37
|
+
root = _package_root(package_name)
|
|
38
|
+
discovered: dict[str, CommandSpec] = {}
|
|
39
|
+
for commands_dir in sorted(_iter_commands_dirs(root)):
|
|
40
|
+
rel_dir = commands_dir.relative_to(root)
|
|
41
|
+
rel_parts = tuple(rel_dir.parts[:-1])
|
|
42
|
+
import_base = ".".join([package_name, *rel_dir.parts])
|
|
43
|
+
for mod in pkgutil.iter_modules([str(commands_dir)]):
|
|
44
|
+
if mod.ispkg:
|
|
45
|
+
continue
|
|
46
|
+
cli_parts = [part.replace("_", "-") for part in rel_parts]
|
|
47
|
+
cli_parts.append(mod.name.replace("_", "-"))
|
|
48
|
+
cli_name = "-".join(part for part in cli_parts if part)
|
|
49
|
+
discovered[cli_name] = CommandSpec(
|
|
50
|
+
cli_name=cli_name,
|
|
51
|
+
import_path=f"{import_base}.{mod.name}",
|
|
52
|
+
rel_parts=rel_parts,
|
|
53
|
+
)
|
|
54
|
+
return [discovered[name] for name in sorted(discovered)]
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def build_generic_parser(package_name: str, prog: str, description: str) -> tuple[argparse.ArgumentParser, list[CommandSpec]]:
|
|
58
|
+
parser = argparse.ArgumentParser(prog=prog, description=description)
|
|
59
|
+
specs = discover_commands(package_name)
|
|
60
|
+
if not specs:
|
|
61
|
+
return parser, specs
|
|
62
|
+
|
|
63
|
+
subparsers = parser.add_subparsers(dest="command", metavar="COMMAND", required=True)
|
|
64
|
+
for spec in specs:
|
|
65
|
+
module = importlib.import_module(spec.import_path)
|
|
66
|
+
help_text = (module.__doc__ or "").strip()
|
|
67
|
+
subparser = subparsers.add_parser(spec.cli_name, help=help_text, description=help_text)
|
|
68
|
+
attach = getattr(module, "attach", None)
|
|
69
|
+
if attach is not None:
|
|
70
|
+
attach(subparser)
|
|
71
|
+
subparser.set_defaults(_run=getattr(module, "run", None))
|
|
72
|
+
return parser, specs
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def result_to_exit_code(result: Any) -> int:
|
|
76
|
+
if result is None or isinstance(result, VisionDataset):
|
|
77
|
+
return 0
|
|
78
|
+
return int(result)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def run_generic_branch(package_name: str, prog: str, description: str, argv: list[str] | None = None) -> int:
|
|
82
|
+
parser, specs = build_generic_parser(package_name, prog=prog, description=description)
|
|
83
|
+
if not specs:
|
|
84
|
+
parser.parse_args(argv)
|
|
85
|
+
parser.print_help()
|
|
86
|
+
return 0
|
|
87
|
+
|
|
88
|
+
args = parser.parse_args(argv)
|
|
89
|
+
func = getattr(args, "_run", None)
|
|
90
|
+
if func is None:
|
|
91
|
+
parser.error("No command selected.")
|
|
92
|
+
result = func(args)
|
|
93
|
+
return result_to_exit_code(result)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# ---------------------------------------------------------------------------
|
|
97
|
+
# Shared pipeline CLI helpers (used by classify, label, vlm, gen)
|
|
98
|
+
# ---------------------------------------------------------------------------
|
|
99
|
+
|
|
100
|
+
def build_parser(module: Any, prog: str) -> argparse.ArgumentParser:
|
|
101
|
+
parser = argparse.ArgumentParser(
|
|
102
|
+
prog=prog,
|
|
103
|
+
description=(module.__doc__ or "").strip(),
|
|
104
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
105
|
+
)
|
|
106
|
+
attach = getattr(module, "attach", None)
|
|
107
|
+
if attach is not None:
|
|
108
|
+
attach(parser)
|
|
109
|
+
return parser
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def parse_help(parser: argparse.ArgumentParser, argv: list[str]) -> int:
|
|
113
|
+
try:
|
|
114
|
+
parser.parse_args(argv)
|
|
115
|
+
except SystemExit as exc:
|
|
116
|
+
if exc.code == 0:
|
|
117
|
+
return 0
|
|
118
|
+
raise
|
|
119
|
+
return 0
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def split_rest(
|
|
123
|
+
rest: list[str],
|
|
124
|
+
commands: dict[str, Any],
|
|
125
|
+
transform_commands: dict[str, Any],
|
|
126
|
+
) -> tuple[str | None, list[str], str | None, list[str]]:
|
|
127
|
+
if not rest:
|
|
128
|
+
return None, [], None, []
|
|
129
|
+
command_index = next((i for i, t in enumerate(rest) if t in commands), None)
|
|
130
|
+
if command_index is None:
|
|
131
|
+
return None, [], None, rest
|
|
132
|
+
transform_name: str | None = None
|
|
133
|
+
transform_args: list[str] = []
|
|
134
|
+
if command_index > 0:
|
|
135
|
+
if rest[0] not in transform_commands:
|
|
136
|
+
return None, [], None, rest
|
|
137
|
+
transform_name = rest[0]
|
|
138
|
+
transform_args = rest[1:command_index]
|
|
139
|
+
return transform_name, transform_args, rest[command_index], rest[command_index + 1:]
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def apply_transform_output_hints(
|
|
143
|
+
prog: str,
|
|
144
|
+
transform_name: str | None,
|
|
145
|
+
parsed_transform: argparse.Namespace | None,
|
|
146
|
+
command_name: str,
|
|
147
|
+
parsed_command: argparse.Namespace,
|
|
148
|
+
) -> None:
|
|
149
|
+
if transform_name != "sample" or parsed_transform is None:
|
|
150
|
+
return
|
|
151
|
+
if not getattr(parsed_transform, "hardlink", False):
|
|
152
|
+
return
|
|
153
|
+
if not hasattr(parsed_command, "hardlink"):
|
|
154
|
+
raise SystemExit(
|
|
155
|
+
f"`{prog} sample --hardlink` can't be used with `{command_name}` because "
|
|
156
|
+
"that output command does not support `--hardlink`."
|
|
157
|
+
)
|
|
158
|
+
setattr(parsed_command, "hardlink", True)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Class dataset pipeline for ``cvsuite class``."""
|