
    jo                         d dl Z d dlZd dlZd dlZddlmZ ddlmZ dgZ G d de	          Z
d Zd	 Zdd
Zd Zd ZddZddZd ZdS )    N   )logging)custom_open
get_configc                   $    e Zd ZdZd Zd Zd ZdS )AttrDictz	Attr Dictc                 8    || v r| |         S t          |          N)AttributeError)selfkeys     d/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddlex/utils/config.py__getattr__zAttrDict.__getattr__   s#    $;;9 %%%    c                 :    || j         v r|| j         |<   d S || |<   d S r
   )__dict__)r   r   values      r   __setattr__zAttrDict.__setattr__$   s.    $-!&DM#DIIIr   c                 D    t          j        t          |                     S r
   )copydeepcopydict)r   contents     r   __deepcopy__zAttrDict.__deepcopy__*   s    }T$ZZ(((r   N)__name__
__module____qualname____doc__r   r   r    r   r   r   r      sF        O& & &  ) ) ) ) )r   r   c                 ^   ddl m} |                                 D ]\  }}t          |          t          u rt          |          x| |<   }t          |t                    r	  ||          }n# t          $ r Y nw xY wt          |t
                    rt          | |                    || |<   dS )zcreate attr dictr   )literal_evalN)
astr!   itemstyper   r   
isinstancestrBaseExceptioncreate_attr_dict)yaml_configr!   r   r   s       r   r(   r(   .   s          !'')) % %
U;;$'/6KueS!! 	$U++    eX&& 	%[-....$K% %s    A,,
A98A9c                     t          | d          5 }t          t          j        |t          j                            }ddd           n# 1 swxY w Y   t          |           |S )z Load a config file into AttrDictr)LoaderN)r   r   yamlload
SafeLoaderr(   )cfg_filefopenr)   s      r   parse_configr2   @   s    	Xs	#	# IutytGGGHHI I I I I I I I I I I I I I I[!!!s   .AAAc                    d}t          |                                           D ]5\  }}t          |t                    r?t	          j        d                    |dz  |                     t          ||dz              nt          |t                    rrt          |          dk    r_t          |d         t                    rDt	          j        d                    |dz  |                     |D ]}t          ||dz              n,t	          j        d                    |dz  ||                     |
                                rt	          j        |           7dS )	z_
    Recursively visualize a dict and
    indenting according by the relationship of keys.
    z<------------------------------------------------------------z{}{} :     r   r   z	{}{} : {}N)sortedr#   r%   r   r   infoformat
print_dictlistlenisupper)d	delimiterplaceholderkvr   s         r   r9   r9   H   sO   
 Kqwwyy!! & &1a 	DL)))c/1==>>>q)a-((((4   	DSVVq[[Z!d5K5K[L)))c/1==>>> 1 15)a-00001 L++IOQBBCCC99;; 	&L%%%& &r   c                 J    t          j                     t          |            dS )zB
    visualize configs
    Arguments:
        config: configs
    N)r   	advertiser9   )configs    r   print_configrE   \   s'     vr   c                 D   fd}t          | t          t          f          s
J d            t          |          dk    s
J d            t          | t                    r ||d                   }t          |          dk    rA|t          |           k     sJ d                    ||                        |          | |<   dS t          | |         |dd                    dS t          |          dk    r>|d         | vrt          j        d|d          d	            |          | |d         <   dS |d         |                                 vr)i | |d         <   t          j        d
|d          d	           t          | |d                  |dd                    dS )z
    Recursively replace dict of list
    Args:
        dl(dict or list): dict or list to be replaced
        ks(list): list of keys
        v(str): value to be replaced
    c                 l    | dv rdS | dv rdS | dv rdS 	 t                    S # t          $ r | cY S w xY w)zconvert str type value
        to None type if it is "None",
        to bool type if it means True or False,
        to int type if it can be eval().
        NoneN)TRUETruetrueTtT)FALSEFalsefalseFfF)eval	Exception)srA   s    r   	parse_strzoverride.<locals>.parse_stro   si     ==444447775	77N 	 	 	HHH	s   $ 33z{} should be a list or a dictr   z#length of keys should larger than 0r   zindex({}) out of range({})NzA new field (z) detected!zA new Series field ()	r%   r:   r   r;   r8   overrider   warningkeys)dlksrA   rV   r@   s     `  r   rW   rW   f   s       " b4,''HH)HHH'r77Q;;;=;;;"d +Iber77a<<s2ww;;; < C CAr J J;;;IaLLBqEEERUBqrrFA&&&&&r77a<<a5B;; B1 B B BCCC!	!Br!uIII!uBGGII%%2a5	 Ir!u I I IJJJR1Y122*****r   c                 t   ||D ]}t          |t                    sJ d                    |                      d|v sJ d                    |                      |                    d          }t	          |          dk    s
J d            |\  }}|                    d          }t          | ||           | S )aP  
    Recursively override the config
    Args:
        config(dict): dict to be replaced
        options(list): list of pairs(key0.key1.idx.key2=value)
            such as: [
                'topk=2',
                'VALID.transforms.1.ResizeImage.resize_short=300'
            ]
    Returns:
        config(dict): replaced config
    Nzoption({}) should be a str=zAoption({}) should contain a =to distinguish between key and value   z#there can be only a = in the option.)r%   r&   r8   splitr;   rW   )rD   optionsoptpairr   r   rY   s          r   override_configrd      s      
	* 
	*Cc3''QQ)E)L)LS)Q)QQQ'#:::77=vc{{ :: 99S>>Dt99>>>#H>>>JC99S>>DVT5))))Mr   Fc                     t           j                            |           sJ d                    |                       t	          |           }t          ||           |rt          |           |S )z
    Read config from file
    zconfig file({}) is not exist)ospathexistsr8   r2   rd   rE   )fname	overridesshowrD   s       r   r   r      sm     7>>%  NN"@"G"G"N"NNN %  FFI&&& VMr   c                     t          j        d          } |                     ddt          dd           |                     ddd	g d
           |                     ddt          dd           |                                 }|S )z
parse argszPaddleX scriptz-cz--configzconfigs/config.yamlzconfig file path)r$   defaulthelpz-oz
--overrideappendzconfig options to be overridden)actionrm   rn   z-pz--profiler_optionsNzXThe option of profiler, which should be in format "key1=value1;key2=value2;key3=value3".)argparseArgumentParseradd_argumentr&   
parse_args)parserargss     r   rt   rt      s    $%566F
%     .     g     DKr   )r   r
   )NF)rq   r   rf   r-    r   file_interfacer   __all__r   r   r(   r2   r9   rE   rW   rd   r   rt   r   r   r   <module>rz      s     				        ' ' ' ' ' '.) ) ) ) )t ) ) )&% % %$  & & & &(  -+ -+ -+`   8
 
 
 
    r   