§
    9†ÆjaÐ  ã                   óþ  — d dl Z d dlmZmZmZ d dlZd dlmZ d dlmc m	Z
 d dlmZ d dlmZ d dlmZ d dlmZ  G d„ d¦  «        Zd	ed
ej        dej        fd„Zd„ ZdZdZ G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ dej        ¦  «        Z! G d„ d¦  «        Z" G d „ d!ej        ¦  «        Z#dS )"é    N)ÚListÚOptionalÚTuple)Úpad_sequence)ÚRMSNorm)Úattention_kit)Úpay_attentionc                   ó   — e Zd Zd„ Zd„ ZdS )ÚModuleWrapperc                 ó   — || _         d S ©N©Úmodule)Úselfr   s     úLC:\Users\johnn\OneDrive\Documents\AI\models\z_image\z_image_transformer2d.pyÚ__init__zModuleWrapper.__init__   s   € ØˆŒˆˆó    c                 ó   — | j         S r   r   ©r   s    r   Ú__call__zModuleWrapper.__call__   s
   € ØŒ{Ðr   N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s2   € € € € € ðð ð ðð ð ð ð r   r   Úx_listÚ	freqs_cisÚreturnc                 óH  — |                       ¦   «         }|j        } |                     ¦   «         j        g |j        d d…         ¢d‘d‘R Ž }d }|d                              d¦  «        }|d                              d¦  «        }|d         |d         }}|                     ¦   «         }	|                     |¦  «                             ||d¬¦  «         |                     |¦  «                             |	|¦  «         | 	                    d¦  «         
                    |¦  «        S )Néÿÿÿÿé   ).r   ).é   )Úvalueé   )ÚpopÚdtypeÚfloatÚreshapeÚshapeÚ	unsqueezeÚcloneÚmul_Úaddcmul_ÚflattenÚto)
r   r   Úx_inr%   ÚxÚcosÚsinÚx0Úx1Úx0_origs
             r   Úapply_rotary_emb_inplacer6      sþ   € Ø�:Š:‰<Œ<€DØŒJ€EØˆ�
Š
‰ŒÔÐ5˜dœj¨¨"¨œoÐ5¨rÐ5°1Ð5Ð5Ð5€AØ€Dà
�FÔ
×
%Ò
% aÑ
(Ô
(€CØ
�FÔ
×
%Ò
% aÑ
(Ô
(€CØˆvŒY˜˜&œ	ˆ€BØ�hŠh‰jŒj€GØ‡G‚GˆC�L„L×Ò˜"˜c¨ÐÑ,Ô,Ð,Ø‡G‚GˆC�L„L×Ò˜' 3Ñ'Ô'Ð'Ø�9Š9�Q‰<Œ<�?Š?˜5Ñ!Ô!Ð!r   c                 óF   — |� || ¦  «        } |€| nt          | g|¦  «        S )zfnorm then RoPE of rows of q or k (batch, tokens, heads, head_dim), as Attention.forward computes them.)r6   )r0   Únormr   s      r   Ú_norm_rope_rowsr9   )   s1   € àÐØˆD�‰GŒGˆØÐ!ˆ1ˆ1Õ'?ÀÀÀYÑ'OÔ'OÐOr   é   é    c                   ó>   ‡ — e Zd Zdˆ fd„	Zedd„¦   «         Zd„ Zˆ xZS )	ÚTimestepEmbedderNr:   c           	      ó
  •— t          ¦   «                              ¦   «          |€|}t          j        t          j        ||d¬¦  «        t          j        ¦   «         t          j        ||d¬¦  «        ¦  «        | _        || _        d S )NT©Úbias)Úsuperr   ÚnnÚ
SequentialÚLinearÚSiLUÚmlpÚfrequency_embedding_size)r   Úout_sizeÚmid_sizerG   Ú	__class__s       €r   r   zTimestepEmbedder.__init__5   s�   ø€ Ý‰Œ×ÒÑÔÐØÐØˆHÝ”=ÝŒIØ(ØØðñ ô õ
 ŒG‰IŒIÝŒIØØØðñ ô ñ
ô 
ˆŒð )AˆÔ%Ð%Ð%r   é'  c           
      óf  — t           j                             dd¬¦  «        5  |dz  }t          j        t	          j        |¦  «         t          j        d|t           j        | j        ¬¦  «        z  |z  ¦  «        }| d d …d f          	                    ¦   «         |d          z  }t          j
        t          j        |¦  «        t          j        |¦  «        gd¬¦  «        }|dz  r6t          j
        |t          j        |d d …d d	…f         ¦  «        gd¬¦  «        }|cd d d ¦  «         S # 1 swxY w Y   d S )
NÚcudaF)Úenabledr    r   )ÚstartÚendr%   Údevicer   ©Údimr!   )ÚtorchÚampÚautocastÚexpÚmathÚlogÚarangeÚfloat32rQ   r&   Úcatr1   r2   Ú
zeros_like)ÚtrS   Ú
max_periodÚhalfÚfreqsÚargsÚ	embeddings          r   Útimestep_embeddingz#TimestepEmbedder.timestep_embeddingI   si  € åŒY×Ò °ÐÑ6Ô6ð 		ð 		Ø˜!‘8ˆDÝ”IÝ”˜*Ñ%Ô%Ð%­¬¸1À$ÍeÌmÐdeÔdlÐ(mÑ(mÔ(mÑmÐptÑtñô ˆEð �Q�Q�Q˜�W”:×#Ò#Ñ%Ô%¨¨d¬Ñ3ˆDÝœ	¥5¤9¨T¡?¤?µE´I¸d±O´OÐ"DÈ"ÐMÑMÔMˆIØ�Q‰wð _Ý!œI yµ%Ô2BÀ9ÈQÈQÈQÐPRÐQRÐPRÈUÔCSÑ2TÔ2TÐ&UÐ[]Ð^Ñ^Ô^�	Øð		ð 		ð 		ð 		ñ 		ô 		ð 		ð 		ð 		ð 		ð 		ð 		øøøð 		ð 		ð 		ð 		ð 		ð 		s   ¢C7D&Ä&D*Ä-D*c                 óÌ   — |                       || j        ¦  «        }| j        d         j        j        }|j        r|                     |¦  «        }|                      |¦  «        }|S ©Nr   )rd   rG   rF   Úweightr%   Úis_floating_pointr.   )r   r^   Út_freqÚweight_dtypeÚt_embs        r   ÚforwardzTimestepEmbedder.forwardV   s]   € Ø×(Ò(¨¨DÔ,IÑJÔJˆØ”x ”{Ô)Ô/ˆØÔ)ð 	-Ø—Y’Y˜|Ñ,Ô,ˆFØ—’˜Ñ Ô ˆØˆr   )Nr:   )rK   )r   r   r   r   Ústaticmethodrd   rl   Ú__classcell__©rJ   s   @r   r=   r=   4   sr   ø€ € € € € ðAð Að Að Að Að Að( ð
ð 
ð 
ñ „\ð
ðð ð ð ð ð ð r   r=   c                   ó4   ‡ — e Zd Zdedefˆ fd„Zd„ Zd„ Zˆ xZS )ÚFeedForwardrS   Ú
hidden_dimc                 óð   •— t          ¦   «                              ¦   «          t          j        ||d¬¦  «        | _        t          j        ||d¬¦  «        | _        t          j        ||d¬¦  «        | _        d S )NFr?   )rA   r   rB   rD   Úw1Úw2Úw3)r   rS   rr   rJ   s      €r   r   zFeedForward.__init__`   se   ø€ Ý‰Œ×ÒÑÔÐÝ”)˜C °%Ð8Ñ8Ô8ˆŒÝ”)˜J¨°%Ð8Ñ8Ô8ˆŒÝ”)˜C °%Ð8Ñ8Ô8ˆŒˆˆr   c                 ó0   — t          j        |¦  «        |z  S r   )ÚFÚsilu)r   r4   Úx3s      r   Ú_forward_silu_gatingz FeedForward._forward_silu_gatingf   s   € ÝŒv�b‰zŒz˜B‰Ðr   c                 ó    — |                       |                      |                      |¦  «        |                      |¦  «        ¦  «        ¦  «        S r   )ru   r{   rt   rv   )r   r0   s     r   rl   zFeedForward.forwardi   s8   € Ø�wŠw�t×0Ò0°·²¸±´¸T¿WºWÀQ¹Z¼ZÑHÔHÑIÔIÐIr   )r   r   r   Úintr   r{   rl   rn   ro   s   @r   rq   rq   _   sp   ø€ € € € € ð9˜Cð 9¨Sð 9ð 9ð 9ð 9ð 9ð 9ðð ð ðJð Jð Jð Jð Jð Jð Jr   rq   c                   ó`   ‡ — e Zd ZdZdededefˆ fd„Zd„ Zdded	e	j
        d
e	j
        fd„Zˆ xZS )Ú	Attentionz6Simple attention module to match weight key structure.rS   Ún_headsÚqk_normc                 óê  •— t          ¦   «                              ¦   «          || _        ||z  | _        t	          j        ||d¬¦  «        | _        t	          j        ||d¬¦  «        | _        t	          j        ||d¬¦  «        | _        t	          j	        t	          j        ||d¬¦  «        ¦  «        | _
        |rt          | j        d¬¦  «        nd | _        |rt          | j        d¬¦  «        nd | _        d S )NFr?   çñhãˆµøä>©Úeps)rA   r   r€   Úhead_dimrB   rD   Úto_qÚto_kÚto_vrC   Úto_outr   Únorm_qÚnorm_k)r   rS   r€   r�   rJ   s       €r   r   zAttention.__init__o   sÙ   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ˜w™ˆŒå”I˜c 3¨UÐ3Ñ3Ô3ˆŒ	Ý”I˜c 3¨UÐ3Ñ3Ô3ˆŒ	Ý”I˜c 3¨UÐ3Ñ3Ô3ˆŒ	å”m¥B¤I¨c°3¸UÐ$CÑ$CÔ$CÑDÔDˆŒà:AÐK•g˜dœm°Ð6Ñ6Ô6Ð6ÀtˆŒØ:AÐK•g˜dœm°Ð6Ñ6Ô6Ð6ÀtˆŒˆˆr   c                 óx   ‡‡— || j         f|| j        ffD ]$\  }Š|�‰€‰�t          j        |ˆˆfd„¦  «         Œ%dS )z[attention_kit callback: norm_q/norm_k and RoPE of q and/or k in place, by chunks of tokens.Nc                 óF   •— t          | ‰‰€d n‰d d …||…f         ¦  «        S r   )r9   )ÚpartrO   Ústopr   r8   s      €€r   ú<lambda>z'Attention._norm_rope_.<locals>.<lambda>�   sf   ø€ ÅoÐVZÐ\`ÐjsÐj{ÐbfÐbfð  BKð  LMð  LMð  LMð  OTð  UYð  OYð  LYô  BZñ  G[ô  G[€ r   )r‹   rŒ   r   Úrows_)r   ÚqueryÚkeyr   Útensorr8   s      ` @r   Ú_norm_rope_zAttention._norm_rope_}   s�   øø€ à# T¤[Ð1°C¸¼Ð3EÐFð 	\ð 	\‰LˆF�DØÐ! tÐ'7¸9Ð;PÝÔ# Fð  -[ð  -[ð  -[ð  -[ð  -[ñ  \ô  \ð  \øð	\ð 	\r   NÚh_listr   r   c           
      ó   ‡ ‡— |€`t          j        |‰ j        ‰ j        ‰ j        ‰ j        ‰ j        ˆˆ fd„¦  «        }‰                      |                     dd¦  «        ¦  «        S | 	                    ¦   «         }‰                      |¦  «        }‰                      |¦  «        }‰                      |¦  «        }~| 
                    d‰ j        df¦  «        }| 
                    d‰ j        df¦  «        }| 
                    d‰ j        df¦  «        }‰ j        �‰                      |¦  «        }‰ j        �‰                      |¦  «        }‰�(|g}	~t          |	‰¦  «        }|g}
~t          |
‰¦  «        }|j        }|���|d         }|d         }|d         }|d	         }|dd…d| …f         |dd…d| …f         |dd…d| …f         g}t          |¦  «                             dd¦  «                             |¦  «        }|dd…| d…f         |dd…d
|z  | …f<   |dd…| d…f         |dd…d
|z  | …f<   |dd…| d…f         |dd…d
|z  | …f<   |dd…d| …f         |dd…d| …f         |dd…d| …f         g}~~~t          |¦  «                             dd¦  «                             |¦  «        }|dd…| d…f                              ¦   «         }|}|                     d|z
  ¦  «         |                     ||¬¦  «         t)          j        |ddd¬¦  «        }t)          j        |ddd¬¦  «        }||z  }t)          j        |d¦  «        }d|dz   z  |z  |z                       |j        ¦  «        }t)          j        ||k    ||z  |¦  «                             |¦  «        }~~~~|                     |¦  «         |                     |d|z
  ¬¦  «         d}t)          j        ||gd¬¦  «        }dx}x}}n>|||g}~~~t          |¦  «                             dd¦  «                             |¦  «        }‰                      |¦  «        S )zICompute self-attention with RoPE. h_list is cleared to free memory early.Nc                 ó2   •— ‰                      | |‰¦  «        S r   )r–   )r“   r”   Úgroupr   r   s      €€r   r‘   z#Attention.forward.<locals>.<lambda>‡   s   ø€ È×HXÒHXÐY^Ð`cÐenÑHoÔHo€ r   r    r#   r   ÚscaleÚalphaÚtauÚcap_embed_lenéþÿÿÿr!   ©rœ   T)ÚprS   Úkeepdimé
   gH¯¼šò×z>rR   )r   Úqkv_attentionr‡   rˆ   r‰   r€   r†   rŠ   r-   r$   Ú	unflattenr‹   rŒ   r6   r%   r	   r.   r*   r+   Úadd_rT   r8   Ú
