
    9io                         S SK r S SKrS SKrS SKrSSKJr  SSKJr  S/r " S S\	5      r
S rS	 rSS
 jrS rS rSS jrSS jrS rg)    N   )logging)custom_open
get_configc                   *    \ rS rSrSrS rS rS rSrg)AttrDict   z	Attr Dictc                 *    X;   a  X   $ [        U5      eN)AttributeError)selfkeys     T/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/paddlex/utils/config.py__getattr__AttrDict.__getattr__   s    ;9 %%    c                 H    XR                   ;   a  X R                   U'   g X U'   g r   )__dict__)r   r   values      r   __setattr__AttrDict.__setattr__$   s    --!&MM#Ir   c                 @    [         R                  " [        U 5      5      $ r   )copydeepcopydict)r   contents     r   __deepcopy__AttrDict.__deepcopy__*   s    }}T$Z((r    N)	__name__
__module____qualname____firstlineno____doc__r   r   r   __static_attributes__r   r   r   r   r      s    &)r   r   c                 0   SSK Jn  U R                  5        Hl  u  p#[        U5      [        L a  [        U5      =X'   n[        U[        5      (       a	   U" U5      n[        U[
        5      (       a  [        X   5        Mh  X0U'   Mn     g! [         a     N9f = f)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     !'')
;$'/6KueS!!$U+ eX&&[-.$ * ! s   B
BBc                     [        U S5       n[        [        R                  " U[        R                  S95      nSSS5        [        W5        U$ ! , (       d  f       N= f)z Load a config file into AttrDictr)LoaderN)r   r   yamlload
SafeLoaderr.   )cfg_filefopenr/   s      r   parse_configr8   @   sC    	Xs	#utyytGH 
$[! 
$	#s   -A
Ac                    Sn[        U R                  5       5       GH'  u  p4[        U[        5      (       a8  [        R
                  " SR                  US-  U5      5        [        XAS-   5        O[        U[        5      (       ah  [        U5      S:  aY  [        US   [        5      (       aA  [        R
                  " SR                  US-  U5      5        U H  n[        XQS-   5        M     O)[        R
                  " SR                  US-  X45      5        UR                  5       (       d  GM  [        R
                  " U5        GM*     g)	zS
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   r?   r?   H   s    
 Kqwwy!aLL)))c/1=>qa-(4  SVq[Z!d5K5KLL)))c/1=>5a-0  LL++IOQBC99;;LL% "r   c                 D    [         R                  " 5         [        U 5        g)z2
visualize configs
Arguments:
    config: configs
N)r   	advertiser?   )configs    r   print_configrK   \   s     vr   c                   ^ U4S jn[        U [        [        45      (       d   S5       e[        U5      S:  d   S5       e[        U [        5      (       a]  U" US   5      n[        U5      S:X  a0  U[        U 5      :  d   SR	                  X@5      5       eU" T5      X'   g[        X   USS T5        g[        U5      S:X  a4  US   U ;  a  [        R                  " SUS    S	35        U" T5      XS   '   gUS   U R                  5       ;  a$  0 XS   '   [        R                  " S
US    S	35        [        XS      USS T5        g)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                 j   > U S;   a  gU S;   a  gU S;   a  g [        T5      $ ! [         a    U s $ f = f)z~convert 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)srG   s    r   	parse_stroverride.<locals>.parse_stro   sI     =4477	7N 	H	s   
# 22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   rA   r>   overrider   warningkeys)dlksrG   r\   rF   s     `  r   r^   r^   f   s0   " b4,''H)HH'r7Q;===;"dber7a<s2w;J < C CA JJ;aLBERUBqrFA&r7a<a5B;-1wk BC!!B!uI!uBGGI%a5	"6r!ug[ IJR1Y12*r   c                 <   Ub  U H  n[        U[        5      (       d   SR                  U5      5       eSU;   d   SR                  U5      5       eUR                  S5      n[	        U5      S:X  d   S5       eUu  pEUR                  S5      n[        XU5        M     U $ )a$  
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
z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,   r>   splitrA   r^   )rJ   optionsoptpairr   r   r`   s          r   override_configrk      s     Cc3''Q)E)L)LS)QQ'#: 77=vc{: 99S>Dt9>H#HH>JC99S>DV5)  Mr   c                     [         R                  R                  U 5      (       d   SR                  U 5      5       e[	        U 5      n[        X15        U(       a  [        U5        U$ )z
Read config from file
zconfig file({}) is not exist)ospathexistsr>   r8   rk   rK   )fname	overridesshowrJ   s       r   r   r      sP     77>>%  N"@"G"G"NN % FF&VMr   c                      [         R                  " S5      n U R                  SS[        SSS9  U R                  SSS	/ S
S9  U R                  SS[        SSS9  U R	                  5       nU$ )z
parse argszPaddleX scriptz-cz--configzconfigs/config.yamlzconfig file path)r*   defaulthelpz-oz
--overrideappendzconfig options to be overridden)actionrt   ru   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   r{   r{      s    $$%56F
%   .   g   DKr   )r   r   )NF)rx   r   rm   r3    r   file_interfacer   __all__r   r   r.   r8   r?   rK   r^   rk   r   r{   r   r   r   <module>r      sU      	   '.)t )&%$&(-+`8
r   