Ë
    (täiÓ²  ã                   óR  — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	Z	d dl
Z
d dlmc mZ d dlmZ ddlmZmZmZmZmZmZ dd	lmZ dd
lmZ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' ddl(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0 ddlm1Z1  e'jd                  e3«      Z4dZ5dZ6 G d„ d«      Z7y)é    N)Údefaultdict)Únullcontext)ÚPath)ÚCallable)Úvalidate_hf_hub_argsé   )ÚImageProjectionÚIPAdapterFaceIDImageProjectionÚ"IPAdapterFaceIDPlusImageProjectionÚIPAdapterFullImageProjectionÚIPAdapterPlusImageProjectionÚMultiIPAdapterImageProjection)Úload_model_dict_into_meta)Ú_LOW_CPU_MEM_USAGE_DEFAULTÚload_state_dict)
ÚUSE_PEFT_BACKENDÚ_get_model_fileÚconvert_unet_state_dict_to_peftÚ	deprecateÚget_adapter_nameÚget_peft_kwargsÚis_accelerate_availableÚis_peft_versionÚis_torch_versionÚlogging)Úempty_device_cacheé   ©Ú#_func_optionally_disable_offloading)ÚLORA_WEIGHT_NAMEÚLORA_WEIGHT_NAME_SAFEÚTEXT_ENCODER_NAMEÚ	UNET_NAME)ÚAttnProcsLayersz$pytorch_custom_diffusion_weights.binz,pytorch_custom_diffusion_weights.safetensorsc                   óØ   — e Zd ZdZeZeZede	e
e	ej                  f   z  fd„«       Zd„ Zd„ Zed„ «       Z	 	 	 	 dde	ej&                  z  d	ed
e	dedef
d„Zd„ Zefd„Zefd„Zefd„Zd„ Zy)ÚUNet2DConditionLoadersMixinz:
    Load LoRA layers into a [`UNet2DCondtionModel`].
    Ú%pretrained_model_name_or_path_or_dictc                 ój  — ddl m} |j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  d	d«      }|j                  d
d«      }	|j                  dd«      }
|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dt        «      }d}|rt	        dd«      rt        d«      ‚|€d}d}dddœ}d}t        |t        «      s�|r|�|�P|j                  d«      r?	 t        ||xs t        ||||||	|
|¬«
      }t        j                  j                  |d¬«      }|€+t        ||xs t        ||||||	|
|¬«
      }t!        |«      }n|}t#        d„ j%                  «       D «       «      }t'        d„ |j%                  «       D «       «      }d}d}d}|rd}t)        d d!|«       |r| j+                  |¬"«      }n6|r&| j-                  || j.                  ||||¬#«      \  }}}nt        |› d$�«      ‚|rP|�N| j1                  |¬%«      \  }}}| j3                  «       | j5                  | j6                  | j8                  ¬&«       |r|j;                  «        y|r|j=                  «        y|rM|j>                  jA                  «       D ]/  }t        |t        jB                  jD                  «      sŒ( ||«       Œ1 yy# t        $ r}|s|‚Y d}~�Œªd}~ww xY w)'aË  
        Load pretrained attention processor layers into [`UNet2DConditionModel`]. Attention processor layers have to be
        defined in
        [`attention_processor.py`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py)
        and be a `torch.nn.Module` class. Currently supported: LoRA, Custom Diffusion. For LoRA, one must install
        `peft`: `pip install -U peft`.

        Parameters:
            pretrained_model_name_or_path_or_dict (`str` or `os.PathLike` or `dict`):
                Can be either:

                    - A string, the model id (for example `google/ddpm-celebahq-256`) of a pretrained model hosted on
                      the Hub.
                    - A path to a directory (for example `./my_model_directory`) containing the model weights saved
                      with [`ModelMixin.save_pretrained`].
                    - A [torch state
                      dict](https://pytorch.org/tutorials/beginner/saving_loading_models.html#what-is-a-state-dict).

            cache_dir (`str | os.PathLike`, *optional*):
                Path to a directory where a downloaded pretrained model configuration is cached if the standard cache
                is not used.
            force_download (`bool`, *optional*, defaults to `False`):
                Whether or not to force the (re-)download of the model weights and configuration files, overriding the
                cached versions if they exist.

            proxies (`dict[str, str]`, *optional*):
                A dictionary of proxy servers to use by protocol or endpoint, for example, `{'http': 'foo.bar:3128',
                'http://hostname': 'foo.bar:4012'}`. The proxies are used on each request.
            local_files_only (`bool`, *optional*, defaults to `False`):
                Whether to only load local model weights and configuration files or not. If set to `True`, the model
                won't be downloaded from the Hub.
            token (`str` or *bool*, *optional*):
                The token to use as HTTP bearer authorization for remote files. If `True`, the token generated from
                `diffusers-cli login` (stored in `~/.huggingface`) is used.
            revision (`str`, *optional*, defaults to `"main"`):
                The specific model version to use. It can be a branch name, a tag name, a commit id, or any identifier
                allowed by Git.
            subfolder (`str`, *optional*, defaults to `""`):
                The subfolder location of a model file within a larger model repository on the Hub or locally.
            network_alphas (`dict[str, float]`):
                The value of the network alpha used for stable learning and preventing underflow. This value has the
                same meaning as the `--network_alpha` option in the kohya-ss trainer script. Refer to [this
                link](https://github.com/darkstorm2150/sd-scripts/blob/main/docs/train_network_README-en.md#execute-learning).
            adapter_name (`str`, *optional*, defaults to None):
                Adapter name to be used for referencing the loaded adapter model. If not specified, it will use
                `default_{i}` where i is the total number of adapters being loaded.
            weight_name (`str`, *optional*, defaults to None):
                Name of the serialized state dict file.
            low_cpu_mem_usage (`bool`, *optional*):
                Speed up model loading by only loading the pretrained LoRA weights and not initializing the random
                weights.

        Example:

        ```py
        from diffusers import AutoPipelineForText2Image
        import torch

        pipeline = AutoPipelineForText2Image.from_pretrained(
            "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
        ).to("cuda")
        pipeline.unet.load_attn_procs(
            "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
        )
        ```
        r   )Ú*_maybe_remove_and_reapply_group_offloadingÚ	cache_dirNÚforce_downloadFÚproxiesÚlocal_files_onlyÚtokenÚrevisionÚ	subfolderÚweight_nameÚuse_safetensorsÚadapter_nameÚ	_pipelineÚnetwork_alphasÚlow_cpu_mem_usageú<=z0.13.0zq`low_cpu_mem_usage=True` is not compatible with this `peft` version. Please update it with `pip install -U peft`.TÚattn_procs_weightsÚpytorch)Ú	file_typeÚ	frameworkz.safetensors)	Úweights_namer*   r+   r,   r-   r.   r/   r0   Ú
