
    9i{                        S SK r S SKrS SKrS SKrS SKrS SKJr   S SKr	S SKJr  \S 5       rSS\4S jjrS\S\4S	 jrS
\4S jrS rS rS\4S jrSS\4S jjrSS jrS rg!   \ R                  " S5        S SK	r	 N`= f)    N)FileLockz*failed to import ujson, using json instead)contextmanagerc              #     #    US:X  a  [         R                  R                  U 5      (       d  [        SR	                  U 5      5      e[        U SSS9n UR                  5         UR                  S5        Uv   UR                  5         g	US
:X  a   [        U S
SS9nUv   UR                  5         g	US:X  a  Sn[         R                  R                  U 5      (       a=  [        U SUS9n UR                  5         UR                  S5        UR                  5         [        U SUS9nUv   UR                  5         g	[        SR	                  U5      5      e! [         a    [        U SSS9n UR                  5         UR                  S5        Uv    GN! [         ab    [        U S5       n[        R                  " UR                  5       5      S   nS	S	S	5        O! , (       d  f       O= f[        U SWS9nUv     GNf = ff = f! UR                  5         f = f! [         a    Sn[        U SUS9n UR                  5         UR                  S5         GNL! [         aV    [        U S5       n[        R                  " UR                  5       5      S   nS	S	S	5          GM  ! , (       d  f         GN= ff = ff = f! UR                  5         f = f7f)uC  
自定义打开文件函数

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        \/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/paddlex/utils/file_interface.pycustom_openr    !   sB      s{ww~~i((#$7$>$>y$IJJIsW5	IIKIIaLJ JJL	IsW5


	77>>)$$	3:D				! 

IsX6


CJJ4PQQQ " 
		37D				!
% )T*a&~~affh7
CH +**IsX>
	
	 JJL & H IsX>HIIKIIaL) Hi.!#*>>!&&(#;J#G /...HH 

s   AK%E 8A.K'!H A
KH (%FH G<&(G	G<
G%!G<7H 8H ;G<<H  H HKJ80!IJ; J4*(JJ4J8J; 
J0)J4,J8-J; 0J44J88J; ;KK	yaml_pathc                 D    [        U SSS9 n[        R                  " U5      nSSS5        U(       a  [	        W5      nU$ WnU$ ! , (       d  f       N&= f! [         a@    [        U SSS9 n[        R                  " U5      nSSS5         M`  ! , (       d  f        No= ff = f)zread from yaml filer   r   r   Nr
   )r   yaml	full_loadr   dict)r!   to_dictr   yaml_contents       r   read_yaml_filer(   g   s    0)S73t>>$/L 4
 *14%L 7CL 43 0)S51T>>$/L 21110sE   A AA 
AA A B*BB
B	BB	yaml_dictc                    [         R                  R                  5       n[        US-   5      nU   [	        USSS9 nUR
                  " X5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)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3tIIi& 4 
33 
s"   A0AA0
A-	)A00
A>
key_valuesc                 R    [        U 5      nUR                  U5        [        X 5        g)z6update 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                 8    [        U 5      nUR                  5       $ )zget all keys of yaml file)r(   keys)r!   r)   s     r   get_yaml_keysr7      s    y)I>>r4   c                     SnU R                  5       nUSR                  U" 5       5      -  nU[        R                  -  nUSR                  S/5      -  ng)generate_markdown_from_dict z| |z :----: N)r6   joinr   linesep)metricsmkr6   s      r   r9   r9      sJ    	B<<>D$))DF
B"**B#((J<
  Br4   
jsonl_pathc                     [        U S5       nU Vs/ s H  n[        R                  " U5      PM     nnSSS5        U$ s  snf ! , (       d  f       W$ = f)zread from jsonl filer   N)r    jsonloads)r@   r   linejsonl_contents       r   read_jsonl_filerF      sJ    	Z	%6:;ddD)d; 
& < 
&	%s   A >AA
Ac                     [        US5       n[        R                  " X4SU0UD6  SSS5        g! , (       d  f       g= f)zwrite to json filer   ensure_asciiN)r    rB   r-   )contentr@   rH   kwargsr   s        r   write_json_filerK      s0    	Z	%		'ElEfE 
&	%	%s   0
>c                 V   Uc  / OUnUR                  5        H  nX0;  a  [        R                  " SU S35          g[        X   [	        X   5      5      (       d7  [        R                  " SU S[	        X   5       S[	        X   5       35          g[        X   [
        5      (       d  M  [        X   [
        5      (       d  M  X2;  d  M  [        X   X   U5      s  $    [        U R                  5       5      [        UR                  5       5      :w  a  [        R                  " S5        gg)	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
z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   rQ   rQ      s   
 $+"K!!#%MMD%678-,d?3G.HIIMM$SE)G*+,BtO4H/I.JL  })400?/66&"$m&8+ ! $& ?!"c-*<*<*>&??02r4   c                     U b?  [        U 5      S:  a0  U  H)  n[        R                  R                  U5      (       a  M)    g   gg)z1check if dataset valid in path_list for datset_uir   FT)rR   r   r   r   )	path_listr   s     r   check_dataset_validrY      s;    Y!!3D77>>$''  r4   )T)F)N)rM   r   r   ruamel.yamlr+   r#   filelockr   ujsonrB   warning
contextlibr   r    strr(   r%   r/   r3   r7   r9   rF   rK   rQ   rY    r4   r   <module>ra      s      	    
 & ?R ?RJ	c 	' '# ',d ,! F F@cOO@As   A& &B 