
    |-je                        d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* dd	l+m,Z, d
eddfdZ-i deg fdeg fdeg fdeg fdeefdeefdeefdeefdeefdeefde!e fde!e fdeefdeg fdeg fdeg fdeg feg fe&e%feg feg feefdZ.d Z/g d!Z0d" Z1d# Z2d$ Z3 G d% d          Z4dS )&a  Weight converter: pdparams -> safetensors.

Conversion flow:
  1. paddle.load() -> state dict with OLD PaddleOCR/PaddleDetection key names
  2. Rename BatchNorm keys: _mean -> running_mean, _variance -> running_var
  3. Apply per-architecture regex key mappings (old keys -> HF keys)
  4. Transpose linear weight keys (Paddle [in, out] -> HF [out, in])
  5. Save as safetensors via safetensors.numpy.save_file()
    N)Path   )logging)AttrDict   )!CHART2TABLE_ADDED_TOKENSCHART2TABLE_GENERATION_CONFIGCHART2TABLE_SPECIAL_TOKENS_MAPCHART2TABLE_TOKENIZER_CONFIGMOBILE_DET_DROP_PREFIXESPP_CHART2TABLE_DROP_PREFIXESPP_CHART2TABLE_MAPPINGPP_DOCLAYOUTV2_DROP_PREFIXESPP_DOCLAYOUTV2_MAPPINGPP_FORMULANET_MAPPINGPPLCNET_MAPPINGPPOCRV5_MOBILE_DET_MAPPINGPPOCRV5_MOBILE_REC_MAPPINGPPOCRV5_SERVER_DET_MAPPINGPPOCRV5_SERVER_REC_MAPPINGPREPROCESSOR_CONFIGSREC_DROP_PREFIXESRTDETR_MAPPINGSERVER_DET_DROP_PREFIXESSERVER_REC_DROP_PREFIXESSLANET_DROP_PREFIXESSLANET_MAPPINGSLANEXT_DROP_PREFIXESSLANEXT_MAPPINGUNIMERNET_GENERATION_CONFIGUNIMERNET_PROCESSOR_CONFIGUNIMERNET_TOKENIZER_CONFIGUVDOC_DROP_PREFIXESUVDOC_MAPPINGapply_key_mappingbuild_inference_metaload_character_dictrename_bn_keys)MODEL_CONFIGSconfigreturnWeightConverterc                      t          |           S )z-Build a weight converter from PaddleX config.)r,   )r*   s    e/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddlex/modules/base/weight_converter.pybuild_weight_converterr/   E   s    6"""    zPP-LCNet_x1_0_doc_orizPP-LCNet_x1_0_table_clszPP-LCNet_x0_25_textline_orizPP-LCNet_x1_0_textline_orizPP-OCRv5_mobile_detzPP-OCRv5_server_detPP-OCRv5_mobile_recPP-OCRv5_server_recSLANetSLANet_plusSLANeXt_wiredSLANeXt_wirelesszPP-DocLayoutV2zPP-DocLayoutV3zRT-DETR-L_wired_table_cell_detz!RT-DETR-L_wireless_table_cell_detzPP-DocLayout_plus-L)zPP-DocBlockLayoutUVDocPP-FormulaNet-LPP-FormulaNet_plus-LzPP-Chart2Table)r8   r9   )Afcchannelwiseout_projq_projk_projv_projo_proj	gate_projup_proj	down_projlm_headlinear_1linear_2linear1linear2zattn.qkvzmlp.lin1zmlp.lin2z	attn.projz	mixer.qkvz
mixer.projzself_attn.qkvzself_attn.projection
mapper_crp
mapper_scaz.mapper.
txt_mappertxt_pooled_mapperclip_img_mapper	kv_mapperclip_mappermm_projector_varyenc_to_dec_proj
score_headenc_score_headdec_score_head	bbox_headenc_bbox_headdec_bbox_headmask_query_head
enc_outputquery_pos_headdec_global_pointerdec_order_headattention_weightssampling_offsets
value_projoutput_projz	head.headctc_headconv_reduce_channelzstructure_attention_cell.scorezstructure_attention_cell.i2hzstructure_attention_cell.h2hzstructure_generator.0.zstructure_generator.1.spatial_projzattention.self.queryzattention.self.keyzattention.self.valuezintermediate.densez.output.denserelative_headlabel_features_projectionpos_projc                 D     t           fdt          D                       S )z@Check if a 2D weight tensor should be transposed (linear layer).c              3       K   | ]}|v V  	d S N ).0subkeys     r.   	<genexpr>z$_should_transpose.<locals>.<genexpr>   s'      ;;cscz;;;;;;r0   )any_TRANSPOSE_SUBSTRINGS)rm   s   `r.   _should_transposerq      s'    ;;;;%:;;;;;;r0   c                 \   ddl }i }|                                 D ]\  }}t          |d          rZddl}|j        |j        |j        fv r|                    |j                  }|	                                                                 }n-t          ||j                  r|}n|                    |          }d|v rd|v sd|v r|                    d          }d|v sd	|v rd
|v r|                                }|j        d         dz  }|d|         ||                    dd          <   ||d|z           ||                    dd          <   |d|z  d         ||                    dd          <   n}d|v ry|j        d         dz  }|d|         ||                    d	d          <   ||d|z           ||                    d	d          <   |d|z  d         ||                    d	d          <   |j        dk    r'd|vr#t%          |          r|                                }|||<   |S )a\  Preprocess Paddle tensors for safetensors output.

    Converts to numpy, transposes linear weight tensors from Paddle [in, out]
    to HF [out, in] format, reshapes channelwise parameters, and splits
    fused in_proj weights into separate q/k/v.

    Applied on OLD key names before regex key mapping.
    Returns dict of {key: numpy_array}.
    r   Nnumpyr;   gammabeta)r   r   r   in_proj_weightin_proj_biasweightr   zq_proj.weight   zk_proj.weightzv_proj.weightbiaszq_proj.biaszk_proj.biaszv_proj.bias)rs   itemshasattrpaddledtypebfloat16float16astypefloat32cpu
isinstancendarrayarrayreshape	transposeshapereplacendimrq   )
state_dictnpresultrm   tensorr~   	np_weight
split_sizes           r.   _preprocess_tensorsr      s    F!'')) ,  , V67## 		)MMM|@@@v~66

**,,II
++ 	)II((ICW^^v}}!))-88Is""n&;&;3%//11	&_Q/14
IRZKJs{{#3_EEF JSZ/Js{{#3_EEF JS
N$$Js{{#3_EEFF 3&_Q/14
ENZKFs{{>=AAB FOZ/Fs{{>=AAB FO
N$$Fs{{>=AAB >Q6#4#49J39O9O#4!++--IsMr0   c                    t          |           }|                                r;|j                            d          st	          d|           t          |          S |                                rg d}|D ],}||z  }|                                rt          |          c S -t          |	                    d                    }t          |          dk    rt          |d                   S t          |          dk    r"d |D             }t	          d| d	| d
          t          d|           t          d|           )a  Resolve input_path to a concrete .pdparams file.

    Accepts a direct .pdparams file path or a directory containing one.
    Directory resolution checks: model_state.pdparams, inference.pdparams,
    best_model.pdparams, best_accuracy.pdparams, or the single .pdparams file.
    z	.pdparamsz.input_path file must end with .pdparams, got: )zmodel_state.pdparamszinference.pdparamszbest_model.pdparamszbest_accuracy.pdparamsz
*.pdparamsr   r   c                     g | ]	}|j         
S rj   )name)rk   fs     r.   
<listcomp>z'_resolve_input_path.<locals>.<listcomp>  s    444QV444r0   z"Multiple .pdparams files found in z: z%. Please specify the exact file path.z'No .pdparams files found in directory: zinput_path does not exist: )r   is_filer   endswith
ValueErrorstris_direxistslistgloblenFileNotFoundError)
input_pathp
candidatesr   	candidatepdparams_filesnamess          r.   _resolve_input_pathr      s    	ZAyy{{ v{++ 	SQaQQRRR1vvxxzz S
 
 

  	& 	&DDI!! &9~~%%%& aff\2233~!##~a()))  1$$44^444E6Q 6 6% 6 6 6  
 $$Qa$Q$QRRR
=!==
>
>>r0   c                   f    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )r,   z8Converts Paddle .pdparams weights to safetensors format.c                    |j         j        | _        |j        t	          t
                    rj        nd	fd	| _        |                     d          | _        |                     d          | _	        | j        t          d          | j	        t          d          | j        t          vrSd                    t          t                                                              }t          d| j         d|           t          | j                                                  | _        |                                 | _        d S )
Nc                 &    t          | |          S ri   )getattr)kdconvert_configs     r.   <lambda>z*WeightConverter.__init__.<locals>.<lambda>'  s    7>1a#@#@ r0   r   
output_dirzdPdparams2safetensors.input_path is required. Specify a .pdparams file or a directory containing one.z,Pdparams2safetensors.output_dir is required.z, zModel 'zJ' is not supported for pdparams2safetensors conversion. Supported models: ri   )Globalmodel
model_namePdparams2safetensorsr   dictget_getr   r   r   _MODEL_REGISTRYjoinsortedkeysr   r   _input_is_dir_load_user_configs_user_configs)selfr*   	supportedr   s      @r.   __init__zWeightConverter.__init__   sN    --4 .$//AN@@@@@ 		 ))L11))L11?"J   ?"KLLL?/11		&)=)=)?)?"@"@AAIR$/ R RFOR R  
 "$/2299;;!4466r0   c           	         | j         st          j        d| j                   i S ddlt          | j                  }i }dd fdd fdfd	ffD ]\  }}||z  }|                                rOt          |d
          5 } ||          ||<   ddd           n# 1 swxY w Y   t          j        d|            mt          j	        | d| d| j         d           |S )z5Load user-provided config files from input directory.zDInput is a single pdparams file. Using official config files for %s.r   Nconfig.jsonc                 *    t          j        |           S ri   jsonloadr   s    r.   r   z4WeightConverter._load_user_configs.<locals>.<lambda>N  s    dill r0   preprocessor_config.jsonc                 *    t          j        |           S ri   r   r   s    r.   r   z4WeightConverter._load_user_configs.<locals>.<lambda>O  s    49Q<< r0   inference.ymlc                 .                         |           S ri   )	safe_load)r   yamls    r.   r   z4WeightConverter._load_user_configs.<locals>.<lambda>P  s    q(9(9 r0   utf-8encodingzLoaded user config:  not found in z. Using official default for .)
r   r   infor   r   r   r   r   openwarning)r   	input_diruser_configsfnameloaderfpathr   r   s          @r.   r   z"WeightConverter._load_user_configs>  s   ! 	L6  
 I))	 223')?)?@9999:
 	 	ME6
 %E||~~ %'222 4a*0&))L'4 4 4 4 4 4 4 4 4 4 4 4 4 4 4;E;;<<<< E EI E E26/E E E   
 s   >BB	 B	c                    ddl m} t          | j                 \  }}|                     ||          }t          j        | j        d           |                     |           | 	                                 | 
                                 |                                  | j        |v r|                                  | j        t          v r|                                  t          j        d| j                    dS )z/Execute the pdparams -> safetensors conversion.r   )PP_CHART2TABLE_MODELST)exist_okz&Conversion complete. Output saved to: N)"inference.models.doc_vlm.constantsr   r   r   _convert_weightsosmakedirsr   _save_safetensors_save_model_config_save_preprocessor_config_save_inference_yml_save_llm_configPP_FORMULANET_MODELS_save_pp_formulanet_assetsr   r   )r   r   key_mappingdrop_prefixesnumpy_sds        r.   convertzWeightConverter.convert_  s    OOOOOO%4T_%E"]((mDD
DOd3333x(((!!!&&(((  """?333!!###?222++---OdoOOPPPPPr0   c                    ddl }t          | j                  }t          j        d|            |                    |          }r=fd|D             }|D ]}||= |r%t          j        dt          |           d           t          |          }t          |          }|rt          ||          }nt          j
        d| j         d           |                     |           |S )	z@Load pdparams and convert to numpy state dict with HF key names.r   NzLoading weights from: c                 L    g | ]t          fd D                        S )c              3   B   K   | ]}                     |          V  d S ri   )