user_agentÚcpu)Údevicec              3   ó$   K  — | ]  }d |v –— Œ
 y­w)Úcustom_diffusionN© ©Ú.0Úks     úe/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/diffusers/loaders/unet.pyÚ	<genexpr>z>UNet2DConditionLoadersMixin.load_attn_procs.<locals>.<genexpr>Î   s   è ø€ Ð!UÑCT¸aÐ"4¸Ô"9ÑCTùó   ‚c              3   óJ   K  — | ]  }d |v xs |j                  d«      –— Œ y­w)Úloraz.alphaN)ÚendswithrC   s     rF   rG   z>UNet2DConditionLoadersMixin.load_attn_procs.<locals>.<genexpr>Ï   s(   è ø€ ÐWÑEVÀ�v �{Ò: a§j¡j°Ó&:Ó:ÑEVùs   ‚!#zƒUsing the `load_attn_procs()` method has been deprecated and will be removed in a future version. Please use `load_lora_adapter()`.Úload_attn_procsú0.40.0)Ú
state_dict)rN   Úunet_identifier_keyr5   r3   r4   r6   zQ does not seem to be in the correct format expected by Custom Diffusion training.©r4   ©Údtyper?   )#Úhooks.group_offloadingr)   Úpopr   r   Ú
ValueErrorÚ
isinstanceÚdictrK   r   r!   ÚsafetensorsÚtorchÚ	load_fileÚIOErrorr    r   ÚanyÚkeysÚallr   Ú_process_custom_diffusionÚ_process_loraÚ	unet_nameÚ_optionally_disable_offloadingÚset_attn_processorÚtorR   r?   Úenable_model_cpu_offloadÚenable_sequential_cpu_offloadÚ
componentsÚvaluesÚnnÚModule)Úselfr'   Úkwargsr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   Úallow_pickler=   Ú
model_filerN   ÚeÚis_custom_diffusionÚis_loraÚis_model_cpu_offloadÚis_sequential_cpu_offloadÚis_group_offloadÚdeprecation_messageÚattn_processorsÚ	components                                 rF   rL   z+UNet2DConditionLoadersMixin.load_attn_procsD   sz  € õH 	Xà—J‘J˜{¨DÓ1ˆ	ØŸ™Ð$4°eÓ<ˆØ—*‘*˜Y¨Ó-ˆØ!Ÿ:™:Ð&8¸$Ó?ÐØ—
‘
˜7 DÓ)ˆØ—:‘:˜j¨$Ó/ˆØ—J‘J˜{¨DÓ1ˆ	Ø—j‘j °Ó5ˆØ Ÿ*™*Ð%6¸Ó=ˆØ—z‘z .°$Ó7ˆØ—J‘J˜{¨DÓ1ˆ	ØŸ™Ð$4°dÓ;ˆØ"ŸJ™JÐ':Ô<VÓWÐØˆá¤°°xÔ!@Üð Dóð ð Ð"Ø"ˆOØˆLà#7ÀiÑPˆ
àˆ
ÜÐ?ÄÔFá KÐ$7ØÐ'¨K×,@Ñ,@ÀÔ,PðÜ!0Ø=Ø%0Ò%IÔ4IØ"+Ø'5Ø 'Ø)9Ø#Ø!)Ø"+Ø#-ô"�Jô "-×!2Ñ!2×!<Ñ!<¸ZÐPUÐ!<Ó!V�Jð Ð!Ü,Ø9Ø!,Ò!@Ô0@Ø'Ø#1Ø#Ø%5ØØ%Ø'Ø)ô�
ô -¨ZÓ8‘
à>ˆJä!Ñ!UÀ:Ç?Á?ÔCTÓ!UÓUÐÜÑWÀZÇ_Á_ÔEVÓWÓWˆØ$ÐØ$)Ð!Ø Ðáð #hÐÜÐ'¨Ð3FÔGáØ"×<Ñ<È
Ð<ÓS‰OÙØPT×PbÑPbØ%Ø$(§N¡NØ-Ø)Ø#Ø"3ð Qcó QÑMÐ Ð";Ñ=Mô Ø�,ÐoÐpóð ñ  9Ð#8ØPT×PsÑPsØ#ð Qtó QÑMÐ Ð";Ð=Mð
 ×#Ñ# OÔ4Ø�G‰G˜$Ÿ*™*¨T¯[©[ˆGÔ9ñ  Ø×.Ñ.Õ0Ù&Ø×3Ñ3Õ5ÙØ&×1Ñ1×8Ñ8Ö:�	Ü˜i¬¯©¯©Õ9Ù>¸yÕIñ ;ð øôG ò Ù'Ø˜åûð	ús   Å>L Ì	L2Ì#L-Ì-L2c                 óÈ  — ddl m} i }t        t        «      }|j	                  «       D ]²  \  }}t        |«      dk(  ri ||<   Œd|v rGdj                  |j                  d«      d d «      dj                  |j                  d«      dd  «      }}nFdj                  |j                  d«      d d «      dj                  |j                  d«      dd  «      }}|||   |<   Œ´ |j	                  «       D ]r  \  }}	t        |	«      dk(  r |ddd d ¬	«      ||<   Œ$|	d
   j                  d   }
|	d
   j                  d   }d|	v rdnd} |d|||