nan_to_numÚwherer\   )r   r—   r   ÚNAGÚoutÚhr“   r”   r"   Úq_listÚk_listr%   Ú	nag_scaleÚ	nag_alphaÚnag_taurž   r   Úx_posÚx_negÚ
x_neg_tailÚ
x_guidanceÚnorm_positiveÚnorm_guidancer›   Úfactors   ` `                      r   rl   zAttention.forwardƒ   sÊ  øø€ àˆ;ÝÔ-¨f°d´iÀÄÈDÌIÐW[ÔWcÐeiÔerØ.oÐ.oÐ.oÐ.oÐ.oñqô qˆCà—;’;˜sŸ{š{¨1¨aÑ0Ô0Ñ1Ô1Ð1Ø�JŠJ‰LŒLˆØ—	’	˜!‘”ˆØ�iŠi˜‰lŒlˆØ—	’	˜!‘”ˆ !à—’  T¤\°2Ð$6Ñ7Ô7ˆØ�mŠm˜B ¤¨rÐ 2Ñ3Ô3ˆØ—’  T¤\°2Ð$6Ñ7Ô7ˆàŒ;Ð"Ø—K’K Ñ&Ô&ˆEØŒ;Ð"Ø—+’+˜cÑ"Ô"ˆCØÐ Ø�WˆF %Ý,¨V°YÑ?Ô?ˆEØ�UˆF Ý*¨6°9Ñ=Ô=ˆCØ”ˆð ‰?Ø˜GœˆIØ˜GœˆIØ˜%”jˆGØ Ô0ˆMà˜A˜A˜A˜  ˜Ð.Ô/°°Q°Q°Q¸¸-¸¸Ð5GÔ1HÈ%ÐPQÐPQÐPQÐSbÐUbÐTbÐSbÐPbÔJcÐeˆFÝ! &Ñ)Ô)×1Ò1°!°QÑ7Ô7×:Ò:¸5ÑAÔAˆEØ9>¸q¸q¸qÀ=À.À/À/Ð?QÔ9RˆE�!�!�!�R˜Ñ&¨ ~Ð5Ð5Ñ6Ø7:¸1¸1¸1¸}¸n¸o¸oÐ;MÔ7NˆC����2�}Ñ$ m ^Ð3Ð3Ñ4Ø9>¸q¸q¸qÀ=À.À/À/Ð?QÔ9RˆE�!�!�!�R˜Ñ&¨ ~Ð5Ð5Ñ6Ø˜A˜A˜A˜  ˜Ð.Ô/°°Q°Q°Q¸¸-¸¸Ð5GÔ1HÈ%ÐPQÐPQÐPQÐSbÐUbÐTbÐSbÐPbÔJcÐeˆFØ�s˜EÝ! &Ñ)Ô)×1Ò1°!°QÑ7Ô7×:Ò:¸5ÑAÔAˆEà    M > ? ?Ð 2Ô3×9Ò9Ñ;Ô;ˆJØˆJØ�OŠO˜A 	™MÑ*Ô*Ð*Ø�OŠO˜E¨ˆOÑ3Ô3Ð3Ý!œJ u°°rÀ4ÐHÑHÔHˆMÝ!œJ z°Q¸BÈÐMÑMÔMˆMØ! MÑ1ˆEÝÔ$ U¨BÑ/Ô/ˆEØ˜=¨4Ñ/Ñ0°=Ñ@À7ÑJ×NÒNÈzÔO_Ñ`Ô`ˆFÝœ U¨W¢_°jÀ6Ñ6IÈ:ÑVÔV×YÒYÐZ_Ñ`Ô`ˆJØ˜}¨e°Và�OŠO˜IÑ&Ô&Ð&Ø�OŠO˜E¨!¨i©-ˆOÑ9Ô9Ð9ØˆEÝ”)˜Z¨Ð4¸!Ð<Ñ<Ô<ˆCØ)-Ð-ˆEÐ-�E˜J˜Jà˜S %Ð(ˆFØ�s˜EÝ Ñ'Ô'×/Ò/°°1Ñ5Ô5×8Ò8¸Ñ?Ô?ˆCà�{Š{˜3ÑÔÐr   r   )r   r   r   Ú__doc__r}   Úboolr   r–   ÚlistrT   ÚTensorrl   rn   ro   s   @r   r   r   m   s±   ø€ € € € € Ø@Ð@ðL˜Cð L¨#ð L¸ð Lð Lð Lð Lð Lð Lð\ð \ð \ðA ð A ˜dð A ¨u¬|ð A È5Ì<ð A ð A ð A ð A ð A ð A ð A ð A r   r   c                   ó¨   ‡ — e Zd Z	 ddedededededefˆ fd„Zd	ej        d
dfd„Z		 	 ddej        dej        dej        de
ej                 fd„Zˆ xZS )ÚZImageTransformerBlockTÚlayer_idrS   r€   Ú
n_kv_headsÚnorm_epsr�   c                 ó`  •— t          ¦   «                              ¦   «          || _        || _        ||z  | _        t          |||¦  «        | _        t          |t          |dz  dz  ¦  «        ¬¦  «        | _	        d| _
        || _        t          ||¬¦  «        | _        t          ||¬¦  «        | _        t          ||¬¦  «        | _        t          ||¬¦  «        | _        || _        |rFt%          j        t%          j        t+          |t,          ¦  «        d|z  d¬¦  «        ¦  «        | _        d S d S )	Nr#   é   )rS   rr   gUUUUUU@r„   é   Tr?   )rA   r   rS   r€   r†   r   Ú	attentionrq   r}   Úfeed_forwardÚffn_multr¾   r   Úattention_norm1Ú	ffn_norm1Úattention_norm2Ú	ffn_norm2Ú
modulationrB   rC   rD   ÚminÚADALN_EMBED_DIMÚadaLN_modulation)	r   r¾   rS   r€   r¿   rÀ   r�   rË   rJ   s	           €r   r   zZImageTransformerBlock.__init__È   s%  ø€ õ 	‰Œ×ÒÑÔÐØˆŒØˆŒØ˜w™ˆŒõ # 3¨°Ñ9Ô9ˆŒõ (¨C½CÀÀaÁÈ!ÁÑ<LÔ<LÐMÑMÔMˆÔØˆŒØ ˆŒå& s°Ð9Ñ9Ô9ˆÔÝ  ¨(Ð3Ñ3Ô3ˆŒå& s°Ð9Ñ9Ô9ˆÔÝ  ¨(Ð3Ñ3Ô3ˆŒà$ˆŒØð 	Ý$&¤MÝ”	�#˜c¥?Ñ3Ô3°Q¸±WÀ4ÐHÑHÔHñ%ô %ˆDÔ!Ð!Ð!ð	ð 	r   Úffn_inr   Nc                 óò   — |j         \  }}}|                     d|¦  «        }t          t          || j        z  ¦  «        d¦  «        }t          j        ||¦  «        D ]}|                      |¦  «        |d<   Œd S )Nr   r!   .)r(   r'   Úmaxr}   rÆ   rT   ÚsplitrÅ   )r   rÏ   Ú_Úseq_lenrS   Úffn_in_flatÚ
chunk_sizeÚ	ffn_chunks           r   Ú_apply_ffn_chunkedz)ZImageTransformerBlock._apply_ffn_chunkedë   s~   € Ø œ,‰ˆˆ7�CØ—n’n R¨Ñ-Ô-ˆÝ�˜W¨¬Ñ5Ñ6Ô6¸Ñ:Ô:ˆ
Ýœ [°*Ñ=Ô=ð 	:ð 	:ˆIØ!×.Ò.¨yÑ9Ô9ˆI�c‰NˆNð	:ð 	:r   r0   Ú	attn_maskr   Úadaln_inputc           	      ó˜  — | j         �r›|                      |¦  «                             d¦  «                             dd¬¦  «        \  }}}}	|                     d¦  «         |                      |¦  «        g}
|
d                              |¦  «         |                      |                      |
||¬¦  «        ¦  «        }|                     | 	                    ¦   «         ¦  «         |                     |¦  «         d }|                     d¦  «         |  
                    |¦  «        }|                     |¦  «         |                      |¦  «         |                      |¦  «        }d }|                     |	 	                    ¦   «         ¦  «         |                     |¦  «         d }n¦|                     |                      |                      |                      |¦  «        g||¬¦  «        ¦  «        ¦  «         |  
                    |¦  «        }|                      |¦  «         |                     |                      |¦  «        ¦  «         d }|S )Nr!   rÃ   r    rR   ç      ð?r   )r©   )rË   rÎ   r)   Úchunkr¦   rÇ   r+   rÉ   rÄ   Útanh_rÈ   rØ   rÊ   )r   r0   rÙ   r   rÚ   r©   Ú	scale_msaÚgate_msaÚ	scale_mlpÚgate_mlpÚattn_inÚattn_outÚnormedÚffn_outs                 r   rl   zZImageTransformerBlock.forwardò   s  € ð Œ?ñ 	:Ø7;×7LÒ7LÈ[Ñ7YÔ7Y×7cÒ7cÐdeÑ7fÔ7f×7lÒ7lÐmnÐtuÐ7lÑ7vÔ7vÑ4ˆI�x ¨Hà�NŠN˜3ÑÔÐØ×+Ò+¨AÑ.Ô.Ð/ˆGØ�AŒJ�OŠO˜IÑ&Ô&Ð&Ø×+Ò+¨D¯NªN¸7ÀIÐSV¨NÑ,WÔ,WÑXÔXˆHØ�MŠM˜(Ÿ.š.Ñ*Ô*Ñ+Ô+Ð+Ø�FŠF�8ÑÔÐ¨˜hà�NŠN˜3ÑÔÐØ—^’^ AÑ&Ô&ˆFØ�KŠK˜	Ñ"Ô"Ð"Ø×#Ò# FÑ+Ô+Ð+Ø—n’n VÑ,Ô,ˆG°t¨fØ�LŠL˜ŸšÑ)Ô)Ñ*Ô*Ð*Ø�FŠF�7‰OŒOˆO t˜W˜Wà�FŠF�4×'Ò'¨¯ª¸×8LÒ8LÈQÑ8OÔ8OÐ7PÐR[Ðad¨Ñ(eÔ(eÑfÔfÑgÔgÐgØ—^’^ AÑ&Ô&ˆFØ×#Ò# FÑ+Ô+Ð+Ø�FŠF�4—>’> &Ñ)Ô)Ñ*Ô*Ð*°T¨FØˆr   )T©NN)r   r   r   r}   r&   r¹   r   rT   r»   rØ   r   rl   rn   ro   s   @r   r½   r½   Ç   sú   ø€ € € € € ð ð!ð !àð!ð ð!ð ð	!ð
 ð!ð ð!ð ð!ð !ð !ð !ð !ð !ðF:¨¬ð :¸$ð :ð :ð :ð :ð /3Øðð àŒ<ðð ”<ðð ”<ð	ð
 ˜eœlÔ+ðð ð ð ð ð ð ð r   r½   c                   óL   ‡ — e Zd ZdZ	 	 ddededededed	efˆ fd
„Zˆ fd„Zˆ xZ	S )ÚZImageControlTransformerBlockzKControl block that processes control signals and produces skip connections.Tr   r¾   rS   r€   r¿   rÀ   r�   c	           	      óH  •— t          ¦   «                              |||||||¦  «         || _        |dk    rvt          j        | j        | j        ¦  «        | _        t          j                             | j        j	        ¦  «         t          j                             | j        j
        ¦  «         t          j        | j        | j        ¦  «        | _        t          j                             | j        j	        ¦  «         t          j                             | j        j
        ¦  «         d S rf   )rA   r   Úblock_idrB   rD   rS   Úbefore_projÚinitÚzeros_rg   r@   Ú
after_proj©
r   r¾   rS   r€   r¿   rÀ   r�   rË   rë   rJ   s
            €r   r   z&ZImageControlTransformerBlock.__init__  sÕ   ø€ õ 	‰Œ×Ò˜ 3¨°¸XÀwÐPZÑ[Ô[Ð[Ø ˆŒØ�qŠ=ˆ=Ý!œy¨¬°4´8Ñ<Ô<ˆDÔÝŒG�NŠN˜4Ô+Ô2Ñ3Ô3Ð3ÝŒG�NŠN˜4Ô+Ô0Ñ1Ô1Ð1Ýœ) D¤H¨d¬hÑ7Ô7ˆŒÝ
Œ�Š�t”Ô-Ñ.Ô.Ð.Ý
Œ�Š�t”Ô+Ñ,Ô,Ð,Ð,Ð,r   c                 ó>  •— |d         }d |d<   | j         dk    rO|                      |¦  «        }|j        d         }||j        d         k    r|                     |dd¦  «        }||z  } t	          ¦   «         j        |fi |¤Ž}|                      |¦  «        }||d<   |S )Nr   r!   )rë   rì   r(   ÚrepeatrA   rl   rï   )r   Úhintsr0   ÚkwargsÚcÚbzÚc_skiprJ   s          €r   rl   z%ZImageControlTransformerBlock.forward*  s¨   ø€ à�!ŒHˆØˆˆa‰ØŒ=˜AÒÐØ× Ò  Ñ#Ô#ˆAØ”˜”ˆBØ�A”G˜A”JŠˆ A§H¢H¨R°°AÑ$7Ô$7 Ø�‰FˆAØ�E‰GŒGŒO˜AÐ(Ð( Ð(Ð(ˆØ—’ Ñ#Ô#ˆØˆˆa‰Øˆr   )Tr   ©
r   r   r   r¸   r}   r&   r¹   r   rl   rn   ro   s   @r   ré   ré     s£   ø€ € € € € ØUÐUð Øð-ð -àð-ð ð-ð ð	-ð
 ð-ð ð-ð ð-ð -ð -ð -ð -ð -ð*ð ð ð ð ð ð ð ð r   ré   c                   óN   ‡ — e Zd ZdZ	 	 ddededededed	efˆ fd
„Zdˆ fd„	Zˆ xZ	S )ÚBaseZImageTransformerBlockz3Base block that can optionally apply control hints.TNr¾   rS   r€   r¿   rÀ   r�   c	           	      ód   •— t          ¦   «                              |||||||¦  «         || _        d S r   )rA   r   rë   rð   s
            €r   r   z#BaseZImageTransformerBlock.__init__<  s5   ø€ õ 	‰Œ×Ò˜ 3¨°¸XÀwÐPZÑ[Ô[Ð[Ø ˆŒˆˆr   rÜ   c                 óè   •— d }| j         �|� |                      ¦   «         |fi |¤Ž} t          ¦   «         j        |fi |¤Ž}|�.|d d …d |j        d         …f                              ||¬¦  «         |S )Nr!   r    )rë   ÚcontrolrA   rl   r(   r¦   )r   Úhidden_statesró   Úhints_kwargsÚcontext_scalerô   Úhints_processedrJ   s          €r   rl   z"BaseZImageTransformerBlock.forwardJ  s“   ø€ ØˆØŒ=Ð$¨Ð):Ø,˜dŸlšl™nœn¨UÐCÐC°lÐCÐCˆOØ'�™œœ¨Ð@Ð@¸Ð@Ð@ˆØÐ&Ø˜!˜!˜!Ð6˜oÔ3°AÔ6Ð6Ð6Ô7×<Ò<¸_ÐTaÐ<ÑbÔbÐbØÐr   )TN)NNrÜ   rø   ro   s   @r   rú   rú   :  s¨   ø€ € € € € Ø=Ð=ð Øð!ð !àð!ð ð!ð ð	!ð
 ð!ð ð!ð ð!ð !ð !ð !ð !ð !ðð ð ð ð ð ð ð ð ð r   rú   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú
FinalLayerc           	      ó^  •— t          ¦   «                              ¦   «          t          j        |dd¬¦  «        | _        t          j        ||d¬¦  «        | _        t          j        t          j        ¦   «         t          j        t          |t          ¦  «        |d¬¦  «        ¦  «        | _        d S )NFg�íµ ÷Æ°>)Úelementwise_affiner…   Tr?   )rA   r   rB   Ú	LayerNormÚ
norm_finalrD   ÚlinearrC   rE   rÌ   rÍ   rÎ   )r   Úhidden_sizeÚout_channelsrJ   s      €r   r   zFinalLayer.__init__U  s‹   ø€ Ý‰Œ×ÒÑÔÐÝœ, {ÀuÐRVÐWÑWÔWˆŒÝ”i ¨\ÀÐEÑEÔEˆŒå "¤ÝŒG‰IŒIÝŒI•c˜+¥Ñ7Ô7¸È4ÐPÑPÔPñ!
ô !
ˆÔÐÐr   c                 óú   — |                       |¦  «        }|                     d¦  «         |                      |¦  «        }|                     |                     d¦  «        ¦  «         |                      |¦  «        S )NrÜ   r!   )rÎ   r¦   r  r+   r)   r  )r   r0   rõ   r›   s       r   rl   zFinalLayer.forward_  sc   € Ø×%Ò% aÑ(Ô(ˆØ�
Š
�3‰ŒˆØ�OŠO˜AÑÔˆØ	�Šˆu�Š˜qÑ!Ô!Ñ"Ô"Ð"Ø�{Š{˜1‰~Œ~Ðr   )r   r   r   r   rl   rn   ro   s   @r   r  r  T  sG   ø€ € € € € ð
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð r   r  c                   ó–   — e Zd Z	 	 	 ddedee         dee         fd„Zeddee         d	ee         defd
„¦   «         Zde	j
        fd„ZdS )ÚRopeEmbedderç      p@©é   é8   r  ©é@   é€   r  ÚthetaÚ	axes_dimsÚ	axes_lensc                 ó’   — || _         || _        || _        t          |¦  «        t          |¦  «        k    s
J d¦   «         ‚d | _        d S )Nz1axes_dims and axes_lens must have the same length)r  r  r  Úlenr   )r   r  r  r  s       r   r   zRopeEmbedder.__init__h  sJ   € ð ˆŒ
Ø"ˆŒØ"ˆŒÝ�9‰~Œ~¥ Y¡¤Ò/Ð/Ð/Ð1dÑ/Ô/Ð/ØˆŒˆˆr   rS   rP   c           
      ó  — t          j        d¦  «        5  g }t          | |¦  «        D ]Æ\  }}d|t          j        d|dt           j        ¬¦  «        |z  z  z  }t          j        |t           j        ¬¦  «        }t          j        ||¦  «                             ¦   «         }|                     t          j        | 	                    ¦   «         | 
                    ¦   «         gd¬¦  «        ¦  «         ŒÇ|cddd¦  «         S # 1 swxY w Y   dS )	zFPrecompute cos/sin frequencies for RoPE (real arithmetic, no complex).ÚcpurÜ   r   r    ©r%   r   rR   N)rT   rQ   ÚziprZ   Úfloat64Úouterr&   ÚappendÚstackr1   r2   )rS   rP   r  r   ÚdÚera   Útimesteps           r   Úprecompute_freqs_cisz!RopeEmbedder.precompute_freqs_cist  s5  € õ Œ\˜%Ñ Ô ð 	ð 	ØˆIÝ˜C ™œð Rð R‘��1Ø˜u­¬°a¸¸AÅUÄ]Ð)SÑ)SÔ)SÐVWÑ)WÑXÑY�Ý œ<¨µ´Ð?Ñ?Ô?�Ýœ H¨eÑ4Ô4×:Ò:Ñ<Ô<�à× Ò ¥¤¨e¯iªi©k¬k¸5¿9º9¹;¼;Ð-GÈRÐ!PÑ!PÔ!PÑQÔQÐQÐQØð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   •CC=Ã=DÄDÚidsc                 óF  ‡— |j         dk    sJ ‚|j        d         t          | j        ¦  «        k    sJ ‚|j        Š| j        €E|                      | j        | j        | j        ¬¦  «        | _        ˆfd„| j        D ¦   «         | _        n.| j        d         j        ‰k    rˆfd„| j        D ¦   «         | _        g }t          t          | j        ¦  «        ¦  «        D ]4}|d d …|f         }| 
                    | j        |         |         ¦  «         Œ5t          j        |d¬¦  «        S )	Nr    r   )r  c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS r   ©r.   ©Ú.0r   rQ   s     €r   ú
<listcomp>z)RopeEmbedder.__call__.<locals>.<listcomp>ˆ  s%   ø€ ÐSÐSÐS°y˜iŸlšl¨6Ñ2Ô2ÐSÐSÐSr   r   c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS r   r)  r*  s     €r   r,  z)RopeEmbedder.__call__.<locals>.<listcomp>Œ  s%   ø€ Ð!WÐ!WÐ!W¸9 )§,¢,¨vÑ"6Ô"6Ð!WÐ!WÐ!Wr   rŸ   rR   )Úndimr(   r  r  rQ   r   r%  r  r  Úranger   rT   r\   )r   r&  ÚresultÚiÚindexrQ   s        @r   r   zRopeEmbedder.__call__�  s&  ø€ ØŒx˜1Š}ˆ}ˆ}ˆ}ØŒy˜Œ}¥ D¤NÑ 3Ô 3Ò3Ð3Ð3Ð3Ø”ˆàŒ>Ð!Ø!×6Ò6°t´~ÀtÄ~Ð]aÔ]gÐ6ÑhÔhˆDŒNØSÐSÐSÐSÀDÄNÐSÑSÔSˆDŒNˆNð Œ~˜aÔ Ô'¨6Ò1Ð1Ø!WÐ!WÐ!WÐ!WÈÌÐ!WÑ!WÔ!W�”àˆÝ•s˜4œ>Ñ*Ô*Ñ+Ô+ð 	4ð 	4ˆAØ˜˜˜˜1˜”IˆEØ�MŠM˜$œ.¨Ô+¨EÔ2Ñ3Ô3Ð3Ð3åŒy˜ RÐ(Ñ(Ô(Ð(r   N)r  r  r  )r  )r   r   r   r&   r   r}   r   rm   r%  rT   r»   r   r   r   r   r  r  g  s»   € € € € € ð Ø+Ø-ð	
ð 
àð
ð ˜”9ð
ð ˜”9ð	
ð 
ð 
ð 
ð ð
ð 
 $ s¤)ð 
°$°s´)ð 
ÀEð 
ð 
ð 
ñ „\ð
ð)˜EœLð )ð )ð )ð )ð )ð )r   r  c                   óÆ  ‡ — e Zd Zd„ Zdddddddddddd	ddd
dddddg d¢g d¢f	 d(ˆ fd„Zdeej                 dee         deej                 fd„Z	e
d)d„¦   «         Zdeej                 dededefd„Zdeej                 deej                 dedefd„Zedefd„¦   «         Zd„ Z	 	 	 d*d!„Z	 	 	 d*d"„Zd#„ Z	 	 	 	 	 	 	 	 d+d%eej                 d&eej                 fd'„Zˆ xZS ),ÚZImageTransformer2DModelc                 ó  — t          t          |¦  «        d ¦  «        }|€|S d|vrd|vr|S i }|                     ¦   «         D ]>\  }}d|v r|                     dd¦  «        }d|v r|                     dd¦  «        }|||<   Œ?|S )Nz	.default.z.lora.ú.z.lora_)ÚnextÚiterÚitemsÚreplace)r   Ú
model_typeÚsdÚfirstÚnew_sdÚkÚvs          r   Úpreprocess_lorasz)ZImageTransformer2DModel.preprocess_loras—  s¥   € Ý•T˜"‘X”X˜tÑ$Ô$ˆØˆ=ØˆIà˜eÐ#Ð#¨¸Ð(=Ð(=ØˆIàˆØ—H’H‘J”Jð 	ð 	‰DˆAˆqØ˜aÐÐØ—I’I˜k¨3Ñ/Ô/�Ø˜1ˆ}ˆ}Ø—I’I˜h¨Ñ1Ô1�ØˆF�1‰IˆIØˆr   NF)r    )r!   r  i   é   r    rƒ   Ti 
  r  g     @�@)r;   é0   rC  )é   é   rE  r   c                 ó^
  •‡ ‡
‡‡‡‡— t          ¦   «                              ¦   «          |	‰ _        |	‰ _        |‰ _        |‰ _        ‰
‰ _        ‰‰ _        |‰ _        |‰ _	        |�|n|	‰ _
        |€d„ t          d|d¦  «        D ¦   «         n|‰ _        |€d„ t          d|¦  «        D ¦   «         n|‰ _        |‰ _        |‰ _        |‰ _        d‰ _        d‰ j        v sJ ‚d„ t%          ‰ j        ¦  «        D ¦   «         ‰ _        d„ t%          ‰ j        ¦  «        D ¦   «         ‰ _        t+          |¦  «        t+          |¦  «        k    sJ ‚i }i }t%          t-          ||¦  «        ¦  «        D ]Z\  }\  }}t/          j        ||z  |z  |	z  ‰
d¬	¦  «        }|||› d
|› �<   t3          ‰
||z  |z  ‰ j        z  ¦  «        }|||› d
|› �<   Œ[t/          j        |¦  «        ‰ _        t/          j        |¦  «        ‰ _        |r:|r8t/          j        ˆ
ˆˆˆˆˆ fd„t          |¦  «        D ¦   «         ¦  «        ‰ _        n6t/          j        ˆ
ˆˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        ‰ _        t/          j        ˆ
ˆˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        ‰ _        tA          tC          ‰
tD          ¦  «        d¬¦  «        ‰ _#        t/          j$        tK          |‰¬¦  «        t/          j        |‰
d¬	¦  «        ¦  «        ‰ _&        t/          j'        tQ          j)        d‰
f¦  «        ¦  «        ‰ _*        t/          j'        tQ          j)        d‰
f¦  «        ¦  «        ‰ _+        |r8t/          j        ˆ
ˆˆˆˆˆ fd„t          |¦  «        D ¦   «         ¦  «        ‰ _,        n6t/          j        ˆ
ˆˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        ‰ _,        ‰
‰z  }|t[          |¦  «        k    sJ ‚|‰ _.        |‰ _/        ta          |||¬¦  «        ‰ _1        |�r#t/          j        ˆ
ˆˆˆˆfd„‰ j        D ¦   «         ¦  «        ‰ _2        i }t%          t-          ||¦  «        ¦  «        D ]7\  }\  }}t/          j        ||z  |z  ‰ j
        z  ‰
d¬	¦  «        }|||› d
|› �<   Œ8t/          j        |¦  «        ‰ _3        |r7t/          j        ˆ
ˆˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        ‰ _4        n6t/          j        ˆ
ˆˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        ‰ _4        ‰  5                    ¦   «          d S d S )Nc                 ó   — g | ]}|‘ŒS r   r   ©r+  r1  s     r   r,  z5ZImageTransformer2DModel.__init__.<locals>.<listcomp>Ð  s   € Ð%GÐ%GÐ%G¨A aÐ%GÐ%GÐ%Gr   r   r    c                 ó   — g | ]}|‘ŒS r   r   rH  s     r   r,  z5ZImageTransformer2DModel.__init__.<locals>.<listcomp>Ñ  s   € Ð-TÐ-TÐ-T°A¨aÐ-TÐ-TÐ-Tr   Fc                 ó   — i | ]\  }}||“Œ	S r   r   ©r+  Únr1  s      r   ú
<dictcomp>z5ZImageTransformer2DModel.__init__.<locals>.<dictcomp>Ú  s   € Ð&^Ð&^Ð&^±°°1 q¨!Ð&^Ð&^Ð&^r   c                 ó   — i | ]\  }}||“Œ	S r   r   rK  s      r   rM  z5ZImageTransformer2DModel.__init__.<locals>.<dictcomp>Û  s   € Ð.nÐ.nÐ.n¹¸¸1¨q°!Ð.nÐ.nÐ.nr   Tr?   ú-c                 óp   •— g | ]2}t          d |z   ‰‰‰‰‰d|‰j        v r‰j        |         nd¬¦  «        ‘Œ3S )éè  TN©rË   rë   )rú   Úcontrol_refiner_layers_placesÚcontrol_refiner_layers_mapping)r+  r¾   rS   r€   r¿   rÀ   r�   r   s     €€€€€€r   r,  z5ZImageTransformer2DModel.__init__.<locals>.<listcomp>î  s‚   ø€ ð ð ð ð !õ /Ø˜x™ØØØ"Ø ØØ#'ØRZÐ^bô  _Að  SAð  SA Ô!DÀXÔ!NÐ!Nð  GKð	ñ 	ô 	ðð ð r   c                 óB   •— g | ]}t          d |z   ‰‰‰‰‰d¬¦  «        ‘ŒS ©rQ  T©rË   ©r½   ©r+  r¾   rS   r€   r¿   rÀ   r�   s     €€€€€r   r,  z5ZImageTransformer2DModel.__init__.<locals>.<listcomp>þ  sS   ø€ ð ð ð ð !õ +Ø˜x™ØØØ"Ø ØØ#'ðñ ô ðð ð r   c                 ó<   •— g | ]}t          |‰‰‰‰‰d ¬¦  «        ‘ŒS )FrW  rX  rY  s     €€€€€r   r,  z5ZImageTransformer2DModel.__init__.<locals>.<listcomp>  sO   ø€ ð ð ð ð õ 'ØØØØØØØ$ðñ ô ðð ð r   rD  )rI   r„   r!   c                 óh   •— g | ].}t          |‰‰‰‰‰|‰j        v r‰j        |         nd ¬¦  «        ‘Œ/S )N©rë   )rú   Úcontrol_layers_placesÚcontrol_layers_mapping)r+  r1  rS   r€   r¿   rÀ   r�   r   s     €€€€€€r   r,  z5ZImageTransformer2DModel.__init__.<locals>.<listcomp>&  sj   ø€ ð ð ð ð õ /ØØØØ"Ø ØØCDÈÔHbÐCbÐCb Ô!<¸QÔ!?Ð!?Ðhlðñ ô ðð ð r   c           
      ó8   •— g | ]}t          |‰‰‰‰‰¦  «        ‘ŒS r   rX  rY  s     €€€€€r   r,  z5ZImageTransformer2DModel.__init__.<locals>.<listcomp>5  s<   ø€ ð ð ð à õ +¨8°S¸'À:ÈxÐY`ÑaÔaðð ð r   )r  r  r  c                 ó<   •— g | ]}t          |‰‰‰‰‰|¬ ¦  «        ‘ŒS )r\  ©ré   )r+  r1  rS   r€   r¿   rÀ   r�   s     €€€€€r   r,  z5ZImageTransformer2DModel.__init__.<locals>.<listcomp>F  sO   ø€ ð ð ð ð õ 2ØØØØ"Ø ØØ!"ðñ ô ðð ð r   c                 óD   •— g | ]}t          d |z   ‰‰‰‰‰d|¬¦  «        ‘ŒS )rQ  TrR  ra  rY  s     €€€€€r   r,  z5ZImageTransformer2DModel.__init__.<locals>.<listcomp>^  sV   ø€ ð ð ð ð %õ 6Ø  8™OØØ#Ø&Ø$Ø#Ø'+Ø%-ð	ñ 	ô 	ðð ð r   c                 óB   •— g | ]}t          d |z   ‰‰‰‰‰d¬¦  «        ‘ŒS rV  rX  rY  s     €€€€€r   r,  z5ZImageTransformer2DModel.__init__.<locals>.<listcomp>o  sS   ø€ ð ð ð ð %õ /Ø  8™OØØ#Ø&Ø$Ø#Ø'+ðñ ô ðð ð r   )6rA   r   Úin_channelsr
  Úall_patch_sizeÚall_f_patch_sizerS   r€   Ú
