
    +h                     ~    S r SSKrSSKJr  SSKJrJr  SSKJ	r	  SSK
Jr  \R                  " \5      rS rS rS
S	 jrg)z!PyTorch - Flax general utilities.    N)flatten_dictunflatten_dict)PRNGKey   )loggingc           	          Sn[         R                  " X5      nU H3  nU R                  USR                  UR	                  S5      5      5      n M5     U $ )Nz	\w+[.]\d+_.)refindallreplacejoinsplit)keyregexpatspats       f/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/models/modeling_flax_pytorch_utils.py
rename_keyr      sE    E::e!Dkk#sxx		#78 J    c                    U SS S-   n[        U 5      S:  aj  S Hd  u  pEU S   U:X  d  M  U S   nUS:X  a  SOUnU SS XV4-   nX2;   d  M/  X#   R                  UR                  R                  :X  d   eX1R                  4s  $    [        S	 U  5       5      (       a,  U S   S
:X  a#  U SS S-   U;  a  U SS S-   U;   a  U SS S-   nX14$ U S   S;   a  U SS S-   U;   a  U SS S-   nX14$ U S   S:X  a  U SS S-   U;   a  U SS S-   n X14$ U SS S-   nU S   S:X  a'  UR                  S:X  a  UR                  SSSS5      nX14$ U SS S-   nU S   S:X  a  UR                  nX14$ U SS S-   nU S   S:X  a  X14$ U SS S-   nU S   S:X  a  X14$ X4$ )zYRename PT weight names to corresponding Flax weight names and reshape tensor if necessaryN)scale   ))to_out_0	proj_attn)to_kr   )to_vvalue)to_qqueryweightkernelc              3   ,   #    U  H
  nS U;   v   M     g7f)normN ).0str_s     r   	<genexpr>0rename_key_and_reshape_tensor.<locals>.<genexpr>B   s     4|tFdN|s   bias)r,   )r#   gamma)	embedding)r$      r      r   )r#   r-   beta)lenshapeTanyndim	transpose)pt_tuple_key	pt_tensorrandom_flax_state_dictrenamed_pt_tuple_keyrename_from	rename_toweight_names          r   rename_key_and_reshape_tensorr?   ,   sa    (,z9 <1'
"K B;.*2.*5*Ah{'3CR'8I;S'S$'A1GMMQZQ\Q\QbQbbbb/<<'
 	4|444"'#2*2HH#2+/EE+CR0:=#..	b	0	0\#25F5SWm5m+CR0:=#.. B8#Sb(9N(JNd(d#CR(>9#.. (,{:B8#	!(;''1a3	#.. (,{:B8#KK	#.. (,{:B7"#.. (,y8B6!#..""r   c           
      6   U R                  5        VVs0 s H  u  p4X4R                  5       _M     n nnUR                  [        U5      5      n[	        U5      n0 nU R                  5        H  u  p[        U5      n
[        U
R                  S5      5      n[        XU5      u  pX;   aG  UR                  Xl   R                  :w  a+  [        SU SXl   R                   SUR                   S35      e[        R                  " U5      X|'   M     [        U5      $ s  snnf )Nr
   z1PyTorch checkpoint seems to be incorrect. Weight z was expected to be of shape z	, but is )itemsnumpyinit_weightsr   r   r   tupler   r?   r3   
ValueErrorjnpasarrayr   )pt_state_dict
flax_modelinit_keykvrandom_flax_paramsr:   flax_state_dictpt_keyr9   renamed_pt_keyr8   flax_keyflax_tensors                 r   "convert_pytorch_state_dict_to_flaxrS   k   s   .;.A.A.CD.CdaQ	\.CMD $001BC)*<=O +002#F+^11#67 !>lWm n-  $:$D$J$JJ GxOl-7==>iHYHYGZZ[]  %(KK$<! 3" /**5 Es   D)*   )__doc__r   	jax.numpyrB   rF   flax.traverse_utilr   r   
jax.randomr   utilsr   
get_logger__name__loggerr   r?   rS   r'   r   r   <module>r]      s;    ( 	  ;   
		H	%<#~+r   