¬	«      ||<   ||   j                  |	«       Œt |S )Nr   )ÚCustomDiffusionAttnProcessorr   Úto_outÚ.éýÿÿÿéþÿÿÿF)Útrain_kvÚtrain_q_outÚhidden_sizeÚcross_attention_dimzto_k_custom_diffusion.weightr   zto_q_custom_diffusion.weightT)
Úmodels.attention_processorry   r   rW   ÚitemsÚlenÚjoinÚsplitÚshaper   )rk   rN   ry   rv   Úcustom_diffusion_grouped_dictÚkeyÚvalueÚattn_processor_keyÚsub_keyÚ
value_dictr�   r€   r   s                rF   r_   z5UNet2DConditionLoadersMixin._process_custom_diffusion  s˜  € ÝMàˆÜ(3´DÓ(9Ð%Ø$×*Ñ*Ö,‰JˆC�Ü�5‹z˜QŠØ57Ð-¨cÒ2à˜s‘?Ø25·(±(¸3¿9¹9ÀS»>È#È2Ð;NÓ2OÐQT×QYÑQYÐZ]×ZcÑZcÐdgÓZhÐikÐilÐZmÓQn¨Ñ&à25·(±(¸3¿9¹9ÀS»>È#È2Ð;NÓ2OÐQT×QYÑQYÐZ]×ZcÑZcÐdgÓZhÐikÐilÐZmÓQn¨Ð&ØMRÐ-Ð.@ÑAÀ'ÒJð -ð  =×BÑBÖD‰OˆC�Ü�:‹ !Ò#Ù'CØ"°À4Ð]aô(� Ò$ð '1Ð1OÑ&P×&VÑ&VÐWXÑ&YÐ#Ø(Ð)GÑH×NÑNÈqÑQ�Ø&DÈ
Ñ&R™dÐX]�Ù'CØ!Ø +Ø +Ø(;ô	(� Ñ$ð   Ñ$×4Ñ4°ZÕ@ð  Eð" Ðó    c                 óR  — t         st        d«      ‚ddlm}m}m}	 t        |j                  «       «      }
|
D �cg c]  }|j                  |«      sŒ|‘Œ }}|j                  «       D ��ci c]   \  }}||v sŒ|j                  |› d�d«      |“Œ" }}}|�j|j                  «       D �cg c]  }|j                  |«      sŒ|‘Œ }}|j                  «       D ��ci c]   \  }}||v sŒ|j                  |› d�d«      |“Œ" }}}d}d}d}t        |«      dkD  r|n|}t        |«      dkD  �rà|t        | di «      v rt        d|› d	�«      ‚t        |«      }|�t        |«      }i }|j                  «       D ]  \  }}d
|v sŒ|j                  d   ||<   Œ t        |||d¬«      }d|v r9|d   rt!        dd«      r(t        d«      ‚t!        dd«      r|j#                  d«       d|v r9|d   rt!        dd«      r(t        d«      ‚t!        dd«      r|j#                  d«        |d!i |¤Ž}|€t%        | «      }| j'                  |«      \  }}}i }t!        dd«      r||d<    ||| fd|i|¤Ž  |	| ||fi |¤Ž}d}|��t        |dd «      }|r0|D �cg c]  }d|v sŒ||v sŒ|‘Œ }}|rddj)                  |«      › d�}t        |dd «      }|r3|D �cg c]  }d|v sŒ||v sŒ|‘Œ }}|r|d dj)                  |«      › d�z  }|rt*        j-                  |«       |||fS c c}w c c}}w c c}w c c}}w c c}w c c}w )"Nz)PEFT backend is required for this method.r   )Ú
LoraConfigÚinject_adapter_in_modelÚset_peft_model_state_dictr{   Ú FÚpeft_configzAdapter name z? already in use in the Unet - please select a new adapter name.Úlora_Br   T)Úis_unetÚuse_doraÚ<z0.9.0zeYou need `peft` 0.9.0 at least to use DoRA-enabled LoRAs. Please upgrade your installation of `peft`.Ú	lora_biasr7   z0.13.2zcYou need `peft` 0.14.0 at least to use `bias` in LoRAs. Please upgrade your installation of `peft`.ú>=z0.13.1r6   r3   Úunexpected_keysÚlora_zSLoading adapter weights from state_dict led to unexpected keys found in the model: z, z. Úmissing_keyszJLoading adapter weights from state_dict led to missing keys in the model: rB   )r   rU   Úpeftr�   r‘   r’   Úlistr]   Ú
startswithrƒ   Úreplacer„   Úgetattrr   r‡   r   r   rT   r   rb   r…   ÚloggerÚwarning) rk   rN   rO   r5   r3   r4   r6   r�   r‘   r’   r]   rE   Ú	unet_keysÚvÚunet_state_dictÚ
alpha_keysrr   rs   rt   Ústate_dict_to_be_usedÚrankr‰   ÚvalÚlora_config_kwargsÚlora_configÚpeft_kwargsÚincompatible_keysÚwarn_msgr›   Úlora_unexpected_keysr�   Úlora_missing_keyss                                    rF   r`   z)UNet2DConditionLoadersMixin._process_lora#  s  € õ  ÜÐHÓIÐIçWÑWä�J—O‘OÓ%Ó&ˆá $ÓJ¡˜1¨¯©Ð5HÕ(I’Q ˆ	ÐJàDN×DTÑDTÔDVô
ÙDV¹D¸A¸qÐZ[Ð_hÒZhˆA�I‰IÐ,Ð-¨QÐ/°Ó4°aÑ7ÐDVð 	ñ 
ð Ð%Ø%3×%8Ñ%8Ô%:Ó`Ñ%: ¸a¿l¹lÐK^Õ>_š!Ð%:ˆJÐ`àHV×H\ÑH\ÔH^ôÙH^ÁÀÀ1ÐbcÐgqÒbq�—	‘	Ð0Ð1°Ð3°RÓ8¸!Ñ;ÐH^ð ñ ð  %ÐØ$)Ð!Ø ÐÜ36°Ó3GÈ!Ò3K¡ÐQ[ÐäÐ$Ó%¨Ó)Øœw t¨]¸BÓ?Ñ?Ü Ø# L >Ð1pÐqóð ô 9Ð9NÓOˆJàÐ)ô "AÀÓ!P�àˆDØ&×,Ñ,Ö.‘��SØ˜s’?Ø #§	¡	¨!¡�D˜’Ið /ô "1°°~ÀzÐ[_Ô!`ÐØÐ/Ñ/Ø% jÒ1Ü& s¨GÔ4Ü(ð Dóð ô ' s¨GÔ4Ø*×.Ñ.¨zÔ:àÐ0Ñ0Ø% kÒ2Ü& t¨XÔ6Ü(ð Bóð ô ' t¨XÔ6Ø*×.Ñ.¨{Ô;á$Ñ:Ð'9Ñ:ˆKð Ð#Ü/°Ó5�ð QU×PsÑPsØóQÑMÐ Ð";Ð=Mð ˆKÜ˜t XÔ.Ø3D�Ð/Ñ0á# K°Ñ`ÀLÐ`ÐT_Ò`Ù 9¸$À
ÈLÑ hÐ\gÑ hÐàˆHØ Ð,ä")Ð*;Ð=NÐPTÓ"U�Ù"Ù7FÓ+m±°!È'ÐUVÊ,Ð[gÐklÒ[lªA°Ð(Ð+mÙ+ð Ø $§	¡	Ð*>Ó ?Ð@ÀðDð !ô  'Ð'8¸.È$ÓO�ÙÙ4@Ó(g±L¨qÀGÈqÂLÐUaÐefÒUfª°LÐ%Ð(gÙ(Ø ð Ø $§	¡	Ð*;Ó <Ð=¸Qð@ñ˜ñ
 Ü—‘˜xÔ(à#Ð%>Ð@PÐPÐPùòE Kùó
ùò
 aùóùòN ,nùò )hsS   ¹L	ÁL	Á)LÁ6LÂ%LÂ<LÃLÃ"LÉ?	LÊ	LÊLÊ>	L$ËL$ËL$c                 ó   — t        |¬«      S )NrP   r   )Úclsr4   s     rF   rb   z:UNet2DConditionLoadersMixin._optionally_disable_offloading˜  s   € ô 3¸YÔGÐGrŽ   NÚsave_directoryÚis_main_processr1   Úsave_functionÚsafe_serializationc                 ó  ‡‡‡— ddl mŠmŠmŠ t        j
                  j                  |«      rt        j                  d|› d�«       yt        ˆˆˆfd„| j                  j                  «       D «       «      }|rÅ| j                  «       }|€á|rß|j                  «       D �	�
ci c]#  \  }	}
t        |
t        j                  «      rŒ!|	|
“Œ% }}	}
t!        |«      dkD  r&t        j#                  d|j%                  «       › �«       |j                  «       D �	�
ci c]#  \  }	}
t        |
t        j                  «      sŒ!|	|
“Œ% }}	}
n.d	}t'        d
d|«       t(        st+        d«      ‚ddlm}  || «      }|€|rd„ }nt        j0                  }t	        j2                  |d¬«       |€|r|rt4        nt6        }n|rt8        nt:        }t=        ||«      j?                  «       } |||«       t        jA                  d|› �«       yc c}
}	w c c}
}	w )az  
        Save attention processor layers to a directory so that it can be reloaded with the
        [`~loaders.UNet2DConditionLoadersMixin.load_attn_procs`] method.

        Arguments:
            save_directory (`str` or `os.PathLike`):
                Directory to save an attention processor to (will be created if it doesn't exist).
            is_main_process (`bool`, *optional*, defaults to `True`):
                Whether the process calling this is the main process or not. Useful during distributed training and you
                need to call this function on all processes. In this case, set `is_main_process=True` only on the main
                process to avoid race conditions.
            save_function (`Callable`):
                The function to use to save the state dictionary. Useful during distributed training when you need to
                replace `torch.save` with another method. Can be configured with the environment variable
                `DIFFUSERS_SAVE_MODE`.
            safe_serialization (`bool`, *optional*, defaults to `True`):
                Whether to save the model using `safetensors` or with `pickle`.

        Example:

        ```py
        import torch
        from diffusers import DiffusionPipeline

        pipeline = DiffusionPipeline.from_pretrained(
            "CompVis/stable-diffusion-v1-4",
            torch_dtype=torch.float16,
        ).to("cuda")
        pipeline.unet.load_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
        pipeline.unet.save_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
        ```
        r   ©ry   ÚCustomDiffusionAttnProcessor2_0Ú$CustomDiffusionXFormersAttnProcessorzProvided path (z#) should be a directory, not a fileNc              3   óB   •K  — | ]  \  }}t        |‰‰‰f«      –— Œ y ­w)N)rV   )rD   Ú_Úxry   r»   r¼   s      €€€rF   rG   z>UNet2DConditionLoadersMixin.save_attn_procs.<locals>.<genexpr>Ð  s5   øè ø€ ð "
ñ
 7‘��Aô	 ØØ-Ð/NÐPtÐu÷ñ 7ùs   ƒr   zfSafetensors does not support saving dicts with non-tensor values. The following keys will be ignored: zƒUsing the `save_attn_procs()` method has been deprecated and will be removed in a future version. Please use `save_lora_adapter()`.Úsave_attn_procsrM   zOPEFT backend is required for saving LoRAs using the `save_attn_procs()` method.)Úget_peft_model_state_dictc                 óJ   — t         j                  j                  | |ddi¬«      S )NÚformatÚpt)Úmetadata)rX   rY   Ú	save_file)ÚweightsÚfilenames     rF   r·   zBUNet2DConditionLoadersMixin.save_attn_procs.<locals>.save_functionð  s'   € Ü&×,Ñ,×6Ñ6°wÀÐT\Ð^bÐScÐ6ÓdÐdrŽ   T)Úexist_okzModel weights saved in )!r‚   ry   r»   r¼   ÚosÚpathÚisfiler£   Úerrorr\   rv   rƒ   Ú _get_custom_diffusion_state_dictrV   rY   ÚTensorr„   r¤   r]   r   r   rU   Ú
peft.utilsrÁ   ÚsaveÚmakedirsÚ!CUSTOM_DIFFUSION_WEIGHT_NAME_SAFEr!   ÚCUSTOM_DIFFUSION_WEIGHT_NAMEr    r   Úas_posixÚinfo)rk   rµ   r¶   r1   r·   r¸   rl   rp   rN   rE   r¦   Úempty_state_dictru   rÁ   Ú	save_pathry   r»   r¼   s                  @@@rF   rÀ   z+UNet2DConditionLoadersMixin.save_attn_procs�  sâ  ú€ ÷R	
ñ 	
ô �7‰7�>‰>˜.Ô)Ü�L‰L˜?¨>Ð*:Ð:]Ð^Ô_Øä!õ "
ð
 ×.Ñ.×4Ñ4Ô6ó"
ó 
Ðñ Ø×>Ñ>Ó@ˆJØÐ$Ñ);à5?×5EÑ5EÔ5GÔ#kÑ5G©T¨Q°ÌzÐZ[Ô]b×]iÑ]iÕOj A q¡DÐ5GÐ Ñ#kÜÐ'Ó(¨1Ò,Ü—N‘Nð?Ø?O×?TÑ?TÓ?VÐ>WðYôð 0:×/?Ñ/?Ô/AÔaÑ/A¡t q¨!ÄZÐPQÔSX×S_ÑS_ÕE`˜a ™dÐ/A�
Òað #hÐÜÐ'¨Ð3FÔGå#Ü Ð!rÓsÐså<á2°4Ó8ˆJàÐ Ù!óeô !&§
¡
�ä
�‰�N¨TÕ2àÐÙ!ÙCVÕ?Ô\q‘á>QÕ:ÔWg�ô ˜¨Ó5×>Ñ>Ó@ˆ	Ù�j )Ô,Ü�‰Ð-¨i¨[Ð9Õ:ùóM $lùó bs   Â"G6ÃG6Ä"G<Ä3G<c                 óZ  — ddl m}m}m} t	        | j
                  j                  «       D ��ci c]  \  }}t        ||||f«      r||“Œ c}}«      }|j                  «       }| j
                  j                  «       D ]'  \  }}	t        |	j                  «       «      dk(  sŒ#i ||<   Œ) |S c c}}w )Nr   rº   r   )
r‚   ry   r»   r¼   r$   rv   rƒ   rV   rN   r„   )
rk   ry   r»   r¼   Úyr¿   Úmodel_to_saverN   ÚnameÚattns
             rF   rÎ   z<UNet2DConditionLoadersMixin._get_custom_diffusion_state_dict  s½   € ÷	