rope_thetaÚt_scaleÚcontrol_in_dimr/  r]  rS  Úadd_control_noise_refinerÚenable_controlÚuse_separate_control_refinerÚ$_control_noise_uses_dedicated_layersÚ	enumerater^  rT  r  r  rB   rD   r  Ú
ModuleDictÚall_x_embedderÚall_final_layerÚ
ModuleListÚnoise_refinerÚcontext_refinerr=   rÌ   rÍ   Ú
t_embedderrC   r   Úcap_embedderÚ	ParameterrT   ÚemptyÚx_pad_tokenÚcap_pad_tokenÚlayersÚsumr  r  r  Úrope_embedderÚcontrol_layersÚcontrol_all_x_embedderÚcontrol_noise_refinerÚadapt_control_model)!r   r]  rS  ri  rj  rk  rl  re  rf  rd  rS   Ún_layersÚn_refiner_layersr€   r¿   rÀ   r�   Úcap_feat_dimÚsiglip_feat_dimrg  rh  r  r  rp  rq  Ú	patch_idxÚ
patch_sizeÚf_patch_sizeÚ
x_embedderÚfinal_layerr†   r  rJ   s!   `         `  ````               €r   r   z!ZImageTransformer2DModel.__init__¨  sß  øøøøøøø€ õ6 	‰Œ×ÒÑÔÐØ&ˆÔØ'ˆÔØ,ˆÔØ 0ˆÔØˆŒØˆŒà$ˆŒØˆŒð 1?Ð0J˜n˜nÐP[ˆÔØK`ÐKhÐ%GÐ%Gµ°q¸(ÀAÑ1FÔ1FÐ%GÑ%GÔ%GÐ%Gð  oDˆÔ"ØXuÐX}Ð-TÐ-T½¸qÐBRÑ9SÔ9SÐ-TÑ-TÔ-TÐ-Tð  DaˆÔ*Ø)BˆÔ&Ø,ˆÔØ,HˆÔ)ð 5:ˆÔ1à�DÔ.Ð.Ð.Ð.Ð.Ø&^Ð&^½	À$ÔB\Ñ8]Ô8]Ð&^Ñ&^Ô&^ˆÔ#Ø.nÐ.nÅ	È$ÔJlÑ@mÔ@mÐ.nÑ.nÔ.nˆÔ+å�>Ñ"Ô"¥cÐ*:Ñ&;Ô&;Ò;Ð;Ð;Ð;àˆØˆÝ5>½sÀ>ÐScÑ?dÔ?dÑ5eÔ5eð 	Jð 	JÑ1ˆIÑ1˜
 LÝœ <°*Ñ#<¸zÑ#IÈKÑ#WÐY\ÐcgÐhÑhÔhˆJØ=GˆN˜jÐ9Ð9¨<Ð9Ð9Ñ:å$ S¨*°zÑ*AÀLÑ*PÐSWÔSdÑ*dÑeÔeˆKØ>IˆO˜zÐ:Ð:¨LÐ:Ð:Ñ;Ð;å œm¨NÑ;Ô;ˆÔÝ!œ}¨_Ñ=Ô=ˆÔð ð 	Ð7ð 	Ý!#¤ðð ð ð ð ð ð ð ð õ %*Ð*:Ñ$;Ô$;ðñ ô ñ"ô "ˆDÔÐõ  "$¤ðð ð ð ð ð ð ð õ %*Ð*:Ñ$;Ô$;ðñ ô ñ"ô "ˆDÔõ  "œ}ðð ð ð ð ð ð ð õ !&Ð&6Ñ 7Ô 7ðñ ô ñ 