startswith)rk   r   r   s     r.   rn   z>WeightConverter._convert_weights.<locals>.<listcomp>.<genexpr>  s-      ,T,TQ\\!__,T,T,T,T,T,Tr0   )ro   )rk   r   r   s    @r.   r   z4WeightConverter._convert_weights.<locals>.<listcomp>~  sL       ,T,T,T,Tm,T,T,T)T)T  r0   zDropped z keys not needed for inferencezNo key mapping defined for z). Keys will be saved as-is from pdparams.)r~   r   r   r   r   r   r   r(   r   r%   r   r   _postprocess_weights)	r   r   r   r~   resolved_pathr   droppedr   r   s	     `      r.   r   z WeightConverter._convert_weightsu  s5   +DO<<=m==>>>[[//
 	V   %  G  " "qMM VTGTTTUUU#J//
&z22 	(;??HHO:do : : :  
 	!!(+++r0   c           	         ddl }t          j        | j        i           }d}||v r|                    d          dk    r|                    di           }t	          |          dz   }||         j        d         }||k     rx|                    ||z
  ||         j        d         f||         j                  }|                    ||         |gd	          ||<   t          j
        d
| d| d| d           d}	|	|v r{|                    d          dk    rb|                    dd          }
||	         j        d         |
k    r5||	                                         ||	<   t          j
        d|	 d           |                    d          dk    rPd |D             }d}|D ]#}||vr|                    d          ||<   |dz  }$|rt          j
        d| d           dS dS dS )z:Apply model-specific post-processing to converted weights.r   Nz"model.denoising_class_embed.weight
model_typert_detrid2labelr   )r   )axiszPadded z from z to z (added background class)zlm_head.weightpp_chart2table
vocab_sizei4Q zReverted transpose on z (tied embedding, not linear)c                     g | ]B}|                     d           |                    d          ,|                    d d          CS )z.running_meanzmodel.backbone.z.num_batches_tracked)r   r   r   )rk   r   s     r.   r   z8WeightConverter._postprocess_weights.<locals>.<listcomp>  s`       ::o.. 89||DU7V7V		/+ABB  r0   zAdded z num_batches_tracked keys)rs   r)   r   r   r   r   zerosr   concatenater   r   r   int64)r   r   r   r*   	embed_keyr   expected_sizecurrent_sizepadlm_head_keyr   nbt_keysaddedr   s                 r.   r   z$WeightConverter._postprocess_weights  s   "4?B778	  VZZ%=%=%J%Jzz*b11HMMA-M#I.4Q7Lm++hh"\18I3F3LQ3OP"9-3    ')nni(#. '5 ' '# @i @ @| @ @$@ @ @   '(""vzz,'?'?CS'S'SL&99J$*1-;;(0(=(G(G(I(I%4[ 4 4 4  
 ::l##y00 !  H
 E  H$$"$((1++HQKQJE HFeFFFGGGGG 10H Hr0   c                     ddl m} t          j                            | j        d          } |||           t          j        d|            dS )z+Save numpy state dict as model.safetensors.r   )	save_filezmodel.safetensorszSaved model.safetensors to: N)safetensors.numpyr
  r   pathr   r   r   r   )r   r   r
  out_paths       r.   r   z!WeightConverter._save_safetensors  s]    //////7<<1DEE	(H%%%>H>>?????r0   c                 h   | j                             dt          j        | j        i                     }t          j                            | j        d          }t          |dd          5 }t          j
        ||dd           ddd           n# 1 swxY w Y   t          j        d	|            dS )