ñ 	
ô (ð #×2Ñ2×8Ñ8Ô:ôá:‘F�Q˜ÜØà4Ø7Ø<ðôð �1‘Ø:òó
ˆð #×-Ñ-Ó/ˆ
Ø×.Ñ.×4Ñ4Ö6‰JˆD�$Ü�4—?‘?Ó$Ó%¨Ó*Ø#%�
˜4Ò ð 7ð Ðùó%s   ­B'
c                 ó’  — |r(t        «       rddlm} nd}t        j	                  d«       |du rt        dd«      st        d«      ‚i }d }|rnt        }d	|v rxd
}|d	   j                  d   }|d	   j                  d   d
z  }	 |«       5  t        |	||¬«      }d d d «       |j                  «       D ]  \  }
}|
j                  dd«      }|||<   Œ �nnd|v r–|d   j                  d   }|d   j                  d   }	 |«       5  t        |	|¬«      }d d d «       |j                  «       D ]@  \  }
}|
j                  dd«      }|j                  dd«      }|j                  dd«      }|||<   ŒB �nÔd|v �rô|d   j                  d   }|d   j                  d   }|d   j                  d   }|d   j                  d   }|d   j                  d   dz  } |«       5  t        |||||¬«      }d d d «       |j                  «       D �]a  \  }
}|
j                  dd«      }|j                  d d!«      }|j                  d"d#«      }|j                  d$d%«      }|j                  d&d'«      }|j                  d(d)«      }|j                  d*d+«      }|j                  d,d-«      }|j                  d.d/«      }|j                  d0d1«      }|j                  d2d3«      }|j                  d4d5«      }|j                  d6d7«      }|j                  d8d9«      }|j                  d:d;«      }|j                  d<d=«      }|j                  d>d?«      }|j                  d@dA«      }|j                  dBdC«      }|j                  dDdE«      }|j                  dFdG«      }|j                  dHdI«      }dJ|v r|||j                  dKdL«      <   �Œ®dM|v r|||j                  dNdO«      <   �ŒÉdP|v rE|j                  dQd¬R«      }|d   ||j                  dPdS«      <   |d   ||j                  dPdT«      <   �ŒdU|v r|||j                  dUdV«      <   �Œ-d|k(  r||dW<   �Œ9dX|k(  r||dY<   �ŒEdZ|k(  r||d[<   �ŒQd\|k(  r||d]<   �Œ]|||<   �Œd �nÛd^|v r´|d   j                  d   }|d   j                  d   }||z  }d^}||   j                  d   }	|dZ   j                  d   |	z  } |«       5  t        |	|||¬_«      }d d d «       |j                  «       D ].  \  }
}|
j                  dd«      }|j                  dd«      }|||<   Œ0 �n#|d`   j                  d   }|da   j                  d   }|db   j                  d   }|d`   j                  dQ   }t!        dc„ |D «       «      }|r|dd   j                  d   dz  n|de   j                  d   dz  } |«       5  t#        |||||¬f«      }d d d «       |j                  «       D �]i  \  }
}|
j                  d dg«      }|j                  dhdi«      }|j                  djdk«      }|j                  dldm«      }|j                  dndo«      }|j                  dpdq«      }|j                  drds«      }|j                  dtdu«      }|j                  dvdw«      }dP|v rl|j%                  dx«      }dy|dQ<   dxj'                  |«      }|j                  dQd¬R«      }|d   ||j                  dPdS«      <   |d   ||j                  dPdT«      <   �Œdz|v r.|j%                  dx«      }dy|dQ<   dxj'                  |«      }|||<   �ŒKdU|v r>|j%                  dx«      }dy|dQ<   dxj'                  |«      }|||j                  dUdV«      <   �Œ�|j                  d{d|«      }|j                  d}d~«      }|j                  dd€«      }|j                  d�d‚«      }|j                  dƒd„«      }|j                  d…d†«      }|j                  d‡dˆ«      }|j                  d‰dŠ«      }|j                  d‹dŒ«      }|j                  d�dŽ«      }|j                  d�d�«      }|j                  d‘d’«      }|||<   �Œl |s|j)                  |d¬“«       |S d| j*                  i}t-        |||| j.                  ¬”«       t1        «        |S # 1 sw Y   �ŒóxY w# 1 sw Y   �ŒŠxY w# 1 sw Y   �ŒÀxY w# 1 sw Y   �ŒáxY w# 1 sw Y   �ŒxY w)•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
```
.Trš   ú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é   éÿÿÿÿ)r�   Úimage_embed_dimÚnum_image_text_embedsÚprojÚimage_embedsúproj.3.weightzproj.0.weight)r�   rç   zproj.0zff.net.0.projzproj.2zff.net.2zproj.3Únormú"perceiver_resampler.proj_in.weightr   z#perceiver_resampler.proj_out.weightz*perceiver_resampler.layers.0.0.to_q.weighté@   )Ú
embed_dimsÚoutput_dimsÚhidden_dimsÚheadsÚid_embeddings_dimzperceiver_resampler.r“   z0.tozattn.toz0.1.0.z0.ff.0.z0.1.1.weightz0.ff.1.net.0.proj.weightz0.1.3.weightz0.ff.1.net.2.weightz1.1.0.z1.ff.0.z1.1.1.weightz1.ff.1.net.0.proj.weightz1.1.3.weightz1.ff.1.net.2.weightz2.1.0.z2.ff.0.z2.1.1.weightz2.ff.1.net.0.proj.weightz2.1.3.weightz2.ff.1.net.2.weightz3.1.0.z3.ff.0.z3.1.1.weightz3.ff.1.net.0.proj.weightz3.1.3.weightz3.ff.1.net.2.weightz
layers.0.0zlayers.0.ln0z
layers.0.1zlayers.0.ln1z
layers.1.0zlayers.1.ln0z
layers.1.1zlayers.1.ln1z
layers.2.0zlayers.2.ln0z
layers.2.1zlayers.2.ln1z
layers.3.0zlayers.3.ln0z
layers.3.1zlayers.3.ln1Únorm1z0.norm1Ú0Únorm2z0.norm2Ú1Úto_kvr   )ÚdimÚto_kÚto_vrz   zto_out.0zproj.net.0.proj.weightzproj.0.biaszproj.net.0.proj.biaszproj.2.weightzproj.net.2.weightzproj.2.biaszproj.net.2.biasúnorm.weight)r�   rç   ÚmultÚ
num_tokensÚlatentszproj_in.weightzproj_out.weightc              3   ó$   K  — | ]  }d |v –— Œ
 y­w)rÝ   NrB   rC   s     rF   rG   zZUNet2DConditionLoadersMixin._convert_ip_adapter_image_proj_to_diffusers.<locals>.<genexpr>²  s   è ø€ Ð"C¹
°1 6¨Q¤;¹
ùrH   zlayers.0.attn.to_q.weightzlayers.0.0.to_q.weight)rï   rð   rñ   rò   Únum_queriesz2.toz	0.0.norm1z0.ln0z	0.0.norm2z0.ln1z	1.0.norm1z1.ln0z	1.0.norm2z1.ln1z	2.0.norm1z2.ln0z	2.0.norm2z2.ln1z	3.0.norm1z3.ln0z	3.0.norm2z3.ln1r{   rÝ   Úto_qz0.1.0z0.ff.0z0.1.1z0.ff.1.net.0.projz0.1.3z0.ff.1.net.2z1.1.0z1.ff.0z1.1.1z1.ff.1.net.0.projz1.1.3z1.ff.1.net.2z2.1.0z2.ff.0z2.1.1z2.ff.1.net.0.projz2.1.3z2.ff.1.net.2z3.1.0z3.ff.0z3.1.1z3.ff.1.net.0.projz3.1.3z3.ff.1.net.2)Ústrict©Ú
device_maprR   )r   Ú
acceleraterà   r£   r¤   r   ÚNotImplementedErrorr   r‡   r	   rƒ   r¡   r   r   Úchunkr
   r\   r   r†   r…   r   r?   r   rR   r   )rk   rN   r6   rà   Úupdated_state_dictÚimage_projectionÚinit_contextrè   Úclip_embeddings_dimr�   r‰   rŠ   Údiffusers_nameró   rï   rñ   rð   rò   Úv_chunkÚid_embeddings_dim_inÚid_embeddings_dim_outÚ
multiplierÚ
norm_layerrþ   Úattn_key_presentÚpartsr  s                              rF   Ú+_convert_ip_adapter_image_proj_to_diffuserszGUNet2DConditionLoadersMixin._convert_ip_adapter_image_proj_to_diffusers  sÌ	  € ÙÜ&Ô(Þ9ð %*Ð!Ü—‘ð2ôð  Ñ$Ô-=¸dÀGÔ-LÜ%ð.óð ð
  ÐØÐÙ->Ñ)ÄKˆà˜JÑ&à$%Ð!Ø",¨]Ñ";×"AÑ"AÀ"Ñ"EÐØ",¨]Ñ";×"AÑ"AÀ!Ñ"DÈÑ"IÐá•Ü#2Ø(;Ø$7Ø*?ô$Ð ÷  ð )×.Ñ.Ö0‘
��UØ!$§¡¨V°^Ó!D�Ø5:Ð" >Ò2ò 1ð  
Ñ*à",¨_Ñ"=×"CÑ"CÀAÑ"FÐØ",¨_Ñ"=×"CÑ"CÀAÑ"FÐá•Ü#?Ø(;ÐM`ô$Ð ÷  ð
 )×.Ñ.Ö0‘