ô  
ˆÔõ +­3¨sµOÑ+DÔ+DÈtÐTÑTÔTˆŒÝœMÝ�L hÐ/Ñ/Ô/ÝŒI�l C¨dÐ3Ñ3Ô3ñ
ô 
ˆÔõ
 œ<­¬°Q¸°HÑ(=Ô(=Ñ>Ô>ˆÔÝœ\­%¬+°q¸#°hÑ*?Ô*?Ñ@Ô@ˆÔð ð 	Ýœ-ðð ð ð ð ð ð ð ð õ # 8™_œ_ðñ ô ñô ˆDŒKˆKõ œ-ðð ð ð ð ð ð ð å$)¨(¡O¤Oðñ ô ñô ˆDŒKð ˜'‘>ˆØ�3˜y™>œ>Ò)Ð)Ð)Ð)Ø"ˆŒØ"ˆŒå)°
ÀiÐ[dÐeÑeÔeˆÔð ñ :	'å"$¤-ðð ð ð ð ð ð ð ð "Ô7ðñ ô ñ#ô #ˆDÔð  &(Ð"Ý9BÅ3À~ÐWgÑChÔChÑ9iÔ9ið Tð TÑ5�	Ñ5˜J¨ÝœY |°jÑ'@À:Ñ'MÐPTÔPcÑ'cÐehÐosÐtÑtÔt�
ØISÐ&¨*Ð'EÐ'E°|Ð'EÐ'EÑFÐFÝ*,¬-Ð8NÑ*OÔ*OˆDÔ'ð )ð Ý-/¬]ðð ð ð ð ð ð ð õ ).Ð.>Ñ(?Ô(?ðñ ô ñ.ô .�Ô*Ð*õ" .0¬]ðð ð ð ð ð ð ð õ ).Ð.>Ñ(?Ô(?ðñ ô ñ.ô .�Ô*ð ×$Ò$Ñ&Ô&Ð&Ð&Ð&ðu:	'ð :	'r   r0   Úsizec                 óÜ  — |x}}|}t          |¦  «        }t          |¦  «        |k    sJ ‚g }	t          |¦  «        D ]�}
||
         \  }}}||z  ||z  z  ||z  z  }|	                     ||
         d |…                              ||z  ||z  ||z  |||| j        ¦  «                             ddddddd¦  «                             | j        |||¦  «        ¦  «         Œžt          j        |	¦  «        S )Né   r   r#   r!   rÃ   r    é   )	r  r/  r   Úviewr
  Úpermuter'   rT   r!  )r   r0   r‹  r‡  rˆ  ÚpHÚpWÚpFÚbszÚ
