ó
    �®žjØ  ã                  ó\  • 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\5      r% " S S\5      r& " S S\5      r' " S S\5      r(g)z8Base classes for image-classification 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)
ÚImageClassificationEngineTypeé"   zASupported inference engine types for image-classification 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     Úw/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/models/inference_engines/image_classification/base.pyÚis_remote_variantÚ/ImageClassificationEngineType.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&   † ÙKà€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S9r
S\	S'   0 rS\	S'   \U 4S j5       rSrU =r$ )Ú$BaseImageClassificationEngineOptionsé/   z>Base configuration shared across image-classification engines.T©Úarbitrary_types_allowedzType of inference engine to use©Údescriptionr   r!   Né   zGMaximum number of classes to return. If None, all classes are returned.)ÚdefaultÚger8   zOptional[int]Útop_kzYClassVar[Dict[ImageClassificationEngineType, Type[BaseImageClassificationEngineOptions]]]Ú	_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!   r9   r   r&   )ÚsuperÚ__pydantic_init_subclass__r3   Úmodel_fieldsÚgetÚ
annotationr   r   r   Úlenr:   r   r=   )r    ÚkwargsÚfieldr!   ÚannÚvaluesÚ	__class__s         €r"   r@   Ú?BaseImageClassificationEngineOptions.__pydantic_init_subclass__B   s¬   ø€ ä‰Ò*Ñ4¨VÒ4àÔ6Ò6Øà× Ñ ×$Ñ$ ]Ó3ˆÞØàˆà×ÑˆÜ�c‹?œgÒ%Ü˜c“]ˆFÜ�6‹{˜aÓØ$ Q™i�àÑ 5§=¡=Ô8IÒ#IØŸ-™-ˆKàÑ"ØJMÔ0×:Ñ:¸;ÒGð #r%   r&   )r)   r*   r+   r,   r-   r   Úmodel_configr   r!   Ú__annotations__r<   r=   r0   r@   r1   Ú__classcell__)rI   s   @r"   r3   r3   /   sk   ø‡ ÙHá°dÑ;€Lá16Ø5ñ2€KÐ.ó ñ !ØØØ]ñ€Eˆ=ó ð 	ð ð ó ð ôNó öNr%   r3   c                  óP   • \ rS rSr% \" SS9rS\S'   \" SSS9\S 5       5       r	S	r
g
)Ú%ImageClassificationEngineOptionsMixiné\   z:Runtime configuration for the image-classification engine.r7   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Ú<ImageClassificationEngineOptionsMixin.resolve_engine_optionsa   sa   € ô �eÔA×BÑBØˆLä�eœT×"Ñ"ØŸ)™) MÓ2ˆKÜ<×FÑF×JÑJÈ;ÓWˆIÞØ ×/Ñ/°Ó6Ð6àˆr%   r&   N)r)   r*   r+   r,   r   rQ   rL   r   r0   rZ   r1   r&   r%   r"   rO   rO   \   s;   ‡ Ù;@ØPñ<€NÐ8ó ñ Ð%¨HÑ5Øñ
ó ó 6ó
r%   rO   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)ÚImageClassificationEngineInputép   z<Generic input accepted by every image-classification engine.Tr5   zPIL image to run inference onr7   r   Úimagez3Optional metadata that is echoed back in the output©Údefault_factoryr8   úDict[str, Any]Úmetadatar&   N)r)   r*   r+   r,   r-   r   rK   r   r_   rL   rV   rc   r1   r&   r%   r"   r]   r]   p   s6   ‡ ÙFá°dÑ;€LáÐ%DÑE€Eˆ5ÓEÙ$ØØIñ €Hˆnö r%   r]   c                  ób   • \ 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rg)ÚImageClassificationEngineOutputé|   z0Output returned by image-classification engines.z7Predicted class indices sorted by confidence descendingr`   z	List[int]Ú	label_idsz#Confidence scores sorted descendingzList[float]Úscoresz6Optional metadata echoed back from the input or enginerb   rc   r&   N)r)   r*   r+   r,   r-   r   Úlistrg   rL   rh   rV   rc   r1   r&   r%   r"   re   re   |   sN   ‡ Ù:á ØØMñ€Iˆyó ñ  ØØ9ñ€FˆKó ñ  %ØØLñ €Hˆnö r%   re   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)ÚBaseImageClassificationEngineé�   z5Abstract base-class for image-classification 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)Úselfrn   rK   s      r"   Ú__init__Ú&BaseImageClassificationEngine.__init__�   s   € ð ŒØ(ÔØ!ˆÕr%   c                ó   • g)zBInitialize engine resources (load models, allocate buffers, etc.).Nr&   ©rp   s    r"   Ú
initializeÚ(BaseImageClassificationEngine.initializeŸ   ó   � r%   c                ó   • g)z#Run inference on a batch of inputs.Nr&   )rp   Úinput_batchs     r"   Úpredict_batchÚ+BaseImageClassificationEngine.predict_batch£   rw   r%   c                ó   • g)z`Get the label mapping for this model.

Returns:
    Dictionary mapping label IDs to label names
Nr&   rt   s    r"   Úget_label_mappingÚ/BaseImageClassificationEngine.get_label_mapping©   rw   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   )ro   Ú_logÚdebugÚtyper)   ru   rz   )rp   Ú
input_dataÚresultss      r"   ÚpredictÚ%BaseImageClassificationEngine.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)
ro   r€   r�   r‚   r)   ru   rU   ri   rz   r…   )rp   rƒ   s     r"   Ú__call__Ú&BaseImageClassificationEngine.__call__¼   s]   € ð
 × × Ü�J‰JÐ1´4¸³:×3FÑ3FÔGØ�O‰OÔä�j¤$×'Ñ'Ø×%Ñ% jÓ1Ð1Ø�|‰|˜JÓ'Ð'r%   )ro   rK   rn   )N)rn   r3   rK   zOptional[EngineModelConfig]r'   ÚNone)r'   rŠ   )ry   z$List[ImageClassificationEngineInput]r'   z%List[ImageClassificationEngineOutput])r'   zDict[int, str])rƒ   r]   r'   re   )rƒ   zEImageClassificationEngineInput | List[ImageClassificationEngineInput]r'   zGImageClassificationEngineOutput | List[ImageClassificationEngineOutput])r)   r*   r+   r,   r-   rq   r   ru   rz   r}   r…   rˆ   r1   r&   r%   r"   rk   rk   �   s¨   † Ù?ð
 59ð"à5ð"ð 2ð"ð 
õ	"ð óQó ðQð ð2Ø?ð2à	.ó2ó ð2ð
 óó ðð	Ø8ð	à	(ô	ð(ð/ð(ð 
Q÷	(r%   rk   ))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   rO   r]   re   rk   r&   r%   r"   Ú<module>r–      s–   ðñ ?å "ã ß #Ý ÷÷ ÷ õ ß BÓ BÝ +æÝEà×Ò˜Ó"€ô
2 C¨ô 
2ô*N¨9ô *NôZ¨Iô ô(	 Yô 	ô iô ô":( Cõ :(r%   