
    {-j!                       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
e          Z G d de          Z G d de          Z ed           G d d                      Z ed           G d d                      Z ed           G d d                      Zddd6dZd7d"Z G d# d$          Z e            Zd8d*Zd9d.Zd:d0Zd;d2Z d<d4Z!d=d5Z"dS )>uG   Registry for model_name × engine bindings and structured binding data.    )annotations)	dataclass)AnyCallableDictMappingOptionalSequenceTupleType   )errors   )BasePredictorc                      e Zd ZdZdS )ModelRegistryLookupErrorz%Base error for model binding lookups.N)__name__
__module____qualname____doc__     j/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddlex/inference/models/bindings/registry.pyr   r      s        ////r   r   c                  ,     e Zd ZdZd	 fdZd
dZ xZS )UnknownModelErrorz8Raised when a model name has no explicit registry entry.
model_namestrknown_modelsSequence[str]c                    || _         t          |          | _        t                                          |                                            d S N)r   tupler   super__init___build_message)selfr   r   	__class__s      r   r$   zUnknownModelError.__init__"   sD    $!,//,,../////r   returnc                `    d| j         d}| j        r|dt          | j                  dz  }|S )NModel z is not registered.z Known models: .)r   r   list)r&   msgs     r   r%   z UnknownModelError._build_message'   sF    =t=== 	BAT$*;%<%<AAAAC
r   )r   r   r   r   r(   r   r   r   r   r   r$   r%   __classcell__r'   s   @r   r   r      sW        BB0 0 0 0 0 0
       r   r   c                  ,     e Zd ZdZd
 fdZdd	Z xZS )UnsupportedEngineErrorzGRaised when a registered model has no binding for the requested engine.r   r   enginesupported_enginesr   c                    || _         || _        t          |          | _        t	                                          |                                            d S r!   )r   r4   r"   r5   r#   r$   r%   )r&   r   r4   r5   r'   s       r   r$   zUnsupportedEngineError.__init__1   sN     %!&'8!9!9,,../////r   r(   c                R    d| j         d| j        dt          | j                  dS )Nr*   z does not support engine z. Supported engines: r+   )r   r4   r,   r5   r&   s    r   r%   z%UnsupportedEngineError._build_message<   sM    DT_ D D D D"&t'=">">D D D	
r   )r   r   r4   r   r5   r   r.   r/   r1   s   @r   r3   r3   .   sW        QQ	0 	0 	0 	0 	0 	0
 
 
 
 
 
 
 