x_out_listr1  rx   ÚHÚWÚori_lens                  r   Ú
unpatchifyz#ZImageTransformer2DModel.unpatchify  s  € ØÐˆˆRØˆÝ�!‰fŒfˆÝ�4‰yŒy˜CÒÐÐÐØˆ
Ý�s‘”ð 		ð 		ˆAØ˜1”g‰GˆAˆq�!Ø˜B‘w 1¨¡7Ñ+¨q°B©wÑ7ˆGà×ÒØ�!”�X�g�X”ß’�a˜2‘g˜q B™w¨¨R©°°R¸¸TÔ=NÑOÔOß’˜˜A˜q ! Q¨¨1Ñ-Ô-ß’˜Ô*¨A¨q°!Ñ4Ô4ñ	ô ð ð õ Œ{˜:Ñ&Ô&Ð&r   c                 ó°   ‡— |€d„ | D ¦   «         }ˆfd„t          || ¦  «        D ¦   «         }t          j        |d¬¦  «        }t          j        |d¬¦  «        S )Nc              3   ó   K  — | ]}d V — ŒdS ©r   Nr   ©r+  rÓ   s     r   ú	<genexpr>zBZImageTransformer2DModel.create_coordinate_grid.<locals>.<genexpr>”  s"   è è € Ð%Ð%˜1�QÐ%Ð%Ð%Ð%Ð%Ð%r   c                 ó`   •— g | ]*\  }}t          j        |||z   t           j        ‰¬ ¦  «        ‘Œ+S )©r%   rQ   )rT   rZ   Úint32)r+  r3   ÚspanrQ   s      €r   r,  zCZImageTransformer2DModel.create_coordinate_grid.<locals>.<listcomp>–  s9   ø€ ÐoÐoÐoÑRZÐRTÐVZ•”˜R  d¡µ%´+ÀfÐMÑMÔMÐoÐoÐor   Úij)Úindexingr   rR   )r  rT   Úmeshgridr!  )r‹  rO   rQ   ÚaxesÚgridss     `  r   Úcreate_coordinate_gridz/ZImageTransformer2DModel.create_coordinate_grid‘  sj   ø€ àˆ=Ø%Ð% Ð%Ñ%Ô%ˆEàoÐoÐoÐoÕ^aÐbgÐimÑ^nÔ^nÐoÑoÔoˆÝ”˜t¨dÐ3Ñ3Ô3ˆÝŒ{˜5 bÐ)Ñ)Ô)Ð)r   Ú	all_imager‡  rˆ  Úcap_padding_lenc                 ó„  — |x}}|}|d         j         }g }	g }
g }g }t          |¦  «        D �]\  }}|                     ¦   «         \  }}}}|
                     |||f¦  «         ||z  ||z  ||z  }}}|                     |||||||¦  «        }|                     ddddddd¦  «                             ||z  |z  ||z  |z  |z  ¦  «        }t          |¦  «        }| t          z  }|  	                    |||f|dz   ddf|¬¦  «         
                    dd¦  «        }|  	                    d	d
|¬¦  «         
                    dd¦  «                             |d¦  «        }t          j        ||gd¬¦  «        }|                     |¦  «         |                     t          j        t          j        |ft          j        |¬¦  «        t          j        |ft          j        |¬¦  «        gd¬¦  «        ¦  «         t          j        ||dd …                              |d¦  «        gd¬¦  «        }|	                     |¦  «         �Œ|	|
||fS )Nr   r!   r#   rŽ  r    rÃ   r�  ©r‹  rO   rQ   ©r!   r!   r!   ©r   r   r   rR   r   r   )rQ   rn  r‹  r   r�  r�  r'   r  ÚSEQ_MULTI_OFr¨  r-   rò   rT   r\   Úzerosr¹   Úones)r   r©  r‡  rˆ  rª  r‘  r’  r“  rQ   Úall_image_outÚall_image_sizeÚall_image_pos_idsÚall_image_pad_maskr1  ÚimageÚCrx   r–  r—  ÚF_tokensÚH_tokensÚW_tokensÚimage_ori_lenÚimage_padding_lenÚimage_ori_pos_idsÚimage_padding_pos_idsÚimage_padded_pos_idsÚimage_padded_feats                               r   Úpatchifyz!ZImageTransformer2DModel.patchifyš  s¬  € ð ÐˆˆRØˆØ˜1”Ô$ˆàˆØˆØÐØÐå! )Ñ,Ô,ð )	4ñ )	4‰HˆAˆuàŸš™œ‰JˆAˆq�!�QØ×!Ò! 1 a¨ )Ñ,Ô,Ð,Ø+,°©7°A¸±G¸QÀ"¹W �hˆHà—J’J˜q (¨B°¸"¸hÈÑKÔKˆEà—M’M ! Q¨¨1¨a°°AÑ6Ô6×>Ò>¸xÈ(Ñ?RÐU]Ñ?]Ð_aÐdfÑ_fÐikÑ_kÐnoÑ_oÑpÔpˆEå ™JœJˆMØ"/ µ<Ñ ?Ðà $× ;Ò ;Ø ¨(Ð3Ø&¨Ñ*¨A¨qÐ1Øð !<ñ !ô !÷ Šg�a˜‰mŒmð	 ð ×+Ò+Ø"Ø#Ø!ð ,ñ ô ÷
 ’˜˜A‘”ß’Ð)¨1Ñ-Ô-ð "õ $)¤9Ð.?ÐAVÐ-WÐ]^Ð#_Ñ#_Ô#_Ð Ø×$Ò$Ð%9Ñ:Ô:Ð:à×%Ò%Ý”	åœ ]Ð$4½E¼JÈvÐVÑVÔVÝœ
Ð$5Ð#7½u¼zÐRXÐYÑYÔYðð ðñ ô ñô ð õ !&¤	¨5°%¸¸¸´*×2CÒ2CÐDUÐWXÑ2YÔ2YÐ*ZÐ`aÐ bÑ bÔ bÐØ× Ò Ð!2Ñ3Ô3Ð3Ñ3ð ØØØð	
ð 	
r   Úall_cap_featsc                 óè  — |x}}|}|d         j         }g }	g }
g }g }g }g }g }t          t          ||¦  «        ¦  «        D �]*\  }\  }}t          |¦  «        }| t          z  }|                      ||z   ddfd|¬¦  «                             dd¦  «        }|                     |¦  «         |                     t          j	        t          j
        |ft          j        |¬¦  «        t          j        |ft          j        |¬¦  «        gd¬¦  «        ¦  «         t          j	        ||dd …                              |d¦  «        gd¬¦  «        }|                     |¦  «         |                     ¦   «         \  }}}}|
                     |||f¦  «         ||z  ||z  ||z  }}}|                     |||||||¦  «        }|                     dd	d
dddd¦  «                             ||z  |z  ||z  |z  |z  ¦  «        }t          |¦  «        }| t          z  }|                      |||f||z   dz   ddf|¬¦  «                             dd¦  «        } |                      dd|¬¦  «                             dd¦  «                             |d¦  «        }!t          j	        | |!gd¬¦  «        }"|                     |"¦  «         |                     t          j	        t          j
        |ft          j        |¬¦  «        t          j        |ft          j        |¬¦  «        gd¬¦  «        ¦  «         t          j	        ||dd …                              |d¦  «        gd¬¦  «        }#|	                     |#¦  «         �Œ,|	||
||||fS )Nr   r!   )r!   r   r   r¬  r    r   rR   r   r#   rŽ  rÃ   r�  r­  r®  )rQ   rn  r  r  r¯  r¨  r-   r   rT   r\   r°  r¹   r±  rò   r‹  r�  r�  r'   )$r   r©  rÂ  r‡  rˆ  r‘  r’  r“  rQ   r²  r³  r´  rµ  Úall_cap_pos_idsÚall_cap_pad_maskÚall_cap_feats_outr1  r¶  Úcap_featÚcap_ori_lenrª  Úcap_padded_pos_idsÚcap_padded_featr·  rx   r–  r—  r¸  r¹  rº  r»  r¼  r½  r¾  r¿  rÀ  s$                                       r   Úpatchify_and_embedz+ZImageTransformer2DModel.patchify_and_embedÜ  s  € ð ÐˆˆRØˆØ˜1”Ô$ˆàˆØˆØÐØÐØˆØÐØÐå$-­c°)¸]Ñ.KÔ.KÑ$LÔ$Lð D	4ñ D	4Ñ ˆAÑ ��xå˜h™-œ-ˆKØ +˜|­|Ñ;ˆOà!%×!<Ò!<Ø! OÑ3°Q¸Ð:ØØð "=ñ "ô "÷ Šg�a˜‰mŒmð	 ð
 ×"Ò"Ð#5Ñ6Ô6Ð6à×#Ò#Ý”	åœ [ N½%¼*ÈVÐTÑTÔTÝœ
 OÐ#5½U¼ZÐPVÐWÑWÔWðð ðñ ô ñô ð õ $œiØ˜8 B C Cœ=×/Ò/°ÀÑCÔCÐDØðñ ô ˆOð ×$Ò$ _Ñ5Ô5Ð5ð Ÿš™œ‰JˆAˆq�!�QØ×!Ò! 1 a¨ )Ñ,Ô,Ð,Ø+,°©7°A¸±G¸QÀ"¹W �hˆHà—J’J˜q (¨B°¸"¸hÈÑKÔKˆEà—M’M ! Q¨¨1¨a°°AÑ6Ô6×>Ò>¸xÈ(Ñ?RÐU]Ñ?]Ð_aÐdfÑ_fÐikÑ_kÐnoÑ_oÑpÔpˆEå ™JœJˆMØ"/ µ<Ñ ?Ðà $× ;Ò ;Ø ¨(Ð3Ø" _Ñ4°qÑ8¸!¸QÐ?Øð !<ñ !ô !÷ Šg�a˜‰mŒmð	 ð ×+Ò+Ø"Ø#Ø!ð ,ñ ô ÷
 ’˜˜A‘”ß’Ð)¨1Ñ-Ô-ð "õ $)¤9Ð.?ÐAVÐ-WÐ]^Ð#_Ñ#_Ô#_Ð Ø×$Ò$Ð%9Ñ:Ô:Ð:à×%Ò%Ý”	åœ ]Ð$4½E¼JÈvÐVÑVÔVÝœ
