ó
    oM‡jà ã                   óü  • S SK JrJr  S SKrS SKJr  S SKJs  Jr  SSK	J
r
Jr  SSKJrJrJr  SSKJr  SSKJrJrJrJrJrJr  SS	KJrJrJr  SS
KJr  SSKJ r J!r!J"r"J#r#J$r$  \" 5       (       a  S SK%r&OSr&\RN                  " \(5      r) " S S5      r* " S S5      r+S\RX                  S\RZ                  S\.S\.4S jr/\ " S S\RX                  5      5       r0\ " S S\RX                  5      5       r1\ " S S\RX                  5      5       r2 " S S\RX                  5      r3\ " S S\RX                  5      5       r4 " S S \RX                  5      r5\ " S! S"\RX                  5      5       r6 " S# S$\RX                  5      r7g)%é    )ÚAnyÚCallableNé   )Ú	deprecateÚlogging)Úis_torch_npu_availableÚis_torch_xla_availableÚis_xformers_available)Úmaybe_allow_in_graphé   )ÚGEGLUÚGELUÚApproximateGELUÚFP32SiLUÚLinearActivationÚSwiGLU)Ú	AttentionÚAttentionProcessorÚJointAttnProcessor2_0)ÚSinusoidalPositionalEmbedding)ÚAdaLayerNormÚAdaLayerNormContinuousÚAdaLayerNormZeroÚRMSNormÚSD35AdaLayerNormZeroXc                   ó`   • \ rS rSr\S\\\4   4S j5       rS\\\\4   -  4S jr	S r
S rSrg	)
ÚAttentionMixiné'   Úreturnc                 óÆ   ^• 0 nS[         S[        R                  R                  S[        [         [
        4   4U4S jjmU R                  5        H  u  p#T" X#U5        M     U$ )z–
Returns:
    `dict` of attention processors: A dictionary containing all attention processors used in the model with
    indexed by its weight name.
ÚnameÚmoduleÚ
processorsc                 ó¢   >• [        US5      (       a  UR                  5       X  S3'   UR                  5        H  u  p4T" U  SU 3XB5        M     U$ )NÚget_processorú
.processorÚ.)Úhasattrr%   Únamed_children)r!   r"   r#   Úsub_nameÚchildÚfn_recursive_add_processorss        €Ú¨C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\diffusers/models/attention.pyr,   ÚCAttentionMixin.attn_processors.<locals>.fn_recursive_add_processors2   sZ   ø€ Ü�v˜×/Ñ/Ø28×2FÑ2FÓ2H�
˜V :Ð.Ñ/à#)×#8Ñ#8Ö#:‘�Ù+¨t¨f°A°h°ZÐ,@À%ÖTñ $;ð Ðó    )ÚstrÚtorchÚnnÚModuleÚdictr   r)   )Úselfr#   r!   r"   r,   s       @r-   Úattn_processorsÚAttentionMixin.attn_processors(   sb   ø€ ð ˆ
ð	¬cð 	¼5¿8¹8¿?¹?ð 	ÔX\Ô]`ÔbtÐ]tÑXu÷ 	ð !×/Ñ/Ö1‰LˆDÙ'¨°jÖAñ 2ð Ðr/   Ú	processorc           	      ód  ^• [        U R                  R                  5       5      n[        U[        5      (       a-  [        U5      U:w  a  [        S[        U5       SU SU S35      eS[        S[        R                  R                  4U4S jjmU R                  5        H  u  p4T" X4U5        M     g)	aô  
Sets the attention processor to use to compute attention.

Parameters:
    processor (`dict` of `AttentionProcessor` or only `AttentionProcessor`):
        The instantiated processor class or a dictionary of processor classes that will be set as the processor
        for **all** `Attention` layers.

        If `processor` is a dict, the key needs to define the path to the corresponding cross attention
        processor. This is strongly recommended when setting trainable attention processors.

z>A dict of processors was passed, but the number of processors z0 does not match the number of attention layers: z. Please make sure to pass z processor classes.r!   r"   c                 ó
  >• [        US5      (       aJ  [        U[        5      (       d  UR                  U5        O#UR                  UR	                  U  S35      5        UR                  5        H  u  p4T" U  SU 3XB5        M     g )NÚset_processorr&   r'   )r(   Ú
isinstancer4   r;   Úpopr)   )r!   r"   r8   r*   r+   Úfn_recursive_attn_processors        €r-   r>   ÚFAttentionMixin.set_attn_processor.<locals>.fn_recursive_attn_processorU   ss   ø€ Ü�v˜×/Ñ/Ü! )¬T×2Ñ2Ø×(Ñ(¨Õ3à×(Ñ(¨¯©¸$¸¸zÐ7JÓ)KÔLà#)×#8Ñ#8Ö#:‘�Ù+¨t¨f°A°h°ZÐ,@À%ÖSò $;r/   N)Úlenr6   Úkeysr<   r4   Ú
ValueErrorr0   r1   r2   r3   r)   )r5   r8   Úcountr!   r"   r>   s        @r-   Úset_attn_processorÚ!AttentionMixin.set_attn_processor@   s®   ø€ ô �D×(Ñ(×-Ñ-Ó/Ó0ˆä�i¤×&Ñ&¬3¨y«>¸UÓ+BÜØPÔQTÐU^ÓQ_ÐP`ð a0Ø05¨wÐ6QÐRWÐQXÐXkðmóð ð
	T¬cð 	T¼5¿8¹8¿?¹?÷ 	Tð !×/Ñ/Ö1‰LˆDÙ'¨°iÖ@ò 2r/   c                 óH  • U R                   R                  5        H3  u  pS[        UR                  R                  5      ;   d  M*  [        S5      e   U R                  5        H=  n[        U[        5      (       d  M  UR                  (       d  M-  UR                  5         M?     g)zÃ
Enables fused QKV projections. For self-attention modules, all projection matrices (i.e., query, key, value)
are fused. For cross-attention modules, key and value projection matrices are fused.
ÚAddedzQ`fuse_qkv_projections()` is not supported for models having added KV projections.N)r6   Úitemsr0   Ú	__class__Ú__name__rB   Úmodulesr<   ÚAttentionModuleMixinÚ_supports_qkv_fusionÚfuse_projections)r5   Ú_Úattn_processorr"   s       r-   Úfuse_qkv_projectionsÚ#AttentionMixin.fuse_qkv_projectionsb   s|   € ð
 "&×!5Ñ!5×!;Ñ!;Ö!=ÑˆAØœ#˜n×6Ñ6×?Ñ?Ó@Õ@Ü Ð!tÓuÐuñ ">ð —l‘l–nˆFÜ˜&Ô"6×7Ó7¸F×<W×<WÑ<WØ×'Ñ'Ö)ò %r/   c                 ó¦   • U R                  5        H=  n[        U[        5      (       d  M  UR                  (       d  M-  UR	                  5         M?     g)u]   Disables the fused QKV projection if enabled.

> [!WARNING] > This API is ðŸ§ª experimental.
N)rK   r<   rL   rM   Úunfuse_projections)r5   r"   s     r-   Úunfuse_qkv_projectionsÚ%AttentionMixin.unfuse_qkv_projectionso   s9   € ð
 —l‘l–nˆFÜ˜&Ô"6×7Ó7¸F×<W×<WÑ<WØ×)Ñ)Ö+ò %r/   © N)rJ   Ú
__module__Ú__qualname__Ú__firstlineno__Úpropertyr4   r0   r   r6   rD   rQ   rU   Ú__static_attributes__rW   r/   r-   r   r   '   sP   † Øð  cÐ+=Ð&=Ñ!>ó ó ðð. AÐ,>ÀÀcÐK]ÐF]ÑA^Ñ,^ô  AòD*õ,r/   r   c                   ó¨  • \ rS rSrSr/ rSrSrS\SS4S jr	S(S\
SS	4S
 jjrS\4S jrS\
