
    9i                         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                 B   [        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"                  [        R$                  4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_unicode_str)datakvs      R/var/www/html/land-doc-ocr/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	D277BKK0	1	1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,   )selfr0   	__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
   )r0   __dict____name__)r2   objclsvals       r"   __get__CachedProperty.__get__Q   s6    ;Kiin ,/TYY''(
r'   )r,   r0   )	r7   
__module____qualname____firstlineno__r,   r/   r;   __static_attributes____classcell__r3   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/   r:   )r2   r:   r3   s     r"   r/   Constant.__init__^   s    r'   c                     U R                   $ r
   r:   )r2   r8   type_s      r"   r;   Constant.__get__b   s    xxr'   c                     [        S5      e)Nz+The value of a constant cannot be modified!)AttributeError)r2   r8   r:   s      r"   __set__Constant.__set__e   s    JKKr'   rI   r
   )
r7   r=   r>   r?   r,   r/   r;   rN   r@   rA   rB   s   @r"   rD   rD   [   s    L Lr'   rD   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__)r9   argskwargsr3   s      r"   rV   Singleton.__call__v   sW    jj jj(&+g&6&G&GCJJsO  zz# s   -A!!
A/ )r7   r=   r>   r?   r,   rT   	threadingLockrU   rV   r@   rA   rB   s   @r"   rQ   rQ   i   s%     FNNE r'   rQ   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attrsr9   r3   s        r"   rd   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)rf   rh   r9   ri   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
startswithr7   r1   	__bases__rl   )rf   r9   is_base_flagrn   ro   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`).)	r1   ,_AutoRegisterMetaClass__model_type_attr_namer7   r   r   +_AutoRegisterMetaClass__registered_map_namer   debugsetattr)rf   rn   r9   cls_entity_namerecordsrg   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   r1   )r9   s    r"   allAutoRegisterMetaClass.all   s8    sDI;;<<,S1sDI;;<<r'   rg   c                 L    U R                  5       nX;  a  [        XU5        X!   $ )z get the registried class by name)r   r   )r9   rg   all_entitiess      r"   getAutoRegisterMetaClass.get   s&    wwy#'<@!!r'   rZ   )r7   r=   r>   r?   r,   r|   ru   r}   rd   classmethodre   rl   rm   r   r   r   r@   rA   rB   s   @r"   r^   r^      su     (#.
 @ @ 
 
 : :$="s " "r'   r^   c                       \ rS rSrS rSrg)AutoRegisterABCMetaClass   rZ   N)r7   r=   r>   r?   r,   r@   rZ   r'   r"   r   r      s    "r'   r   )r%   r[   abcr   numpyr   errorsr   r   r   loggingr   r   r&   objectr)   rD   r   rQ   r^   r   rZ   r'   r"   <module>r      sw     
    
 ,	!# 	!V 6Lv L ,F"D F"R#w(= #r'   