Ð$5Ð#7½u¼zÐRXÐYÑYÔYðð ðñ ô ñô ð õ !&¤	¨5°%¸¸¸´*×2CÒ2CÐDUÐWXÑ2YÔ2YÐ*ZÐ`aÐ bÑ bÔ bÐØ× Ò Ð!2Ñ3Ô3Ð3Ñ3ð ØØØØØØð
ð 	
r   c                 ó   — | j         S )z5Returns True if the model has control layers enabled.)rk  r   s    r   Úhas_controlz$ZImageTransformer2DModel.has_control?  s   € ð Ô"Ð"r   c                 óz  — | j         rt          | d¦  «        sdS d| _        d„ |                      ¦   «         D ¦   «         }| j                             ¦   «         D ]9\  }}|d|› �         }|d|› �         }t          |dt          |¦  «        ¦  «         Œ:| j                             ¦   «         D ]�\  }}d}| j	        r;| j
        r4t          | d¦  «        r$d	|› �}|                     |d¦  «        }|�d
| _        |€|                     d|› �¦  «        }|€Œf|d|› �         }t          |dt          |¦  «        ¦  «         Œ�dS )zHMove control blocks to be submodules of their corresponding main layers.r~  NFc                 ó   — i | ]\  }}||“Œ	S r   r   )r+  r?  Úms      r   rM  z@ZImageTransformer2DModel.adapt_control_model.<locals>.<dictcomp>K  s   € Ð>Ð>Ð>¡  A˜˜1Ð>Ð>Ð>r   zcontrol_layers.zlayers.rý   r€  zcontrol_noise_refiner.Tznoise_refiner.)rk  Úhasattrrm  Únamed_modulesr^  r9  Úsetattrr   rT  rj  rl  Úget)r   Úmodules_dictÚmodel_layerÚcontrol_idxÚcontrol_moduleÚtargetÚ	noise_keys          r   r�  z,ZImageTransformer2DModel.adapt_control_modelD  s©  € àÔ"ð 	­'°$Ð8HÑ*IÔ*Ið 	ØˆFð 5:ˆÔ1Ø>Ð>¨×);Ò);Ñ)=Ô)=Ð>Ñ>Ô>ˆØ(,Ô(C×(IÒ(IÑ(KÔ(Kð 	Fð 	FÑ$ˆK˜Ø)Ð*I¸KÐ*IÐ*IÔJˆNØ!Ð"9¨KÐ"9Ð"9Ô:ˆFÝ�F˜I¥}°^Ñ'DÔ'DÑEÔEÐEÐEð )-Ô(K×(QÒ(QÑ(SÔ(Sð 	Fð 	FÑ$ˆK˜Ø!ˆNàÔ.ðEàÔ5ðEõ ˜DÐ"9Ñ:Ô:ðEð
 C°[ÐBÐB�	Ø!-×!1Ò!1°)¸TÑ!BÔ!B�Ø!Ð-Ø@D�DÔ=ØÐ%Ø!-×!1Ò!1Ð2QÀKÐ2QÐ2QÑ!RÔ!R�ØÐ%ØØ!Ð"@°;Ð"@Ð"@ÔAˆFÝ�F˜I¥}°^Ñ'DÔ'DÑEÔEÐEÐEð!	Fð 	Fr   r!   c           	      ó  — t          |¦  «        }|d         j        }	|                      ||||d                              d¦  «        ¦  «        \  }}
}}d„ |D ¦   «         }t	          d„ |D ¦   «         ¦  «        sJ ‚t          |¦  «        }t          j        |d¬¦  «        } | j        |› d|› �         |¦  «        }| 	                    |¦  «        }| j
        |t          j        |¦  «        <   t          |                     |d¬¦  «        ¦  «        }t          |                      t          j        |d¬¦  «        ¦  «                             |d¬¦  «        ¦  «        }t          |dd¬¦  «        }t          |dd¬¦  «        }t          j        ||ft          j        |	¬	¦  «        }t#          |¦  «        D ]\  }}d
||d|…f<   Œ| j        D ]} |||||¦  «        }Œd„ |D ¦   «         }g }t'          |¦  «        D ]W}||         }||         }|                     t          j        ||         d|…         ||         d|…         g¦  «        ¦  «         ŒXt          |dd¬¦  «        }|}t+          |¬¦  «        }|                     |¦  «         ||fS )z8Control v1.0 processing (without noise refiner control).r   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©r  r�  s     r   r,  zHZImageTransformer2DModel.prepare_forward_control_1_0.<locals>.<listcomp>z  s   € Ð:Ð:Ð: Q�#˜a™&œ&Ð:Ð:Ð:r   c              3   ó2   K  — | ]}|t           z  d k    V — ŒdS rœ  ©r¯  r�  s     r   rž  zGZImageTransformer2DModel.prepare_forward_control_1_0.<locals>.<genexpr>{  s,   è è € ÐAÐA¨Q�1•|Ñ# qÒ(ÐAÐAÐAÐAÐAÐAr   rR   rO  Tç        ©Úbatch_firstÚpadding_valuer   r!   Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   rÝ  r�  s     r   r,  zHZImageTransformer2DModel.prepare_forward_control_1_0.<locals>.<listcomp>‘  s   € Ð6Ð6Ð6 q�C ™FœFÐ6Ð6Ð6r   ©r0   )r  rQ   rÁ  r‹  ÚallrÑ   rT   r\   r  Útype_asry  rº   rÒ   r}  r   r°  r¹   rn  r€  r/  r   ÚdictÚupdate)r   r0   Ú	cap_featsÚcontrol_contextrô   r^   r‡  rˆ  r”  rQ   Úx_sizeÚ	x_pos_idsÚx_inner_pad_maskÚx_item_seqlensÚx_max_item_seqlenrÚ   Úx_freqs_cisÚx_attn_maskr1  rÔ   ÚlayerÚcap_item_seqlensÚcontrol_context_unifiedÚx_lenÚcap_lenrõ   Ú
new_kwargss                              r   Úprepare_forward_control_1_0z4ZImageTransformer2DModel.prepare_forward_control_1_0d  sÝ  € õ �/Ñ"Ô"ˆØ  Ô#Ô*ˆð �MŠM˜/¨:°|ÀYÈqÄ\×EVÒEVÐWXÑEYÔEYÑZÔZñ	
ØØØØð ;Ð:¨/Ð:Ñ:Ô:ˆÝÐAÐA°.ÐAÑAÔAÑAÔAÐAÐAÐAÝ Ñ/Ô/Ðåœ) O¸Ð;Ñ;Ô;ˆØU˜$Ô5¸Ð6TÐ6TÀlÐ6TÐ6TÔUÐVeÑfÔfˆð —i’i Ñ0Ô0ˆØ7;Ô7Gˆ�œ	Ð"2Ñ3Ô3Ñ4Ý˜×4Ò4°^ÈÐ4ÑKÔKÑLÔLˆÝ˜4×-Ò-­e¬i¸	ÀqÐ.IÑ.IÔ.IÑJÔJ×PÒPÐQ_ÐefÐPÑgÔgÑhÔhˆå& ÀDÐX[Ð\Ñ\Ô\ˆÝ" ;¸DÐPSÐTÑTÔTˆÝ”k 3Ð(9Ð":Å%Ä*ÐU[Ð\Ñ\Ô\ˆÝ# NÑ3Ô3ð 	)ð 	)‰JˆAˆwØ'(ˆK˜˜8˜G˜8˜Ñ$Ð$àÔ/ð 	\ð 	\ˆEØ#˜e O°[À+È{Ñ[Ô[ˆOˆOð 7Ð6¨IÐ6Ñ6Ô6ÐØ"$ÐÝ�s‘”ð 	lð 	lˆAØ" 1Ô%ˆEØ& qÔ)ˆGØ#×*Ò*­5¬9°oÀaÔ6HÈÈ%ÈÔ6PÐR[Ð\]ÔR^Ð_gÐ`gÐ_gÔRhÐ5iÑ+jÔ+jÑkÔkÐkÐkÝ".Ð/FÐTXÐhkÐ"lÑ"lÔ"lÐØ#ˆå˜A�Y‘Y”Yˆ
Ø×Ò˜&Ñ!Ô!Ð!à˜1ˆ}Ðr   c                 óÜ  — t          |¦  «        }|d         j        }	|                      ||||d                              d¦  «        ¦  «        \  }}
}}d„ |D ¦   «         }t	          d„ |D ¦   «         ¦  «        sJ ‚t          |¦  «        }t          j        |d¬¦  «        } | j        |› d|› �         |¦  «        }| 	                    |¦  «        }| j
        |t          j        |¦  «        <   t          |                     |d¬¦  «        ¦  «        }t          |                      t          j        |d¬¦  «        ¦  «                             |d¬¦  «        ¦  «        }t          |dd¬¦  «        }t          |dd¬¦  «        }t          j        ||ft          j        |	¬	¦  «        }t#          |¦  «        D ]\  }}d
||d|…f<   Œ|}t%          ||||¬¦  «        }|                     |¦  «         |||fS )z Control v2.0 refiner processing.r   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   rÝ  r�  s     r   r,  zPZImageTransformer2DModel.prepare_forward_control_2_0_refiner.<locals>.<listcomp>µ  s   € Ð'HÐ'HÐ'H°1­¨A©¬Ð'HÐ'HÐ'Hr   c              3   ó2   K  — | ]}|t           z  d k    V — ŒdS rœ  rß  r�  s     r   rž  zOZImageTransformer2DModel.prepare_forward_control_2_0_refiner.<locals>.<genexpr>¶  s,   è è € ÐOÐO¨Q�1•|Ñ# qÒ(ÐOÐOÐOÐOÐOÐOr   rR   rO  Trà  rá  r   r!   N)r0   rÙ   r   rÚ   )r  rQ   rÁ  r‹  ræ  rÑ   rT   r\   r  rç  ry  rº   rÒ   r}  r   r°  r¹   rn  rè  ré  )r   r0   rê  rë  rô   r^   r‡  rˆ  r”  rQ   Úcontrol_context_sizeÚcontrol_context_pos_idsÚcontrol_context_inner_pad_maskÚcontrol_context_item_seqlensÚcontrol_context_max_item_seqlenrÚ   Úcontrol_context_freqs_cisÚcontrol_context_attn_maskr1  rÔ   rõ   rø  s                         r   Ú#prepare_forward_control_2_0_refinerz<ZImageTransformer2DModel.prepare_forward_control_2_0_refinerŸ  sJ  € õ �/Ñ"Ô"ˆØ  Ô#Ô*ˆð �MŠM˜/¨:°|ÀYÈqÄ\×EVÒEVÐWXÑEYÔEYÑZÔZñ	
ØØ Ø#Ø*ð (IÐ'H¸Ð'HÑ'HÔ'HÐ$ÝÐOÐOÐ2NÐOÑOÔOÑOÔOÐOÐOÐOÝ*-Ð.JÑ*KÔ*KÐ'åœ) O¸Ð;Ñ;Ô;ˆØU˜$Ô5¸Ð6TÐ6TÀlÐ6TÐ6TÔUÐVeÑfÔfˆð —i’i Ñ0Ô0ˆØEIÔEUˆ�œ	Ð"@ÑAÔAÑBÝ˜×4Ò4Ð5QÐWXÐ4ÑYÔYÑZÔZˆÝ$(¨×);Ò);½E¼IÐF]ÐcdÐ<eÑ<eÔ<eÑ)fÔ)f×)lÒ)lð  nJð  PQÐ)lñ  *Rô  *Rñ  %Sô  %SÐ!å& ÀDÐX[Ð\Ñ\Ô\ˆÝ$0Ð1JÐX\ÐloÐ$pÑ$pÔ$pÐ!Ý$)¤K°Ð6UÐ0VÕ^cÔ^hÐqwÐ$xÑ$xÔ$xÐ!Ý#Ð$@ÑAÔAð 	7ð 	7‰JˆAˆwØ56Ð% a¨¨'¨ kÑ2Ð2ØˆåØØ/Ø/Ø#ð	
ñ 
ô 
ˆ
ð 	×Ò˜&Ñ!Ô!Ð!à˜1Ð:Ð:Ð:r   c                 óæ   — |}|j         d         }t          j        |d|…         |d|…         gd¬¦  «        }t          |dd¬¦  «        }	t	          |¬¦  «        }
|
                     |¦  «         |