u7   Save config.json — user-provided or official default.r   wr   r   rz   Findentensure_asciiNzSaved config.json to: )r   r   r)   r   r   r  r   r   r   r   dumpr   r   r   datar  r   s       r.   r   z"WeightConverter._save_model_config  s    !%%dor22
 
 7<<??(C'222 	=aIdAae<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=8h8899999s   +BBBc                    | j         t          v rdS d| j        v r| j        d         }nIt          t	          j        | j         i                     }| j         dv rdgt                      z   dgz   |d<   t          j        	                    | j
        d          }t          |dd	          5 }t          j        ||d
d           ddd           n# 1 swxY w Y   t          j        d|            dS )uD   Save preprocessor_config.json — user-provided or official default.Nr   r1   r2   blank character_listr  r   r   rz   Fr  z#Saved preprocessor_config.json to: )r   r   r   r   r   r   r'   r   r  r   r   r   r   r  r   r   r  s       r.   r   z)WeightConverter._save_preprocessor_config  s7   ?222 F%);;;%&@ADD,0"EEFFD"PPP*15H5J5J)JcU)R%&7<<1KLL(C'222 	=aIdAae<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=E8EEFFFFFs   (CCCc                    ddl }d| j        v r| j        d         }ndd| j        ii}|                    t	          | j                             | j        dv r&t                      |                    di           d<   nU| j        t          v rGt          t                    }d	|d
<   | 
                                |d|                    di           d<   t          j                            | j        d          }t          |dd          5 }|                    ||dd           ddd           n# 1 swxY w Y   t#          j        d|            dS )u9   Save inference.yml — user-provided or official default.r   Nr   r   r   r  PostProcesscharacter_dictVariableDonutProcessorprocessor_class)fast_tokenizer_filetokenizer_config_filer  r   r   FT)default_flow_styleallow_unicodezSaved inference.yml to: )r   r   r   updater&   r'   
