
    jY                     l    d dl mZ ddlmZ ddlmZmZmZ  G d de          Z	 G d dee	          Z
d	S )
    )ABCMeta   )logging)DuplicateRegistrationErrorraise_class_not_found_error raise_no_entity_registered_errorc                        e Zd ZdZdZdZdZ fdZed             Z	ed             Z
ed             Zd	 Zd
efdZ xZS )AutoRegisterMetaClasszmeta class that automatically registry subclass to its baseclass

    Args:
        type (class): type

    Returns:
        class: meta class
    entities	__is_base__registered_mapc                 ~    t                                          | |||          }|                     |||           |S N)super__new__-_AutoRegisterMetaClass__register_model_entity)mcsnamebasesattrscls	__class__s        o/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddlex/utils/subclass_register.pyr   zAutoRegisterMetaClass.__new__'   s;    ggooc466##E3666
    c                     |rG|D ]F}|                      |          }|r+t          || j                  r|                     ||           Ed S d S r   )'_AutoRegisterMetaClass__find_base_classhasattr,_AutoRegisterMetaClass__model_type_attr_name._AutoRegisterMetaClass__register_to_base_class)r   r   r   r   basebase_clss         r   __register_model_entityz-AutoRegisterMetaClass.__register_model_entity,   s|     	@ @ @0066 @S-G H H @003???		@ 	@@ @r   c                     | j         }|                    d          rd|j         |z   }t          ||d          r|S |j        D ]}|                     |          }|r|c S d S )N___F)'_AutoRegisterMetaClass__base_class_flag
startswith__name__getattr	__bases__r   )r   r   is_base_flagr    r!   s        r   __find_base_classz'AutoRegisterMetaClass.__find_base_class4   s    ,""4(( 	=-s|--<L3e,, 	JM 	  	 D,,T22H   tr   c           
      z   t          || j                  }t          |t                    r|g}t          || j        i           }|D ]^}||v r3||         |ur)t          d| d|j         d||         j         d          |||<   t          j        d|j         d| d           _t          || j        |           d S )Nz
The name(`z5`) duplicated registration! The class entities are: `z` and `z`.zThe class entity(z) has been register as name(`z`).)
r)   r   
isinstancestr+_AutoRegisterMetaClass__registered_map_namer   r(   r   debugsetattr)r   r    r   cls_entity_namerecordsr   s         r   __register_to_base_classz.AutoRegisterMetaClass.__register_to_base_classA   s   !#s'ABBos++ 	0./O$ 92>># 		 		Dw74=#;#;0  \_\h  	$-      GDMMXCLXXtXXX    	c/99999r   c                     t          | t          |           j                  st          |            t	          | t          |           j                  S )zget all subclass)r   typer0   r   r)   )r   s    r   allzAutoRegisterMetaClass.allT   sD    sDII;<< 	2,S111sDII;<<<r   r   c                 d    |                                  }||vrt          || |           ||         S )z get the registried class by name)r8   r   )r   r   all_entitiess      r   getzAutoRegisterMetaClass.getZ   s7    wwyy|##'c<@@@D!!r   )r(   
__module____qualname____doc__r   r&   r0   r   classmethodr   r   r   r8   r/   r;   __classcell__)r   s   @r   r
   r
      s          (#.    
 @ @ [@ 
 
 [
 : : [:$= = ="s " " " " " " " "r   r
   c                       e Zd Zd ZdS )AutoRegisterABCMetaClassN)r(   r<   r=   r>    r   r   rB   rB   b   s        """"r   rB   N)abcr    r   errorsr   r   r   r7   r
   rB   rC   r   r   <module>rG      s                        F" F" F" F" F"D F" F" F"R# # # # #w(= # # # # #r   