|	fS )zControl v2.0 layers processing.r!   NrR   Trà  rá  rå  )r(   rT   r\   r   rè  ré  )r   r0   rê  rë  r   rô   Úcontrol_context_lenr÷  rõ  rõ   rø  s              r   Ú"prepare_forward_control_2_0_layersz;ZImageTransformer2DModel.prepare_forward_control_2_0_layersÓ  s‹   € ð ;ÐØ”/ !Ô$ˆÝ!&¤¨OÐ<PÐ=PÐ<PÔ,QÐS\Ð]eÐ^eÐ]eÔSfÐ+gÐmnÐ!oÑ!oÔ!oÐåÐ0¸dÐRUÐVÑVÔVˆå˜A�Y‘Y”Yˆ
Ø×Ò˜&Ñ!Ô!Ð!à˜1ˆ}Ðr   rÜ   r   Úcap_feats_listc                 ó’  — || j         v sJ ‚|| j        v sJ ‚t          |¦  «        }t          |¦  «        |k    s
J d¦   «         ‚|d         j        }|                     t
          j        ¬¦  «        }|                      |                     ¦   «         | j	        z  ¦  «        }|�t|                     t
          j        ¬¦  «        }||z
  }|                     ¦   «         }|                      ||z
  | j	        z  ¦  «        }||| 
                    d¦  «        z  z   }|}| j        |› d|› �         }g }g }d}d}g }t          t          ||¦  «        ¦  «        D �]\  }\  }}|j        d         }|                      ||g|z  ||¦  «        \  }}} }!}"}#}$|dk    r| }%t          |¦  «        }|$d         }t          |d         ¦  «        }&t          |d         ¦  «        }'|                      t          j        |!dd…         d¬¦  «        ¦  «         
                    d¦  «        }(|                      t          j        |"dd…         d¬¦  «        ¦  «         
                    d¦  «        }) |t          j        |¦  «        ¦  «        }*| j        |*t          j        |#¦  «        <   |                     |*¦  «         |                      t          j        |¦  «        ¦  «        }+| j        |+t          j        |$¦  «        <   |                     |+¦  «         |                     |&|'|(|)t          j        d|&ft
          j        |¬¦  «        t          j        d|'ft
          j        |¬¦  «        d	œ¦  «         dx}}�Œ|                     |d         ¦  «        dd…         },g }-g }.g }/g }0|duo| j        }1|1o| j        }2|2rÓt          t          |||¦  «        ¦  «        D ]´\  }\  }3}4}5t9          ||         d
         ||         d         |,¬¦  «        }6|                      |3|4g|5                     d¦  «        g|6|,||¬¦  «        \  }7}8}9|0                     |7¦  «         |-                     |8g¦  «         |/                     |9d         ¦  «         dx}3x}4}5Œµ| j        D ]l}:t          |¦  «        D ]Z\  }};t9          ||         d
         ||         d         |,¬¦  «        }6|2r|-|         |6d<   |0|         |6d<   ||6d<    |:|;fi |6¤Ž||<   d};Œ[Œm|2rytA          | dd¦  «        rdnt          | j!        ¦  «        }<| j"        |<d…         }=t          |-|0¦  «        D ]2\  }>}?|=D ]}: |:|>fi |?¤Ž Œ|.                     |>d         ¦  «         dx}>}?Œ3d}@|du}A|A�ro|d         }B|d         }Cd}@t          |C¦  «        |k     rG|t          |C¦  «        z
  }Dt          j        |C|Cdd…          #                    |Dd¦  «        gd¬¦  «        }Cnt          |C¦  «        |k    r
|Cd|…         }C|Bd         t          |C¦  «        z
  }D|Ddk    r4t          j        |C|Cdd…          #                    |Dd¦  «        gd¬¦  «        }C|                      |C 
                    d¦  «        ¦  «                             |d         ¦  «        }E| j        |E| 
                    d¦  «        <   | j$        D ]}: |:|E|Bd         |Bd         ¬¦  «        }EŒ|Ej        d         |d<   d}C| j$        D ]B}:t          |¦  «        D ]0\  }}F |:|F||         d         ||         d         ¬¦  «        ||<   d}FŒ1ŒCg }Gg }Hg }Ig }Jt          t          ||¦  «        ¦  «        D ]j\  }\  }K}+|Ao||@k    }L|G                     t          j        |K|+g|Lr%|E %                    t          |+¦  «        dd¦  «        gng z   d¬¦  «        ¦  «         d||<   Œkd}EtM          |¦  «        D ]Ø}|Ao||@k    }L||         d         }M||         d         }Nt          j        |M|Ng|Lr|Ngng z   d¬¦  «        }O|H                     |O¦  «         ||         d         ||         d         z   }P|J                     |P¦  «         |P|Lr||         d         ndz   }Q|I                     t          j        d|Qft
          j        |¬¦  «        ¦  «         ŒÙg }Rg }S|1�r²|d         }4|, %                    |d¦  «        }T|2rÊt          t          |G|.|/¦  «        ¦  «        D ]ª\  }\  }U}V}9t9          |I|         dd…d|J|         …f         |H|         dd…d|J|         …f         |T¬¦  «        }W|  '                    |Udd…d|J|         …f         |4|V|9|W¦  «        \  }?}X|S                     |?¦  «         |R                     |Xg¦  «         dx}Ux}V}9Œ«nÈt          t          |G|¦  «        ¦  «        D ]ª\  }\  }U}Vt9          |I|         dd…d|J|         …f         |H|         dd…d|J|         …f         |T¬¦  «        }W|  (                    |Udd…d|J|         …f         |4|V|W|,||¬¦  «        \  }?}X|S                     |?¦  «         |R                     |Xg¦  «         dx}U}VŒ«t          |R¦  «        dk    r&dgt          |¦  «        z  }Rdgt          |¦  «        z  }S| j)        D ]¨}:|	� |	dddd¦  «         |
�tA          |
dd¦  «        r dS t          t          |G|R|S¦  «        ¦  «        D ]a\  }\  }Y}>}?i }6|>�%|6 *                    t9          |>|?|¬¦  «        ¦  «         |@|k    r||6d<    |:|Yf|I|         |H|         |,dœ|6¤Ž|G|<   dx}Yx}>x}6}?ŒbŒ©g }Z| j+        |› d|› �         }[tM          |¦  «        D ]]} |[|G|         |,¦  «        }\|\dd…d||         d         …f         }\|  ,                    |\|%||¦  «        }]|Z                     |]¦  «         d}\Œ^|ZS ) zZForward pass with list-based processing (outer loop over layers, inner loop over samples).z'cap_feats_list must match x_list lengthr   r  Nr!   rO  rR   r   )Úx_seqlenÚ
cap_seqlenÚx_freqsÚ	cap_freqsrò  Úcap_attn_maskrò  r  )rÙ   r   rÚ   )rô   r^   r‡  rˆ  ró   rÿ   r   rm  Fr   Ú	neg_featsr  r  r  )rÙ   r   rž   r
  )r^   r‡  rˆ  TÚ
_interrupt)ró   rÿ   r   r©   )-re  rf  r  rQ   r.   rT   r[   ru  Úabsrh  r)   rp  rn  r  r(   rË  r}  r\   r!  ry  r   rv  rz  r±  r¹   rç  rk  rj  rè  r  Úsqueezers  ÚgetattrrS  r~  rò   rt  Úexpandr/  r  rù  r{  ré  rq  r™  )^r   r   r^   r  r‡  rˆ  Úcontrol_context_listÚcontrol_context_scaleÚtarget_timestepÚcallbackÚpipeliner©   Únum_noise_samplesrQ   Út_highrk   Útarget_t_highÚdelta_tÚdelta_t_absÚt_emb_2r‰  Úembedded_x_listÚcap_embedded_listÚcap_ori_len_refÚcap_pad_mask_refÚper_sample_kwargsr1  r0   rê  r”  Ú	x_patchesÚcap_outÚx_i_sizerí  Úcap_pos_idsrî  Úcap_inner_pad_maskrì  r
  r  rñ  Úcap_freqs_cisÚ
