ó
    �®žj+  ã                  óf  • S r SSKJr  SSKrSSKJrJr  SSKJr  SSK	J
r
JrJrJrJrJrJrJrJrJr  SSKJr  SSKJrJrJrJr  SS	KJr  \
(       a  SS
KJr  \R>                  " \ 5      r! " S S\"\5      r# " S S\5      r$SS jr% " S S\5      r& " S S\5      r' " S S\5      r( " S S\5      r)g)z4Base classes for object-detection inference engines.é    )ÚannotationsN)ÚABCÚabstractmethod)ÚEnum)
ÚTYPE_CHECKINGÚAnyÚClassVarÚDictÚListÚLiteralÚOptionalÚTypeÚget_argsÚ
get_origin)ÚImage)Ú	BaseModelÚ
ConfigDictÚFieldÚfield_validator)ÚPydanticUndefined)ÚEngineModelConfigc                  ó8   • \ rS rSrSrSrSrSr\S	S j5       r	Sr
g)
ÚObjectDetectionEngineTypeé"   z=Supported inference engine types for object-detection models.ÚonnxruntimeÚtransformersÚapi_kserve_v2c                ó    • XR                   1;   $ )z0Check if an engine type is a remote API variant.)ÚAPI_KSERVE_V2)ÚclsÚengine_types     Ús/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/models/inference_engines/object_detection/base.pyÚis_remote_variantÚ+ObjectDetectionEngineType.is_remote_variant)   s   € ð ×0Ñ0Ð1Ñ1Ð1ó    © N)r!   r   ÚreturnÚbool)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚONNXRUNTIMEÚTRANSFORMERSr   Úclassmethodr#   Ú__static_attributes__r&   r%   r"   r   r   "   s&   † ÙGà€KØ!€LØ#€Màó2ó ó2r%   r   c                  ó€   ^ • \ rS rSr% Sr\" SS9r\" SS9rS\	S'   \" S	S
S9r
S\	S'   0 rS\	S'   \U 4S j5       rSrU =r$ )Ú BaseObjectDetectionEngineOptionsé/   z:Base configuration shared across object-detection engines.T©Úarbitrary_types_allowedzType of inference engine to use©Údescriptionr   r!   g333333Ó?z9Minimum confidence score to keep a detection (0.0 to 1.0))Údefaultr8   ÚfloatÚscore_thresholdzQClassVar[dict[ObjectDetectionEngineType, Type[BaseObjectDetectionEngineOptions]]]Ú	_registryc                óp  >• [         TU ]  " S0 UD6  U [        L a  g U R                  R	                  S5      nU(       d  g S nUR
                  n[        U5      [        L a  [        U5      n[        U5      S:X  a  US   nUc  UR                  [        La  UR                  nUb  U [        R                  U'   g g )Nr!   é   r   r&   )ÚsuperÚ__pydantic_init_subclass__r3   Úmodel_fieldsÚgetÚ
annotationr   r   r   Úlenr9   r   r<   )r    ÚkwargsÚfieldr!   ÚannÚvaluesÚ	__class__s         €r"   r@   Ú;BaseObjectDetectionEngineOptions.__pydantic_init_subclass__A   s´   ø€ ä‰Ò*Ñ4¨VÒ4ð Ô2Ò2Øð × Ñ ×$Ñ$ ]Ó3ˆÞØàˆð ×ÑˆÜ�c‹?œgÒ%Ü˜c“]ˆFÜ�6‹{˜aÓØ$ Q™i�ð Ñ 5§=¡=Ô8IÒ#IØŸ-™-ˆKàÑ"ØFIÔ,×6Ñ6°{ÒCð #r%   r&   )r)   r*   r+   r,   r-   r   Úmodel_configr   r!   Ú__annotations__r;   r<   r0   r@   r1   Ú__classcell__)rI   s   @r"   r3   r3   /   sh   ø‡ ÙDá°dÑ;€Lá-2Ø5ñ.€KÐ*ó ñ #ØØOñ€O�Uó ð 	ð ð ó ð ôJó öJr%   r3   c                 ó   • SSK Jn   U " 5       $ )Nr   ©Ú(TransformersObjectDetectionEngineOptions)Ú1docling.datamodel.object_detection_engine_optionsrP   rO   s    r"   Ú_default_engine_optionsrR   _   s   € õñ 4Ó5Ð5r%   c                  óR   • \ rS rSr% \" \SS9rS\S'   \" SSS9\	S 5       5       r
S	rg
)Ú!ObjectDetectionEngineOptionsMixinéi   z5Runtime configuration for the object-detection engine©Údefault_factoryr8   r3   Úengine_optionsÚbefore)Úmodec                óî   • [        U[        5      (       a  U$ [        U[        5      (       aH  UR                  S5      n[        R                  R                  U5      nU(       a  UR                  U5      $ U$ )Nr!   )Ú
isinstancer3   ÚdictrB   r<   Úmodel_validate)r    Úvaluer!   Ú	model_clss       r"   Úresolve_engine_optionsÚ8ObjectDetectionEngineOptionsMixin.resolve_engine_optionso   sc   € ô �eÔ=×>Ñ>ØˆLô �eœT×"Ñ"ØŸ)™) MÓ2ˆKÜ8×BÑB×FÑFÀ{ÓSˆIÞØ ×/Ñ/°Ó6Ð6àˆr%   r&   N)r)   r*   r+   r,   r   rR   rX   rL   r   r0   ra   r1   r&   r%   r"   rT   rT   i   s>   ‡ Ù7<Ø/ØKñ8€NÐ4ó ñ
 Ð%¨HÑ5Øñó ó 6ór%   rT   c                  óT   • \ rS rSr% Sr\" SS9r\" SS9rS\	S'   \" \
S	S
9rS\	S'   Srg)ÚObjectDetectionEngineInputé€   z8Generic input accepted by every object-detection engine.Tr5   zPIL image to run inference onr7   r   Úimagez3Optional metadata that is echoed back in the outputrV   úDict[str, Any]Úmetadatar&   N)r)   r*   r+   r,   r-   r   rK   r   rf   rL   r]   rh   r1   r&   r%   r"   rd   rd   €   s6   ‡ ÙBá°dÑ;€LáÐ%DÑE€Eˆ5ÓEÙ$ØØIñ €Hˆnö r%   rd   c                  óz   • \ rS rSr% Sr\" \SS9rS\S'   \" \SS9r	S\S	'   \" \S
S9r
S\S'   \" \SS9rS\S'   Srg)ÚObjectDetectionEngineOutputéŒ   z,Output returned by object-detection engines.zPredicted class indicesrV   z	List[int]Ú	label_idsz%Confidence scores for the predictionszList[float]Úscoresz8Bounding boxes as [x_min, y_min, x_max, y_max] in pixelszList[List[float]]Úbboxesz6Optional metadata echoed back from the input or enginerg   rh   r&   N)r)   r*   r+   r,   r-   r   Úlistrl   rL   rm   rn   r]   rh   r1   r&   r%   r"   rj   rj   Œ   sh   ‡ Ù6á ØØ-ñ€Iˆyó ñ  ØØ;ñ€FˆKó ñ !&ØØNñ!€FÐó ñ  %ØØLñ €Hˆnö r%   rj   c                  óš   • \ rS rSrSr S     SS jjr\SS j5       r\    SS j5       r\SS j5       r	    SS jr
    SS	 jrS
rg)ÚBaseObjectDetectionEngineé¡   z1Abstract base-class for object-detection engines.Nc                ó*   • Xl         X l        SU l        g)z™Initialize the engine.

Args:
    options: Engine-specific configuration options
    model_config: Model configuration (repo_id, revision, extra_config)
FN)ÚoptionsrK   Ú_initialized)Úselfrt   rK   s      r"   Ú__init__Ú"BaseObjectDetectionEngine.__init__¤   s   € ð ŒØ(ÔØ!ˆÕr%   c                ó   • g)zBInitialize engine resources (load models, allocate buffers, etc.).Nr&   ©rv   s    r"   Ú
initializeÚ$BaseObjectDetectionEngine.initialize³   ó   � r%   c                ó   • g)z#Run inference on a batch of inputs.Nr&   )rv   Úinput_batchs     r"   Úpredict_batchÚ'BaseObjectDetectionEngine.predict_batch·   r}   r%   c                ó   • g)z`Get the label mapping for this model.