setdefaultr   r   r"   _load_unimernet_fast_tokenizerr   r  r   r   r   r  r   r   )r   r   r  tokenizer_configr  r   s         r.   r   z#WeightConverter._save_inference_yml  s   d000%o6DD|T_=>DKK,T_==>>>"PPP ()) r22$  $888 $((B#C#C 6N !23+/+N+N+P+P-=H Hr223CD
 7<<AA(C'222 	aII#("	    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:::;;;;;s   	D//D36D3c           	      |   ddl }|                                 }t          j                            | j        d          }|                    ||           t          j        d|            t          t          t          t          d}|                                D ] \  }}| j        rt          | j                  |z  }|                                r;t%          j        t)          |d                    }t          j        d|            n,|}t          j        | d	| j         d
| j         d           n|}t          j                            | j        |          }	t)          |	dd          5 }
t%          j        ||
dd           ddd           n# 1 swxY w Y   t          j        d| d|	            "dS )zSave tokenizer and generation config for Chart2Table models.

        Outputs: qwen.tiktoken, added_tokens.json, generation_config.json,
        special_tokens_map.json, tokenizer_config.json.
        r   Nqwen.tiktokenzCopied qwen.tiktoken to: )zadded_tokens.jsongeneration_config.jsonzspecial_tokens_map.jsontokenizer_config.jsonr   r   zLoaded user tokenizer config: r   . Using default for r   r  rz   Fr  Saved  to: )shutil_resolve_tiktoken_sourcer   r  r   r   copy2r   r   r   r	   r
   r   r|   r   r   r   r   r   r   r   r   r   r  )r   r/  tiktoken_srctiktoken_dst_TOKENIZER_DEFAULTSr   default_datasrcr  r  r   s              r.   r   z WeightConverter._save_llm_config  s8    	 4466w||DO_EE\<000???@@@ ":&C'E%A	
 
 $7#<#<#>#> 	: 	:E<! $4?++e3::<< 9T#%@%@%@AADL!G#!G!GHHHH'DO  @ @ @ @-1_@ @ @   
 $w||DOU;;Hhg666 A!	$!%@@@@A A A A A A A A A A A A A A AL8%88h889999%	: 	:s   0FF	F	c                 v   | j         rWt          | j                  dz  }|                                rt	          |          S t          j        d| j         d           ddlm} t          |          dz  | j	         dz  dz  }|                                rt	          |          S t          d| d	          )
