
    i7                        S SK Jr  S SK Jr  S SK Jr  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Jr   S SKr\R                  " 5       rS	/rS
 rSS jrS r  SS jrSS jrg! \ a    \
" 5       R#                  S5        Sr N;f = f)    )absolute_import)division)print_functionN)
get_logger)maybe_download_paramsz)Skipping import of the encryption module.F
load_modelc                    [         R                  R                  U 5      (       d   [         R                  " U 5        gg! [         a  nUR
                  [
        R                  :X  aI  [         R                  R                  U 5      (       a%  UR                  SR                  U 5      5         SnAg[	        SR                  U 5      5      eSnAff = f)zL
mkdir if not exists, ignore the exception when multiprocess mkdir together
z/be happy if some process has already created {}zFailed to mkdir {}N)
ospathexistsmakedirsOSErrorerrnoEEXISTisdirwarningformat)r   loggeres      _/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/utils/save_load.py_mkdir_if_not_existr   (   s     77>>$	AKK    	Aww%,,&277==+>+>ELLTR  299$?@@	As   > 
CA"C	/C		Cc                 	   [        5       nU S   nUR                  S5      nUR                  S5      n0 nSn	US:H  =(       a    U S   S   S;  n
U
S	L Gat  U S   S   S
;   a  U$ U S   S   S   nU(       GaQ  [        R                  R	                  [        R                  R                  US5      5      (       ak  [        [        R                  R                  US5      S5       n[        R                  " USS9nSSS5        WR                  S0 5      nSU;   a  US   S-   US'   UR                  SR                  U5      5        Ub  US   S;   a  USS n[        R                  R	                  US-   5      (       a,  [        R                  " US-   5      nUR                  U5        U$ UR                  SR                  U5      5        U$ U(       Ga  UR                  S5      (       a  UR                  SS5      n[        R                  R	                  US-   5      (       d   SR                  U5      5       e[        R                  " US-   5      nUR!                  5       n0 nUR#                  5        GH  u  nnUU;  a1  UR                  SR                  UUR%                  5       5      5        M>  UU   nUR&                  [        R(                  :X  a  S	n	UR&                  UR&                  :w  a  UR+                  UR&                  5      n[-        UR.                  5      [-        UR.                  5      :X  a  UUU'   M  UR                  SR                  UUR.                  UR.                  5      5        GM     UR                  U5        U	(       a  UR                  S5        Ubr  [        R                  R	                  US-   5      (       a+  [        R                  " US-   5      nUR                  U5        O UR                  SR                  U5      5        [        R                  R	                  US -   5      (       aU  [        US -   S5       n[        R                  " USS9nSSS5        WR                  S0 5      nS!US"'   SU;   a  US   S-   US'   UR                  SR                  U5      5        O$U(       a  [1        X5      n	OUR                  S#5        XS$'   U$ ! , (       d  f       GN= f! , (       d  f       N= f)%z0
load model from checkpoint or pretrained_model
Globalcheckpointspretrained_modelFkieArchitecture	algorithmSDMGRTDistillationBackbonezmetric.statesrblatin1)encodingNbest_model_dictepoch   start_epochzresume from {})/\.pdoptz9{}.pdopt is not exists, params of optimizer is not loaded	.pdparams  The {}.pdparams does not exists!z{} not in loaded params {} !zIThe shape of model params {} {} not matched with loaded params shape {} !IThe parameter type is float16, which is converted to float32 when loading.statesg        accztrain from scratch
is_float16)r   getr
   r   r   joinopenpickleloadinfor   paddleset_state_dictr   endswithreplace
state_dictitemskeysdtypefloat16astypelistshapeload_pretrained_params)configmodel	optimizer
model_typer   global_configr   r   r'   r5   is_nlp_modelfstates_dict
optim_dictparamsr@   new_state_dictkeyvalue	pre_values                       r   r   r   8   sj    \F8$M##M2K$(();<OJ& 6.+A++N W ,L t.!+.2BB""^,Z8Gww~~bggll;HII"'',,{ODdKq"(++a("CK L"-//2CR"Hk)5@5IA5MOM2KK(//<=$r?k1"-cr"2K77>>+"899!'[8-C!DJ,,Z8  NNSZZ' ,,%--k2>Kww~~+%
 
 	B-44[A	B 

 [;67%%'
$**,JC& 299#v{{}M sI&..0!
%++-%,,U[[9	EKK D$99&/s#_ffU[[)// -& 	^,KK[  ww~~kH455#[[x)?@
((4OVV# 77>>+	122kI-t4$kk!h? 5)oo.?DO%(OE"+%1<W1E1I.$++K89	+ED
()$.L!c LKJ 54s    S	S,
S),
S:c           
      *   [        5       n[        U5      nUR                  S5      (       a  UR                  SS5      n[        R
                  R                  US-   5      (       d   SR                  U5      5       e[        R                  " US-   5      nU R                  5       n0 nSnUR                  5        GH  nXtR                  5       ;  a"  UR                  SR                  U5      5        M9  X7   R                  [        R                  :X  a  SnX7   R                  XG   R                  :w  a!  X7   R                  XG   R                  5      X7'   [!        XG   R"                  5      [!        X7   R"                  5      :X  a  X7   XW'   M  UR                  SR                  XtU   R"                  XsU   R"                  5      5        GM     U R%                  U5        U(       a  UR'                  S5        UR'                  S	R                  U5      5        U$ )
Nr/   r0   r1   Fz%The pretrained params {} not in modelTzFThe shape of model params {} {} not matched with loaded params {} {} !r2   z load pretrain successful from {})r   r   r>   r?   r
   r   r   r   r<   r:   r@   rB   r   rC   rD   rE   rF   rG   r=   r;   )rJ   r   r   rR   r@   rS   r5   k1s           r   rH   rH      s   \F &D}}[!!||K,77>>{  7)0067  [[+,F!!#JNJkkm__&&NNBII"MNz6>>1!
z:>#7#77#Z..z~/C/CD
JN(()T&*2B2B-CC%+Z"\ccrN00"Rj6F6F " 
(W	
 KK299$?@    c                    [        X#5        [        R                  R                  X&5      nUS:X  a+  [        R                  R                  US5      n	[        X5        [        R
                  " UR                  5       US-   5        US:X  aC  [        R
                  " UR                  5       [        R                  R                  W	S5      5        US   S   S:H  =(       a    US   S   S	;  n
U
S
Lat  [        R
                  " U R                  5       US-   5        UnUS:X  aC  [        R
                  " U R                  5       [        R                  R                  W	S5      5        OUS   S   (       a  U R                  nOU nUS   S   S;   a  UR                  nUR                  R                  R                  U5        [        R                  R                  US5      nUS:X  a%  UR                  R                  R                  W	5        UR                  SS5      nU(       a  [        [        R                  R                  X& S35      S5       n[        R                  " X~5        SSS5        UR!                  SR#                  U5      5        US:w  a  UR                  SS5      n[%        XFXS9  [        US-   S5       n[&        R                  " X~SS9  SSS5        U(       a!  UR!                  SR#                  U5      5        gUR!                  SR#                  U5      5        g! , (       d  f       N= f! , (       d  f       Nh= f) z
save model to the target path
best_accuracy
best_modelr.   zmodel.pdoptr   rL   r   r   r   Tr/   zmodel.pdparamsr   distributedr!   metricsave_model_infoFz
.info.jsonwNzAlready save model info in {}latest	done_flag)rb   r3   wb   )protocolzsave best model is to {}zsave model in {})r   r
   r   r7   r<   saver@   _layersStudentbackbonerJ   save_pretrainedpopr8   jsondumpr;   r   update_train_resultsr9   )rJ   rK   
model_pathr   rI   is_bestprefixkwargsmodel_prefixbest_model_pathrN   metric_prefixarchr_   rO   rb   s                   r   
save_modelrw      s    
+77<<
3L '',,z<@O4
KK	$$&x(?@   "BGGLL-$P	
 .),75@ $VFF#F$L 4E$$&{(BC$_$KK  "BGGLLBR$S
 (M*==DD.!+.2BB<<D++L9\8<_$MM//@jj!2E:O"'',,zXZ+@A3G1IIf  H3:::FGX

;6I V 
mi'	.!F* 
/.55lCD&--l;< HG 
/	.s   L#<L4#
L14
Mc                 D   [         R                  R                  5       S:w  a  g US:  d   e[        R                  R                  U S   S   S5      n/ SQn/ SQn[        R                  R                  U5      (       a,  [        US5       n[        R                  " U5      n	S S S 5        O0 n	U S   S	   U	S
'   U S   R                  SS5      n
U
S:w  aE  [        R                  R                  U
5      n
[        R                  R                  U
5      (       d  Sn
XS'   SU	S'   SU	S'   SU	S'   0 U	S'   [        SUS-   5       H  n0 U	S   SU 3'   M     0 U	S   S'   UW	S'   SU;   Ga  SUS   ;   a	  US   S   nO/SUS   ;   a	  US   S   nOSUS   ;   a	  US   S   nO[        S5      eXS   S   S'   U H  nUS:X  aF  [        (       a;  [        R                  R                  UUS:w  a  U SU 3OU S 35      U	S   S   U'   MO  [        R                  R                  UUS:w  a  U S!U 3OU S 35      U	S   S   U'   M     U H8  n[        R                  R                  US"US#:w  a  S$U 3OS%5      U	S   S   U'   M:     GOV[        US-
  SS&5       H(  nU	S   SU 3   R                  5       U	S   SUS-    3'   M*     SUS   ;   a	  US   S   nO&SUS   ;   a	  US   S   nOSUS   ;   a	  US   S   nOSnXS   SS 3   S'   U H  nUS:X  aI  [        (       a>  [        R                  R                  UUS:w  a  U SU 3OU S 35      U	S   SS 3   U'   MR  [        R                  R                  UUS:w  a  U S!U 3OU S 35      U	S   SS 3   U'   M     U H;  n[        R                  R                  US"US#:w  a  S$U 3OS%5      U	S   SS 3   U'   M=     [        US'5       n[        R                   " X5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       g = f)(Nr   r)   r   save_model_dirztrain_result.json)pdparamspdoptpdstates)inference_configpdmodel	pdiparamszpdiparams.inforpdx_model_name
model_namecharacter_dict_pathr0   
label_dictz	train.log	train_logvisualdl_logzconfig.yamlrI   modelslast_bestrb   r4   r^   	precisionexp_ratezNo metric score found.scorerz   r|   z.encrypted.r3   .	inferencer}   z
inference.zinference.ymlr+   r`   )r<   r]   get_rankr
   r   r7   r   r8   rl   r:   r6   abspathrange
ValueError	encryptedcopyrm   )rI   rq   metric_inforb   last_numtrain_results_pathsave_model_tagsave_inference_tagfptrain_resultslabel_dict_pathimetric_scoretags                 r   rn   rn     s   ""$)q==x)*,? 7NW	ww~~())$c*b IIbMM +* &,X&67G&Hl# *../DbIb  ggooo>O77>>/22"$&5l#%0k"(*n%"/h"$hq(Q,'A35M(#eA3K0 (*,h'!*M+K))&x07LK11&x0=L;x00&x0<L5663?h'0!Cj YY79ww|| *, "(+cU3 &xw/8h'/4 8:ww||),
):vhau%6('@R8h'/4 " &C3577<<&)-?&?*SE"_4M(#F+C0 & x!|Q+A7DX7Ns8df (#eAE7O4 , K))&x07LK11&x0=L;x00&x0<LL8Dh%s,W5!Cj YY<>GGLL *, "(+cU3 &xw/=h'%s4S9 =?GGLL),
):vhau%6('@R=h'%s4S9 " &C8:&)-?&?*SE"_9M(#eA3K05 & 
 #	&"		-$ 
'	&m +*l 
'	&s   
O?P?
P
P)Ndet)Fppocr)F   )
__future__r   r   r   r   r
   r9   rl   r<   ppocr.utils.loggingr   ppocr.utils.networkr   
encryptionis_encryption_neededr   ImportErrorr   __all__r   r   rH   rw   rn    rY   r   <module>r      s    '  %  	    * 5//1I
 .A gT'` B=Jb%a  LDEIs   A$ $BB