x_embeddedÚcap_embeddedrÚ   Úrefiner_hints_tuple_listÚctrl_ctx_tensor_listÚctrl_seqlens_listÚrefiner_hints_kwargs_listÚany_controlÚ
control_V2Úx_batchÚcap_embedded_refÚcontrol_ctx_inputrô   Úrefiner_hints_kwargsÚrefiner_hints_tupleÚctrl_seqlensró  Úx_iÚcontrol_layer_offsetÚcontrol_layers_seqró   rÿ   Ú	NAG_indexÚnag_enabledÚ
nag_kwargsr  Úpad_lenÚneg_cap_embeddedÚcap_iÚunified_listÚunified_freqs_listÚunified_attn_masksÚcontrol_seqlensÚ
embedded_xÚis_nagÚ	x_freqs_iÚcap_freqs_iÚunified_freqs_iÚcontrol_seqlenÚunified_seqlenÚ
hints_listÚhints_kwargs_listÚadaln_input_expandedÚunified_batchÚctrl_ctx_tensorÚcontrol_kwargsÚhints_tupleÚ	unified_iÚoutput_listrŠ  Ú	final_outÚunpatchifieds^                                                                                                 r   rl   z ZImageTransformer2DModel.forwardç  s  € ð ˜TÔ0Ð0Ð0Ð0Ð0Ø˜tÔ4Ð4Ð4Ð4Ð4å ™KœKÐÝ�>Ñ"Ô"Ð&7Ò7Ð7Ð7Ð9bÑ7Ô7Ð7à˜”Ô!ˆØ—’�EœM�Ñ*Ô*ˆØ—’ §
¢
¡¤¨t¬|Ñ ;Ñ<Ô<ˆØÐ&Ø+×.Ò.µU´]Ð.ÑCÔCˆMØ˜}Ñ,ˆGØ!Ÿ+š+™-œ-ˆKØ—o’o }°vÑ'=ÀÄÑ&MÑNÔNˆGØ˜G k×&;Ò&;¸AÑ&>Ô&>Ñ>Ñ>ˆEØˆð Ô(¨JÐ)GÐ)G¸Ð)GÐ)GÔHˆ
ØˆØÐØˆØÐØÐå(­¨V°^Ñ)DÔ)DÑEÔEð  	!ñ  	!‰OˆA‰mˆq�Ø”'˜!”*ˆCØlp÷  mDò  mDð  EFð  IRð  HSð  UXñ  HXð  Zdð  frñ  msô  msÑiˆi˜ (¨I°{ÐDTÐVhð �!ŠtˆtØ!�Ý"% i¡.¤.�Ø#5°aÔ#8Ð Ý˜9 Qœ<Ñ(Ô(ˆHÝ˜W QœZ™œˆJØ×,Ò,­U¬Y°yÀÀ!À´}È!Ð-LÑ-LÔ-LÑMÔM×WÒWÐXYÑZÔZˆKØ ×.Ò.­u¬y¸ÀRÀaÀR¼ÈaÐ/PÑ/PÔ/PÑQÔQ×[Ò[Ð\]Ñ^Ô^ˆMð $˜¥E¤K°	Ñ$:Ô$:Ñ;Ô;ˆJØ8<Ô8HˆJ•u”{Ð#3Ñ4Ô4Ñ5Ø×"Ò" :Ñ.Ô.Ð.à×,Ò,­U¬[¸Ñ-AÔ-AÑBÔBˆLØ<@Ô<NˆL�œÐ%7Ñ8Ô8Ñ9Ø×$Ò$ \Ñ2Ô2Ð2Ø×$Ò$à (Ø",Ø*Ø!.Ý#(¤:¨q°(¨mÅ5Ä:ÐV\Ð#]Ñ#]Ô#]Ý%*¤Z°°J°ÅuÄzÐZ`Ð%aÑ%aÔ%aðð ñ	ô 	ð 	ð !Ð ˆA�	‘	ð —i’i °Ô 2Ñ3Ô3°B°Q°BÔ7ˆð $&Ð Ø!ÐØÐØ#%Ð!Ø*°$Ð6ÐN¸4Ô;NˆØ ÐC TÔ%Cˆ
Øð 	Fõ DMÍSÐQ`Ðbsð  vJñ  NKô  NKñ  DLô  DLð Fð FÑ?�Ñ?�7Ð+Ð->ÝØ/°Ô2°=ÔAØ/°Ô2°9Ô=Ø +ðñ ô �ð KO×JrÒJrØØ%Ð&Ø&×.Ò.¨qÑ1Ô1Ð2Ø#Ø!¨jÀ|ð Ksñ Kô KÑGÐ$Ð&9¸<ð *×0Ò0Ð1EÑFÔFÐFØ(×/Ò/Ð1DÐ0EÑFÔFÐFà!×(Ò(¨°a¬Ñ9Ô9Ð9ØAEÐE�ÐEÐ*Ð->Ð->ð Ô'ð 	ð 	ˆEÝ# OÑ4Ô4ð ð ‘��3ÝØ/°Ô2°=ÔAØ/°Ô2°9Ô=Ø +ðñ ô �ð
 ð Dà&>¸qÔ&A�F˜7‘OØ-FÀqÔ-I�F˜>Ñ*Ø.C�F˜?Ñ+Ø%* U¨3Ð%9Ð%9°&Ð%9Ð%9� Ñ"Ø��ðð ð 	,å(/°Ð6\Ð^cÑ(dÔ(dð  $R 1 1ÕjmÐnrô  oQñ  kRô  kRÐ Ø!%Ô!4Ð5IÐ5JÐ5JÔ!KÐÝ'*Ð+CÐE^Ñ'_Ô'_ð ,ð ,Ñ#��|Ø/ð 1ð 1�EØ�E˜%Ð0Ð0 <Ð0Ð0Ð0Ð0Ø$×+Ò+¨E°!¬HÑ5Ô5Ð5Ø'+Ð+�˜˜ð ˆ	Ø �oˆØñ 	Ø*¨1Ô-ˆJØ˜KÔ(ˆIØˆIÝ�9‰~Œ~ Ò/Ð/Ø)­C°	©N¬NÑ:�Ý!œI y°)¸B¸C¸C´.×2GÒ2GÈÐQRÑ2SÔ2SÐ&TÐZ[Ð\Ñ\Ô\�	�	Ý�Y‘” /Ò1Ð1Ø%Ð&6 Ð&6Ô7�	Ø  Ô.µ°Y±´Ñ?ˆGØ˜Š{ˆ{Ý!œI y°)¸B¸C¸C´.×2GÒ2GÈÐQRÑ2SÔ2SÐ&TÐZ[Ð\Ñ\Ô\�	Ø#×0Ò0°×1DÒ1DÀQÑ1GÔ1GÑHÔH×PÒPÐQbÐcdÔQeÑfÔfÐØ>BÔ>PÐÐ-×7Ò7¸Ñ:Ô:Ñ;ØÔ-ð ð �Ø#( 5Ø$Ø(¨Ô9Ø(¨Ô5ð$ñ $ô $Ð Ð ð
 $4Ô#9¸!Ô#<ˆC�Ñ ØˆIàÔ)ð 	ð 	ˆEÝ%Ð&7Ñ8Ô8ð ð ‘��5Ø', uØØ/°Ô2°?ÔCØ/°Ô2°;Ô?ð(ñ (ô (Ð! !Ñ$ð
 ��ðð ˆØÐØÐØˆÝ,5µc¸/ÐK\Ñ6]Ô6]Ñ,^Ô,^ð 		&ð 		&Ñ(ˆAÑ(ˆz˜<Ø Ð3 Q¨)¢^ˆFØ×ÒÝ”	Ø Ð.ØOUÐ]Ð(×/Ò/µ°LÑ0AÔ0AÀ2ÀrÑJÔJÐKÐKÐ[]ñ_àðñ ô ñô ð ð "&ˆO˜AÑÐØÐÝÐ(Ñ)Ô)ð 		hð 		hˆAØ Ð3 Q¨)¢^ˆFØ)¨!Ô,¨YÔ7ˆIØ+¨AÔ.¨{Ô;ˆKÝ#œi¨°KÐ(@ÐU[ÐDcÀ[ÀMÀMÐacÑ(dÐjkÐlÑlÔlˆOØ×%Ò% oÑ6Ô6Ð6Ø.¨qÔ1°*Ô=Ð@QÐRSÔ@TÐUaÔ@bÑbˆNØ×"Ò" >Ñ2Ô2Ð2Ø+ÐU[Ð/bÐ/@ÀÔ/CÀLÔ/QÐ/QÐabÑcˆNØ×%Ò%¥e¤j°!°^Ð1DÍEÌJÐ_eÐ&fÑ&fÔ&fÑgÔgÐgÐgØˆ
ØÐð ñ $	;Ø0°Ô3ÐØ#.×#5Ò#5Ð6GÈÑ#LÔ#LÐ Øð !;åIRÕSVÐWcÐeyð  |Mñ  TNô  TNñ  JOô  JOð Jð JÑE�AÑE˜ ¸Ý%)Ø"4°QÔ"7¸¸¸Ð;N¸OÈAÔ<NÐ;NÐ8NÔ"OØ"4°QÔ"7¸¸¸Ð;N¸OÈAÔ<NÐ;NÐ8NÔ"OØ$8ð&ñ &ô &�Nð
 15×0WÒ0WØ% a a aÐ)<¨/¸!Ô*<Ð)<Ð&<Ô=Ð?OÐQ`ÐbnÐp~ñ1ô 1Ñ-�L +ð &×,Ò,¨\Ñ:Ô:Ð:Ø×%Ò% { mÑ4Ô4Ð4ØEIÐI�MÐI O°l°lðJõ <EÅSÈÐWkÑElÔElÑ;mÔ;mð ;ð ;Ñ7�AÑ7˜ Ý%)Ø"4°QÔ"7¸¸¸Ð;N¸OÈAÔ<NÐ;NÐ8NÔ"OØ"4°QÔ"7¸¸¸Ð;N¸OÈAÔ<NÐ;NÐ8NÔ"OØ$8ð&ñ &ô &�Nð
 15×0PÒ0PØ% a a aÐ)<¨/¸!Ô*<Ð)<Ð&<Ô=Ø(Ø'Ø&Ø%Ø#-Ø%1ð 1Qñ 1ô 1Ñ-�L +ð &×,Ò,¨\Ñ:Ô:Ð:Ø×%Ò% { mÑ4Ô4Ð4Ø6:Ð:�M O Oåˆz‰?Œ?˜aÒÐØ˜¥# f¡+¤+Ñ-ˆJØ!% ­¨V©¬Ñ 4Ðð ”[ð 	Að 	AˆEØÐ#Ø�˜˜T 5¨$Ñ/Ô/Ð/ØÐ#­°¸,ÈÑ(NÔ(NÐ#Ø�t�tå7@ÅÀ\ÐS]Ð_pÑAqÔAqÑ7rÔ7rð Að AÑ3�Ñ3�I˜u lØ�ØÐ$Ø—M’M¥$¨eÀLÐbwÐ"xÑ"xÔ"xÑyÔyÐyØ ’>�>°# 6¨%¡=Ø"' %Øð#à0°Ô3Ø0°Ô3Ø +ð	#ð #ð
 ð#ð #�˜Q‘ð =AÐ@�	Ð@˜EÐ@ F¨\¨\ðAð ˆØÔ*¨jÐ+IÐ+I¸<Ð+IÐ+IÔJˆÝÐ(Ñ)Ô)ð 	ð 	ˆAØ#˜ L°¤O°[ÑAÔAˆIØ! ! ! !Ð%FÐ&7¸Ô&:¸:Ô&FÐ%FÐ"FÔGˆIØŸ?š?¨9°f¸jÈ,ÑWÔWˆLØ×Ò˜|Ñ,Ô,Ð,ØˆIˆIàÐr   )r   Nrç   )Nr    r!   )r    r!   NrÜ   NNNN)r   r   r   rA  r   r   rT   r»   r   r™  rm   r¨  r}   rÁ  rË  Úpropertyr¹   rÍ  r�  rù  r  r  rl   rn   ro   s   @r   r4  r4  –  sŒ  ø€ € € € € ðð ð ð( #Ø&*ØØ"'ØØ%*àØØØØØØØØØØØØØØ�,�,Ø"Ð"Ð"ð3U'ð4 
ð5U'ð U'ð U'ð U'ð U'ð U'ðn'˜D ¤Ô.ð '°d¸5´kð 'Ð`dÐejÔeqÔ`rð 'ð 'ð 'ð 'ð$ ð*ð *ð *ñ „\ð*ð@
à˜œÔ%ð@
ð ð@
ð ð	@
ð
 ð@
ð @
ð @
ð @
ðDa
à˜œÔ%ða
ð ˜EœLÔ)ða
ð ð	a
ð
 ða
ð a
ð a
ð a
ðF ð#˜Tð #ð #ð #ñ „Xð#ðFð Fð FðL ØØð9ð 9ð 9ð 9ðB ØØð2;ð 2;ð 2;ð 2;ðhð ð ð2 ØØ!Ø!ØØØØðQð Qà�U”\Ô"ðQð ˜Uœ\Ô*ð	Qð Qð Qð Qð Qð Qð Qð Qr   r4  )$rX   Útypingr   r   r   rT   Útorch.nnrB   Útorch.nn.functionalÚ
functionalrx   Útorch.nn.utils.rnnr   Údiffusers.models.normalizationr   Úsharedr   Úshared.attentionr	   r   rº   r»   r6   r9   rÍ   r¯  ÚModuler=   rq   r   r½   ré   rú   r  r  r4  r   r   r   ú<module>rb     sÖ  ðð €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +à 2Ð 2Ð 2Ð 2Ð 2Ð 2à  Ð  Ð  Ð  Ð  Ð  Ø *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ñ ô ð ð" Tð "°e´lð "ÀuÄ|ð "ð "ð "ð "ðPð Pð Pð €Ø€ð(ð (ð (ð (ð (�r”yñ (ô (ð (ðVJð Jð Jð Jð J�"”)ñ Jô Jð JðW ð W ð W ð W ð W �”	ñ W ô W ð W ðtIð Ið Ið Ið I˜RœYñ Iô Ið IðX#ð #ð #ð #ð #Ð$:ñ #ô #ð #ðNð ð ð ð Ð!7ñ ô ð ð4ð ð ð ð �”ñ ô ð ð&,)ð ,)ð ,)ð ,)ð ,)ñ ,)ô ,)ð ,)ð^bð bð bð bð b˜rœyñ bô bð bð bð br   