
    j{                         d dl Z d dlZd dlZd dlZd dlZd dlmZ 	 d dlZ	n#   e j
        d           d dl	Z	Y nxY wd dlmZ ed             ZddefdZd	edefd
ZdefdZd Zd ZdefdZddefdZddZd ZdS )    N)FileLockz*failed to import ujson, using json instead)contextmanagerc              #     K   |dk    r|t           j                            |           s"t          d                    |                     t          | dd          }	 |                                 |                    d           |V  n# t          $ r t          | dd          }	 |                                 |                    d           |V  nz# t          $ rm t          | d          5 }t          j
        |                                          d         }d	d	d	           n# 1 swxY w Y   t          | d|          }|V  Y nw xY wY nw xY w|                                 d	S # |                                 w xY w|d
k    r,t          | d
d          }|V  |                                 d	S |dk    rld}t           j                            |           rt          | d|          }	 |                                 |                    d           n# t          $ r d}t          | d|          }	 |                                 |                    d           nd# t          $ rW t          | d          5 }t          j
        |                                          d         }d	d	d	           n# 1 swxY w Y   Y nw xY wY nw xY w|                                 n# |                                 w xY wt          | d|          }|V  |                                 d	S t          d                    |                    )uk  
    自定义打开文件函数

    Args:
        file_path (str): 文件路径
        mode (str): 文件打开模式，'r'，'w' 或 'a'

    Returns:
        Any: 返回文件对象

    Raises:
        FileNotFoundError: 当文件不存在时，raise FileNotFoundError
        ValueError: 当 mode 参数不是 'r'， 'w' 和 'a' 时，raise ValueError
    rzfile {} not foundutf-8encodingr   gbkrbr	   Nwaz(mode must be 'r', 'w' or 'a', but got {})ospathexistsFileNotFoundErrorformatopenreadseekUnicodeDecodeErrorchardetdetectclose
ValueError)	file_pathmodefilefr	   s        l/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddlex/utils/file_interface.pycustom_openr    !   s       s{{w~~i(( 	K#$7$>$>y$I$IJJJIsW555	IIKKKIIaLLLJJJJ! 
	 
	 
		3777D				!



%   )T** Da&~affhh77
CHD D D D D D D D D D D D D D DIsX>>>




	
	 JJLLLLLDJJLLLL	IsW555




	7>>)$$ 		3:::D				!% H H H IsX>>>HIIKKKIIaLLLL) H H Hi.. H!#*>!&&((#;#;J#GH H H H H H H H H H H H H H HHH 



IsX666




CJJ4PPQQQs   -B E- E)-CEE1-D*E*D..E1D.2EEEEE- EE- -F4)H K& K=)I'&K'K-J:.K:J>>KJ>KKKKK& KK& &K<T	yaml_pathc                 H   	 t          | dd          5 }t          j        |          }ddd           n# 1 swxY w Y   nN# t          $ rA t          | dd          5 }t          j        |          }ddd           n# 1 swxY w Y   Y nw xY w|rt	          |          n|}|S )zread from yaml filer   r   r   Nr
   )r   yaml	full_loadr   dict)r!   to_dictr   yaml_contents       r   read_yaml_filer(   g   s0   0)S7333 	0t>$//L	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 0 0 0)S5111 	0T>$//L	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	00 *1B4%%%lLsP   A 5A 9A 9A BA>2B>B	BB	BB	yaml_dictc                    t           j                                        }t          |dz             }|5  t	          |dd          5 } |j        | |           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zwrite to config yaml filez.lockr   r   r   N)ruamelr#   YAMLr   r   dump)r)   r!   r#   lockr   s        r   write_config_filer/   s   s   ;DI'((D	 ' ')S7333 	'tDIi&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's5   A<A$A<$A(	(A<+A(	,A<<B B 
key_valuesc                 n    t          |           }|                    |           t          ||            dS )z>update yaml file with key_values
    key_values is a dict
    N)r(   updater/   )r!   r0   r)   s      r   update_yaml_file_with_dictr3   }   s;     y))IZ   i+++++    c                 H    t          |           }|                                S )zget all keys of yaml file)r(   keys)r!   r)   s     r   get_yaml_keysr7      s    y))I>>r4   c                     d}|                                  }|d                     |                      z  }|t          j        z  }|d                    dg          z  }dS )generate_markdown_from_dict z| |z :----: N)r6   joinr   linesep)metricsmkr6   s      r   r9   r9      sX    	B<<>>D$))DDFF

B"*B#((J<
 
  BBBr4   
jsonl_pathc                 n    t          | d          5 }d |D             }ddd           n# 1 swxY w Y   |S )zread from jsonl filer   c                 6    g | ]}t          j        |          S  )jsonloads).0lines     r   
<listcomp>z#read_jsonl_file.<locals>.<listcomp>   s"    ;;;dD));;;r4   N)r    )r@   r   jsonl_contents      r   read_jsonl_filerJ      s}    	Z	%	% <;;d;;;< < < < < < < < < < < < < < <s   *..Fc                     t          |d          5 }t          j        | |fd|i| ddd           dS # 1 swxY w Y   dS )zwrite to json filer   ensure_asciiN)r    rD   r-   )contentr@   rL   kwargsr   s        r   write_json_filerO      s    	Z	%	% F	'4EElEfEEEF F F F F F F F F F F F F F F F F Fs   488c                    |g n|}|                                 D ]}|| vrt          j        d| d            dS t          ||         t	          | |                             sFt          j        d| dt	          ||                    dt	          | |                                dS t          ||         t
                    r>t          | |         t
                    r#||vrt          | |         ||         |          c S t          |                                            t          |                                           k    rt          j        d           dS d	S )
zcheck if all keys of to_checked_dict is the same as standard_dict, and the value is the same type
    Args:
        escape_list: if set, will not check the keys in white_list
    Nzkey z not in yaml fileFzvalue type of key z is not the same as standard: z, zyaml file has extra keysT)r6   loggingerror
isinstancetyper%   check_dict_keyslen)to_checked_dictstandard_dictescape_listkeys       r   rU   rU      s   
 $+""K!!##  o%%M777788855-,d?33G.H.HII 	MLS L Lc*++L L/3OC4H/I/IL L   55 }S)400	?3/66	 ;&&"$mC&8+     ?!!""c-*<*<*>*>&?&???1222u4r4   c                     | <t          |           dk    r)| D ]$}t          j                            |          s dS %dS dS )z1check if dataset valid in path_list for datset_uiNr   FT)rV   r   r   r   )	path_listr   s     r   check_dataset_validr]      sS    Y!!3!3 	 	D7>>$'' uutur4   )T)F)N)rQ   r   r   ruamel.yamlr+   r#   filelockr   ujsonrD   warning
contextlibr   r    strr(   r%   r/   r3   r7   r9   rJ   rO   rU   r]   rC   r4   r   <module>rd      s     				            GO@AAAKKKKK % % % % % % ?R ?R ?RJ	 	c 	 	 	 	' '# ' ' ' ',d , , , ,  ! ! !    F F F F F F   @    s   ! 9