
    =pj                         S SK r S SKrS SKJr  S SKrSSKJrJrJ	r	  SSK
7  S rS\4S jr " S	 S
\5      r " S S\5      r " S S\5      r " S S\5      r " S S\\5      rg)    N)ABCMeta   )DuplicateRegistrationErrorraise_class_not_found_error raise_no_entity_registered_error)*c                 "   [        U [        5      (       aF  U R                  5        VVs0 s H(  u  p[        U[        5      (       a  M  U[	        U5      _M*     snn$ [        U [
        5      (       a  U  Vs/ s H  n[	        U5      PM     sn$ [        U [        R                  5      (       a  U R                  5       $ [        U [        R                  [        R                  45      (       a  [        U 5      $ [        U [        R                  [        R                  45      (       a  [        U 5      $ [        U [        R                  5      (       a  [!        U 5      $ [        U [        R"                  5      (       a  [%        U 5      $ U $ s  snnf s  snf N)
isinstancedictitemstypeconvert_and_remove_typeslistnpndarraytolistfloat32float64floatint32int64intbool_boolstr_str)datakvs      N/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/paddlex/utils/misc.pyr   r      s$   $ 


$a& +A'**$
 	

 
D$		59:T(+T::	D"**	%	%{{}	D2::rzz2	3	3T{	D288RXX.	/	/4y	D"((	#	#Dz	D"''	"	"4yK#
 ;s   FF5Fpathc                 @    [         R                  R                  U 5      $ )z`get absolute path

Args:
    path (str): the relative path

Returns:
    str: the absolute path
)osr"   abspath)r"   s    r!   r%   r%   4   s     77??4      c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )CachedProperty@   a(  
A property that is only computed once per instance and then replaces itself
with an ordinary attribute.

The implementation refers to
https://github.com/pydanny/cached-property/blob/master/cached_property.py .

Note that this implementation does NOT work in multi-thread or coroutine
scenarios.
c                 R   > [         TU ]  5         Xl        [        USS5      U l        g )N__doc__ )super__init__funcgetattrr+   )selfr/   	__class__s     r!   r.   CachedProperty.__init__L   s#    	tY3r&   c                 v    Uc  U $ U R                  U5      nX1R                  U R                   R                  '   U$ r
   )r/   __dict____name__)r1   objclsvals       r!   __get__CachedProperty.__get__Q   s6    ;Kiin ,/TYY''(
r&   )r+   r/   )	r6   
__module____qualname____firstlineno__r+   r.   r:   __static_attributes____classcell__r2   s   @r!   r(   r(   @   s    	4
 r&   r(   c                   <   ^  \ rS rSrS rU 4S jrSS jrS rSrU =r	$ )Constant[   c                 .   > [         TU ]  5         Xl        g r
   )r-   r.   r9   )r1   r9   r2   s     r!   r.   Constant.__init__^   s    r&   c                     U R                   $ r
   r9   )r1   r7   type_s      r!   r:   Constant.__get__b   s    xxr&   c                     [        S5      e)Nz+The value of a constant cannot be modified!)AttributeError)r1   r7   r9   s      r!   __set__Constant.__set__e   s    JKKr&   rH   r
   )
r6   r<   r=   r>   r+   r.   r:   rM   r?   r@   rA   s   @r!   rC   rC   [   s    L Lr&   rC   c                   R   ^  \ rS rSrSr0 r\R                  " 5       rU 4S jr	Sr
U =r$ )	Singletoni   zSsingleton meta class

Args:
    type (class): type

Returns:
    class: meta class
c                    > X R                   ;  aA  U R                     X R                   ;  a  [        TU ]  " U0 UD6U R                   U '   S S S 5        U R                   U    $ ! , (       d  f       N= fr
   )_insts_lockr-   __call__)r8   argskwargsr2   s      r!   rU   Singleton.__call__v   sW    jj jj(&+g&6&G&GCJJsO  zz# s   -A!!
A/ )r6   r<   r=   r>   r+   rS   	threadingLockrT   rU   r?   r@   rA   s   @r!   rP   rP   i   s%     FNNE r&   rP   c                   |   ^  \ rS rSrSrSrSrSrU 4S jr\	S 5       r
\	S 5       r\	S	 5       rS
 rS\4S jrSrU =r$ )AutoRegisterMetaClass   zmeta class that automatically registry subclass to its baseclass

Args:
    type (class): type

Returns:
    class: meta class
entities	__is_base__registered_mapc                 L   > [         TU ]  XX#5      nU R                  X$U5        U$ r
   )r-   __new__-_AutoRegisterMetaClass__register_model_entity)mcsnamebasesattrsr8   r2   s        r!   rc   AutoRegisterMetaClass.__new__   s(    goc6##E6
r&   c                 |    U(       a5  U H.  nU R                  U5      nU(       d  M  U R                  XR5        M0     g g r
   )'_AutoRegisterMetaClass__find_base_class._AutoRegisterMetaClass__register_to_base_class)re   rg   r8   rh   basebase_clss         r!   __register_model_entity-AutoRegisterMetaClass.__register_model_entity   s7    006800?  r&   c                     U R                   nUR                  S5      (       a  SUR                   3U-   n[        XS5      (       a  U$ UR                   H  nU R                  U5      nU(       d  M  Us  $    g )N___F)'_AutoRegisterMetaClass__base_class_flag
startswithr6   r0   	__bases__rk   )re   r8   is_base_flagrm   rn   s        r!   __find_base_class'AutoRegisterMetaClass.__find_base_class   sr    ,,""4((s||n-<L3e,,JMMD,,T2Hx " r&   c           
         [        X R                  UR                  5      n[        U[        5      (       a  U/n[        XR
                  0 5      nU HZ  nXT;   a2  XE   ULa+  [        SU SUR                   SXE   R                   S35      eX$U'   [        SUR                   SU S35        M\     [        XR
                  U5        g )Nz
The name(`z5`) duplicated registration! The class entities are: `z` and `z`.zThe class entity(z) has been register as name(`z`).)	r0   ,_AutoRegisterMetaClass__model_type_attr_namer6   r   r   +_AutoRegisterMetaClass__registered_map_namer   debugsetattr)re   rm   r8   cls_entity_namerecordsrf   s         r!   __register_to_base_class.AutoRegisterMetaClass.__register_to_base_class   s    !#'A'A3<<Pos++./O$ 9 92>#D7=#;0 &[\_\h\h[i j	-   DM#CLL>1NtfTWX $ 	//9r&   c                     [        U [        U 5      R                  5      (       d  [        U 5        [	        U [        U 5      R                  5      $ )zget all subclass)hasattrr   r|   r   r0   )r8   s    r!   allAutoRegisterMetaClass.all   s8    sDI;;<<,S1sDI;;<<r&   rf   c                 L    U R                  5       nX;  a  [        XU5        X!   $ )z get the registried class by name)r   r   )r8   rf   all_entitiess      r!   getAutoRegisterMetaClass.get   s&    wwy#'<@!!r&   rY   )r6   r<   r=   r>   r+   r{   rt   r|   rc   classmethodrd   rk   rl   r   r   r   r?   r@   rA   s   @r!   r]   r]      su     (#.
 @ @ 
 
 : :$="s " "r&   r]   c                       \ rS rSrS rSrg)AutoRegisterABCMetaClass   rY   N)r6   r<   r=   r>   r+   r?   rY   r&   r!   r   r      s    "r&   r   )r$   rZ   abcr   numpyr   errorsr   r   r   loggingr   r   r%   objectr(   rC   r   rP   r]   r   rY   r&   r!   <module>r      sw     
    
 ,	!# 	!V 6Lv L ,F"D F"R#w(= #r&   