Returns:
    Dictionary mapping label IDs to label names
Nr&   rz   s    r"   Úget_label_mappingÚ+BaseObjectDetectionEngine.get_label_mapping½   r}   r%   c                óÄ   • U R                   (       d9  [        R                  S[        U 5      R                  5        U R                  5         U R                  U/5      nUS   $ )z*Helper to run inference on a single input.z%Initializing %s for single predictionr   )ru   Ú_logÚdebugÚtyper)   r{   r€   )rv   Ú
input_dataÚresultss      r"   ÚpredictÚ!BaseObjectDetectionEngine.predictÅ   sL   € ð × × Ü�J‰JÐ>ÄÀTÃ
×@SÑ@SÔTØ�O‰OÔà×$Ñ$ j \Ó2ˆØ�q‰zÐr%   c                ó  • U R                   (       d9  [        R                  S[        U 5      R                  5        U R                  5         [        U[        5      (       a  U R                  U5      $ U R                  U5      $ )NzInitializing %s for call)
ru   r†   r‡   rˆ   r)   r{   r\   ro   r€   r‹   )rv   r‰   s     r"   Ú__call__Ú"BaseObjectDetectionEngine.__call__Ð   s]   € ð × × Ü�J‰JÐ1´4¸³:×3FÑ3FÔGØ�O‰OÔä�j¤$×'Ñ'Ø×%Ñ% jÓ1Ð1Ø�|‰|˜JÓ'Ð'r%   )ru   rK   rt   )N)rt   r3   rK   zOptional[EngineModelConfig]r'   ÚNone)r'   r�   )r   z List[ObjectDetectionEngineInput]r'   z!List[ObjectDetectionEngineOutput])r'   zDict[int, str])r‰   rd   r'   rj   )r‰   z=ObjectDetectionEngineInput | List[ObjectDetectionEngineInput]r'   z?ObjectDetectionEngineOutput | List[ObjectDetectionEngineOutput])r)   r*   r+   r,   r-   rw   r   r{   r€   rƒ   r‹   rŽ   r1   r&   r%   r"   rq   rq   ¡   s¦   † Ù;ð
 59ð"à1ð"ð 2ð"ð 
õ	"ð óQó ðQð ð2Ø;ð2à	*ó2ó ð2ð
 óó ðð	Ø4ð	à	$ô	ð
(àQð
(ð 
I÷
(r%   rq   )r'   r3   )*r-   Ú
__future__r   ÚloggingÚabcr   r   Úenumr   Útypingr   r   r	   r
   r   r   r   r   r   r   Ú	PIL.Imager   Úpydanticr   r   r   r   Úpydantic_corer   Ú#docling.datamodel.stage_model_specsr   Ú	getLoggerr)   r†   Ústrr   r3   rR   rT   rd   rj   rq   r&   r%   r"   Ú<module>rœ      s›   ðñ ;å "ã ß #Ý ÷÷ ÷ õ ß BÓ BÝ +æÝEà×Ò˜Ó"€ô
2  Tô 
2ô-J yô -Jô`6ô¨	ô ô.	 ô 	ô )ô ô*9( õ 9(r%   