Coverage for collectra/__init__.py: 92.86%

14 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-16 09:56 +0000

1"""Public Collectra API, loaded on first attribute access.""" 

2 

3from __future__ import annotations 

4 

5from importlib import import_module 

6 

7_EXPORTS = { 

8 "BaseEntity": "collectra.commons.base", 

9 "Node": "collectra.commons.base", 

10 "NodeStatus": "collectra.commons.base", 

11 "TaskContext": "collectra.commons.base", 

12 "T": "collectra.commons.base", 

13 "Collectra": "collectra.pipelines.base", 

14 "Task": "collectra.tasks.base", 

15 "TaskNode": "collectra.tasks.base", 

16 "YOLOTask": "collectra.tasks.machine_learning.yolo", 

17 "ObjectDetectionYOLO": "collectra.tasks.object_detection.yolo", 

18 "ImageClassifierYOLO": "collectra.tasks.image_classifier.yolo", 

19 "ImageClassifierTorchvision": "collectra.tasks.image_classifier.torchvision", 

20 "ImageClassifierHuggingFace": "collectra.tasks.image_classifier.huggingface", 

21 "ObjectDetectionDETR": "collectra.tasks.object_detection.detr", 

22 "DetectionTrainResult": "collectra.tasks.object_detection.detr", 

23 "ObjectDetectionRFDETR": "collectra.tasks.object_detection.rfdetr", 

24 "ImageOrienter": "collectra.tasks.machine_learning.orienters", 

25 "ImageSegmentationSam3": "collectra.tasks.image_segmentation.sam3", 

26 "LLM": "collectra.tasks.llms", 

27 "LLMCanonicaliser": "collectra.tasks.canonicalisers", 

28 "IRNResolver": "collectra.tasks.irn_resolvers", 

29 "OCRSuraya": "collectra.tasks.ocr", 

30 "LineDetectorSurya": "collectra.tasks.ocr", 

31 "LineDetectorRLSA": "collectra.tasks.line_detection", 

32 "ConcatenateText": "collectra.tasks.text", 

33 "Artefact": "collectra.types.base", 

34 "ArtefactNode": "collectra.types.base", 

35 "Image": "collectra.types.images", 

36 "ImageCrop": "collectra.types.images", 

37 "ImageSegmentation": "collectra.types.images", 

38 "Link": "collectra.types.links", 

39 "Orientation": "collectra.types.images", 

40 "Text": "collectra.types.texts", 

41 "Editor": "collectra.editor.base", 

42 "Evaluator": "collectra.evaluator.base", 

43 "generate_evaluation_html": "collectra.evaluator.visualise", 

44} 

45 

46__all__ = sorted(_EXPORTS) 

47 

48 

49def __getattr__(name: str): 

50 """Import public objects without eagerly importing optional ML backends.""" 

51 try: 

52 module_name = _EXPORTS[name] 

53 except KeyError as error: 

54 raise AttributeError( 

55 f"module {__name__!r} has no attribute {name!r}" 

56 ) from error 

57 value = getattr(import_module(module_name), name) 

58 globals()[name] = value 

59 return value 

60 

61 

62def __dir__() -> list[str]: 

63 return sorted([*globals(), *__all__])