��UØ!$§¡¨X°Ó!G�Ø!/×!7Ñ!7¸À*Ó!M�Ø!/×!7Ñ!7¸À&Ó!I�Ø5:Ð" >Ò2ò	 1ð 2°ZÒ?à *¨?Ñ ;× AÑ AÀ!Ñ DÐØ#Ð$HÑI×OÑOÐPQÑRˆJØ$Ð%IÑJ×PÑPÐQRÑSˆKØ$Ð%JÑK×QÑQÐRSÑTˆKØÐKÑL×RÑRÐSTÑUÐY[Ñ[ˆEá•Ü#EØ)Ø +Ø +ØØ&7ô$Ð ÷  ð )×.Ñ.×0‘
��UØ!$§¡Ð-CÀRÓ!H�Ø!/×!7Ñ!7¸À	Ó!J�Ø!/×!7Ñ!7¸À)Ó!L�Ø!/×!7Ñ!7¸ÐHbÓ!c�Ø!/×!7Ñ!7¸ÐH]Ó!^�Ø!/×!7Ñ!7¸À)Ó!L�Ø!/×!7Ñ!7¸ÐHbÓ!c�Ø!/×!7Ñ!7¸ÐH]Ó!^�Ø!/×!7Ñ!7¸À)Ó!L�Ø!/×!7Ñ!7¸ÐHbÓ!c�Ø!/×!7Ñ!7¸ÐH]Ó!^�Ø!/×!7Ñ!7¸À)Ó!L�Ø!/×!7Ñ!7¸ÐHbÓ!c�Ø!/×!7Ñ!7¸ÐH]Ó!^�Ø!/×!7Ñ!7¸ÀnÓ!U�Ø!/×!7Ñ!7¸ÀnÓ!U�Ø!/×!7Ñ!7¸ÀnÓ!U�Ø!/×!7Ñ!7¸ÀnÓ!U�Ø!/×!7Ñ!7¸ÀnÓ!U�Ø!/×!7Ñ!7¸ÀnÓ!U�Ø!/×!7Ñ!7¸ÀnÓ!U�Ø!/×!7Ñ!7¸ÀnÓ!U�à˜nÑ,ØQVÐ& ~×'=Ñ'=¸iÈÓ'MÓNØ Ñ.ØQVÐ& ~×'=Ñ'=¸iÈÓ'MÓNØ Ñ.Ø#Ÿk™k¨!°˜kÓ3�GØRYÐZ[ÑR\Ð& ~×'=Ñ'=¸gÀvÓ'NÑOØRYÐZ[ÑR\Ð& ~×'=Ñ'=¸gÀvÓ'NÓOØ Ñ/ØW\Ð& ~×'=Ñ'=¸hÈ
Ó'SÓTØ$¨Ò6ØCHÐ&Ð'?Ó@Ø" nÒ4ØAFÐ&Ð'=Ó>Ø$¨Ò6Ø>CÐ&Ð':Ó;Ø" nÒ4Ø<AÐ&Ð'8Ó9à9>Ð& ~Ó6òW 1ðZ ˜jÑ(à#-¨oÑ#>×#DÑ#DÀQÑ#GÐ Ø$.¨Ñ$?×$EÑ$EÀaÑ$HÐ!Ø.Ð2FÑFˆJØ&ˆJØ",¨ZÑ"8×">Ñ">¸qÑ"AÐØ# OÑ4×:Ñ:¸1Ñ=ÐATÑTˆJá•Ü#AØ(;Ø$8Ø#Ø)ô	$Ð ÷  ð )×.Ñ.Ö0‘
��UØ!$§¡¨X°Ó!G�Ø!/×!7Ñ!7¸À*Ó!M�Ø5:Ð" >Ò2ò 1ð %/¨yÑ$9×$?Ñ$?ÀÑ$BÐ!Ø#Ð$4Ñ5×;Ñ;¸AÑ>ˆJØ$Ð%6Ñ7×=Ñ=¸aÑ@ˆKØ$ YÑ/×5Ñ5°aÑ8ˆKÜ"Ñ"C¹
Ó"CÓCÐñ $ð Ð6Ñ7×=Ñ=¸aÑ@ÀBÒFàÐ 8Ñ9×?Ñ?ÀÑBÀbÑHð ñ •Ü#?Ø)Ø +Ø +ØØ 5ô$Ð ÷  ð )×.Ñ.×0‘
��UØ!$§¡¨V°VÓ!<�à!/×!7Ñ!7¸ÀWÓ!M�Ø!/×!7Ñ!7¸ÀWÓ!M�Ø!/×!7Ñ!7¸ÀWÓ!M�Ø!/×!7Ñ!7¸ÀWÓ!M�Ø!/×!7Ñ!7¸ÀWÓ!M�Ø!/×!7Ñ!7¸ÀWÓ!M�Ø!/×!7Ñ!7¸ÀWÓ!M�Ø!/×!7Ñ!7¸ÀWÓ!M�à˜nÑ,Ø*×0Ñ0°Ó5�EØ%�E˜!‘HØ%(§X¡X¨e£_�NØ#Ÿk™k¨!°˜kÓ3�GØRYÐZ[ÑR\Ð& ~×'=Ñ'=¸gÀvÓ'NÑOØRYÐZ[ÑR\Ð& ~×'=Ñ'=¸gÀvÓ'NÓOØ˜~Ñ-Ø*×0Ñ0°Ó5�EØ%�E˜!‘HØ%(§X¡X¨e£_�NØ9>Ð& ~Ó6Ø Ñ/Ø*×0Ñ0°Ó5�EØ%�E˜!‘HØ%(§X¡X¨e£_�NØW\Ð& ~×'=Ñ'=¸hÈ
Ó'SÓTà%3×%;Ñ%;¸GÀXÓ%N�NØ%3×%;Ñ%;¸GÐEXÓ%Y�NØ%3×%;Ñ%;¸GÀ^Ó%T�Nà%3×%;Ñ%;¸GÀXÓ%N�NØ%3×%;Ñ%;¸GÐEXÓ%Y�NØ%3×%;Ñ%;¸GÀ^Ó%T�Nà%3×%;Ñ%;¸GÀXÓ%N�NØ%3×%;Ñ%;¸GÐEXÓ%Y�NØ%3×%;Ñ%;¸GÀ^Ó%T�Nà%3×%;Ñ%;¸GÀXÓ%N�NØ%3×%;Ñ%;¸GÐEXÓ%Y�NØ%3×%;Ñ%;¸GÀ^Ó%T�NØ9>Ð& ~Ó6ð[ 1ñ^ !Ø×,Ñ,Ð-?ÈÐ,ÔMð  Ðð	 ˜dŸk™kÐ*ˆJÜ%Ð&6Ð8JÐWaÐim×isÑisÕtÜÔ àÐ÷w  ‘ú÷   ‘ú÷&  ‘ú÷~  ‘ú÷4  ‘ús<   ÂbÃ?bÇb"Ó b/Ö(b<âbâbâ"b,â/b9â<cc                 ó|  — ddl m}m}m} |r(t	        «       rddlm} nd}t        j                  d«       |du rt        dd	«      st        d
«      ‚i }d}|rnt        }	| j                  j                  «       D �]ª  }
|
j                  d«      rd n| j                  j                   }|
j#                  d«      r| j                  j$                  d   }n•|
j#                  d«      rCt'        |
t)        d«         «      }t+        t-        | j                  j$                  «      «      |   }nA|
j#                  d«      r0t'        |
t)        d«         «      }| j                  j$                  |   }|�d|
v r%| j                  |
   j.                  } |«       ||
