
    +hU                         S SK Jr  SSKJrJr  SSKJr  SSKJr  SSK	J
r
JrJr  SSKJr  \
" 5       (       a   \R                  " \5      r " S S	5      rg
)    )nullcontext   )ImageProjectionMultiIPAdapterImageProjection)load_model_dict_into_meta)_LOW_CPU_MEM_USAGE_DEFAULT)is_accelerate_availableis_torch_versionlogging)empty_device_cachec                   <    \ rS rSrSr\4S jr\4S jr\4S jrSr	g)FluxTransformer2DLoadersMixin    z0
Load layers into a [`FluxTransformer2DModel`].
c                    U(       a-  [        5       (       a  SSKJn  OSn[        R	                  S5        USL a  [        SS5      (       d  [        S5      e0 nS nU(       a  WO[        nS	U;   a  S
nUS	   R                  S   S:X  a  SnUS	   R                  S   nUS	   R                  S   U-  n	U" 5          [        U	UUS9nS S S 5        UR                  5        H  u  pU
R                  SS5      nXU'   M     U(       d  UR                  USS9  U$ SU R                  0n[        XTXR                  S9  [!        5         U$ ! , (       d  f       N= f)Nr   init_empty_weightsF,  Cannot initialize model with low cpu memory usage because `accelerate` was not found in the environment. Defaulting to `low_cpu_mem_usage=False`. It is strongly recommended to install `accelerate` for faster and less memory-intense model loading. You can do so with: 
```
pip install accelerate
```
.T>=1.9.0~Low memory initialization requires torch >= 1.9.0. Please either update your PyTorch version or set `low_cpu_mem_usage=False`.proj.weight         )cross_attention_dimimage_embed_dimnum_image_text_embedsprojimage_embeds)strict 
device_mapdtype)r	   
accelerater   loggerwarningr
   NotImplementedErrorr   shaper   itemsreplaceload_state_dictdevicer   r%   r   )self
state_dictlow_cpu_mem_usager   updated_state_dictimage_projectioninit_contextr   clip_embeddings_dimr   keyvaluediffusers_namer$   s                 \/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/loaders/transformer_flux.py+_convert_ip_adapter_image_proj_to_diffusersIFluxTransformer2DLoadersMixin._convert_ip_adapter_image_proj_to_diffusers%   sm   &((9 %*!2 $-=dG-L-L%. 
  ->)KJ&$%!-(..q1U:(*%",]";"A"A""E",]";"A"A!"DH]"]#2(;$7*?$    )..0
!$V^!D5:>2 1 !,,-?,M  	 dkk*J%&6Waisist %  s   7E
Ec                    SSK Jn  U(       a-  [        5       (       a  SSKJn  OSn[
        R                  S5        USL a  [        SS	5      (       d  [        S
5      e0 nSnU(       a  WO[        nU R                  R                  5        GH  nUR                  S5      (       a$  U R                  U   R                  n	U	" 5       XX'   M>  U R                  R                  n
U R                   nUn	/ nU H0  nSUS   ;   d  M  SnUS   S   R"                  S   S:X  a  SnX/-  nM2     U" 5          U	" UU
SUU R$                  U R&                  S9XX'   S S S 5        0 n[)        U5       H  u  nnUR+                  SU S3US   U S3   05        UR+                  SU S3US   U S3   05        UR+                  SU S3US   U S3   05        UR+                  SU S3US   U S3   05        M     U(       d  XX   R-                  U5        O(SU R&                  0nU R$                  n[/        XX   UUUS9  US-  nGM     [1        5         U$ ! , (       d  f       N= f)Nr   )FluxIPAdapterAttnProcessorr   r   Fr   Tr   r   r   single_transformer_blocksr   
image_projr   r   r   g      ?)hidden_sizer   scale
num_tokensr%   r.   zto_k_ip.z.weight
ip_adapterz.to_k_ip.weightzto_v_ip.z.to_v_ip.weightz.biasz.to_k_ip.biasz.to_v_ip.biasr"   r#      )$models.transformers.transformer_fluxr=   r	   r&   r   r'   r(   r
   r)   r   attn_processorskeys
startswith	__class__configjoint_attention_dim	inner_dimr*   r%   r.   	enumerateupdater-   r   r   )r/   state_dictsr1   r=   r   
attn_procskey_idr4   nameattn_processor_classr   r@   r   r0   num_image_text_embed
value_dictir$   r%   s                      r9   %_convert_ip_adapter_attn_to_diffusersCFluxTransformer2DLoadersMixin._convert_ip_adapter_attn_to_diffusersY   s   U&((9 %*!2 $-=dG-L-L%.  
->)K((--/D:;;'+';';D'A'K'K$#7#9
 &*kk&E&E#"nn'A$(*%"-J$
<(@@/0,%l3MBHHKuT350-1GG- #. "^';$/,?!#8"jj#{{(J$ $  
%.{%;MAz%%!G'<j>VZ`YaapWq>r&st%%!G'<j>VZ`YaapWq>r&st%%!E':J|<TX^W__lUm<n&op%%!E':J|<TX^W__lUm<n&op	 &< )$44Z@"$dkk!2J JJE-j.>
Waino!S 0V 	9 $^s   *"I
I	c                 "   [        U[        5      (       d  U/nS U l        U R                  XS9nU R	                  U5        / nU H'  nU R                  US   US9nUR                  U5        M)     [        U5      U l        SU R                  l	        g )N)r1   r?   ip_image_proj)

isinstancelistencoder_hid_projrW   set_attn_processorr:   appendr   rJ   encoder_hid_dim_type)r/   rO   r1   rP   image_projection_layersr0   image_projection_layers          r9   _load_ip_adapter_weights6FluxTransformer2DLoadersMixin._load_ip_adapter_weights   s    +t,,&-K $???q

+"$%J%)%U%U<(<M &V &" $**+AB	 & !>>U V+:(    )r]   N)
__name__
__module____qualname____firstlineno____doc__r   r:   rW   rc   __static_attributes__ re   r9   r   r       s.     Ys 2 h Tn GR Ga ;re   r   N)
contextlibr   models.embeddingsr   r   models.model_loading_utilsr   models.modeling_utilsr   utilsr	   r
   r   utils.torch_utilsr   
get_loggerrf   r'   r   rl   re   r9   <module>rt      sK    # C > F F 2 			H	%S; S;re   