SS4S jr  S)S\
S\\S-  S4   S-  SS4S jjr S*S\
S\S-  SS4S jjr\R(                  " 5       S 5       r\R(                  " 5       S 5       rS\SS4S jrS\R2                  S\R2                  4S jrS+S\R2                  S\S\R2                  4S jjr S*S\R2                  S\R2                  S \R2                  S-  S\R2                  4S! jjr S+S \R2                  S"\S#\S\S\R2                  4
S$ jjrS%\R2                  S\R2                  4S& jrS'rg),rL   éy   NTFr8   r   c                 ój  • [        U S5      (       aœ  [        U R                  [        R                  R
                  5      (       ai  [        U[        R                  R
                  5      (       d@  [        R                  SU R                   SU 35        U R                  R                  S5        Xl        g)zu
Set the attention processor to use.

Args:
    processor (`AttnProcessor`):
        The attention processor to use.
r8   z-You are removing possibly trained weights of z with N)
r(   r<   r8   r1   r2   r3   ÚloggerÚinfoÚ_modulesr=   )r5   r8   s     r-   r;   Ú"AttentionModuleMixin.set_processor   sx   € ô �D˜+×&Ñ&Ü˜4Ÿ>™>¬5¯8©8¯?©?×;Ñ;Ü˜y¬%¯(©(¯/©/×:Ñ:ä�K‰KÐGÈÏÉÐGWÐW]Ð^gÐ]hÐiÔjØ�M‰M×Ñ˜kÔ*à"�r/   Úreturn_deprecated_lorar   c                 ó*   • U(       d  U R                   $ g)zÿ
Get the attention processor in use.

Args:
    return_deprecated_lora (`bool`, *optional*, defaults to `False`):
        Set to `True` to return the deprecated LoRA attention processor.

Returns:
    "AttentionProcessor": The attention processor in use.
N)r8   )r5   rd   s     r-   r%   Ú"AttentionModuleMixin.get_processor“   s   € ö &Ø—>‘>Ð!ð &r/   Úbackendc                 ó  • SSK Jn  UR                  R                  5        Vs1 s H  o3R                  iM     nnX;  a"  [        SU< S3SR                  U5      -   5      eU" UR                  5       5      nXR                  l	        g s  snf )Nr   )ÚAttentionBackendNamez	`backend=z ` must be one of the following: z, )
Úattention_dispatchri   Ú__members__ÚvaluesÚvaluerB   ÚjoinÚlowerr8   Ú_attention_backend)r5   rg   ri   ÚxÚavailable_backendss        r-   Úset_attention_backendÚ*AttentionModuleMixin.set_attention_backend¡   sw   € Ý<à/C×/OÑ/O×/VÑ/VÔ/XÓYÒ/X¨!ŸgœgÑ/XÐÐYØÓ,Ü˜z ¡
Ð*JÐKÈdÏiÉiÐXjÓNkÑkÓlÐlá& w§}¡}£Ó7ˆØ,3�‰Õ)ùò Zs   £BÚuse_npu_flash_attentionc                 óh   • U(       a  [        5       (       d  [        S5      eU R                  S5        g)z™
Set whether to use NPU flash attention from `torch_npu` or not.

Args:
    use_npu_flash_attention (`bool`): Whether to use NPU flash attention or not.
ztorch_npu is not availableÚ_native_npuN)r   ÚImportErrorrs   )r5   ru   s     r-   Úset_use_npu_flash_attentionÚ0AttentionModuleMixin.set_use_npu_flash_attention«   s*   € ö #Ü)×+Ñ+Ü!Ð">Ó?Ð?à×"Ñ" =Õ1r/   Úuse_xla_flash_attentionÚpartition_spec.c                 óh   • U(       a  [        5       (       d  [        S5      eU R                  S5        g)a•  
Set whether to use XLA flash attention from `torch_xla` or not.

Args:
    use_xla_flash_attention (`bool`):
        Whether to use pallas flash attention kernel from `torch_xla` or not.
    partition_spec (`tuple[]`, *optional*):
        Specify the partition specification if using SPMD. Otherwise None.
    is_flux (`bool`, *optional*, defaults to `False`):
        Whether the model is a Flux model.
ztorch_xla is not availableÚ_native_xlaN)r	   rx   rs   )r5   r{   r|   Úis_fluxs       r-   Úset_use_xla_flash_attentionÚ0AttentionModuleMixin.set_use_xla_flash_attention¹   s*   € ö" #Ü)×+Ñ+Ü!Ð">Ó?Ð?à×"Ñ" =Õ1r/   Ú'use_memory_efficient_attention_xformersÚattention_opc                 ó¤  • U(       aµ  [        5       (       d
  [        SSS9e[        R                  R	                  5       (       d  [        S5      e [        5       (       aL  SnUb  Uu  pEUR                  tp6[        R                  " SSUS9n[        R                  R                  XwU5      nU R                  S5        gg! [         a  nUeSnAff = f)	ax  
Set whether to use memory efficient attention from `xformers` or not.

Args:
    use_memory_efficient_attention_xformers (`bool`):
        Whether to use memory efficient attention from `xformers` or not.
    attention_op (`Callable`, *optional*):
        The attention operation to use. Defaults to `None` which uses the default attention operation from
        `xformers`.
zeRefer to https://github.com/facebookresearch/xformers for more information on how to install xformersÚxformers)r!   zvtorch.cuda.is_available() should be True but is False. xformers' memory efficient attention is only available for GPU N)r   r   é(   Úcuda©ÚdeviceÚdtype)r
   ÚModuleNotFoundErrorr1   r‡   Úis_availablerB   ÚSUPPORTED_DTYPESÚrandnÚxopsÚopsÚmemory_efficient_attentionÚ	Exceptionrs   )	r5   r‚   rƒ   rŠ   Úop_fwÚop_bwrO   ÚqÚes	            r-   Ú+set_use_memory_efficient_attention_xformersÚ@AttentionModuleMixin.set_use_memory_efficient_attention_xformersÐ   sË   € ö 3Ü(×*Ñ*Ü)Ø{Ø#ñð ô —Z‘Z×,Ñ,×.Ñ.Ü ð/óð ð

ä,×.Ñ.Ø $˜Ø'Ñ3Ø+7™L˜EØ(-×(>Ñ(>˜I˜EÜ!ŸKšK¨
¸6ÈÑO˜Ü ŸH™H×?Ñ?ÀÀaÓH˜ð ×*Ñ*¨:Õ6ð1 3øô* !ó Ø�Gûðús   ÁAB> Â>
CÃC
Ã
Cc                 óâ
  • U R                   (       d-  [        R                  U R                  R                   S35        g[        U SS5      (       a  gU R                  R                  R                  R                  nU R                  R                  R                  R                  n[        U S5      (       Gak  U R                  (       GaY  [        R                  " U R                  R                  R                  U R                   R                  R                  /5      nUR"                  S   nUR"                  S   n[$        R&                  " XEU R(                  XS9U l        U R*                  R                  R-                  U5        [        U S	5      (       aŠ  U R(                  (       ay  [        R                  " U R                  R.                  R                  U R                   R.                  R                  /5      nU R*                  R.                  R-                  U5        GO•[        R                  " U R                  R                  R                  U R                  R                  R                  U R                   R                  R                  /5      nUR"                  S   nUR"                  S   n[$        R&                  " XEU R(                  XS9U l        U R0                  R                  R-                  U5        [        U S	5      (       a©  U R(                  (       a˜  [        R                  " U R                  R.                  R                  U R                  R.                  R                  U R                   R.                  R                  /5      nU R0                  R.                  R-                  U5        [        U S
S5      Gb¢  [        U SS5      Gb“  [        U SS5      Gb„  [        R                  " U R2                  R                  R                  U R4                  R                  R                  U R6                  R                  R                  /5      nUR"                  S   nUR"                  S   n[$        R&                  " XEU R8                  XS9U l        U R:                  R                  R-                  U5        U R8                  (       a˜  [        R                  " U R2                  R.                  R                  U R4                  R.                  R                  U R6                  R.                  R                  /5      nU R:                  R.                  R-                  U5        SU l        g)zU
Fuse the query, key, and value projections into a single projection for efficiency.
zK does not support fusing QKV projections, so `fuse_projections` will no-op.NÚfused_projectionsFÚis_cross_attentionr   r   )Úbiasr‰   rŠ   Úuse_biasÚ
add_q_projÚ
add_k_projÚ
add_v_projT)rM   r`   ÚdebugrI   rJ   ÚgetattrÚto_qÚweightÚdatar‰   rŠ   r(   r›   r1   ÚcatÚto_kÚto_vÚshaper2   ÚLinearr�   Úto_kvÚcopy_rœ   Úto_qkvrž   rŸ   r    Úadded_proj_biasÚto_added_qkvrš   )r5   r‰   rŠ   Úconcatenated_weightsÚin_featuresÚout_featuresÚconcatenated_biass          r-   rN   Ú%AttentionModuleMixin.fuse_projections÷   sÓ  € ð ×(×(Ü�L‰LØ—>‘>×*Ñ*Ð+Ð+vÐwôð ô �4Ð,¨e×4Ñ4Øà—‘×!Ñ!×&Ñ&×-Ñ-ˆØ—	‘	× Ñ ×%Ñ%×+Ñ+ˆä�4Ð-×.Ò.°4×3J×3JÐ3Jä#(§9¢9¨d¯i©i×.>Ñ.>×.CÑ.CÀTÇYÁY×EUÑEU×EZÑEZÐ-[Ó#\Ð Ø.×4Ñ4°QÑ7ˆKØ/×5Ñ5°aÑ8ˆLäŸš ;À4Ç=Á=ÐY_ÑmˆDŒJØ�J‰J×Ñ×#Ñ#Ð$8Ô9Ü�t˜Z×(Ñ(¨T¯]¯]Ü$)§I¢I¨t¯y©y¯~©~×/BÑ/BÀDÇIÁIÇNÁN×DWÑDWÐ.XÓ$YÐ!Ø—
‘
—‘×%Ñ%Ð&7Ô8ùô $)§9¢9¨d¯i©i×.>Ñ.>×.CÑ.CÀTÇYÁY×EUÑEU×EZÑEZÐ\`×\eÑ\e×\lÑ\l×\qÑ\qÐ-rÓ#sÐ Ø.×4Ñ4°QÑ7ˆKØ/×5Ñ5°aÑ8ˆLäŸ)š) KÀDÇMÁMÐZ`ÑnˆDŒKØ�K‰K×Ñ×$Ñ$Ð%9Ô:Ü�t˜Z×(Ñ(¨T¯]¯]Ü$)§I¢I¨t¯y©y¯~©~×/BÑ/BÀDÇIÁIÇNÁN×DWÑDWÐY]×YbÑYb×YgÑYg×YlÑYlÐ.mÓ$nÐ!Ø—‘× Ñ ×&Ñ&Ð'8Ô9ô �D˜,¨Ó-Ò9Ü˜˜l¨DÓ1Ò=Ü˜˜l¨DÓ1Ò=ä#(§9¢9Ø—‘×'Ñ'×,Ñ,¨d¯o©o×.DÑ.D×.IÑ.IÈ4Ï?É?×KaÑKa×KfÑKfÐgó$Ð ð /×4Ñ4°QÑ7ˆKØ/×5Ñ5°aÑ8ˆLä "§	¢	Ø°×0DÑ0DÈVñ!ˆDÔð ×Ñ×$Ñ$×*Ñ*Ð+?Ô@Ø×#×#Ü$)§I¢IØ—_‘_×)Ñ)×.Ñ.°·±×0DÑ0D×0IÑ0IÈ4Ï?É?×K_ÑK_×KdÑKdÐeó%Ð!ð ×!Ñ!×&Ñ&×,Ñ,Ð->Ô?à!%ˆÕr/   c                 ó
  • U R                   (       d  g[        U SS5      (       d  g[        U S5      (       a  [        U S5        [        U S5      (       a  [        U S5        [        U S5      (       a  [        U S5        SU l        g)zL
Unfuse the query, key, and value projections back to separate projections.
Nrš   Fr­   r«   r¯   )rM   r¢   r(   Údelattrrš   )r5   s    r-   rT   Ú'AttentionModuleMixin.unfuse_projections:  st   € ð ×(×(Øô �tÐ0°%×8Ñ8Øô �4˜×"Ñ"Ü�D˜(Ô#ä�4˜×!Ñ!Ü�D˜'Ô"ä�4˜×(Ñ(Ü�D˜.Ô)à!&ˆÕr/   Ú
slice_sizec                 óö   • [        U S5      (       a.  Ub+  XR                  :”  a  [        SU SU R                   S35      eSnUb  U R                  S5      nUc  U R	                  5       nU R                  U5        g)z€
Set the slice size for attention computation.

Args:
    slice_size (`int`):
        The slice size for attention computation.
Úsliceable_head_dimNzslice_size z has to be smaller or equal to r'   Úsliced)r(   rº   rB   Ú_get_compatible_processorÚdefault_processor_clsr;   )r5   r¸   r8   s      r-   Úset_attention_sliceÚ(AttentionModuleMixin.set_attention_sliceT  s‡   € ô �4Ð-×.Ñ.°:Ñ3IÈj×[rÑ[rÓNrÜ˜{¨:¨,Ð6UÐVZ×VmÑVmÐUnÐnoÐpÓqÐqàˆ	ð Ñ!Ø×6Ñ6°xÓ@ˆIð ÑØ×2Ñ2Ó4ˆIà×Ñ˜9Õ%r/   Útensorc                 ó¸   • U R                   nUR                  u  p4nUR                  X2-  X$U5      nUR                  SSSS5      R                  X2-  XEU-  5      nU$ )zÖ
Reshape the tensor from `[batch_size, seq_len, dim]` to `[batch_size // heads, seq_len, dim * heads]`.

Args:
    tensor (`torch.Tensor`): The tensor to reshape.

Returns:
    `torch.Tensor`: The reshaped tensor.
r   r   r   é   )Úheadsr©   ÚreshapeÚpermute)r5   rÀ   Ú	head_sizeÚ
batch_sizeÚseq_lenÚdims         r-   Úbatch_to_head_dimÚ&AttentionModuleMixin.batch_to_head_dimk  s_   € ð —J‘Jˆ	Ø#)§<¡<Ñ ˆ
˜SØ—‘ 
Ñ 7¸ÈSÓQˆØ—‘  1 a¨Ó+×3Ñ3°JÑ4KÈWÐ\eÑVeÓfˆØˆr/   Úout_dimc                 ó  • U R                   nUR                  S:X  a  UR                  u  pEnSnOUR                  u  pGpVUR                  XEU-  X6U-  5      nUR	                  SSSS5      nUS:X  a  UR                  XC-  XW-  Xc-  5      nU$ )zý
Reshape the tensor for multi-head attention processing.

Args:
    tensor (`torch.Tensor`): The tensor to reshape.
    out_dim (`int`, *optional*, defaults to `3`): The output dimension of the tensor.

Returns:
    `torch.Tensor`: The reshaped tensor.
rÂ   r   r   r   )rÃ   Úndimr©   rÄ   rÅ   )r5   rÀ   rÌ   rÆ   rÇ   rÈ   rÉ   Ú	extra_dims           r-   Úhead_to_batch_dimÚ&AttentionModuleMixin.head_to_batch_dim{  s‘   € ð —J‘Jˆ	Ø�;‰;˜!ÓØ'-§|¡|Ñ$ˆJ Ø‰Ià28·,±,Ñ/ˆJ 7Ø—‘ 
°iÑ,?ÀÐS\ÑL\Ó]ˆØ—‘  1 a¨Ó+ˆà�a‹<Ø—^‘^ JÑ$:¸GÑ<OÐQTÑQaÓbˆFàˆr/   ÚqueryÚkeyÚattention_maskc                 ó$  • UR                   nU R                  (       a   UR                  5       nUR                  5       nUcV  [        R                  " UR
                  S   UR
                  S   UR
                  S   UR                   UR                  S9nSnOUnSn[        R                  " UUUR                  SS5      UU R                  S9nAU R                  (       a  UR                  5       nUR                  SS9nAUR                  U5      nU$ )a  
Compute the attention scores.

Args:
    query (`torch.Tensor`): The query tensor.
    key (`torch.Tensor`): The key tensor.
    attention_mask (`torch.Tensor`, *optional*): The attention mask to use.

Returns:
    `torch.Tensor`: The attention probabilities/scores.
r   r   ©rŠ   r‰   éÿÿÿÿéþÿÿÿ)ÚbetaÚalpha©rÉ   )rŠ   Úupcast_attentionÚfloatr1   Úemptyr©   r‰   ÚbaddbmmÚ	transposeÚscaleÚupcast_softmaxÚsoftmaxÚto)	r5   rÒ   rÓ   rÔ   rŠ   Úbaddbmm_inputrÙ   Úattention_scoresÚattention_probss	            r-   Úget_attention_scoresÚ)AttentionModuleMixin.get_attention_scores”  sõ   € ð —‘ˆØ× × Ø—K‘K“MˆEØ—)‘)“+ˆCàÑ!Ü!ŸKšKØ—‘˜A‘ §¡¨A¡°·	±	¸!±ÀEÇKÁKÐX]×XdÑXdñˆMð ‰Dà*ˆMØˆDä Ÿ=š=ØØØ�M‰M˜"˜bÓ!ØØ—*‘*ñ
Ðð à××Ø/×5Ñ5Ó7Ðà*×2Ñ2°rÐ2Ð:ˆØà)×,Ñ,¨UÓ3ˆàÐr/   Útarget_lengthrÇ   c                 ó  • U R                   nUc  U$ UR                  S   nXb:w  a‘  UR                  R                  S:X  a_  UR                  S   UR                  S   U4n[        R
                  " XqR                  UR                  S9n[        R                  " X/SS9nO[        R                  " USU4SS	9nUS
:X  a'  UR                  S   X5-  :  a  UR                  USS9nU$ US:X  a!  UR                  S5      nUR                  USS9nU$ )a’  
Prepare the attention mask for the attention computation.

Args:
    attention_mask (`torch.Tensor`): The attention mask to prepare.
    target_length (`int`): The target length of the attention mask.
    batch_size (`int`): The batch size for repeating the attention mask.
    out_dim (`int`, *optional*, defaults to `3`): Output dimension.

Returns:
    `torch.Tensor`: The prepared attention mask.
r×   Úmpsr   r   rÖ   r   rÛ   ç        )rm   rÂ   é   )rÃ   r©   r‰   Útyper1   ÚzerosrŠ   r¦   ÚFÚpadÚrepeat_interleaveÚ	unsqueeze)	r5   rÔ   rê   rÇ   rÌ   rÆ   Úcurrent_lengthÚpadding_shapeÚpaddings	            r-   Úprepare_attention_maskÚ+AttentionModuleMixin.prepare_attention_maskÃ  s!  € ð —J‘Jˆ	ØÑ!Ø!Ð!à,×2Ñ2°2Ñ6ˆØÓ*Ø×$Ñ$×)Ñ)¨UÓ2ð "0×!5Ñ!5°aÑ!8¸.×:NÑ:NÈqÑ:QÐS`Ð a�ÜŸ+š+ m×;OÑ;OÐXf×XmÑXmÑn�Ü!&§¢¨NÐ+DÈ!Ñ!L‘ô "#§¢ ~¸¸=Ð7IÐQTÑ!U�à�a‹<Ø×#Ñ# AÑ&¨Ñ)?Ó?Ø!/×!AÑ!AÀ)ÐQRÐ!AÐ!S�ð
 Ðð	 ˜‹\Ø+×5Ñ5°aÓ8ˆNØ+×=Ñ=¸iÈQÐ=ÐOˆNàÐr/   Úencoder_hidden_statesc                 óf  • U R                   c   S5       e[        U R                   [        R                  5      (       a  U R                  U5      nU$ [        U R                   [        R                  5      (       a7  UR                  SS5      nU R                  U5      nUR                  SS5      nU$  e)z»
Normalize the encoder hidden states.

Args:
    encoder_hidden_states (`torch.Tensor`): Hidden states of the encoder.

Returns:
    `torch.Tensor`: The normalized encoder hidden states.
zGself.norm_cross must be defined to call self.norm_encoder_hidden_statesr   r   )Ú
norm_crossr<   r2   Ú	LayerNormÚ	GroupNormrà   )r5   rú   s     r-   Únorm_encoder_hidden_statesÚ/AttentionModuleMixin.norm_encoder_hidden_statesî  s¥   € ð �‰Ñ*ÐuÐ,uÓuÐ*Ü�d—o‘o¤r§|¡|×4Ñ4Ø$(§O¡OÐ4IÓ$JÐ!ð %Ð$ô ˜Ÿ™¬¯©×6Ñ6ð %:×$CÑ$CÀAÀqÓ$IÐ!Ø$(§O¡OÐ4IÓ$JÐ!Ø$9×$CÑ$CÀAÀqÓ$IÐ!ð %Ð$ð �5r/   )rš   r8   r¯   r«   r­   )F)NF©N)rÂ   ) rJ   rX   rY   rZ   Ú_default_processor_clsÚ_available_processorsrM   rš   r   r;   Úboolr%   r0   rs   ry   Útupler€   r   r—   r1   Úno_gradrN   rT   Úintr¾   ÚTensorrÊ   rÐ   rè   rø   rÿ   r\   rW   r/   r-   rL   rL   y   së  † Ø!ÐØÐØÐØÐð#Ð'9ð #¸dô #ñ("°Dð "ÐEYõ "ð4¨Sô 4ð2À4ð 2ÈDô 2ð" 9=Øñ	2à!%ð2ð ˜c D™j¨#˜oÑ.°Ñ5ð2ð
 
õ2ð0 ^bñ%7Ø7;ð%7ØKSÐVZÉ?ð%7à	õ%7ðN ‡]‚]ƒ_ñ@&ó ð@&ðD ‡]‚]ƒ_ñ'ó ð'ð2&¨cð &°dô &ð.¨¯©ð ¸¿¹ô ñ ¨¯©ð ¸sð È5Ï<É<õ ð4 ]añ-Ø—\‘\ð-Ø(-¯©ð-ØFKÇlÁlÐUYÑFYð-à	�‰õ-ð` abñ)Ø#Ÿl™lð)Ø;>ð)ØLOð)ØZ]ð)à	�‰õ)ðV%ÀÇÁð %ÐQV×Q]ÑQ]÷ %r/   rL   ÚffÚhidden_statesÚ	chunk_dimÚ
chunk_sizec                 ó  • UR                   U   U-  S:w  a  [        SUR                   U    SU S35      eUR                   U   U-  n[        R                  " UR	                  XBS9 Vs/ s H
  oP" U5      PM     snUS9nU$ s  snf )Nr   z)`hidden_states` dimension to be chunked: z$ has to be divisible by chunk size: z[. Make sure to set an appropriate `chunk_size` when calling `unet.enable_forward_chunking`.rÛ   )r©   rB   r1   r¦   Úchunk)r	  r
  r  r  Ú
num_chunksÚ	hid_sliceÚ	ff_outputs          r-   Ú_chunked_feed_forwardr  
  s´   € à×Ñ˜9Ñ%¨
Ñ2°aÓ7ÜØ7¸×8KÑ8KÈIÑ8VÐ7WÐW{ð  }Gð  |Hð  Hcð  dó
ð 	
ð ×$Ñ$ YÑ/°:Ñ=€JÜ—	’	Ø(5×(;Ñ(;¸JÐ(;Ñ(VÓWÒ(V˜9ˆˆIŽÑ(VÑWØñ€Ið Ðùò 	Xs   Á)Bc                   ó’   ^ • \ rS rSrSrS\S\S\S\4U 4S jjrS\R                  S	\R                  S
\R                  4S jr	Sr
U =r$ )ÚGatedSelfAttentionDensei  aX  
A gated self-attention dense layer that combines visual features and object features.

Parameters:
    query_dim (`int`): The number of channels in the query.
    context_dim (`int`): The number of channels in the context.
    n_heads (`int`): The number of heads to use for attention.
    d_head (`int`): The number of channels in each head.
Ú	query_dimÚcontext_dimÚn_headsÚd_headc                 óö  >• [         TU ]  5         [        R                  " X!5      U l        [        XUS9U l        [        USS9U l        [        R                  " U5      U l
        [        R                  " U5      U l        U R                  S[        R                  " [        R                  " S5      5      5        U R                  S[        R                  " [        R                  " S5      5      5        SU l        g )N)r  rÃ   Údim_headÚgeglu©Úactivation_fnÚ
alpha_attnrí   Úalpha_denseT)ÚsuperÚ__init__r2   rª   Úlinearr   ÚattnÚFeedForwardr	  rý   Únorm1Únorm2Úregister_parameterÚ	Parameterr1   rÀ   Úenabled)r5   r  r  r  r  rI   s        €r-   r!  Ú GatedSelfAttentionDense.__init__%  s§   ø€ Ü‰ÑÔô —i’i Ó7ˆŒä¨	È6ÑRˆŒ	Ü˜i°wÑ?ˆŒä—\’\ )Ó,ˆŒ
Ü—\’\ )Ó,ˆŒ
à×Ñ ¬b¯lªl¼5¿<º<ÈÓ;LÓ.MÔNØ×Ñ ¬r¯|ª|¼E¿LºLÈÓ<MÓ/NÔOàˆ�r/   rq   Úobjsr   c                 ó   • U R                   (       d  U$ UR                  S   nU R                  U5      nXR                  R	                  5       U R                  U R                  [        R                  " X/SS95      5      S S 2S U2S S 24   -  -   nXR                  R	                  5       U R                  U R                  U5      5      -  -   nU$ )Nr   rÛ   )r)  r©   r"  r  Útanhr#  r%  r1   r¦   r  r	  r&  )r5   rq   r+  Ún_visuals       r-   ÚforwardÚGatedSelfAttentionDense.forward6  sª   € Ø�|�|ØˆHà—7‘7˜1‘:ˆØ�{‰{˜4Ó ˆà—‘×$Ñ$Ó&¨¯©°4·:±:¼e¿iºiÈÈ	ÐWXÑ>YÓ3ZÓ)[Ò\]Ð_hÐ`hÐ_hÒjkÐ\kÑ)lÑlÑlˆØ× Ñ ×%Ñ%Ó'¨$¯'©'°$·*±*¸Q³-Ó*@Ñ@Ñ@ˆàˆr/   )r#  r)  r	  r"  r%  r&  )rJ   rX   rY   rZ   Ú__doc__r  r!  r1   r  r/  r\   Ú__classcell__©rI   s   @r-   r  r    sT   ø† ñð #ð °Cð À#ð Ès÷ ð"
˜Ÿ™ð 
¨U¯\©\ð 
¸e¿l¹l÷ 
ò 
r/   r  c                   ó  ^ • \ rS rSrSr   SS\S\S\S\S\S-  S	\4U 4S
 jjjrSS\S-  S\4S jjr	 SS\
R                  S\
R                  S\
R                  S\\\4   S-  S\\
R                  \
R                  4   4
S jjrSrU =r$ )ÚJointTransformerBlockiC  a  
A Transformer block following the MMDiT architecture, introduced in Stable Diffusion 3.

Reference: https://huggingface.co/papers/2403.03206

Parameters:
    dim (`int`): The number of channels in the input and output.
    num_attention_heads (`int`): The number of heads to use for multi-head attention.
    attention_head_dim (`int`): The number of channels in each head.
    context_pre_only (`bool`): Boolean to determine if we should add some blocks associated with the
        processing of `context` conditions.
NrÉ   Únum_attention_headsÚattention_head_dimÚcontext_pre_onlyÚqk_normÚuse_dual_attentionc                 óÞ  >• [         T	U ]  5         X`l        X@l        U(       a  SOSnU(       a  [	        U5      U l        O[        U5      U l        US:X  a  [        XSSSSS9U l        O&US:X  a  [        U5      U l        O[        SU S	35      e[        [        S
5      (       a  [        5       nO[        S5      e[        US UUUUUSUUSS9U l        U(       a  [        US UUUSUUSS9	U l        OS U l        [         R"                  " USSS9U l        ['        XSS9U l        U(       d+  [         R"                  " USSS9U l        ['        XSS9U l        OS U l        S U l        S U l        SU l        g )NÚada_norm_continousÚada_norm_zeroFç�íµ ÷Æ°>TÚ
layer_norm)Úelementwise_affineÚepsrœ   Ú	norm_typezUnknown context_norm_type: z>, currently only support `ada_norm_continous`, `ada_norm_zero`Úscaled_dot_product_attentionzYThe current PyTorch version does not support the `scaled_dot_product_attention` function.)r  Úcross_attention_dimÚadded_kv_proj_dimr  rÃ   rÌ   r8  rœ   r8   r9  rA  )	r  rD  r  rÃ   rÌ   rœ   r8   r9  rA  ©r@  rA  úgelu-approximate)rÉ   Údim_outr  r   )r   r!  r:  r8  r   r%  r   r   Únorm1_contextrB   r(   rñ   r   r   r#  Úattn2r2   rý   r&  r$  r	  Únorm2_contextÚ
ff_contextÚ_chunk_sizeÚ
_chunk_dim)
r5   rÉ   r6  r7  r8  r9  r:  Úcontext_norm_typer8   rI   s
            €r-   r!  ÚJointTransformerBlock.__init__R  sŽ  ø€ ô 	‰ÑÔà"4ÔØ 0ÔÞ4DÑ0È/ÐæÜ.¨sÓ3ˆD�Jä)¨#Ó.ˆDŒJàÐ 4Ó4Ü!7Ø¨U¸À4ÐS_ñ"ˆDÕð  /Ó1Ü!1°#Ó!6ˆDÕäØ-Ð.?Ð-@Ð@~Ðóð ô ”1Ð4×5Ñ5Ü-Ó/‰IäØkóð ô ØØ $Ø!Ø'Ø%ØØ-ØØØØñ
ˆŒ	ö Ü"ØØ$(Ø+Ø)ØØØ#ØØñ
ˆD�Jð ˆDŒJä—\’\ #¸%ÀTÑJˆŒ
Ü #ÐBTÑUˆŒæÜ!#§¢¨cÀeÐQUÑ!VˆDÔÜ)¨cÐN`ÑaˆD�Oà!%ˆDÔØ"ˆDŒOð  ˆÔØˆ�r/   r  c                 ó   • Xl         X l        g r  ©rM  rN  ©r5   r  rÉ   s      r-   Úset_chunk_feed_forwardÚ,JointTransformerBlock.set_chunk_feed_forward¤  ó   € à%ÔØ�r/   r
  rú   ÚtembÚjoint_attention_kwargsr   c                 óh  • U=(       d    0 nU R                   (       a  U R                  XS9u  pVpxpšnOU R                  XS9u  pVpxn	U R                  (       a  U R                  X#5      nOU R                  X#S9u  pÍpïnU R                  " SUUS.UD6u  nnUR                  S5      U-  nUU-   nU R                   (       a-  U R                  " SSW
0UD6nWR                  S5      U-  nUU-   nU R                  U5      nUSUS S 2S 4   -   -  US S 2S 4   -   nU R                  b,  [        U R                  XPR                  U R                  5      nOU R                  U5      nU	R                  S5      U-  nUU-   nU R                  (       a  S nX!4$ WR                  S5      U-  nUU-   nU R                  U5      nUSWS S 2S 4   -   -  WS S 2S 4   -   nU R                  b,  [        U R                  XÀR                  U R                  5      nOU R                  U5      nUWR                  S5      U-  -   nX!4$ )N)Úemb)r
  rú   r   r
  rW   )r:  r%  r8  rI  r#  rô   rJ  r&  rM  r  r	  rN  rK  rL  )r5   r
  rú   rW  rX  Únorm_hidden_statesÚgate_msaÚ	shift_mlpÚ	scale_mlpÚgate_mlpÚnorm_hidden_states2Ú	gate_msa2rÿ   Ú
c_gate_msaÚc_shift_mlpÚc_scale_mlpÚ
c_gate_mlpÚattn_outputÚcontext_attn_outputÚattn_output2r  Úcontext_ff_outputs                         r-   r/  ÚJointTransformerBlock.forward©  s�  € ð "8×!=¸2ÐØ×"×"Øko×kuÑkuØð lvð lÑhÐ¨)ÀÑ_hð LPÏ:É:ÐVcÈ:ÐKnÑHÐ¨)Àà× × Ø)-×);Ñ);Ð<QÓ)XÑ&à[_×[mÑ[mØ%ð \nð \ÑXÐ&°KÈjð
 ,0¯9ª9ð ,
Ø,Ø"<ñ,
ð %ñ,
Ñ(ˆÐ(ð ×(Ñ(¨Ó+¨kÑ9ˆØ%¨Ñ3ˆà×"×"ØŸ:š:ÑbÐ4GÐbÐKaÑbˆLØ$×.Ñ.¨qÓ1°LÑ@ˆLØ)¨LÑ8ˆMà!ŸZ™Z¨Ó6ÐØ/°1°yÂÀDÀÑ7IÑ3IÑJÈYÒWXÐZ^ÐW^ÑM_Ñ_ÐØ×ÑÑ'ä-¨d¯g©gÐ7IÏ?É?Ð\`×\lÑ\lÓm‰IàŸ™Ð 2Ó3ˆIØ×&Ñ& qÓ)¨IÑ5ˆ	à%¨	Ñ1ˆð × × Ø$(Ð!ð  %Ð3Ð3ð #-×"6Ñ"6°qÓ"9Ð<OÑ"OÐØ$9Ð<OÑ$OÐ!à)-×);Ñ);Ð<QÓ)RÐ&Ø)CÀqÈ;ÒWXÐZ^ÐW^ÑK_ÑG_Ñ)`ÐcnÒopÐrvÐovÑcwÑ)wÐ&Ø×ÑÑ+ä$9Ø—O‘OÐ%?ÇÁÐRV×RbÑRbó%Ñ!ð %)§O¡OÐ4NÓ$OÐ!Ø$9¸J×<PÑ<PÐQRÓ<SÐVgÑ<gÑ$gÐ!à$Ð3Ð3r/   )rN  rM  r#  rJ  r8  r	  rL  r%  rI  r&  rK  r:  )FNF©r   r  )rJ   rX   rY   rZ   r1  r  r  r0   r!  rT  r1   ÚFloatTensorr4   r   r  r  r/  r\   r2  r3  s   @r-   r5  r5  C  sò   ø† ñð$ "'Ø"Ø#(ñOàðOð !ðOð  ð	Oð
 ðOð �t‘ðOð !÷Oð Oñd°°t±ð À#õ ð 9=ñC4à×(Ñ(ðC4ð  %×0Ñ0ðC4ð ×Ñð	C4ð
 !% S¨# X¡°Ñ 5ðC4ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷C4ó C4r/   r5  c            -       ó  ^ • \ rS rSrSr                    S(S\S\S\S\S-  S\S	\S-  S
\S\S\S\S\S\S\S\S\S\S-  S\S-  S\S-  S\S-  S\S-  S\S\4,U 4S jjjr	S)S\S-  S\4S jjr
       S*S\R                  S\R                  S-  S\R                  S-  S \R                  S-  S!\R                  S-  S"\\\4   S#\R                  S-  S$\\\R                  4   S-  S%\R                  4S& jjrS'rU =r$ )+ÚBasicTransformerBlockiï  ah  
A basic Transformer block.

Parameters:
    dim (`int`): The number of channels in the input and output.
    num_attention_heads (`int`): The number of heads to use for multi-head attention.
    attention_head_dim (`int`): The number of channels in each head.
    dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use.
    cross_attention_dim (`int`, *optional*): The size of the encoder_hidden_states vector for cross attention.
    activation_fn (`str`, *optional*, defaults to `"geglu"`): Activation function to be used in feed-forward.
    num_embeds_ada_norm (:
        obj: `int`, *optional*): The number of diffusion steps used during training. See `Transformer2DModel`.
    attention_bias (:
        obj: `bool`, *optional*, defaults to `False`): Configure if the attentions should contain a bias parameter.
    only_cross_attention (`bool`, *optional*):
        Whether to use only cross-attention layers. In this case two cross attention layers are used.
    double_self_attention (`bool`, *optional*):
        Whether to use two self-attention layers. In this case no cross attention layers are used.
    upcast_attention (`bool`, *optional*):
        Whether to upcast the attention computation to float32. This is useful for mixed precision training.
    norm_elementwise_affine (`bool`, *optional*, defaults to `True`):
        Whether to use learnable elementwise affine parameters for normalization.
    norm_type (`str`, *optional*, defaults to `"layer_norm"`):
        The normalization layer to use. Can be `"layer_norm"`, `"ada_norm"` or `"ada_norm_zero"`.
    final_dropout (`bool` *optional*, defaults to False):
        Whether to apply a final dropout after the last feed-forward layer.
    attention_type (`str`, *optional*, defaults to `"default"`):
        The type of attention to use. Can be `"default"` or `"gated"` or `"gated-text-image"`.
    positional_embeddings (`str`, *optional*, defaults to `None`):
        The type of positional embeddings to apply to.
    num_positional_embeddings (`int`, *optional*, defaults to `None`):
        The maximum number of positional embeddings to apply.
NrÉ   r6  r7  rD  r  Únum_embeds_ada_normÚattention_biasÚonly_cross_attentionÚdouble_self_attentionrÜ   Únorm_elementwise_affinerB  Únorm_epsÚfinal_dropoutÚattention_typeÚpositional_embeddingsÚnum_positional_embeddingsÚ-ada_norm_continous_conditioning_embedding_dimÚada_norm_biasÚff_inner_dimÚff_biasÚattention_out_biasc                 óÚ  >• [         TU ]  5         Xl        X l        X0l        X@l        XPl        X`l        X€l        X l	        XÀl
        UU l        UU l        X�l        US L=(       a    US:H  U l        US L=(       a    US:H  U l        US:H  U l        US:H  U l        US:H  U l        US;   a  Uc  ['        SU SU S	35      eXÐl        Xpl        U(       a  Uc  ['        S
5      eUS:X  a  [-        UUS9U l        OS U l        US:X  a  [1        X5      U l        OMUS:X  a  [5        X5      U l        O6US:X  a  [7        UUUUUS5      U l        O[8        R:                  " XUS9U l        [=        UUUUUU	(       a  UOS UUS9U l        Uc  U
(       an  US:X  a  [1        X5      U l         O8US:X  a  [7        UUUUUS5      U l         O[8        R:                  " XU5      U l         [=        UU
(       d  UOS UUUUUUS9U l!        O1US:X  a  [8        R:                  " XU5      U l         OS U l         S U l!        US:X  a  [7        UUUUUS5      U l"        O0US;   a  [8        R:                  " XU5      U l"        OUS:X  a  S U l"        [G        UUUUUUS9U l$        US:X  d  US:X  a  [K        XX#5      U l&        US:X  a6  [8        RN                  " [P        RR                  " SU5      US-  -  5      U l*        S U l+        SU l,        g )Nr=  Úada_normÚada_norm_singler?  Úada_norm_continuous©r  r=  ú`norm_type` is set to úw, but `num_embeds_ada_norm` is not defined. Please make sure to define `num_embeds_ada_norm` if setting `norm_type` to r'   ú\If `positional_embedding` type is defined, `num_positition_embeddings` must also be defined.Ú
sinusoidal©Úmax_seq_lengthÚrms_normrF  ©r  rÃ   r  Údropoutrœ   rD  rÜ   Úout_bias©r  rD  rÃ   r  r‹  rœ   rÜ   rŒ  )r=  r  r?  Úlayer_norm_i2vgen©r‹  r  ru  Ú	inner_dimrœ   Úgatedzgated-text-imageé   g      à?r   )-r   r!  rÉ   r6  r7  r‹  rD  r  rp  rr  rs  rw  rx  rq  Úuse_ada_layer_norm_zeroÚuse_ada_layer_normÚuse_ada_layer_norm_singleÚuse_layer_normÚuse_ada_layer_norm_continuousrB   rB  ro  r   Ú	pos_embedr   r%  r   r   r2   rý   r   Úattn1r&  rJ  Únorm3r$  r	  r  Úfuserr(  r1   rŽ   Úscale_shift_tablerM  rN  )r5   rÉ   r6  r7  r‹  rD  r  ro  rp  rq  rr  rÜ   rs  rB  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  rI   s                           €r-   r!  ÚBasicTransformerBlock.__init__  sL  ø€ ô4 	‰ÑÔØŒØ#6Ô Ø"4ÔØŒØ#6Ô Ø*ÔØ,ÔØ%:Ô"Ø'>Ô$Ø%:ˆÔ"Ø)BˆÔ&Ø$8Ô!ð )<À4Ð(G×'iÈYÐZiÑMiˆÔ$Ø#6¸dÐ#B×"_È	ÐU_ÑH_ˆÔØ)2Ð6GÑ)GˆÔ&Ø'¨<Ñ7ˆÔØ-6Ð:OÑ-OˆÔ*àÐ5Ó5Ð:MÑ:UÜØ(¨¨ð 4KØKTÈ+ÐUVðXóð ð
 #ŒØ#6Ô æ Ð&?Ñ&GÜØnóð ð ! LÓ0Ü:¸3ÐOhÑiˆD�Nà!ˆDŒNð ˜
Ó"Ü% cÓ?ˆD�JØ˜/Ó)Ü)¨#ÓCˆD�JØÐ/Ó/Ü/ØØ=Ø'ØØØóˆD�Jô Ÿš cÐ[cÑdˆDŒJäØØ%Ø'ØØÞ7KÑ 3ÐQUØ-Ø'ñ	
ˆŒ
ð Ñ*Ö.Cð ˜JÓ&Ü)¨#ÓC�•
ØÐ3Ó3Ü3ØØAØ+ØØ!Øó�•
ô  Ÿ\š\¨#Ð9PÓQ�”
ä"ØÞ?TÑ$7ÐZ^Ø)Ø+ØØ#Ø!1Ø+ñ	ˆD�Jð Ð-Ó-ÜŸ\š\¨#Ð9PÓQ�•
à!�”
ØˆDŒJð Ð-Ó-Ü/ØØ=Ø'ØØØóˆD�Jð ÐEÓEÜŸš cÐ5LÓMˆD�JØÐ-Ó-ØˆDŒJäØØØ'Ø'Ø"Øñ
ˆŒð ˜WÓ$¨Ð:LÓ(LÜ0°ÐK^ÓsˆDŒJð Ð)Ó)Ü%'§\¢\´%·+²+¸aÀÓ2EÈÈSÉÑ2PÓ%QˆDÔ"ð  ˆÔØˆ�r/   r  c                 ó   • Xl         X l        g r  rR  rS  s      r-   rT  Ú,BasicTransformerBlock.set_chunk_feed_forward»  rV  r/   r
  rÔ   rú   Úencoder_attention_maskÚtimestepÚcross_attention_kwargsÚclass_labelsÚadded_cond_kwargsr   c	                 ó–  • Ub(  UR                  SS 5      b  [        R                  S5        UR                  S   n	U R                  S:X  a  U R                  X5      n
OäU R                  S:X  a  U R                  XXqR                  S9u  p«pÍnOµU R                  S;   a  U R                  U5      n
O“U R                  S:X  a  U R                  XS	   5      n
OnU R                  S
:X  aS  U R                  S    UR                  U	SS5      -   R                  SSS9u  nnp¼pÞU R                  U5      n
U
SU-   -  U-   n
O[        S5      eU R                  b  U R                  U
5      n
Ub  UR                  5       O0 nUR                  SS 5      nU R                  " U
4U R                  (       a  UOS US.UD6nU R                  S:X  a  WR!                  S5      U-  nOU R                  S
:X  a  WU-  nUU-   nUR"                  S:X  a  UR%                  S5      nUb  U R'                  UUS   5      nU R(                  bÐ  U R                  S:X  a  U R+                  X5      n
OeU R                  S;   a  U R+                  U5      n
OCU R                  S
:X  a  Un
O0U R                  S:X  a  U R+                  XS	   5      n
O[        S5      eU R                  b!  U R                  S
:w  a  U R                  U
5      n
U R(                  " U
4UUS.UD6nUU-   nU R                  S:X  a  U R-                  XS	   5      n
O!U R                  S
:X  d  U R-                  U5      n
U R                  S:X  a  U
SWS S 2S 4   -   -  WS S 2S 4   -   n
U R                  S
:X  a  U R+                  U5      n
U
SW-   -  W-   n
U R.                  b,  [1        U R2                  X R4                  U R.                  5      nOU R3                  U
5      nU R                  S:X  a  WR!                  S5      U-  nOU R                  S
:X  a  WU-  nUU-   nUR"                  S:X  a  UR%                  S5      nU$ )Nrá   úSPassing `scale` to `cross_attention_kwargs` is deprecated. `scale` will be ignored.r   r  r=  )Úhidden_dtype)r?  rŽ  r�  Úpooled_text_embr€  r’  r×   r   rÛ   zIncorrect norm usedÚgligen©rú   rÔ   rî   r+  )r=  r?  rŽ  zIncorrect norm)Úgetr`   Úwarningr©   rB  r%  rŠ   rœ  rÄ   r  rB   r˜  Úcopyr=   r™  rq  rô   rÎ   Úsqueezer›  rJ  r&  rš  rM  r  r	  rN  )r5   r
  rÔ   rú   r   r¡  r¢  r£  r¤  rÇ   r[  r\  r]  r^  r_  Ú	shift_msaÚ	scale_msaÚgligen_kwargsrf  r  s                       r-   r/  ÚBasicTransformerBlock.forwardÀ  sd  € ð "Ñ-Ø%×)Ñ)¨'°4Ó8ÑDÜ—‘ÐtÔuð #×(Ñ(¨Ñ+ˆ
à�>‰>˜ZÓ'Ø!%§¡¨MÓ!DÑØ�^‰^˜Ó.ØKOÏ:É:Ø¨×DWÑDWð LVð LÑHÐ¨)Áð �^‰^ÐBÓBØ!%§¡¨MÓ!:ÑØ�^‰^Ð4Ó4Ø!%§¡¨MÐM^Ñ;_Ó!`ÑØ�^‰^Ð0Ó0à×&Ñ& tÑ,¨x×/?Ñ/?À
ÈAÈrÓ/RÑRß‰e�A˜1ˆeˆoñ KˆI�y (°yð "&§¡¨MÓ!:ÐØ!3°q¸9±}Ñ!EÈ	Ñ!QÑäÐ2Ó3Ð3à�>‰>Ñ%Ø!%§¡Ð0BÓ!CÐð CYÑBdÐ!7×!<Ñ!<Ô!>ÐjlÐØ.×2Ñ2°8¸TÓBˆà—j’jØð
à;?×;T×;TÑ"7ÐZ^Ø)ñ
ð %ñ	
ˆð �>‰>˜_Ó,Ø"×,Ñ,¨QÓ/°+Ñ=‰KØ�^‰^Ð0Ó0Ø" [Ñ0ˆKà# mÑ3ˆØ×Ñ Ó"Ø)×1Ñ1°!Ó4ˆMð Ñ$Ø ŸJ™J }°mÀFÑ6KÓLˆMð �:‰:Ñ!Ø�~‰~ Ó+Ø%)§Z¡Z°Ó%HÑ"Ø—‘Ð#WÓWØ%)§Z¡Z°Ó%>Ñ"Ø—‘Ð#4Ó4ð &3Ñ"Ø—‘Ð#8Ó8Ø%)§Z¡Z°ÐQbÑ?cÓ%dÑ"ä Ð!1Ó2Ð2à�~‰~Ñ)¨d¯n©nÐ@QÓ.QØ%)§^¡^Ð4FÓ%GÐ"àŸ*š*Ø"ðà&;Ø5ñð )ñ	ˆKð (¨-Ñ7ˆMð �>‰>Ð2Ó2Ø!%§¡¨MÐM^Ñ;_Ó!`ÑØ—‘Ð#4Ó4Ø!%§¡¨MÓ!:Ðà�>‰>˜_Ó,Ø!3°q¸9ÂQÈÀWÑ;MÑ7MÑ!NÐQZÒ[\Ð^bÐ[bÑQcÑ!cÐà�>‰>Ð.Ó.Ø!%§¡¨MÓ!:ÐØ!3°q¸9±}Ñ!EÈ	Ñ!QÐà×ÑÑ'ä-¨d¯g©gÐ7IÏ?É?Ð\`×\lÑ\lÓm‰IàŸ™Ð 2Ó3ˆIà�>‰>˜_Ó,Ø ×*Ñ*¨1Ó-°	Ñ9‰IØ�^‰^Ð0Ó0Ø  9Ñ,ˆIà! MÑ1ˆØ×Ñ Ó"Ø)×1Ñ1°!Ó4ˆMàÐr/   )rN  rM  r  rp  r7  r™  rJ  rD  rÉ   rr  r‹  r	  r›  r%  r&  rš  rs  rB  r6  ro  rx  rq  r˜  rw  rœ  r”  r—  r•  r“  r–  )rí   Nr  NFFFFTr?  çñhãˆµøä>FÚdefaultNNNNNTTrk  )NNNNNNN)rJ   rX   rY   rZ   r1  r  r0   r  rÝ   r!  rT  r1   r  Ú
LongTensorr4   r   r/  r\   r2  r3  s   @r-   rn  rn  ï  sO  ø† ñ ðN Ø*.Ø$Ø*.Ø$Ø%*Ø&+Ø!&Ø(,Ø%ØØ#Ø'Ø,0Ø04ØDHØ$(Ø#'ØØ#'ñ1fàðfð !ðfð  ð	fð ! 4™Zðfð ðfð ! 4™Zðfð ðfð #ðfð  $ðfð ðfð "&ðfð ðfð ðfð  ð!fð" ð#fð$  # T™zð%fð& $'¨¡:ð'fð( 8;¸T±zð)fð* ˜T‘zð+fð, ˜D‘jð-fð. ð/fð0 !÷1fð fñP°°t±ð À#õ ð /3Ø59Ø6:Ø,0Ø15Ø04Ø<@ñxà—|‘|ðxð Ÿ™ tÑ+ðxð  %Ÿ|™|¨dÑ2ð	xð
 !&§¡¨tÑ 3ðxð ×"Ñ" TÑ)ðxð !% S¨# X¡ðxð ×&Ñ&¨Ñ-ðxð    U§\¡\Ð 1Ñ2°TÑ9ðxð 
�‰÷xó xr/   rn  c            
       óZ   ^ • \ rS rSrSr  SS\S\S\S-  S\S-  4U 4S jjjrS	 rS
r	U =r
$ )ÚLuminaFeedForwardi;  aû  
A feed-forward layer.

Parameters:
    hidden_size (`int`):
        The dimensionality of the hidden layers in the model. This parameter determines the width of the model's
        hidden representations.
    intermediate_size (`int`): The intermediate dimension of the feedforward layer.
    multiple_of (`int`, *optional*): Value to ensure hidden dimension is a multiple
        of this value.
    ffn_dim_multiplier (float, *optional*): Custom multiplier for hidden
        dimension. Defaults to None.
NrÉ   r�  Úmultiple_ofÚffn_dim_multiplierc                 ó  >• [         TU ]  5         Ub  [        XB-  5      nX2U-   S-
  U-  -  n[        R                  " UUSS9U l        [        R                  " UUSS9U l        [        R                  " UUSS9U l        [        5       U l	        g )Nr   F©rœ   )
r   r!  r  r2   rª   Úlinear_1Úlinear_2Úlinear_3r   Úsilu)r5   rÉ   r�  r¸  r¹  rI   s        €r-   r!  ÚLuminaFeedForward.__init__J  s•   ø€ ô 	‰ÑÔàÑ)ÜÐ.Ñ:Ó;ˆIØ°Ñ$;¸aÑ$?ÀKÑ#OÑPˆ	äŸ	š	ØØØñ
ˆŒô
 Ÿ	š	ØØØñ
ˆŒô
 Ÿ	š	ØØØñ
ˆŒô
 “Jˆ�	r/   c                 ó„   • U R                  U R                  U R                  U5      5      U R                  U5      -  5      $ r  )r½  r¿  r¼  r¾  )r5   rq   s     r-   r/  ÚLuminaFeedForward.forwardh  s1   € Ø�}‰}˜TŸY™Y t§}¡}°QÓ'7Ó8¸4¿=¹=ÈÓ;KÑKÓLÐLr/   )r¼  r½  r¾  r¿  )é   N)rJ   rX   rY   rZ   r1  r  rÝ   r!  r/  r\   r2  r3  s   @r-   r·  r·  ;  sT   ø† ñð$ #&Ø+/ñàðð ðð ˜4‘Zð	ð
 " D™L÷ð ÷<Mð Mr/   r·  c                   óÆ   ^ • \ rS rSrSr SS\S\S\S\S\S-  4
U 4S	 jjjrS
\S-  4S jr SS\R                  S\S\R                  S-  S\R                  4S jjr
SrU =r$ )ÚTemporalBasicTransformerBlockil  a×  
A basic Transformer block for video like data.

Parameters:
    dim (`int`): The number of channels in the input and output.
    time_mix_inner_dim (`int`): The number of channels for temporal attention.
    num_attention_heads (`int`): The number of heads to use for multi-head attention.
    attention_head_dim (`int`): The number of channels in each head.
    cross_attention_dim (`int`, *optional*): The size of the encoder_hidden_states vector for cross attention.
NrÉ   Útime_mix_inner_dimr6  r7  rD  c                 óÎ  >• [         TU ]  5         X:H  U l        [        R                  " U5      U l        [        UUSS9U l        [        R                  " U5      U l        [        UUUS S9U l
        Ub-  [        R                  " U5      U l        [        UUUUS9U l        OS U l        S U l        [        R                  " U5      U l        [        USS9U l        S U l        S U l        g )Nr  )rH  r  )r  rÃ   r  rD  )r  rD  rÃ   r  r  )r   r!  Úis_resr2   rý   Únorm_inr$  Úff_inr%  r   r™  r&  rJ  rš  r	  rM  rN  )r5   rÉ   rÆ  r6  r7  rD  rI   s         €r-   r!  Ú&TemporalBasicTransformerBlock.__init__y  sâ   ø€ ô 	‰ÑÔØÑ/ˆŒä—|’| CÓ(ˆŒô !ØØ&Ø!ñ
ˆŒ
ô —\’\Ð"4Ó5ˆŒ
ÜØ(Ø%Ø'Ø $ñ	
ˆŒ
ð Ñ*ô ŸšÐ&8Ó9ˆDŒJÜ"Ø,Ø$7Ø)Ø+ñ	ˆD�Jð ˆDŒJØˆDŒJô —\’\Ð"4Ó5ˆŒ
ÜÐ0ÀÑHˆŒð  ˆÔØˆ�r/   r  c                 ó   • Xl         SU l        g )Nr   rR  )r5   r  Úkwargss      r-   rT  Ú4TemporalBasicTransformerBlock.set_chunk_feed_forward®  s   € à%Ôàˆ�r/   r
  Ú
num_framesrú   r   c                 óÄ  • UR                   S   nUR                   u  pVnXR-  nUS S S 24   R                  XBXg5      nUR                  SSSS5      nUR                  XF-  X'5      nUnU R                  U5      nU R                  b,  [        U R                  XR                  U R                  5      nOU R                  U5      nU R                  (       a  X-   nU R                  U5      n	U R                  U	S S9n
X¡-   nU R                  b$  U R                  U5      n	U R                  X“S9n
X¡-   nU R                  U5      n	U R                  b,  [        U R                  X�R                  U R                  5      nOU R                  U	5      nU R                  (       a  X±-   nOUnUS S S 24   R                  XFX'5      nUR                  SSSS5      nUR                  XB-  Xg5      nU$ )Nr   r   r   rÂ   )rú   )r©   rÄ   rÅ   rÉ  rM  r  rÊ  rN  rÈ  r%  r™  rJ  r&  rš  r	  )r5   r
  rÏ  rú   rÇ   Úbatch_framesÚ
seq_lengthÚchannelsÚresidualr[  rf  r  s               r-   r/  Ú%TemporalBasicTransformerBlock.forward´  sÓ  € ð #×(Ñ(¨Ñ+ˆ
à-:×-@Ñ-@Ñ*ˆ (Ø!Ñ/ˆ
à% dªA gÑ.×6Ñ6°zÈzÓdˆØ%×-Ñ-¨a°°A°qÓ9ˆØ%×-Ñ-¨jÑ.EÀzÓ\ˆà ˆØŸ™ ]Ó3ˆà×ÑÑ'Ü1°$·*±*¸mÏ_É_Ð^b×^nÑ^nÓo‰Mà ŸJ™J }Ó5ˆMà�;�;Ø)Ñ4ˆMà!ŸZ™Z¨Ó6ÐØ—j‘jÐ!3È4�jÐPˆØ#Ñ3ˆð �:‰:Ñ!Ø!%§¡¨MÓ!:ÐØŸ*™*Ð%7˜*ÐeˆKØ'Ñ7ˆMð "ŸZ™Z¨Ó6Ðà×ÑÑ'Ü-¨d¯g©gÐ7IÏ?É?Ð\`×\lÑ\lÓm‰IàŸ™Ð 2Ó3ˆIà�;�;Ø%Ñ5‰Mà%ˆMà% dªA gÑ.×6Ñ6°zÈzÓdˆØ%×-Ñ-¨a°°A°qÓ9ˆØ%×-Ñ-¨jÑ.EÀzÓ\ˆàÐr/   )rN  rM  r™  rJ  r	  rÊ  rÈ  r%  r&  rš  rÉ  r  )rJ   rX   rY   rZ   r1  r  r!  rT  r1   r  r/  r\   r2  r3  s   @r-   rÅ  rÅ  l  s¢   ø† ñ	ð" +/ñ3àð3ð  ð3ð !ð	3ð
  ð3ð ! 4™Z÷3ð 3ðj°°t±ô ð 6:ñ	7à—|‘|ð7ð ð7ð  %Ÿ|™|¨dÑ2ð	7ð
 
�‰÷7ó 7r/   rÅ  c                   ód   ^ • \ rS rSr    SS\S\S\S\S\S\S-  S	\S
\4U 4S jjjrS rSrU =r	$ )ÚSkipFFTransformerBlockiî  NrÉ   r6  r7  Úkv_input_dimÚkv_input_dim_proj_use_biasrD  rp  r}  c
           
      ó  >• [         T
U ]  5         XA:w  a  [        R                  " XAU5      U l        OS U l        [        US5      U l        [        UUUUUUU	S9U l        [        US5      U l	        [        UUUUUUU	S9U l
        g )Nr>  )r  rÃ   r  r‹  rœ   rD  rŒ  )r  rD  rÃ   r  r‹  rœ   rŒ  )r   r!  r2   rª   Ú	kv_mapperr   r%  r   r™  r&  rJ  )r5   rÉ   r6  r7  rØ  rÙ  r‹  rD  rp  r}  rI   s             €r-   r!  ÚSkipFFTransformerBlock.__init__ï  s�   ø€ ô 	‰ÑÔØÓÜŸYšY |Ð:TÓUˆD�Nà!ˆDŒNä˜S %Ó(ˆŒ
äØØ%Ø'ØØØ 3Ø'ñ
ˆŒ
ô ˜S %Ó(ˆŒ
äØØ 3Ø%Ø'ØØØ'ñ
ˆ�
r/   c                 ó<  • Ub  UR                  5       O0 nU R                  b%  U R                  [        R                  " U5      5      nU R	                  U5      nU R
                  " U4SU0UD6nXQ-   nU R                  U5      nU R                  " U4SU0UD6nXQ-   nU$ )Nrú   )r­  rÛ  rñ   r¿  r%  r™  r&  rJ  )r5   r
  rú   r¢  r[  rf  s         r-   r/  ÚSkipFFTransformerBlock.forward  s»   € ØBXÑBdÐ!7×!<Ñ!<Ô!>ÐjlÐà�>‰>Ñ%Ø$(§N¡N´1·6²6Ð:OÓ3PÓ$QÐ!à!ŸZ™Z¨Ó6Ðà—j’jØñ
à"7ð
ð %ñ
ˆð $Ñ3ˆà!ŸZ™Z¨Ó6Ðà—j’jØñ
à"7ð
ð %ñ
ˆð $Ñ3ˆàÐr/   )r™  rJ  rÛ  r%  r&  )rí   NFT)
rJ   rX   rY   rZ   r  r  r!  r/  r\   r2  r3  s   @r-   r×  r×  î  sx   ø† ð Ø*.Ø$Ø#'ñ(
àð(
ð !ð(
ð  ð	(
ð
 ð(
ð %)ð(
ð ! 4™Zð(
ð ð(
ð !÷(
ð (
÷Tð r/   r×  c            /       ó  ^ • \ rS rSrSr                    S*S\S\S\S\S\S-  S	\S
\S-  S\S\S\S\S\S\S\S\S\S-  S\S-  S\S-  S\S\S\S\S\4.U 4S jjjr	S\S\
\\\4      4S jrS+S\S\S\
\   4S jjr S+S\S\S\SS4S  jjrS,S!\S-  S\SS4S" jjr    S-S#\R"                  S$\R"                  S-  S%\R"                  S-  S&\R"                  S-  S'\\\4   S\R"                  4S( jjrS)rU =r$ ).ÚFreeNoiseTransformerBlocki6  aÐ  
A FreeNoise Transformer block.

Parameters:
    dim (`int`):
        The number of channels in the input and output.
    num_attention_heads (`int`):
        The number of heads to use for multi-head attention.
    attention_head_dim (`int`):
        The number of channels in each head.
    dropout (`float`, *optional*, defaults to 0.0):
        The dropout probability to use.
    cross_attention_dim (`int`, *optional*):
        The size of the encoder_hidden_states vector for cross attention.
    activation_fn (`str`, *optional*, defaults to `"geglu"`):
        Activation function to be used in feed-forward.
    num_embeds_ada_norm (`int`, *optional*):
        The number of diffusion steps used during training. See `Transformer2DModel`.
    attention_bias (`bool`, defaults to `False`):
        Configure if the attentions should contain a bias parameter.
    only_cross_attention (`bool`, defaults to `False`):
        Whether to use only cross-attention layers. In this case two cross attention layers are used.
    double_self_attention (`bool`, defaults to `False`):
        Whether to use two self-attention layers. In this case no cross attention layers are used.
    upcast_attention (`bool`, defaults to `False`):
        Whether to upcast the attention computation to float32. This is useful for mixed precision training.
    norm_elementwise_affine (`bool`, defaults to `True`):
        Whether to use learnable elementwise affine parameters for normalization.
    norm_type (`str`, defaults to `"layer_norm"`):
        The normalization layer to use. Can be `"layer_norm"`, `"ada_norm"` or `"ada_norm_zero"`.
    final_dropout (`bool` defaults to `False`):
        Whether to apply a final dropout after the last feed-forward layer.
    attention_type (`str`, defaults to `"default"`):
        The type of attention to use. Can be `"default"` or `"gated"` or `"gated-text-image"`.
    positional_embeddings (`str`, *optional*):
        The type of positional embeddings to apply to.
    num_positional_embeddings (`int`, *optional*, defaults to `None`):
        The maximum number of positional embeddings to apply.
    ff_inner_dim (`int`, *optional*):
        Hidden dimension of feed-forward MLP.
    ff_bias (`bool`, defaults to `True`):
        Whether or not to use bias in feed-forward MLP.
    attention_out_bias (`bool`, defaults to `True`):
        Whether or not to use bias in attention output project layer.
    context_length (`int`, defaults to `16`):
        The maximum number of frames that the FreeNoise block processes at once.
    context_stride (`int`, defaults to `4`):
        The number of frames to be skipped before starting to process a new batch of `context_length` frames.
    weighting_scheme (`str`, defaults to `"pyramid"`):
        The weighting scheme to use for weighting averaging of processed latent frames. As described in the
        Equation 9. of the [FreeNoise](https://huggingface.co/papers/2310.15169) paper, "pyramid" is the default
        setting used.
NrÉ   r6  r7  r‹  rD  r  ro  rp  rq  rr  rÜ   rs  rB  rt  ru  rw  rx  r{  r|  r}  Úcontext_lengthÚcontext_strideÚweighting_schemec                 ó�  >• [         TU ]  5         Xl        X l        X0l        X@l        XPl        X`l        X€l        X l	        XÀl
        UU l        UU l        X�l        U R                  UUU5        US L=(       a    US:H  U l        US L=(       a    US:H  U l        US:H  U l        US:H  U l        US:H  U l        US;   a  Uc  [)        SU SU S	35      eXÐl        Xpl        U(       a  Uc  [)        S
5      eUS:X  a  [/        UUS9U l        OS U l        [2        R4                  " XUS9U l        [9        UUUUUU	(       a  UOS UUS9U l        Uc  U
(       a:  [2        R4                  " XU5      U l        [9        UU
(       d  UOS UUUUUUS9U l        [A        UUUUUUS9U l!        [2        R4                  " XU5      U l"        S U l#        SU l$        g )Nr=  r  r€  r?  r�  r‚  rƒ  r„  r'   r…  r†  r‡  rF  rŠ  r�  r�  r   )%r   r!  rÉ   r6  r7  r‹  rD  r  rp  rr  rs  rw  rx  rq  Úset_free_noise_propertiesr“  r”  r•  r–  r—  rB   rB  ro  r   r˜  r2   rý   r%  r   r™  r&  rJ  r$  r	  rš  rM  rN  )r5   rÉ   r6  r7  r‹  rD  r  ro  rp  rq  rr  rÜ   rs  rB  rt  ru  rw  rx  r{  r|  r}  rá  râ  rã  rI   s                           €r-   r!  Ú"FreeNoiseTransformerBlock.__init__n  s  ø€ ô4 	‰ÑÔØŒØ#6Ô Ø"4ÔØŒØ#6Ô Ø*ÔØ,ÔØ%:Ô"Ø'>Ô$Ø%:ˆÔ"Ø)BˆÔ&Ø$8Ô!à×&Ñ& ~°~ÐGWÔXð )<À4Ð(G×'iÈYÐZiÑMiˆÔ$Ø#6¸dÐ#B×"_È	ÐU_ÑH_ˆÔØ)2Ð6GÑ)GˆÔ&Ø'¨<Ñ7ˆÔØ-6Ð:OÑ-OˆÔ*àÐ5Ó5Ð:MÑ:UÜØ(¨¨ð 4KØKTÈ+ÐUVðXóð ð
 #ŒØ#6Ô æ Ð&?Ñ&GÜØnóð ð ! LÓ0Ü:¸3ÐOhÑiˆD�Nà!ˆDŒNô —\’\ #ÐW_Ñ`ˆŒ
äØØ%Ø'ØØÞ7KÑ 3ÐQUØ-Ø'ñ	
ˆŒ
ð Ñ*Ö.CÜŸš cÐ5LÓMˆDŒJä"ØÞ?TÑ$7ÐZ^Ø)Ø+ØØ#Ø!1Ø+ñ	ˆDŒJô ØØØ'Ø'Ø"Øñ
ˆŒô —\’\ #Ð1HÓIˆŒ
ð  ˆÔØˆ�r/   rÏ  r   c                 ó¼   • / n[        SXR                  -
  S-   U R                  5       H/  nUn[        XU R                  -   5      nUR	                  XE45        M1     U$ )Nr   r   )Úrangerá  râ  ÚminÚappend)r5   rÏ  Úframe_indicesÚiÚwindow_startÚ
window_ends         r-   Ú_get_frame_indicesÚ,FreeNoiseTransformerBlock._get_frame_indicesà  sb   € ØˆÜ�q˜*×':Ñ':Ñ:¸QÑ>À×@SÑ@SÖTˆAØˆLÜ˜Z¨T×-@Ñ-@Ñ)@ÓAˆJØ× Ñ  ,Ð!;Ö<ñ Uð Ðr/   c                 óÒ  • US:X  a  S/U-  nU$ US:X  a`  US-  S:X  a)  US-  n[        [        SUS-   5      5      nX3S S S2   -   nU$ US-   S-  n[        [        SU5      5      nX4/-   US S S2   -   n U$ US:X  a`  US-  S:X  a-  US-  nS	/US-
  -  U/-   nU[        [        USS5      5      -   nU$ US-   S-  nS	/U-  nU[        [        USS5      5      -   n U$ [        S
U 35      e)NÚflatg      ð?Úpyramidr   r   r   r×   Údelayed_reverse_sawtoothg{®Gáz„?z'Unsupported value for weighting_scheme=)Úlistrè  rB   )r5   rÏ  rã  ÚweightsÚmids        r-   Ú_get_frame_weightsÚ,FreeNoiseTransformerBlock._get_frame_weightsè  sL  € Ø˜vÓ%Ø�e˜jÑ(ˆGð8 ˆð5  Ó*Ø˜A‰~ Ó"à  A‘o�Üœu Q¨¨a©Ó0Ó1�Ø!©D¨b¨D¡MÑ1�ð* ˆð% " A‘~¨!Ñ+�Üœu Q¨›}Ó-�Ø! E™/¨G±D°b°D©MÑ9‘ð  ˆð Ð!;Ó;Ø˜A‰~ Ó"à  A‘o�Ø˜& C¨!¡GÑ,°¨uÑ4�Ø!¤D¬¨s°A°rÓ):Ó$;Ñ;�ð ˆð " A‘~¨!Ñ+�Ø˜& 3™,�Ø!¤D¬¨s°A°rÓ):Ó$;Ñ;‘ð ˆô ÐFÐGWÐFXÐYÓZÐZr/   c                 ó(   • Xl         X l        X0l        g r  )rá  râ  rã  )r5   rá  râ  rã  s       r-   rå  Ú3FreeNoiseTransformerBlock.set_free_noise_properties  s   € ð -ÔØ,ÔØ 0Õr/   r  c                 ó   • Xl         X l        g r  rR  rS  s      r-   rT  Ú0FreeNoiseTransformerBlock.set_chunk_feed_forward  rV  r/   r
  rÔ   rú   r   r¢  c                 óz  • Ub(  UR                  SS 5      b  [        R                  S5        Ub  UR                  5       O0 nUR                  nUR
                  n	UR                  S5      n
U R                  U
5      nU R                  U R                  U R                  5      n[        R                  " XÈU	S9R                  S5      R                  S5      nUS   S   U
:H  nU(       dU  X R                  :  a  [        SU
< SU R                  < 35      eX«S   S   -
  nUR                  X R                  -
  U
45        [        R                   " SU
S4US	9n[        R"                  " U5      n[%        U5       GHª  u  nu  nn[        R&                  " US S 2UU24   5      nUU-  nUS S 2UU24   nU R)                  U5      nU R*                  b  U R+                  U5      nU R,                  " U4U R.                  (       a  UOS US
.UD6nUU-   nUR0                  S:X  a  UR3                  S5      nU R4                  bZ  U R7                  U5      nU R*                  b!  U R8                  S:w  a  U R+                  U5      nU R4                  " U4UUS
.UD6nUU-   nU[;        U5      S-
  :X  aQ  U(       dJ  US S 2W* S 24==   US S 2U* S 24   US S 2U* S 24   -  -  ss'   US S 2U* S 24==   US S 2U* 4   -  ss'   GM�  US S 2UU24==   UU-  -  ss'   US S 2UU24==   U-  ss'   GM­     [        R<                  " [?        URA                  U R                  SS9URA                  U R                  SS95       VVs/ s H$  u  nn[        RB                  " US:„  UU-  U5      PM&     snnSS9RE                  U	5      nU RG                  U5      nU RH                  b-  [K        U RL                  UU RN                  U RH                  5      nOU RM                  U5      nUU-   nUR0                  S:X  a  UR3                  S5      nU$ s  snnf )Nrá   r¦  r   rˆ   r   r×   zExpected num_frames=z1 to be greater or equal than self.context_length=)r‰   rª  rî   r€  rÛ   )(r«  r`   r¬  r­  r‰   rŠ   Úsizerï  rø  rá  rã  r1   rÀ   rô   rB   rê  rð   Ú
zeros_likeÚ	enumerateÚ	ones_liker%  r˜  r™  rq  rÎ   r®  rJ  r&  rB  r@   r¦   ÚzipÚsplitÚwhererä   rš  rM  r  r	  rN  )r5   r
  rÔ   rú   r   r¢  ÚargsrÍ  r‰   rŠ   rÏ  rë  Úframe_weightsÚis_last_frame_batch_completeÚlast_frame_batch_lengthÚnum_times_accumulatedÚaccumulated_valuesrì  Úframe_startÚ	frame_endrö  Úhidden_states_chunkr[  rf  Úaccumulated_splitÚnum_times_splitr  s                              r-   r/  Ú!FreeNoiseTransformerBlock.forward  s˜  € ð "Ñ-Ø%×)Ñ)¨'°4Ó8ÑDÜ—‘ÐtÔuàBXÑBdÐ!7×!<Ñ!<Ô!>ÐjlÐð ×%Ñ%ˆØ×#Ñ#ˆà"×'Ñ'¨Ó*ˆ
Ø×/Ñ/°
Ó;ˆØ×/Ñ/°×0CÑ0CÀT×EZÑEZÓ[ˆÜŸš ]ÈÑO×YÑYÐZ[Ó\×fÑfÐgiÓjˆØ'4°RÑ'8¸Ñ';¸zÑ'IÐ$ö
 ,Ø×/Ñ/Ó/Ü Ð#8¨Z©MÐ9kÐW[×WjÑWjÑVlÐ!mÓnÐnØ&0ÀÑ3DÀQÑ3GÑ&GÐ#Ø× Ñ  *×/BÑ/BÑ"BÀJÐ!OÔPä %§¢¨Q°
¸AÐ,>ÀvÑ NÐÜ"×-Ò-¨mÓ<Ðä+4°]×+CÑ'ˆAÑ'�˜Yô —o’oÐ&;ºA¸{È9Ð?TÐ<TÑ&UÓVˆGØ�}Ñ$ˆGà"/²°;¸yÐ3HÐ0HÑ"IÐð "&§¡Ð,?Ó!@Ðà�~‰~Ñ)Ø%)§^¡^Ð4FÓ%GÐ"àŸ*š*Ø"ðà?C×?X×?XÑ&;Ð^bØ-ñð )ñ	ˆKð #.Ð0CÑ"CÐØ"×'Ñ'¨1Ó,Ø&9×&AÑ&AÀ!Ó&DÐ#ð �z‰zÑ%Ø%)§Z¡ZÐ0CÓ%DÐ"à—>‘>Ñ-°$·.±.ÐDUÓ2UØ)-¯©Ð8JÓ)KÐ&à"ŸjšjØ&ðà*?Ø#9ñð -ñ	�ð '2Ð4GÑ&GÐ#à”C˜Ó&¨Ñ*Ó*Ö3OØ"¢1Ð'>Ð&>Ñ&?Ð#?Ó@Ø'ªÐ,CÐ+CÑ+DÐ(DÑEÈÒPQÐTkÐSkÑSlÐPlÑHmÑmñÓ@ð &¢aÐ*AÐ)AÑ)BÐ&BÓCÀwÊqÐSjÐRjÐOjÑGkÑkÖCà"¢1 k°)Ð&;Ð#;Ó<Ð@SÐV]Ñ@]Ñ]Ó<Ø%¢a¨°YÐ)>Ð&>Ó?À7ÑJÖ?ñc ,Dô| Ÿ	š	ô ;>Ø&×,Ñ,¨T×-@Ñ-@ÀaÐ,ÐHØ)×/Ñ/°×0CÑ0CÈÐ/ÐKô;ôò;Ñ6Ð% ô —’˜O¨aÑ/Ð1BÀ_Ñ1TÐVgÖhñ;òð ñ	
÷ ‰"ˆU‹)ð 	ð "ŸZ™Z¨Ó6Ðà×ÑÑ'Ü-¨d¯g©gÐ7IÈ4Ï?É?Ð\`×\lÑ\lÓm‰IàŸ™Ð 2Ó3ˆIà! MÑ1ˆØ×Ñ Ó"Ø)×1Ñ1°!Ó4ˆMàÐùó-s   Í2+P7
)rN  rM  r  rp  r7  r™  rJ  rá  râ  rD  rÉ   rr  r‹  r	  r%  r&  rš  rs  rB  r6  ro  rx  rq  r˜  rw  r”  r—  r•  r“  r–  rã  )rí   Nr  NFFFFTr?  r³  FNNNTTé   rî   ró  )ró  rk  )NNNN)rJ   rX   rY   rZ   r1  r  rÝ   r0   r  r!  rõ  r  rï  rø  rå  rT  r1   r  r4   r   r/  r\   r2  r3  s   @r-   rà  rà  6  st  ø† ñ4ðv Ø*.Ø$Ø*.Ø$Ø%*Ø&+Ø!&Ø(,Ø%ØØ#Ø,0Ø04Ø#'ØØ#'Ø ØØ )ñ1pàðpð !ðpð  ð	pð
 ðpð ! 4™Zðpð ðpð ! 4™Zðpð ðpð #ðpð  $ðpð ðpð "&ðpð ðpð ðpð  ð!pð"  # T™zð#pð$ $'¨¡:ð%pð& ˜D‘jð'pð( ð)pð* !ð+pð, ð-pð. ð/pð0 ÷1pð pðd¨Sð °T¸%ÀÀSÀ¹/Ñ5Jô ñ¨Sð ÀCð ÐX\Ð]bÑXcõ ðB QZñ1Ø!ð1Ø36ð1ØJMð1à	õ1ñ°°t±ð À#ð Èdõ ð /3Ø59Ø6:Ø15ñ{à—|‘|ð{ð Ÿ™ tÑ+ð{ð  %Ÿ|™|¨dÑ2ð	{ð
 !&§¡¨tÑ 3ð{ð !% S¨# X¡ð{ð 
�‰÷{ó {r/   rà  c                   óž   ^ • \ rS rSrSr       SS\S\S-  S\S\S\S	\S
\4U 4S jjjr	S\
R                  S\
R                  4S jrSrU =r$ )r$  i’  a‚  
A feed-forward layer.

Parameters:
    dim (`int`): The number of channels in the input.
    dim_out (`int`, *optional*): The number of channels in the output. If not given, defaults to `dim`.
    mult (`int`, *optional*, defaults to 4): The multiplier to use for the hidden dimension.
    dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use.
    activation_fn (`str`, *optional*, defaults to `"geglu"`): Activation function to be used in feed-forward.
    final_dropout (`bool` *optional*, defaults to False): Apply a final dropout.
    bias (`bool`, defaults to True): Whether to use a bias in the linear layer.
NrÉ   rH  Úmultr‹  r  ru  rœ   c	                 ó°  >• [         T
U ]  5         Uc  [        X-  5      nUb  UOUnUS:X  a
  [        XUS9n	US:X  a  [        XSUS9n	ODUS:X  a  [	        XUS9n	O3US:X  a  [        XUS9n	O"US:X  a  [        XUS9n	OUS	:X  a  [        XUS
S9n	[        R                  " / 5      U l
        U R                  R                  W	5        U R                  R                  [        R                  " U5      5        U R                  R                  [        R                  " XrUS95        U(       a0  U R                  R                  [        R                  " U5      5        g g )NÚgelur»  rG  r-  )Úapproximaterœ   r  zgeglu-approximateÚswigluzlinear-silur¿  )rœ   Ú
activation)r   r!  r  r   r   r   r   r   r2   Ú
ModuleListÚnetrê  ÚDropoutrª   )r5   rÉ   rH  r  r‹  r  ru  r�  rœ   Úact_fnrI   s             €r-   r!  ÚFeedForward.__init__   s   ø€ ô 	‰ÑÔØÑÜ˜C™J›ˆIØ$Ñ0‘'°cˆà˜FÓ"Ü˜#¨tÑ4ˆFØÐ.Ó.Ü˜#°fÀ4ÑH‰FØ˜gÓ%Ü˜3°Ñ5‰FØÐ1Ó1Ü$ S¸$Ñ?‰FØ˜hÓ&Ü˜C°Ñ6‰FØ˜mÓ+Ü% c¸4ÈFÑSˆFä—=’= Ó$ˆŒà�‰�‰˜Ôà�‰�‰œŸ
š
 7Ó+Ô,à�‰�‰œŸ	š	 )¸4Ñ@ÔAæØ�H‰H�O‰OœBŸJšJ wÓ/Õ0ð r/   r
  r   c                 óž   • [        U5      S:”  d  UR                  SS 5      b  Sn[        SSU5        U R                   H  nU" U5      nM     U$ )Nr   rá   zðThe `scale` argument is deprecated and will be ignored. Please remove it, as passing it will raise an error in the future. `scale` should directly be passed while calling the underlying pipeline component i.e., via `cross_attention_kwargs`.z1.0.0)r@   r«  r   r  )r5   r
  r  rÍ  Údeprecation_messager"   s         r-   r/  ÚFeedForward.forwardÈ  sQ   € Üˆt‹9�q‹=˜FŸJ™J w°Ó5ÑAð #UÐÜ�g˜wÐ(;Ô<Ø—h”hˆFÙ" =Ó1ŠMñ àÐr/   )r  )Nrî   rí   r  FNT)rJ   rX   rY   rZ   r1  r  rÝ   r0   r  r!  r1   r  r/  r\   r2  r3  s   @r-   r$  r$  ’  s’   ø† ñð  #ØØØ$Ø#ØØñ&1àð&1ð �t‘ð&1ð ð	&1ð
 ð&1ð ð&1ð ð&1ð ÷&1ð &1ðP U§\¡\ð ÀuÇ|Á|÷ ò r/   r$  )8Útypingr   r   r1   Útorch.nnr2   Útorch.nn.functionalÚ
functionalrñ   Úutilsr   r   Úutils.import_utilsr   r	   r
   Úutils.torch_utilsr   Úactivationsr   r   r   r   r   r   Úattention_processorr   r   r   Ú
embeddingsr   Únormalizationr   r   r   r   r   r…   r�   Ú
get_loggerrJ   r`   r   rL   r3   r  r  r  r  r5  rn  r·  rÅ  r×  rà  r$  rW   r/   r-   Ú<module>r.     sƒ  ð÷ !ã Ý ß Ð ç &ß fÑ fÝ 4ß Y× Yß UÑ UÝ 5ß qÕ qñ ×ÑÜà€Dð 
×	Ò	˜HÓ	%€÷O,ñ O,÷dN%ñ N%ðb˜bŸi™ið ¸¿¹ð ÐQTð Ðbeô ð ô&˜bŸi™ió &ó ð&ðR ôh4˜BŸI™Ió h4ó ðh4ðV ôH˜BŸI™Ió Hó ðHôV
.M˜Ÿ	™	ô .Mðb ô~ B§I¡Ió ~ó ð~ôBE˜RŸY™Yô EðP ôX §	¡	ó Xó ðXôv
<�"—)‘)õ <r/   