z.Find qwen.tiktoken for Chart2Table conversion.r)  zqwen.tiktoken not found in '. Falling back to official model cache.r   	CACHE_DIRofficial_models_safetensorszWqwen.tiktoken not found. For single-file input, ensure the official model is cached at ze (run inference once to download). For directory input, include qwen.tiktoken in the input directory.r   r   r   r   r   r   r   utils.cacher:  r   r   r   r6  r:  
cache_paths       r.   r0  z(WeightConverter._resolve_tiktoken_source<  s     	t''/9Czz||  3xxO8do 8 8 8   	-,,,,, OO .../  	  	#z??"R",R R R
 
 	
r0   c                    | j         rWt          | j                  dz  }|                                rt	          |          S t          j        d| j         d           ddlm} t          |          dz  | j	         dz  dz  }|                                rt	          |          S t          d| d	| j	         d
          )u  Resolve filesystem path to tokenizer.json (PP-FormulaNet fast tokenizer).

        Resolution chain (mirrors :meth:`_resolve_tiktoken_source`):
            input dir → ~/.paddlex/official_models/{name}_safetensors/tokenizer.json
            → FileNotFoundError
        tokenizer.jsonztokenizer.json not found in r8  r   r9  r;  r<  zXtokenizer.json not found. For single-file input, ensure the official model is cached at z (run `create_model('zs', engine='paddle_dynamic')` once to download). For directory input, include tokenizer.json in the input directory.r=  r?  s       r.   #_resolve_unimernet_tokenizer_sourcez3WeightConverter._resolve_unimernet_tokenizer_sourceY  s     	t''*::Czz||  3xxO8t 8 8 8  
 	-,,,,, OO .../  	  	#z??" ",   "o     
 
 	