<   �Œdt1        | j                  |
   j.                  «      v r|}nt3        t4        d«      r|n|}g }|D ]S  }d|d   v r|dgz  }Œd|d   v r|dgz  }Œd|d   v r|dgz  }Œ-d|d   v r|dgz  }Œ;||d   d   j6                  d   gz  }ŒU  |	«       5   ||d|¬«      ||
<   d d d «       i }t9        |«      D ]E  \  }}|j;                  d |› d!�|d"   |› d#�   i«       |j;                  d$|› d!�|d"   |› d%�   i«       ŒG |s||
   j=                  |«       nnt?        tA        |jC                  «       «      «      jD                  }t?        tA        |jC                  «       «      «      jF                  }d&|i}tI        ||
   |||¬'«       |dz  }�Œ­ tK        «        |S # 1 sw Y   Œ÷xY w)(Nr   )ÚIPAdapterAttnProcessorÚIPAdapterAttnProcessor2_0ÚIPAdapterXFormersAttnProcessorr   rß   Frá   Trš   râ   rã   r   zattn1.processorÚ	mid_blockræ   Ú	up_blocksz
up_blocks.Údown_blockszdown_blocks.Úmotion_modulesÚXFormersÚscaled_dot_product_attentionrä   Ú
image_projrå   rë   i  rí   rü   rÿ   g      ð?)r€   r�   Úscalerþ   zto_k_ip.z.weightÚ
ip_adapterz.to_k_ip.weightzto_v_ip.z.to_v_ip.weightr“   r  )&r‚   r  r  r  r   r  rà   r£   r¤   r   r  r   rv   r]   rK   Úconfigr�   r    Úblock_out_channelsÚintr„   rŸ   ÚreversedÚ	__class__ÚstrÚhasattrÚFr‡   Ú	enumerateÚupdater   ÚnextÚiterrh   r?   rR   r   r   )rk   Ústate_dictsr6   r  r  r  rà   Ú
attn_procsÚkey_idr  rÜ   r�   r€   Úblock_idÚattn_processor_classrè   rN   r�   Úir?   rR   r  s                         rF   Ú%_convert_ip_adapter_attn_to_diffuserszAUNet2DConditionLoadersMixin._convert_ip_adapter_attn_to_diffusersú  s  € ÷	
ñ 	
ñ Ü&Ô(Þ9ð %*Ð!Ü—‘ð2ôð  Ñ$Ô-=¸dÀGÔ-LÜ%ð.óð ð ˆ
ØˆÙ->Ñ)ÄKˆØ×(Ñ(×-Ñ-×/ˆDØ*.¯-©-Ð8IÔ*J¡$ÐPT×P[ÑP[×PoÑPoÐØ�‰˜{Ô+Ø"Ÿk™k×<Ñ<¸RÑ@‘Ø—‘ Ô-Ü˜t¤C¨Ó$5Ñ6Ó7�Ü"¤8¨D¯K©K×,JÑ,JÓ#KÓLÈXÑV‘Ø—‘ Ô/Ü˜t¤C¨Ó$7Ñ8Ó9�Ø"Ÿk™k×<Ñ<¸XÑF�à"Ð*Ð.>À$Ñ.FØ'+×';Ñ';¸DÑ'A×'KÑ'KÐ$Ù#7Ó#9�
˜4Ó à¤ T×%9Ñ%9¸$Ñ%?×%IÑ%IÓ!JÑJØ+IÑ(ô #¤1Ð&DÔEñ 2à3ð )ð
 )+Ð%Û"-�JØ$¨
°<Ñ(@Ñ@à-°!°Ñ4Ñ-Ø(¨J°|Ñ,DÑDà-°#°Ñ6Ñ-Ø=ÀÈLÑAYÑYà-°!°Ñ4Ñ-Ø&¨*°\Ñ*BÑBà-°!°Ñ4Ñ-ð .°*¸\Ñ2JÈ9Ñ2U×2[Ñ2[Ð\]Ñ2^Ð1_Ñ_Ñ-ð #.ñ" "•^Ù';Ø$/Ø,?Ø!Ø#8ô	(�J˜tÑ$÷ $ð  �
Ü%.¨{Ö%;‘M�A�zØ×%Ñ%¨°!°°GÐ'<¸jÈÑ>VÐZ`ÐYaÐapÐWqÑ>rÐ&sÔtØ×%Ñ%¨°!°°GÐ'<¸jÈÑ>VÐZ`ÐYaÐapÐWqÑ>rÐ&sÕtð &<ñ )Ø˜tÑ$×4Ñ4°ZÕ@ä!¤$ z×'8Ñ'8Ó':Ó";Ó<×CÑC�FÜ ¤ j×&7Ñ&7Ó&9Ó!:Ó;×AÑA�EØ"$ f �JÜ-¨j¸Ñ.>À
ÐWaÐinÕoà˜!‘’ð} 0ô@ 	ÔàÐ÷3 $�^ús   È,L2Ì2L;	c                 óô  — t        |t        «      s|g}| j                  �6| j                  j                  dk(  rt        | d«      s| j                  | _        d | _        | j                  ||¬«      }| j                  |«       g }|D ])  }| j                  |d   |¬«      }|j                  |«       Œ+ t        |«      | _        d| j                  _        | j                  | j                  | j                  ¬«       y )NÚ	text_projÚtext_encoder_hid_proj)r6   r   Úip_image_projrQ   )rV   rŸ   Úencoder_hid_projr#  Úencoder_hid_dim_typer)  r8  r5  rc   r  Úappendr   rd   rR   r?   )rk   r/  r6   r0  Úimage_projection_layersrN   Úimage_projection_layers          rF   Ú_load_ip_adapter_weightsz4UNet2DConditionLoadersMixin._load_ip_adapter_weights\  só   € Ü˜+¤tÔ,Ø&˜-ˆKð ×!Ñ!Ð-Ø—‘×0Ñ0°KÒ?Ü˜DÐ"9Ô:à)-×)>Ñ)>ˆDÔ&ð !%ˆÔà×?Ñ?ÀÐ_pÐ?Óqˆ
Ø×Ñ 
Ô+ð #%ÐÛ%ˆJØ%)×%UÑ%UØ˜<Ñ(Ð<Mð &Vó &Ð"ð $×*Ñ*Ð+AÕBð	 &ô !>Ð>UÓ VˆÔØ+:ˆ�‰Ô(à�‰�d—j‘j¨¯©ˆÕ5rŽ   c                 óæ  — i }t        | j                  j                  «       «      D �]G  \  }}t        |«      D �]2  \  }}|› d�|d   v sŒ||vri ||<   ||   j                  d|› d�|d   |› d�   i«       ||   j                  d|› d�|d   |› d�   i«       ||   j                  d|› d�|d   |› d�   i«       ||   j                  d|› d�|d   |› d�   i«       ||   j                  d|› d�|d   |› d�   i«       ||   j                  d|› d�|d   |› d�   i«       ||   j                  d|› d	�|d   |› d	�   i«       ||   j                  d|› d
�|d   |› d
�   i«       �Œ5 �ŒJ |S )Nz.to_k_lora.down.weightr"  zunet.z.to_q_lora.down.weightz.to_v_lora.down.weightz.to_out_lora.down.weightz.to_k_lora.up.weightz.to_q_lora.up.weightz.to_v_lora.up.weightz.to_out_lora.up.weight)r+  rv   r]   r,  )rk   r/  Ú
lora_dictsr1  rÜ   r4  rN   s          rF   Ú_load_ip_adapter_lorasz2UNet2DConditionLoadersMixin._load_ip_adapter_loras|  sO  € Øˆ
Ü% d×&:Ñ&:×&?Ñ&?Ó&A×B‰LˆF�DÜ!*¨;×!7‘��:Ø�XÐ3Ð4¸
À<Ñ8PÒPØ 
Ñ*Ø(*˜
 1™Ø˜q‘M×(Ñ(à# D 6Ð)?Ð@À*È\ÑBZØ#) (Ð*@Ð AñCðôð ˜q‘M×(Ñ(à# D 6Ð)?Ð@À*È\ÑBZØ#) (Ð*@Ð AñCðôð ˜q‘M×(Ñ(à# D 6Ð)?Ð@À*È\ÑBZØ#) (Ð*@Ð AñCðôð ˜q‘M×(Ñ(à# D 6Ð)AÐBÀJÈ|ÑD\Ø#) (Ð*BÐ CñEðôð ˜q‘M×(Ñ(Ø   Ð&:Ð;¸ZÈÑ=UÐY_ÐX`Ð`tÐVuÑ=vÐwôð ˜q‘M×(Ñ(Ø   Ð&:Ð;¸ZÈÑ=UÐY_ÐX`Ð`tÐVuÑ=vÐwôð ˜q‘M×(Ñ(Ø   Ð&:Ð;¸ZÈÑ=UÐY_ÐX`Ð`tÐVuÑ=vÐwôð ˜q‘M×(Ñ(à# D 6Ð)?Ð@À*È\ÑBZØ#) (Ð*@Ð AñCðöòS "8ð Cðb ÐrŽ   )TNNT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   Útext_encoder_namer#   ra   r   r(  rW   rY   rÏ   rL   r_   r`   Úclassmethodrb   rÊ   ÚPathLikeÚboolr   rÀ   rÎ   r   r  r5  r?  rB  rB   rŽ   rF   r&   r&   <   sõ   „ ñð *ÐØ€IàðyJÀSÈ4ÐPSÐUZ×UaÑUaÐPaÑKbÑEbò yJó ðyJòx òDsQðj ñHó ðHð !%ØØ"&Ø#'ñd;à˜bŸk™kÑ)ðd;ð ðd;ð ð	d;ð
  ðd;ð !ód;òLð8 Ysó Y ðv Tnó `ðD Gaó 6ó@3rŽ   r&   )8rÊ   Úcollectionsr   Ú
contextlibr   Úpathlibr   Útypingr   rX   rY   Útorch.nn.functionalri   Ú
functionalr*  Úhuggingface_hub.utilsr   Úmodels.embeddingsr	   r
   r   r   r   r   Úmodels.model_loading_utilsr   Úmodels.modeling_utilsr   r   Úutilsr   r   r   r   r   r   r   r   r   r   Úutils.torch_utilsr   Ú	lora_baser   Úlora_pipeliner    r!   r"   r#   r$   Ú
get_loggerrC  r£   rÔ   rÓ   r&   rB   rŽ   rF   Ú<module>rZ     s‡   ðó 
Ý #Ý "Ý Ý ã Û ß Ð Ý 6÷÷ õ Cß O÷÷ ÷ õ 3Ý :ß `Ó `Ý "ð 
ˆ×	Ñ	˜HÓ	%€ð  FÐ Ø$RÐ !÷sò srŽ   