r   r3   T)frozenc                  "    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   r=   __annotations__r   r   r   r;   r;   C   s)         JJ37N777777r   r;   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   r>   rD   r   r   r   r@   r@   J   s5         \\"""".2N222222r   r@   c                  ,    e Zd ZU dZded<   dZded<   dS )BindingRegistrationzIRegistration entry with model names and optional structured binding data.Tuple[str, ...]model_namesNrC   rD   rE   r   r   r   rG   rG   R   s5         SS    .2N222222r   rG   Nr=   rI   Sequence[str] | strr=   r<   r(   c                   t          | t                    r| f} d}|t          |          }t          t	          |           |          S )zBCreate a registration entry with optional structured binding data.NrJ   )rI   rD   )
isinstancer   r;   rG   r"   )rI   r=   rD   s      r   create_binding_registrationrN   Z   s\     +s## %"nN!&nEEE+&&~   r   valueCSequence[str] | BindingRegistration | Sequence[BindingRegistration]Tuple[BindingRegistration, ...]c                   t          | t                    r| fS t          | t                    rt          | f          fS t          |           }|rt	          d |D                       r|S t          t          |                    fS )N)rI   c              3  @   K   | ]}t          |t                    V  d S r!   )rM   rG   ).0xs     r   	<genexpr>z+_normalize_registrations.<locals>.<genexpr>r   s-      GGAZ#677GGGGGGr   )rM   rG   r   r"   all)rO   itemss     r   _normalize_registrationsrY   j   s     %,-- x% <#999;;%LLE GGGGGGG E%LL999;;r   c                  J    e Zd ZdZddZdd	ZddZddZddZddZ	ddZ
dS )BindingRegistryzBRegistry mapping (model_name, engine) pairs to predictor bindings.r(   Nonec                    i | _         d S r!   )	_registryr8   s    r   r$   zBindingRegistry.__init__z   s    8:r   predictor_clsrA   bindingsQMapping[str, Sequence[str] | BindingRegistration | Sequence[BindingRegistration]]c           
        |                                 D ]\  }}|                                }t          |          D ]}|j        D ]}| j                            |i           }t          ||j                  }|                    |          }	|	4|	j	        |us|	j        |j        k    rt          j        d|d|d          |||<   dS )8Register predictor class for (model_name, engine) pairs.)rB   rD   Nz#Conflicting registration for model z and engine r+   )rX   lowerrY   rI   r^   
setdefaultr@   rD   getrB   r   DuplicateRegistrationError)
r&   r_   r`   r4   registrationregr   
engine_mapbindingexistings
             r   registerzBindingRegistry.register}   s    %-NN$4$4 	1 	1 FL\\^^F/== 1 1"%/ 1 1J!%!:!::r!J!JJ%"/'*'9  G  *~~f55H+ *-??#2g6LLL$?6* 6 6*06 6 6   *1Jv&&11	1 	1r   r   r   rH   c                    | j                             |          }|s"t          |t          | j                             t          |          S zNGet supported engines for a model. Raises UnknownModelError if not registered.)r^   rf   r   r"   r&   r   rj   s      r   get_supported_enginesz%BindingRegistry.get_supported_engines   sH    ^''
33
 	G#Jdn0E0EFFFZ   r   Optional[Tuple[str, ...]]c                \    | j                             |          }|sdS t          |          S )=Get supported engines for a model, or None if not registered.N)r^   rf   r"   rp   s      r   try_get_supported_enginesz)BindingRegistry.try_get_supported_engines   s2    ^''
33
 	4Z   r   r4   r@   c                   | j                             |          }|s"t          |t          | j                             |                    |                                          }|t          ||t          |                    |S zTGet binding for (model_name, engine). Raises on unknown model or unsupported engine.)r^   rf   r   r"   rd   r3   )r&   r   r4   rj   rk   s        r   get_bindingzBindingRegistry.get_binding   sw    ^''
33
 	G#Jdn0E0EFFF..00?(VU:=N=NOOOr   Optional[Binding]c                    | j                             |          }|sdS |                    |                                          S );Get binding for (model_name, engine), or None if not found.N)r^   rf   rd   )r&   r   r4   rj   s       r   try_get_bindingzBindingRegistry.try_get_binding   s>    ^''
33
 	4~~fllnn---r   c                8    |                      ||          j        S z-Get predictor class for (model_name, engine).)rx   rB   )r&   r   r4   s      r   get_predictor_clsz!BindingRegistry.get_predictor_cls   s    
F33==r   N)r(   r\   r_   rA   r`   ra   r(   r\   r   r   r(   rH   r   r   r(   rr   r   r   r4   r   r(   r@   r   r   r4   r   r(   ry   r   r   r4   r   r(   rA   )r   r   r   r   r$   rm   rq   ru   rx   r|   r   r   r   r   r[   r[   w   s        LL; ; ; ;1 1 1 1:! ! ! !! ! ! !   . . . .> > > > > >r   r[   r_   rA   r`   ra   r\   c                <    t                               | |           dS )rc   N)default_registryrm   )r_   r`   s     r   register_predictor_binding_mapr      s      mX66666r   r   r   rH   c                6    t                               |           S ro   )r   rq   r   s    r   rq   rq      s    11*===r   rr   c                6    t                               |           S )rt   )r   ru   r   s    r   ru   ru      s    55jAAAr   r4   c                8    t                               | |          S rw   )r   rx   r   r4   s     r   rx   rx      s    ''
F;;;r   ry   c                8    t                               | |          S )r{   )r   r|   r   s     r   r|   r|      s    ++J???r   c                8    t                               | |          S r~   )r   r   r   s     r   r   r      s    --j&AAAr   )rI   rK   r=   r<   r(   rG   )rO   rP   r(   rQ   r   r   r   r   r   r   )#r   
__future__r   dataclassesr   typingr   r   r   r   r	   r
   r   r   utilsr   
predictorsr   LookupErrorr   r   r3   r;   r@   rG   rN   rY   r[   r   r   rq   ru   rx   r|   r   r   r   r   <module>r      s    N M " " " " " " ! ! ! ! ! ! P P P P P P P P P P P P P P P P P P P P       & & & & & &0 0 0 0 0{ 0 0 0    0   
 
 
 
 
5 
 
 
* $8 8 8 8 8 8 8 8 $3 3 3 3 3 3 3 3 $3 3 3 3 3 3 3 3 48      
< 
< 
< 
<D> D> D> D> D> D> D> D>N #?$$ 7 7 7 7> > > >
B B B B
< < < <
@ @ @ @
B B B B B Br   