r0   c                     |                                  }t          j        d|            t          |d          5 }t	          j        |          cddd           S # 1 swxY w Y   dS )zKLoad tokenizer.json content as a parsed dict (for inference.yml embedding).zLoaded tokenizer.json: r   r   N)rC  r   r   r   r   r   )r   r  r   s      r.   r&  z.WeightConverter._load_unimernet_fast_tokenizer|  s    77995t55666$))) 	 Q9Q<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   AA"%A"c           	         ddl }|                                 }t          j                            | j        d          }|                    ||           t          j        d|            t          t          t          d}|                                D ]:\  }}| j        rt          | j                  |z  }|                                rUt#          |d          5 }t%          j        |          }	ddd           n# 1 swxY w Y   t          j        d|            n,|}	t          j        | d	| j         d
| j         d           n|}	t          j                            | j        |          }
t#          |
dd          5 }t%          j        |	|dd           ddd           n# 1 swxY w Y   t          j        d| d|
            <dS )u  Save HF-style assets for PP-FormulaNet (transformers-engine compatible).

        Outputs ``processor_config.json``, ``generation_config.json``,
        ``tokenizer_config.json`` (all hardcoded), and copies ``tokenizer.json``
        from the input dir or official_models cache. The tokenizer JSON is also
        already embedded in inference.yml (read by UniMERNetDecode) — saving the
        standalone file lets HF AutoTokenizer load the converted directory.
        r   NrB  zCopied tokenizer.json to: )zprocessor_config.jsonr*  r+  r   r   zLoaded user asset: r   r,  r   r  rz   Fr  r-  r.  )r/  rC  r   r  r   r   r1  r   r   r!   r    r"   r|   r   r   r   r   r   r   r   r   r   r  )r   r/  tokenizer_srctokenizer_dst_ASSET_DEFAULTSr   r5  r6  r   r  r  s              r.   r   z*WeightConverter._save_pp_formulanet_assets  s    	 @@BBT_6FGG]M222A-AABBB &@&A%?
 

 $3#8#8#:#: 	: 	:E<! $4?++e3::<< 	cG444 ,#y||, , , , , , , , , , , , , , ,L!<s!<!<===='DO  @ @ @ @-1_@ @ @   
 $w||DOU;;Hhg666 A!	$!%@@@@A A A A A A A A A A A A A A AL8%88h889999'	: 	:s$   C>>D	D	F))F-	0F-	N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r   r0  rC  r&  r   rj   r0   r.   r,   r,     s        BB7 7 7<  BQ Q Q,  >2H 2H 2Hh@ @ @	: 	: 	:G G G&#< #< #<J': ': ':R
 
 
:!
 !
 !
F     *: *: *: *: *:r0   )5rL  r   r   pathlibr   utilsr   utils.configr   utils.pdparams2safetensorsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   'utils.pdparams2safetensors.model_configr)   r/   r   r   rp   rq   r   r   r,   rj   r0   r.   <module>rR     s     				             $ $ $ $ $ $" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "F C B B B B B#8 #0A # # # #or24 "OR#8 !?B"7	
 68PQ 68PQ 68IJ 68PQ ~34 N$89 o'<= *?@ -/KL ~r* %~r&:  (.")=!" NB/#$ )"-01-r22B7-/KL-  6 C D D D N< < <
; ; ;|&? &? &?TP: P: P: P: P: P: P: P: P: P:r0   