o
    0j!                     @  sB  d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ G d	d
 d
eZG dd deZG dd deZeddG dd dZeddG dd dZeddG dd dZddd>ddZd?d#d$ZG d%d& d&Ze Zd@d,d-ZdAd1d2ZdBd4d5ZdCd7d8Z dDd:d;Z!dEd<d=Z"dS )FuG   Registry for model_name × engine bindings and structured binding data.    )annotations)	dataclass)AnyCallableDictMappingOptionalSequenceTupleType   )errors   )BasePredictorc                   @  s   e Zd ZdZdS )ModelRegistryLookupErrorz%Base error for model binding lookups.N)__name__
__module____qualname____doc__ r   r   k/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/inference/models/bindings/registry.pyr      s    r   c                      s,   e Zd ZdZd fddZdd	d
Z  ZS )UnknownModelErrorz8Raised when a model name has no explicit registry entry.
model_namestrknown_modelsSequence[str]c                   s$   || _ t|| _t |   d S N)r   tupler   super__init___build_message)selfr   r   	__class__r   r   r   "   s   
zUnknownModelError.__init__returnc                 C  s.   d| j d}| jr|dt| jd7 }|S )NModel z is not registered.z Known models: .)r   r   list)r!   msgr   r   r   r    '   s   z UnknownModelError._build_message)r   r   r   r   r$   r   r   r   r   r   r   r    __classcell__r   r   r"   r   r      s    r   c                      s,   e Zd ZdZd fddZdd
dZ  ZS )UnsupportedEngineErrorzGRaised when a registered model has no binding for the requested engine.r   r   enginesupported_enginesr   c                   s*   || _ || _t|| _t |   d S r   )r   r-   r   r.   r   r   r    )r!   r   r-   r.   r"   r   r   r   1   s   
zUnsupportedEngineError.__init__r$   c                 C  s"   d| j d| jdt| jdS )Nr%   z does not support engine z. Supported engines: r&   )r   r-   r'   r.   r!   r   r   r   r    <   s   z%UnsupportedEngineError._build_message)r   r   r-   r   r.   r   r)   r*   r   r   r"   r   r,   .   s    r,   T)frozenc                   @  s   e Zd ZU dZdZded< dS )RunnerBindingz@Structured binding data currently interpreted by runner engines.NOptional[Callable[..., Any]]runner_builder)r   r   r   r   r3   __annotations__r   r   r   r   r1   C   s   
 r1   c                   @  &   e Zd ZU dZded< dZded< dS )BindingzRBinding of (model_name, engine) to a predictor class and optional structured data.Type[BasePredictor]	predictorNOptional[RunnerBinding]runner_bindingr   r   r   r   r4   r:   r   r   r   r   r6   J      
 r6   c                   @  r5   )BindingRegistrationzIRegistration entry with model names and optional structured binding data.Tuple[str, ...]model_namesNr9   r:   r;   r   r   r   r   r=   R   r<   r=   Nr3   r?   Sequence[str] | strr3   r2   r$   c                C  s6   t | tr| f} d}|durt|d}tt| |dS )zBCreate a registration entry with optional structured binding data.Nr@   )r?   r:   )
isinstancer   r1   r=   r   )r?   r3   r:   r   r   r   create_binding_registrationZ   s   

rC   valueCSequence[str] | BindingRegistration | Sequence[BindingRegistration]Tuple[BindingRegistration, ...]c                 C  sZ   t | tr| fS t | trt| fdfS t| }|r%tdd |D r%|S tt|dfS )N)r?   c                 s  s    | ]}t |tV  qd S r   )rB   r=   ).0xr   r   r   	<genexpr>r   s    z+_normalize_registrations.<locals>.<genexpr>)rB   r=   r   r   all)rD   itemsr   r   r   _normalize_registrationsj   s   

rL   c                   @  sV   e Zd ZdZdddZdd
dZd ddZd!ddZd"ddZd#ddZ	d$ddZ
dS )%BindingRegistryzBRegistry mapping (model_name, engine) pairs to predictor bindings.r$   Nonec                 C  s
   i | _ d S r   )	_registryr/   r   r   r   r   z   s   
zBindingRegistry.__init__predictor_clsr7   bindingsQMapping[str, Sequence[str] | BindingRegistration | Sequence[BindingRegistration]]c           
   
   C  s   |  D ]G\}}| }t|D ]:}|jD ]4}| j|i }t||jd}||}	|	durE|	j	|us9|	j|jkrEt
d|d|d|||< qqqdS )8Register predictor class for (model_name, engine) pairs.)r8   r:   Nz#Conflicting registration for model z and engine r&   )rK   lowerrL   r?   rO   
setdefaultr6   r:   getr8   r   ZDuplicateRegistrationError)
r!   rP   rQ   r-   Zregistrationregr   
engine_mapbindingexistingr   r   r   register}   s,   	



zBindingRegistry.registerr   r   r>   c                 C  s(   | j |}|st|t| j t|S zNGet supported engines for a model. Raises UnknownModelError if not registered.)rO   rV   r   r   r!   r   rX   r   r   r   get_supported_engines   s   z%BindingRegistry.get_supported_enginesOptional[Tuple[str, ...]]c                 C  s   | j |}|s
dS t|S )=Get supported engines for a model, or None if not registered.N)rO   rV   r   r]   r   r   r   try_get_supported_engines   s   z)BindingRegistry.try_get_supported_enginesr-   r6   c                 C  sJ   | j |}|st|t| j || }|du r#t||t||S )TGet binding for (model_name, engine). Raises on unknown model or unsupported engine.N)rO   rV   r   r   rT   r,   )r!   r   r-   rX   rY   r   r   r   get_binding   s   zBindingRegistry.get_bindingOptional[Binding]c                 C  s"   | j |}|s
dS || S );Get binding for (model_name, engine), or None if not found.N)rO   rV   rT   )r!   r   r-   rX   r   r   r   try_get_binding   s   zBindingRegistry.try_get_bindingc                 C  s   |  ||jS z-Get predictor class for (model_name, engine).)rc   r8   )r!   r   r-   r   r   r   get_predictor_cls   s   z!BindingRegistry.get_predictor_clsN)r$   rN   rP   r7   rQ   rR   r$   rN   r   r   r$   r>   r   r   r$   r_   r   r   r-   r   r$   r6   r   r   r-   r   r$   rd   r   r   r-   r   r$   r7   )r   r   r   r   r   r[   r^   ra   rc   rf   rh   r   r   r   r   rM   w   s    






rM   rP   r7   rQ   rR   rN   c                 C  s   t | | dS )rS   N)default_registryr[   )rP   rQ   r   r   r   register_predictor_binding_map   s   rp   r   r   r>   c                 C  
   t | S r\   )ro   r^   r   r   r   r   r^         
r^   r_   c                 C  rq   )r`   )ro   ra   rr   r   r   r   ra      rs   ra   r-   c                 C     t | |S )rb   )ro   rc   r   r-   r   r   r   rc         rc   rd   c                 C  rt   )re   )ro   rf   ru   r   r   r   rf      rv   rf   c                 C  rt   rg   )ro   rh   ru   r   r   r   rh      rv   rh   )r?   rA   r3   r2   r$   r=   )rD   rE   r$   rF   ri   rj   rk   rl   rm   rn   )#r   
__future__r   dataclassesr   typingr   r   r   r   r   r	   r
   r   utilsr   Z
predictorsr   LookupErrorr   r   r,   r1   r6   r=   rC   rL   rM   ro   rp   r^   ra   rc   rf   rh   r   r   r   r   <module>   s4   (

G




