§
    9†Æj2 ã                   ó®  — d dl mZ d dlZd dlmZmZ d dl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 dCd„Zd	„ Zd
„ Zd„ Zd„ Zdedefd„Z G d„ de
j        ¦  «        Z G d„ de
j        ¦  «        Z G d„ de
j        ¦  «        ZdDdedededefd„Z 	 	 dDdededededededefd „Z!d!e"d"ej#        d#ej#        f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
j        ¦  «        Z) G d/„ d0e
j        ¦  «        Z* G d1„ d2e
j        ¦  «        Z+ G d3„ d4e
j        ¦  «        Z,d5ed#efd6„Z- G d7„ d8e
j        ¦  «        Z. G d9„ d:e
j        ¦  «        Z/ G d;„ d<e
j        ¦  «        Z0 G d=„ d>e
j        ¦  «        Z1 G d?„ d@e
j        ¦  «        Z2 G dA„ dBe
j        ¦  «        Z3dS )Eé    )Úinference_checkpointN)ÚOptionalÚTuple)ÚProcessGroup)Úcat_outputs_cp_with_grad)Úpay_attentionFc                 ó–  — t          j        |t           j        ¬¦  «        }t          j        |t           j        ¬¦  «        }t          j        ||¦  «        }t          j        |d¬¦  «        }|                     dd||g¦  «        }t          | |¦  «        }|r2|dk    r,t          j        t          j        || g¦  «        |gd¬¦  «        }|S )z­
    grid_size: int of the grid height and width
    return:
    pos_embed: [grid_size*grid_size, embed_dim] or [1+grid_size*grid_size, embed_dim] (w/ or w/o cls_token)
    ©Údtyper   ©Úaxisé   é   )	ÚnpÚarangeÚfloat32ÚmeshgridÚstackÚreshapeÚ!get_2d_sincos_pos_embed_from_gridÚconcatenateÚzeros)Ú	embed_dimÚ	grid_sizeÚ	cls_tokenÚextra_tokensÚgrid_hÚgrid_wÚgridÚ	pos_embeds           úUC:\Users\johnn\OneDrive\Documents\AI\postprocessing\pid\networks\pixeldit_official.pyÚget_2d_sincos_pos_embedr"      sÀ   € õ ŒY�y­¬
Ð3Ñ3Ô3€FÝŒY�y­¬
Ð3Ñ3Ô3€FÝŒ;�v˜vÑ&Ô&€DÝŒ8�D˜qÐ!Ñ!Ô!€Dà�<Š<˜˜A˜y¨)Ð4Ñ5Ô5€DÝ1°)¸TÑBÔB€IØð ]�\ AÒ%Ð%Ý”N¥B¤H¨l¸IÐ-FÑ$GÔ$GÈÐ#SÐZ[Ð\Ñ\Ô\ˆ	ØÐó    c                 ó°   — | dz  dk    sJ ‚t          | dz  |d         ¦  «        }t          | dz  |d         ¦  «        }t          j        ||gd¬¦  «        }|S )Nr   r   r   r   )Ú!get_1d_sincos_pos_embed_from_gridr   r   )r   r   Úemb_hÚemb_wÚembs        r!   r   r   .   sb   € Ø�q‰=˜AÒÐÐÐå-¨i¸1©n¸dÀ1¼gÑFÔF€EÝ-¨i¸1©n¸dÀ1¼gÑFÔF€Eå
Œ.˜% ˜¨aÐ
0Ñ
0Ô
0€CØ€Jr#   c                 óX  — | dz  dk    sJ ‚t          j        | dz  t           j        ¬¦  «        }|| dz  z  }dd|z  z  }|                     d¦  «        }t          j        d||¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        ||gd	¬
¦  «        }|S )z}
    embed_dim: output dimension for each position
    pos: a list of positions to be encoded: size (M,)
    out: (M, D)
    r   r   r
   g       @ç      ð?i'  éÿÿÿÿzm,d->mdr   r   )r   r   Úfloat64r   ÚeinsumÚsinÚcosr   )r   ÚposÚomegaÚoutÚemb_sinÚemb_cosr(   s          r!   r%   r%   8   s©   € ð �q‰=˜AÒÐÐÐÝŒI�i 1‘n­B¬JÐ7Ñ7Ô7€EØ	ˆY˜‰_Ñ€EØ�%˜‘,Ñ€Eà
�+Š+�b‰/Œ/€CÝ
Œ)�I˜s EÑ
*Ô
*€CåŒf�S‰kŒk€GÝŒf�S‰kŒk€Gå
Œ.˜' 7Ð+°!Ð
4Ñ
4Ô
4€CØ€Jr#   c                 óX   — |                       |dz   ¦  «                             |¦  «        S )Nr   )Úmul_Úadd_)ÚxÚshiftÚscales      r!   Úapply_adalnr;   M   s&   € Ø�6Š6�%˜!‘)ÑÔ×!Ò! %Ñ(Ô(Ð(r#   c                 ól   — t          | t          ¦  «        r| d         }|                      ¦   «          |S | S )Nr   )Ú
isinstanceÚlistÚclear)r8   r2   s     r!   Ú_take_tensorr@   Q   s4   € Ý�!•TÑÔð Ø�ŒdˆØ	�Š‰	Œ	ˆ	Øˆ
Ø€Hr#   Úhidden_sizeÚpixel_attn_hidden_sizec                 ó,   — g d¢| | | gdœg d¢|||gdœdœS )N)Úq_xÚk_xÚv_x)Úmapped_modulesÚsplit_sizes)ÚqÚkÚv)Úqkv_xÚqkv© )rA   rB   s     r!   Úget_pid_linear_split_maprO   Y   sR   € à$9Ð$9Ð$9È;ÐXcÐepÐJqÐrÐrØ"1 / /ÐCYÐ[qð  tJð  CKð  Lð  Lðð ð r#   c                   ó>   ‡ — e Zd Zdˆ fd„	Zedd„¦   «         Zd„ Zˆ xZS )ÚTimestepConditioneré   c           	      ó  •— t          ¦   «                              ¦   «          t          j        t          j        ||d¬¦  «        t          j        ¦   «         t          j        ||d¬¦  «        ¦  «        | _        || _        d S ©NT©Úbias)ÚsuperÚ__init__ÚnnÚ
SequentialÚLinearÚSiLUÚmlpÚfrequency_embedding_size)ÚselfrA   r^   Ú	__class__s      €r!   rX   zTimestepConditioner.__init__a   so   ø€ Ý‰Œ×ÒÑÔÐÝ”=ÝŒIÐ.°À$ÐGÑGÔGÝŒG‰IŒIÝŒI�k ;°TÐ:Ñ:Ô:ñ
ô 
ˆŒð
 )AˆÔ%Ð%Ð%r#   é
   c           	      óè  — |dz  }t          j        t          j        |¦  «         t          j        d|t           j        | j        ¬¦  «        z  |z  ¦  «        }| d                              ¦   «         |d         z  }t          j        t          j	        |¦  «        t          j
        |¦  «        gd¬¦  «        }|dz  r6t          j        |t          j        |d d …d d…f         ¦  «        gd¬¦  «        }|S )	Nr   r   )ÚstartÚendr   Údevice).N)N.r+   ©Údimr   )ÚtorchÚexpÚmathÚlogr   r   re   ÚfloatÚcatr/   r.   Ú
zeros_like)Útrg   Ú
max_periodÚhalfÚfreqsÚargsÚ	embeddings          r!   Útimestep_embeddingz&TimestepConditioner.timestep_embeddingj   sã   € à�a‰xˆÝ”	ÝŒX�jÑ!Ô!Ð!¥E¤L°q¸dÍ%Ì-Ð`aÔ`hÐ$iÑ$iÔ$iÑiÐlpÑpñ
ô 
ˆð �Œ|×!Ò!Ñ#Ô# e¨IÔ&6Ñ6ˆÝ”I�uœy¨™œµ´	¸$±´Ð@ÀbÐIÑIÔIˆ	Ø�‰7ð 	[Ýœ	 9­eÔ.>¸yÈÈÈÈBÈQÈBÈÔ?OÑ.PÔ.PÐ"QÐWYÐZÑZÔZˆIØÐr#   c                 óü   — |                       || j        ¦  «        }t          | j                             ¦   «         ¦  «        j        }|j        |k    r|                     |¦  «        }|                      |¦  «        }|S ©N)ru   r^   Únextr]   Ú
parametersr   Úto)r_   ro   Út_freqÚ	mlp_dtypeÚt_embs        r!   ÚforwardzTimestepConditioner.forwardv   sl   € Ø×(Ò(¨¨DÔ,IÑJÔJˆÝ˜œ×,Ò,Ñ.Ô.Ñ/Ô/Ô5ˆ	ØŒ<˜9Ò$Ð$Ø—Y’Y˜yÑ)Ô)ˆFØ—’˜Ñ Ô ˆØˆr#   )rR   )ra   )Ú__name__Ú
__module__Ú__qualname__rX   Ústaticmethodru   r~   Ú__classcell__©r`   s   @r!   rQ   rQ   `   sr   ø€ € € € € ðAð Að Að Að Að Að ð	ð 	ð 	ñ „\ð	ðð ð ð ð ð ð r#   rQ   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚRMSNormç�íµ ÷Æ°>c                 ó¬   •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        || _        d S rw   )rW   rX   rY   Ú	Parameterrh   ÚonesÚweightÚvariance_epsilon)r_   rA   Úepsr`   s      €r!   rX   zRMSNorm.__init__€   sB   ø€ Ý‰Œ×ÒÑÔÐÝ”l¥5¤:¨kÑ#:Ô#:Ñ;Ô;ˆŒØ #ˆÔÐÐr#   c                 óî   — |                      ¦   «         r5|j        | j        j        k    r |                     | j        j        ¬¦  «        }t	          j        ||j        d         f| j        | j        ¦  «        S )Nr
   r+   )Úis_floating_pointr   r‹   rz   ÚFÚrms_normÚshaperŒ   )r_   Úhidden_statess     r!   r~   zRMSNorm.forward…   sk   € Ø×*Ò*Ñ,Ô,ð 	F°Ô1DÈÌÔHYÒ1YÐ1YØ)×,Ò,°4´;Ô3DÐ,ÑEÔEˆMÝŒz˜-¨-Ô*=¸bÔ*AÐ)CÀTÄ[ÐRVÔRgÑhÔhÐhr#   )r‡   ©r   r€   r�   rX   r~   rƒ   r„   s   @r!   r†   r†      sS   ø€ € € € € ð$ð $ð $ð $ð $ð $ð
ið ið ið ið ið ið ir#   r†   c                   ó4   ‡ — e Zd Zdedefˆ fd„Zd„ Zd„ Zˆ xZS )ÚFeedForwardrg   Ú
hidden_dimc                 ó(  •— t          ¦   «                              ¦   «          t          d|z  dz  ¦  «        }|| _        t	          j        ||d¬¦  «        | _        t	          j        ||d¬¦  «        | _        t	          j        ||d¬¦  «        | _        d S )Nr   é   FrU   )	rW   rX   Úintr—   rY   r[   Úw1Úw3Úw2)r_   rg   r—   r`   s      €r!   rX   zFeedForward.__init__Œ   s‚   ø€ Ý‰Œ×ÒÑÔÐÝ˜˜Z™¨!Ñ+Ñ,Ô,ˆ
Ø$ˆŒÝ”)˜C °%Ð8Ñ8Ô8ˆŒÝ”)˜C °%Ð8Ñ8Ô8ˆŒÝ”)˜J¨°%Ð8Ñ8Ô8ˆŒˆˆr#   c                 óø   — |                       |¦  «        }t          j        j                             |d¬¦  «         |                      |¦  «        }|                     |¦  «         ~|                      |¦  «        S )NT)Úinplace)r›   rh   rY   Ú
functionalÚsilurœ   r6   r�   )r_   r8   ÚgateÚups       r!   Ú_forward_innerzFeedForward._forward_inner”   s`   € Ø�wŠw�q‰zŒzˆÝŒÔ× Ò  ¨tÐ Ñ4Ô4Ð4Ø�WŠW�Q‰ZŒZˆØ�	Š	�"‰ŒˆØØ�wŠw�t‰}Œ}Ðr#   c                 óB  — | j         s|j        dk    r|                      |¦  «        S |j        d         }t	          dt          ||                     ¦   «         t	          |j        d         | j        z  d¦  «        z  ¦  «        ¦  «        }||k    r|                      |¦  «        S t          j	        |¦  «        }t          d||¦  «        D ]U}t          ||z   |¦  «        }|d d …||…f                              |                      |d d …||…f         ¦  «        ¦  «         ŒV|S )Nr™   r   r   ©ÚtrainingÚndimr¤   r’   ÚmaxÚminÚnumelr—   rh   Ú
empty_likeÚrangeÚcopy_)r_   r8   Úseq_lenÚchunk_tokensr2   rc   rd   s          r!   r~   zFeedForward.forwardœ   s  € ØŒ=ð 	*˜AœF ašK˜KØ×&Ò& qÑ)Ô)Ð)Ø”'˜!”*ˆÝ˜1�c '¨1¯7ª7©9¬9½¸A¼GÀA¼JÈÌÑ<XÐZ[Ñ8\Ô8\Ñ+\Ñ]Ô]Ñ^Ô^ˆØ˜7Ò"Ð"Ø×&Ò& qÑ)Ô)Ð)ÝÔ˜qÑ!Ô!ˆÝ˜1˜g |Ñ4Ô4ð 	Jð 	JˆEÝ�e˜lÑ*¨GÑ4Ô4ˆCØ����5˜�9�Ô×#Ò# D×$7Ò$7¸¸!¸!¸!¸UÀ3¸Y¸,¼Ñ$HÔ$HÑIÔIÐIÐIØˆ
r#   )r   r€   r�   rš   rX   r¤   r~   rƒ   r„   s   @r!   r–   r–   ‹   si   ø€ € € € € ð9˜Cð 9¨Sð 9ð 9ð 9ð 9ð 9ð 9ðð ð ðð ð ð ð ð ð r#   r–   ç     ˆÃ@ç      0@rg   ÚheightÚwidthÚthetac                 óÌ  — t          j        d||¦  «        }t          j        d||¦  «        }t          j        ||d¬¦  «        \  }}|                     d¦  «        }|                     d¦  «        }d|t          j        d| d¦  «        d | dz  …                              ¦   «         | z  z  z  }t          j        ||¦  «                             ¦   «         }t          j        ||¦  «                             ¦   «         }	t          j        ||	gd¬¦  «                             ||z  d¦  «        }t          j        |                     ¦   «         | 	                    ¦   «         gd¬¦  «        S )Nr   Úij©Úindexingr+   r*   é   rf   ©
rh   Úlinspacer   r   r   rl   Úouterr   r/   r.   )
rg   r³   r´   rµ   r:   Úx_posÚy_posrr   Úx_freqsÚy_freqss
             r!   Úprecompute_freqs_cis_2drÂ   ª   s0  € ÝŒN˜1˜e UÑ+Ô+€EÝŒN˜1˜e VÑ,Ô,€EÝ”> %¨¸Ð>Ñ>Ô>�L€Eˆ5Ø�MŠM˜"ÑÔ€EØ�MŠM˜"ÑÔ€EØ�5�Uœ\¨!¨S°!Ñ4Ô4°\¸¸q¹°\ÔB×HÒHÑJÔJÈSÑPÑQÑR€EÝŒk˜% Ñ'Ô'×-Ò-Ñ/Ô/€GÝŒk˜% Ñ'Ô'×-Ò-Ñ/Ô/€GÝŒK˜ 'Ð*°Ð3Ñ3Ô3×;Ò;¸FÀU¹NÈBÑOÔO€EÝŒ;˜Ÿ	š	™œ U§Y¢Y¡[¤[Ð1°rÐ:Ñ:Ô:Ð:r#   Ú
ref_grid_hÚ
ref_grid_wr:   c                 óÂ  — | dz  }||z  }||z  }	|dk    r|||dz
  z  z  nd}
|dk    r|	||dz
  z  z  nd}||
z  }||z  }t          j        d||¦  «        }t          j        d||¦  «        }t          j        ||d¬¦  «        \  }}|                     d¦  «        }|                     d¦  «        }d|t          j        d| d¦  «        d| dz  …                              ¦   «         | z  z  z  }d|t          j        d| d¦  «        d| dz  …                              ¦   «         | z  z  z  }t          j        ||¦  «                             ¦   «         }t          j        ||¦  «                             ¦   «         }t          j        ||gd¬	¦  «                             ||z  d¦  «        }t          j        |                     ¦   «         | 	                    ¦   «         gd¬	¦  «        S )
a‚  NTK-aware 2D RoPE.  Identical to precompute_freqs_cis_2d when
    height == ref_grid_h and width == ref_grid_w.  For other resolutions
    the base theta is scaled per-axis following the NTK-aware formula:
        ntk_factor = (current / ref) ** (dim_axis / (dim_axis - 2))
        theta_axis = theta * ntk_factor
    where dim_axis = dim // 2 (half the head dim per spatial axis).
    r   r*   r   r·   r¸   r+   rº   Nrf   r»   )rg   r³   r´   rÃ   rÄ   rµ   r:   Údim_axisÚh_scaleÚw_scaleÚh_ntkÚw_ntkÚh_thetaÚw_thetar¾   r¿   Úfreqs_wÚfreqs_hrÀ   rÁ   rr   s                        r!   Úprecompute_freqs_cis_2d_ntkrÏ   ·   sÞ  € ð  �a‰x€HØ�zÑ!€GØ�jÑ €GØ6>À²l°lˆG˜ H¨q¡LÑ1Ñ2Ð2È€EØ6>À²l°lˆG˜ H¨q¡LÑ1Ñ2Ð2È€EØ�e‰m€GØ�e‰m€GåŒN˜1˜e UÑ+Ô+€EÝŒN˜1˜e VÑ,Ô,€EÝ”> %¨¸Ð>Ñ>Ô>�L€Eˆ5Ø�MŠM˜"ÑÔ€EØ�MŠM˜"ÑÔ€Eà�W¥¤¨a°°aÑ!8Ô!8¸¸CÀ1¹H¸Ô!F×!LÒ!LÑ!NÔ!NÐQTÑ!TÑUÑV€GØ�W¥¤¨a°°aÑ!8Ô!8¸¸CÀ1¹H¸Ô!F×!LÒ!LÑ!NÔ!NÐQTÑ!TÑUÑV€GåŒk˜% Ñ)Ô)×/Ò/Ñ1Ô1€GÝŒk˜% Ñ)Ô)×/Ò/Ñ1Ô1€GÝŒK˜ 'Ð*°Ð3Ñ3Ô3×;Ò;¸FÀU¹NÈBÑOÔO€EÝŒ;˜Ÿ	š	™œ U§Y¢Y¡[¤[Ð1°rÐ:Ñ:Ô:Ð:r#   Úx_listÚ	freqs_cisÚreturnc                 ó¼  — t          | ¦  «        }|j        |j        k    r|                     |j        ¬¦  «        }|d                              d|j        d         dd¦  «        }|d                              d|j        d         dd¦  «        } |j        g |j        d d…         ¢d‘d‘R Ž }|d         }|d         }|j        t          j        k    ri|                     ¦   «         }| 	                    |¦  «         
                    ||d¬¦  «         | 	                    |¦  «         
                    ||¦  «         n¢|                     ¦   «         }| 	                    |¦  «         
                    ||¦  «         |                     |                     ¦   «          	                    |¦  «         
                    ||d¬¦  «        ¦  «         |                     |¦  «         ~|S )	N)re   ).r   r   r   r+   ).r   r   ©Úvalue)r@   re   rz   Úviewr’   r   rh   r   Úcloner6   Úaddcmul_rl   r®   )	rÐ   rÑ   r8   r/   r.   Úx_pairÚx0Úx1Úscratchs	            r!   Úapply_rotary_emb_inplacerÝ   Þ   s£  € Ý�VÑÔ€AØÔ˜1œ8Ò#Ð#Ø—L’L¨¬�LÑ1Ô1ˆ	Ø
�FÔ
×
 Ò
   I¤O°AÔ$6¸¸2Ñ
>Ô
>€CØ
�FÔ
×
 Ò
   I¤O°AÔ$6¸¸2Ñ
>Ô
>€CØˆQŒVÐ)�Q”W˜S˜b˜S”\Ð) 2Ð) qÐ)Ð)Ð)€FØ	�Œ€BØ	�Œ€BØ„w•%”-ÒÐØ—(’(‘*”*ˆØ
�Š�‰Œ×Ò˜b #¨RÐÑ0Ô0Ð0Ø
�Š�‰Œ×Ò˜g sÑ+Ô+Ð+Ð+à—(’(‘*”*ˆØ�Š�SÑÔ×"Ò" 2 sÑ+Ô+Ð+Ø
�Š�—’‘”—’ Ñ%Ô%×.Ò.¨r°3¸bÐ.ÑAÔAÑBÔBÐBØ
�Š�ÑÔÐØØ€Hr#   c                   ó”   ‡ — e Zd Zdddddefdedededed	ed
edej        ddfˆ fd„Z	de
e         fd„Zdej        dej        fd„Zˆ xZS )ÚRotaryAttentioné   FTç        rg   Ú	num_headsÚqkv_biasÚqk_normÚ	attn_dropÚ	proj_dropÚ
norm_layerrÒ   Nc                 óH  •— t          ¦   «                              ¦   «          ||z  dk    s
J d¦   «         ‚|| _        || _        ||z  | _        | j        dz  | _        t          j        ||dz  |¬¦  «        | _        |r || j        ¦  «        nt          j	        ¦   «         | _
        |r || j        ¦  «        nt          j	        ¦   «         | _        t          j        |¦  «        | _        t          j        ||¦  «        | _        t          j        |¦  «        | _        d | _        d S )Nr   ú$dim should be divisible by num_headsg      à¿r™   rU   )rW   rX   rg   râ   Úhead_dimr:   rY   r[   rM   ÚIdentityÚq_normÚk_normÚDropoutrå   Úprojræ   Ú	_cp_group)	r_   rg   râ   rã   rä   rå   ræ   rç   r`   s	           €r!   rX   zRotaryAttention.__init__õ   s  ø€ õ 	‰Œ×ÒÑÔÐØ�Y‰ !Ò#Ð#Ð#Ð%KÑ#Ô#Ð#àˆŒØ"ˆŒØ˜yÑ(ˆŒØ”] DÑ(ˆŒ
å”9˜S #¨¡'°Ð9Ñ9Ô9ˆŒØ3:ÐM�j�j ¤Ñ/Ô/Ð/ÅÄÁÄˆŒØ3:ÐM�j�j ¤Ñ/Ô/Ð/ÅÄÁÄˆŒÝœ IÑ.Ô.ˆŒÝ”I˜c 3Ñ'Ô'ˆŒ	Ýœ IÑ.Ô.ˆŒà15ˆŒˆˆr#   Úcp_groupc                 ó   — || _         d S rw   ©rð   ©r_   rñ   s     r!   Úset_context_parallel_groupz*RotaryAttention.set_context_parallel_group  ó   € Ø!ˆŒˆˆr#   r8   c                 óð  — t          |¦  «        }|j        \  }}}||| j        || j        z  f}t          | d¦  «        rj|                      |¦  «                             ||d| j        || j        z  ¦  «                             ddddd¦  «        }|d         |d         |d         }}
}	~nx|                      |¦  «                             |¦  «        }	|  	                    |¦  «                             |¦  «        }
|  
                    |¦  «                             |¦  «        }d }|                      |	¦  «        }	|                      |
¦  «        }
|                     ¦   «         }| j        €$t          |	g|¦  «        }	t          |
g|¦  «        }
�n	| j                             ¦   «         }| j                             ¦   «         }|j        d         }||z  dk    sJ d|› d|› �¦   «         ‚||z  }||k    sJ d	|› d
|› �¦   «         ‚ |j        ||g|j        dd …         ¢R Ž |         }t          |	g|¦  «        }	t%          |
                     ¦   «         d| j        ¬¦  «        }
t%          |                     ¦   «         d| j        ¬¦  «        }t          |
g|¦  «        }
|	|
|g}~	~
~t'          ||d¬¦  «        }|                     |||¦  «        }|                      |¦  «        }| j        r|                      |¦  «        }|S )NrM   r™   r   r   r   rº   zpos length ú not divisible by cp_size zlocal x length ú != expected ©Úseq_dimrñ   T©Úattention_maskÚ	recycle_q)r@   r’   râ   ÚhasattrrM   r   ÚpermuterI   rÖ   rJ   rK   rì   rí   Ú
contiguousrð   rÝ   ÚsizeÚrankr   r   rï   r§   ræ   )r_   r8   r0   ÚmaskÚBÚNÚCr’   rM   rI   rJ   rK   Úcp_sizeÚcp_rankÚN_fullÚN_localÚ	pos_localÚqkv_lists                     r!   r~   zRotaryAttention.forward  sÜ  € Ý˜‰OŒOˆð ”'‰ˆˆ1ˆaØ�A�t”~ q¨D¬NÑ':Ð;ˆÝ�4˜ÑÔð 	&Ø—(’(˜1‘+”+×%Ò% a¨¨A¨t¬~¸qÀDÄNÑ?RÑSÔS×[Ò[Ð\]Ð_`ÐbcÐefÐhiÑjÔjˆCØ˜!”f˜c !œf c¨!¤f�!ˆqˆAØ�à—’�q‘	”	—’˜uÑ%Ô%ˆAØ—’�q‘	”	—’˜uÑ%Ô%ˆAØ—’�q‘	”	—’˜uÑ%Ô%ˆAØˆØ�KŠK˜‰NŒNˆØ�KŠK˜‰NŒNˆØ�LŠL‰NŒNˆØŒ>Ð!Ý(¨!¨¨cÑ2Ô2ˆAÝ(¨!¨¨cÑ2Ô2ˆA‰Aà”n×)Ò)Ñ+Ô+ˆGØ”n×)Ò)Ñ+Ô+ˆGØ”Y˜q”\ˆFØ˜GÑ# qÒ(Ð(Ð(Ð*c¸Ð*cÐ*cÐZaÐ*cÐ*cÑ(Ô(Ð(Ø Ñ'ˆGØ˜’<�<�<Ð!L°1Ð!LÐ!LÀ7Ð!LÐ!L‘<”<�<Ø ˜œ ¨'ÐB°C´I¸a¸b¸b´MÐBÐBÐBÀ7ÔKˆIå(¨!¨¨iÑ8Ô8ˆAõ )¨¯ª©¬ÀÈTÌ^Ð\Ñ\Ô\ˆAÝ(¨¯ª©¬ÀÈTÌ^Ð\Ñ\Ô\ˆAÝ(¨!¨¨cÑ2Ô2ˆAà�q˜!�9ˆØˆq�!Ý˜(°4À4ÐHÑHÔHˆà�IŠI�a˜˜AÑÔˆØ�IŠI�a‰LŒLˆØŒ=ð 	"Ø—’˜qÑ!Ô!ˆAØˆr#   )r   r€   r�   r†   rš   Úboolrl   rY   ÚModulerX   r   r   rõ   rh   ÚTensorr~   rƒ   r„   s   @r!   rß   rß   ô   sì   ø€ € € € € ð ØØØØØ 'ð6ð 6àð6ð ð6ð ð	6ð
 ð6ð ð6ð ð6ð ”Ið6ð 
ð6ð 6ð 6ð 6ð 6ð 6ð6"°8¸LÔ3Ið "ð "ð "ð "ð0˜œð 0°U´\ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r#   rß   c                   óv   ‡ — e Zd Zddededefˆ fd„Zdej        dej        fd	„Zdej        dej        fd
„Z	ˆ xZ
S )ÚMLPç      @rá   rg   Ú	mlp_ratioÚdropc                 óD  •— t          ¦   «                              ¦   «          t          ||z  ¦  «        }t          j        ||¦  «        | _        || _        t          j        ¦   «         | _        t          j        ||¦  «        | _	        t          j
        |¦  «        | _        d S rw   )rW   rX   rš   rY   r[   Úfc1r—   ÚGELUÚactÚfc2rî   r  )r_   rg   r  r  r—   r`   s        €r!   rX   zMLP.__init__G  sy   ø€ Ý‰Œ×ÒÑÔÐÝ˜˜y™Ñ)Ô)ˆ
Ý”9˜S *Ñ-Ô-ˆŒØ$ˆŒÝ”7‘9”9ˆŒÝ”9˜Z¨Ñ-Ô-ˆŒÝ”J˜tÑ$Ô$ˆŒ	ˆ	ˆ	r#   r8   rÒ   c                 óô   — |                       |¦  «        }|                      |¦  «        }| j        r|                      |¦  «        }|                      |¦  «        }| j        r|                      |¦  «        }|S rw   )r  r  r§   r  r  ©r_   r8   s     r!   r¤   zMLP._forward_innerP  sf   € Ø�HŠH�Q‰KŒKˆØ�HŠH�Q‰KŒKˆØŒ=ð 	Ø—	’	˜!‘”ˆAØ�HŠH�Q‰KŒKˆØŒ=ð 	Ø—	’	˜!‘”ˆAØˆr#   c                 ó2  — | j         s|j        dk    r|                      |¦  «        S |j        d         }t	          dt          ||                     ¦   «         t	          |j        d         | j        z  d¦  «        z  ¦  «        ¦  «        }||k    r|                      |¦  «        S t          j	        |¦  «        }t          d||¦  «        D ]M}t          ||z   |¦  «        }|||…                              |                      |||…         ¦  «        ¦  «         ŒN|S )Nr™   r   r   r¦   )r_   r8   ÚleadingÚchunk_leadingr2   rc   rd   s          r!   r~   zMLP.forwardZ  s  € ØŒ=ð 	*˜AœF ašK˜KØ×&Ò& qÑ)Ô)Ð)Ø”'˜!”*ˆÝ˜A�s 7¨A¯GªG©I¬I½¸Q¼WÀQ¼ZÈ$Ì/Ñ=YÐ[\Ñ9]Ô9]Ñ,]Ñ^Ô^Ñ_Ô_ˆØ˜GÒ#Ð#Ø×&Ò& qÑ)Ô)Ð)ÝÔ˜qÑ!Ô!ˆÝ˜1˜g }Ñ5Ô5ð 	Dð 	DˆEÝ�e˜mÑ+¨WÑ5Ô5ˆCØ��c�	ŒN× Ò  ×!4Ò!4°Q°u¸S°y´\Ñ!BÔ!BÑCÔCÐCÐCØˆ
r#   )r  rá   )r   r€   r�   rš   rl   rX   rh   r  r¤   r~   rƒ   r„   s   @r!   r  r  F  s£   ø€ € € € € ð%ð %˜Cð %¨Eð %¸uð %ð %ð %ð %ð %ð %ð ¤ð °´ð ð ð ð ð˜œð ¨%¬,ð ð ð ð ð ð ð ð r#   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú
FinalLayerc                 ó¬   •— t          ¦   «                              ¦   «          t          |d¬¦  «        | _        t	          j        ||d¬¦  «        | _        d S )Nr‡   ©r�   TrU   )rW   rX   r†   ÚnormrY   r[   Úlinear)r_   rA   Úout_channelsr`   s      €r!   rX   zFinalLayer.__init__i  sI   ø€ Ý‰Œ×ÒÑÔÐÝ˜K¨TÐ2Ñ2Ô2ˆŒ	Ý”i ¨\ÀÐEÑEÔEˆŒˆˆr#   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rw   )r$  r%  r  s     r!   r~   zFinalLayer.forwardn  s%   € Ø�IŠI�a‰LŒLˆØ�KŠK˜‰NŒNˆØˆr#   r”   r„   s   @r!   r!  r!  h  sL   ø€ € € € € ðFð Fð Fð Fð Fð
ð ð ð ð ð ð r#   r!  c                   ó<   ‡ — e Zd Z	 	 	 	 d
dededefˆ fd„Zd	„ Zˆ xZS )ÚPatchTokenEmbedderr™   é   NTÚin_chansr   rV   c                 óæ   •— t          ¦   «                              ¦   «          || _        || _        t	          j        |||¬¦  «        | _        |r ||¦  «        nt	          j        ¦   «         | _        d S )NrU   )	rW   rX   r+  r   rY   r[   rï   rë   r$  )r_   r+  r   rç   rV   r`   s        €r!   rX   zPatchTokenEmbedder.__init__z  sf   ø€ õ 	‰Œ×ÒÑÔÐØ ˆŒØ"ˆŒÝ”I˜h¨	¸Ð=Ñ=Ô=ˆŒ	Ø-7ÐJ�J�J˜yÑ)Ô)Ð)½R¼[¹]¼]ˆŒ	ˆ	ˆ	r#   c                 óx   — t          |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rw   )r@   rï   r$  r  s     r!   r~   zPatchTokenEmbedder.forward‡  s0   € Ý˜‰OŒOˆØ�IŠI�a‰LŒLˆØ�IŠI�a‰LŒLˆØˆr#   )r™   r*  NT)r   r€   r�   rš   r  rX   r~   rƒ   r„   s   @r!   r)  r)  y  s…   ø€ € € € € ð ØØØðKð KàðKð ðKð
 ðKð Kð Kð Kð Kð Kðð ð ð ð ð ð r#   r)  c            	       óh   ‡ — e Zd Zdedefˆ fd„Zdefd„Zdedefd„Zdd
ej        dededefd„Z	ˆ xZ
S )ÚPixelTokenEmbedderÚin_channelsÚhidden_size_outputc                 ó
  •— t          ¦   «                              ¦   «          t          |¦  «        | _        t          |¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          ¦   «         | _	        d S rT   )
rW   rX   rš   r0  r1  rY   r[   rï   ÚdictÚ
_pos_cache)r_   r0  r1  r`   s      €r!   rX   zPixelTokenEmbedder.__init__�  sg   ø€ Ý‰Œ×ÒÑÔÐÝ˜{Ñ+Ô+ˆÔÝ"%Ð&8Ñ"9Ô"9ˆÔÝ”I˜dÔ.°Ô0GÈdÐSÑSÔSˆŒ	Ý™&œ&ˆŒˆˆr#   Ú
patch_sizec                 óø   — d|f}|| j         v r$| j         |         }|                     ||¬¦  «        S t          | j        |¦  «        }t	          j        |¦  «        }|| j         |<   |                     ||¬¦  «        S )NÚpatch©re   r   )r4  rz   r"   r1  rh   Ú
from_numpy)r_   r5  re   r   ÚkeyÚpeÚpos_npr0   s           r!   Ú_fetch_pixel_pos_patchz)PixelTokenEmbedder._fetch_pixel_pos_patch–  s   € Ø˜
Ð#ˆØ�$”/Ð!Ð!Ø” Ô%ˆBØ—5’5 ¨e�5Ñ4Ô4Ð4Ý(¨Ô)@À*ÑMÔMˆÝÔ˜vÑ&Ô&ˆØ"ˆŒ˜ÑØ�vŠv˜V¨5ˆvÑ1Ô1Ð1r#   r³   r´   c                 ó   — ||k    r|d||f}|| j         v r$| j         |         }|                     ||¬¦  «        S t          | j        |¦  «        }t	          j        |¦  «        }|| j         |<   |                     ||¬¦  «        S d||f}|| j         v r$| j         |         }|                     ||¬¦  «        S t          j        |t          j        ¬¦  «        }	t          j        |t          j        ¬¦  «        }
t          j	        |
|	¦  «        }t          j
        |d¬¦  «                             dd||¦  «        }t          | j        |¦  «        }t	          j        |¦  «        }|| j         |<   |                     ||¬¦  «        S )NÚimager8  r
   r   r   r   r   )r4  rz   r"   r1  rh   r9  r   r   r   r   r   r   r   )r_   r³   r´   re   r   r:  r;  r<  r0   r   r   r   s               r!   Ú_fetch_pixel_pos_imagez)PixelTokenEmbedder._fetch_pixel_pos_image   so  € Ø�UŠ?ˆ?Ø˜F EÐ*ˆCØ�d”oÐ%Ð%Ø”_ SÔ)�Ø—u’u F°%�uÑ8Ô8Ð8Ý,¨TÔ-DÀfÑMÔMˆFÝÔ" 6Ñ*Ô*ˆCØ#&ˆDŒO˜CÑ Ø—6’6 ¨u�6Ñ5Ô5Ð5à˜F EÐ*ˆCØ�d”oÐ%Ð%Ø”_ SÔ)�Ø—u’u F°%�uÑ8Ô8Ð8å”Y˜v­R¬ZÐ8Ñ8Ô8ˆFÝ”Y˜u­B¬JÐ7Ñ7Ô7ˆFÝ”;˜v vÑ.Ô.ˆDÝ”8˜D qÐ)Ñ)Ô)×1Ò1°!°Q¸ÀÑFÔFˆDÝ6°tÔ7NÐPTÑUÔUˆFÝÔ" 6Ñ*Ô*ˆCØ#&ˆDŒO˜CÑ Ø—6’6 ¨u�6Ñ5Ô5Ð5r#   NÚinputsÚ
img_heightÚ	img_widthc                 ó˜  — t          |¦  «        }|                     ¦   «         dk    r„|j        \  }}}|j        |j        }	}t          |dz  ¦  «        }
|                      |
||	¦  «        }|                      |¦  «        }d }|                     | 	                    d¦  «        ¦  «         ~|S |                     ¦   «         dk    �rx|�|�|€
J d¦   «         ‚|j        \  }}}}|j        |j        }	}||k    r||k    s
J d¦   «         ‚||z  dk    r	||z  dk    s
J d¦   «         ‚||z  ||z  }}||z  }| 
                    dddd	¦  «                             ¦   «         }d }|                      |¦  «        }|                      ||||	¦  «        }|                     ||| j        ¦  «        }|                     | 	                    d¦  «        ¦  «         ~|                     |||||| j        ¦  «        }| 
                    dd	dddd
¦  «                             ¦   «         }|                     ||z  |z  || j        ¦  «        }|S t          d¦  «        ‚)Nr™   g      à?r   rº   z$Need H, W, patch_size for image modezInput spatial size mismatchú'H and W must be divisible by patch_sizer   r   é   zBPixelTokenEmbedder expects inputs of shape [B*L,P2,C] or [B,C,H,W])r@   rg   r’   re   r   rš   r=  rï   r7   Ú	unsqueezer   r  r@  rÖ   r1  Ú
ValueError)r_   rA  rB  rC  r5  Úbatch_tokensÚp2Ú_re   r   Úpatch_szr0   r8   r  r  ÚHÚWÚHsÚWsÚP2Úpos_fulls                        r!   r~   zPixelTokenEmbedder.forward¹  s]  € Ý˜fÑ%Ô%ˆð �:Š:‰<Œ<˜1ÒÐà"(¤,ÑˆL˜"˜aØ"œM¨6¬<�EˆFÝ˜2˜s™7‘|”|ˆHØ×-Ò-¨h¸ÀÑFÔFˆCØ—	’	˜&Ñ!Ô!ˆAØˆFØ�FŠF�3—=’= Ñ#Ô#Ñ$Ô$Ð$ØØˆHØ�ZŠZ‰\Œ\˜QÒÑàÐ)¨iÐ.CÈ
ÐH^ÐH^Ø6ñ I_ÔH^Ð^ð  œ‰JˆAˆq�!�QØ"œM¨6¬<�EˆFØ˜
’?�? q¨I¢~ ~ ~Ð7T¡~¤~Ð5Ø˜
‘N aÒ'Ð'¨a°*©nÀÒ.AÐ.AÐ.AÐDmÑ.AÔ.AÐBØ˜*‘_ a¨:¡o�ˆBØ˜jÑ(ˆBà—’˜q ! Q¨Ñ*Ô*×5Ò5Ñ7Ô7ˆAØˆFØ—	’	˜!‘”ˆAà×2Ò2°1°a¸ÀÑGÔGˆHØ—}’} Q¨¨4Ô+BÑCÔCˆHà�FŠF�8×%Ò% aÑ(Ô(Ñ)Ô)Ð)ØØ—’�q˜"˜j¨"¨j¸$Ô:QÑRÔRˆAØ—	’	˜!˜Q  1 a¨Ñ+Ô+×6Ò6Ñ8Ô8ˆAØ—’�q˜2‘v ‘{ B¨Ô(?Ñ@Ô@ˆAØˆHåÐaÑbÔbÐbr#   ©NNN)r   r€   r�   rš   rX   r=  r@  rh   r  r~   rƒ   r„   s   @r!   r/  r/  Ž  sÍ   ø€ € € € € ð! Cð !¸Sð !ð !ð !ð !ð !ð !ð2°ð 2ð 2ð 2ð 2ð6¨Sð 6¸ð 6ð 6ð 6ð 6ð2*cð *c˜eœlð *c¸ð *cÈsð *cÐgjð *cð *cð *cð *cð *cð *cð *cð *cr#   r/  c                   óì   ‡ — e Zd Z	 	 	 	 	 	 ddedededed	ed
ee         dee         dededefˆ fd„Zdee         fd„Z	dededefd„Z
dedefd„Z	 ddej        dej        dedededej        fd„Zˆ xZS ) ÚPiTBlockr  NÚoriginalé    Úpixel_hidden_sizeÚpatch_hidden_sizer5  râ   r  Úattn_hidden_sizeÚattn_num_headsÚ	rope_modeÚrope_ref_grid_hÚrope_ref_grid_wc                 ó   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        |�t          |¦  «        n| j        | _        |�t          |¦  «        nt          |¦  «        | _        || _        |	| _	        |
| _
        | j        | j        z  dk    s
J d¦   «         ‚| j        | j        z  }t          j        || j        z  | j        d¬¦  «        | _        t          j        | j        || j        z  d¬¦  «        | _        t          | j        d¬¦  «        | _        t#          | j        | j        d¬¦  «        | _        t          | j        d¬¦  «        | _        t)          | j        |d	¬
¦  «        | _        t          j        t          j        | j        d| j        z  |z  d¬¦  «        ¦  «        | _        t1          ¦   «         | _        d | _        d S )Nr   z@pixel attention hidden size must be divisible by pixel num_headsTrU   r‡   r#  F©râ   rã   rá   ©r  r  é   )rW   rX   rš   Ú	pixel_dimÚcontext_dimr5  Úattn_dimrâ   r\  r]  r^  rY   r[   Úcompress_to_attnÚexpand_from_attnr†   Únorm1rß   ÚattnÚnorm2r  r]   rZ   ÚadaLN_modulationr3  r4  rð   )r_   rX  rY  r5  râ   r  rZ  r[  r\  r]  r^  rJ  r`   s               €r!   rX   zPiTBlock.__init__ç  sÁ  ø€ õ 	‰Œ×ÒÑÔÐÝÐ.Ñ/Ô/ˆŒÝÐ0Ñ1Ô1ˆÔÝ˜j™/œ/ˆŒØ1AÐ1M�Ð,Ñ-Ô-Ð-ÐSWÔScˆŒØ0>Ð0J�˜^Ñ,Ô,Ð,ÕPSÐT]ÑP^ÔP^ˆŒØ"ˆŒØ.ˆÔØ.ˆÔØŒ}˜tœ~Ñ-°Ò2Ð2Ð2Ð4vÑ2Ô2Ð2ØŒ_˜tœÑ.ˆÝ "¤	¨"¨t¬~Ñ*=¸t¼}ÐSWÐ XÑ XÔ XˆÔÝ "¤	¨$¬-¸¸d¼nÑ9LÐSWÐ XÑ XÔ XˆÔÝ˜Tœ^°Ð6Ñ6Ô6ˆŒ
Ý# D¤M¸T¼^ÐV[Ð\Ñ\Ô\ˆŒ	Ý˜Tœ^°Ð6Ñ6Ô6ˆŒ
Ý�t”~°ÀÐEÑEÔEˆŒÝ "¤­b¬i¸Ô8HÈ!ÈdÌnÑJ\Ð_aÑJaÐhlÐ.mÑ.mÔ.mÑ nÔ nˆÔÝ™&œ&ˆŒà15ˆŒˆˆr#   rñ   c                 óH   — || _         | j                             |¦  «         d S rw   )rð   ri  rõ   rô   s     r!   rõ   z#PiTBlock.set_context_parallel_group
  s%   € Ø!ˆŒØŒ	×,Ò,¨XÑ6Ô6Ð6Ð6Ð6r#   ÚBLrQ  rÒ   c                 ó�   — d| j         z  }t          dt          |||z  | j         z  t          ||z  d¦  «        z  ¦  «        ¦  «        S )Nrb  r   )rc  r©   rª   )r_   rm  rQ  Ú
cond_widths       r!   Ú_chunk_size_for_pixelszPiTBlock._chunk_size_for_pixels  sG   € Ø˜œÑ'ˆ
Ý�1•c˜"˜r B™w¨¬Ñ7½CÀÀZÁÐQRÑ<SÔ<SÑSÑTÔTÑUÔUÐUr#   r³   r´   c                 ó,  — ||f}|| j         v r | j         |                              |¦  «        S | j        | j        z  }| j        dk    rt          |||| j        | j        ¦  «        }nt          |||¦  «        }|| j         |<   |                     |¦  «        S ©NÚ	ntk_aware)	r4  rz   re  râ   r\  rÏ   r]  r^  rÂ   ©r_   r³   r´   re   r:  rê   r0   s          r!   Ú
_fetch_poszPiTBlock._fetch_pos  s™   € Ø�uˆoˆØ�$”/Ð!Ð!Ø”? 3Ô'×*Ò*¨6Ñ2Ô2Ð2Ø”= D¤NÑ2ˆØŒ>˜[Ò(Ð(Ý-¨h¸ÀÀtÔG[Ð]aÔ]qÑrÔrˆCˆCå)¨(°F¸EÑBÔBˆCØ"ˆŒ˜ÑØ�vŠv�f‰~Œ~Ðr#   r8   Ús_condÚimage_heightÚimage_widthc           
      ó  — t          |¦  «        }|j        \  }}}	|	| j        k    rt          d| j        › d|	› �¦  «        ‚|| j        k    s
J d¦   «         ‚|||z  k    s
J d¦   «         ‚||z  dk    r	||z  dk    s
J d¦   «         ‚||z  ||z  }}
|
|z  }| j        �| j                             ¦   «         nd}||z  dk    sJ d|› d	|› �¦   «         ‚||z  }|j        d         |k    s
J d
¦   «         ‚||z  dk    s
J d¦   «         ‚||z  }|                      ||¦  «        }t          j	        || j
        f|j        |j        ¬¦  «        }t          d||¦  «        D ]ï}t          ||z   |¦  «        }|                      |||…         ¦  «                             ||z
  |d| j        z  ¦  «        }t          j        |dd¬¦  «        \  }}}}}}t%          |                      |||…         ¦  «        ||¦  «        }|||…                              |                      |                     ||z
  || j        z  ¦  «        ¦  «        ¦  «         ~~~~Œð|                      |
||j        ¦  «        }|                     ||| j
        ¦  «        g}d }|                      |||¦  «        }|                     || j
        ¦  «        }~t          d||¦  «        D �]C}t          ||z   |¦  «        }|                      |||…         ¦  «                             ||z
  |d| j        z  ¦  «        }t          j        |dd¬¦  «        \  }}}}}} |                      |||…         ¦  «                             ||z
  || j        ¦  «        }!|||…         }"|"                     |!                     |¦  «        ¦  «         ~!~|                      t%          |                      |"¦  «        ||¦  «        ¦  «        }#|"                     |#                     | ¦  «        ¦  «         ~~~~ ~#�ŒE~|S )NzPiTBlock expected pixel_dim=z, got z!PiTBlock expects fixed patch_sizez-Token count per patch must equal patch_size^2r   rE  r   zL=z not divisible by cp_size=zs_cond batch must match x batchz7Total sequences must be a multiple of local patch countr8  rb  r+   rf   )r@   r’   rc  rH  r5  rð   r  rp  rh   Úemptyre  re   r   r­   rª   rk  rÖ   Úchunkr;   rh  r®   rf  ru  ri  r   rg  r7   r6   r]   rj  )$r_   r8   rv  rw  rx  r5  r  rm  rQ  r  rO  rP  ÚLr  ÚL_localr  Ú
chunk_sizeÚx_comp_flatrc   rd   Úcond_paramsÚ	shift_msaÚ	scale_msarK  Úx_normÚpos_comprÐ   Úattn_outÚ	attn_flatÚgate_msaÚ	shift_mlpÚ	scale_mlpÚgate_mlpÚattn_expÚx_chunkÚmlp_outs$                                       r!   r~   zPiTBlock.forward  so  € õ ˜‰OŒOˆð ”G‰	ˆˆB�Ø�”ÒÐÝÐU¸D¼NÐUÐUÐRSÐUÐUÑVÔVÐVØ˜Tœ_Ò,Ð,Ð,Ð.QÑ,Ô,Ð,Ø�Z *Ñ,Ò,Ð,Ð,Ð.]Ñ,Ô,Ð,Ø˜zÑ)¨QÒ.Ð.°[À:Ñ5MÐQRÒ5RÐ5RÐ5RØ5ñ 6SÔ5RÐSð  Ñ+¨[¸JÑ-FˆBˆØ�‰GˆØ+/¬>Ð+E�$”.×%Ò%Ñ'Ô'Ð'È1ˆØ�7‰{˜aÒÐÐÐ!L aÐ!LÐ!LÀ7Ð!LÐ!LÑÔÐØ�w‘,ˆØŒ|˜AŒ "Ò$Ð$Ð$Ð&GÑ$Ô$Ð$Ø�G‰|˜qÒ Ð Ð Ð"[Ñ Ô Ð Ø�'‰MˆØ×0Ò0°°RÑ8Ô8ˆ
Ý”k 2 t¤}Ð"5¸a¼hÈaÌgÐVÑVÔVˆÝ˜1˜b *Ñ-Ô-ð 	:ð 	:ˆEÝ�e˜jÑ(¨"Ñ-Ô-ˆCØ×/Ò/°°u¸S°yÔ0AÑBÔB×GÒGÈÈeÉÐUWÐYZÐ]aÔ]kÑYkÑlÔlˆKÝ/4¬{¸;ÈÈrÐ/RÑ/RÔ/RÑ,ˆI�y ! Q¨¨1Ý  §¢¨A¨e°C¨i¬LÑ!9Ô!9¸9ÀiÑPÔPˆFØ˜˜c˜	Ô"×(Ò(¨×)>Ò)>¸v¿{º{È3ÐQVÉ;ÐXZÐ]aÔ]kÑXkÑ?lÔ?lÑ)mÔ)mÑnÔnÐnØ˜Y¨	°6°6Ø—?’? 2 r¨1¬8Ñ4Ô4ˆØ×"Ò" 1 g¨t¬}Ñ=Ô=Ð>ˆØˆØ—9’9˜V X¨tÑ4Ô4ˆØ×$Ò$ R¨¬Ñ7Ô7ˆ	ØÝ˜1˜b *Ñ-Ô-ð 
	Eñ 
	EˆEÝ�e˜jÑ(¨"Ñ-Ô-ˆCØ×/Ò/°°u¸S°yÔ0AÑBÔB×GÒGÈÈeÉÐUWÐYZÐ]aÔ]kÑYkÑlÔlˆKÝ=B¼[ÈÐVWÐ]_Ð=`Ñ=`Ô=`Ñ:ˆAˆq�(˜I y°(Ø×,Ò,¨Y°u¸S°yÔ-AÑBÔB×GÒGÈÈeÉÐUWÐY]ÔYgÑhÔhˆHØ˜˜c˜	”lˆGØ�LŠL˜Ÿš xÑ0Ô0Ñ1Ô1Ð1Ø˜(Ø—h’h�{¨4¯:ª:°gÑ+>Ô+>À	È9ÑUÔUÑVÔVˆGØ�LŠL˜Ÿš hÑ/Ô/Ñ0Ô0Ð0Ø˜Y¨	°8¸W¹WØØˆr#   )r  NNrV  rW  rW  rw   )r   r€   r�   rš   rl   r   ÚstrrX   r   rõ   rp  ru  rh   r  r~   rƒ   r„   s   @r!   rU  rU  æ  s‰  ø€ € € € € ð Ø*.Ø(,Ø#Ø!Ø!ð!6ð !6àð!6ð ð!6ð ð	!6ð
 ð!6ð ð!6ð # 3œ-ð!6ð ! œð!6ð ð!6ð ð!6ð ð!6ð !6ð !6ð !6ð !6ð !6ðF7°8¸LÔ3Ið 7ð 7ð 7ð 7ðV¨ð V°#ð V¸#ð Vð Vð Vð Vð
 ð 
¨Sð 
ð 
ð 
ð 
ð quð2ð 2Ø”ð2Ø',¤|ð2ØCFð2ØUXð2Øfið2à	Œð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r#   rU  c                   óÖ   ‡ — e Zd Z	 	 	 	 ddededededed	d
fˆ fd„Zdee         fd„Z		 	 dde
j        de
j        de
j        de
j        de
j        d	ee
j        e
j        f         fd„Zˆ xZS )ÚMMDiTJointAttentionrà   Frá   rg   râ   rã   rå   ræ   rÒ   Nc                 óî  •— t          ¦   «                              ¦   «          ||z  dk    s
J d¦   «         ‚|| _        || _        ||z  | _        t          j        ||dz  |¬¦  «        | _        t          j        ||dz  |¬¦  «        | _        t          | j        ¦  «        | _
        t          | j        ¦  «        | _        t          | j        ¦  «        | _        t          | j        ¦  «        | _        t          j        ||¦  «        | _        t          j        ||¦  «        | _        t          j        |¦  «        | _        t          j        |¦  «        | _        t          j        |¦  «        | _        d | _        d S )Nr   ré   r™   rU   )rW   rX   rg   râ   rê   rY   r[   rL   Úqkv_yr†   Úq_norm_xÚk_norm_xÚq_norm_yÚk_norm_yÚproj_xÚproj_yrî   rå   Úproj_drop_xÚproj_drop_yrð   )r_   rg   râ   rã   rå   ræ   r`   s         €r!   rX   zMMDiTJointAttention.__init__Z  s;  ø€ õ 	‰Œ×ÒÑÔÐØ�Y‰ !Ò#Ð#Ð#Ð%KÑ#Ô#Ð#ØˆŒØ"ˆŒØ˜yÑ(ˆŒõ ”Y˜s C¨!¡G°(Ð;Ñ;Ô;ˆŒ
Ý”Y˜s C¨!¡G°(Ð;Ñ;Ô;ˆŒ
õ   ¤Ñ.Ô.ˆŒÝ ¤Ñ.Ô.ˆŒÝ ¤Ñ.Ô.ˆŒÝ ¤Ñ.Ô.ˆŒõ ”i  SÑ)Ô)ˆŒÝ”i  SÑ)Ô)ˆŒÝœ IÑ.Ô.ˆŒÝœ: iÑ0Ô0ˆÔÝœ: iÑ0Ô0ˆÔà15ˆŒˆˆr#   rñ   c                 ó   — || _         d S rw   ró   rô   s     r!   rõ   z.MMDiTJointAttention.set_context_parallel_group{  rö   r#   r8   ÚyÚpos_imgÚpos_txtÚ	attn_maskc                 óh  — t          |¦  «        }t          |¦  «        }|j        \  }}}|j        \  }	}
}||	k    r||k    s
J d¦   «         ‚||| j        || j        z  f}t          | d¦  «        rj|                      |¦  «                             ||d| j        || j        z  ¦  «                             ddddd¦  «        }|d         |d         |d         }}}~nx|                      |¦  «                             |¦  «        }|  	                    |¦  «                             |¦  «        }|  
                    |¦  «                             |¦  «        }d }|                      |¦  «        }|                      |¦  «        }|                     ¦   «         }|                      |¦  «                             ||
d| j        || j        z  ¦  «                             ddddd¦  «        }d }|d         |d         |d         }}}|                      |¦  «        }|                      |¦  «        }|                     ¦   «         }~| j        €$t%          |g|¦  «        }t%          |g|¦  «        }�n	| j                             ¦   «         }| j                             ¦   «         }|j        d         }||z  dk    sJ d|› d	|› �¦   «         ‚||z  }||k    sJ d
|› d|› �¦   «         ‚ |j        ||g|j        dd …         ¢R Ž |         }t%          |g|¦  «        }t+          |                     ¦   «         d| j        ¬¦  «        }t+          |                     ¦   «         d| j        ¬¦  «        }t%          |g|¦  «        }|�"t%          |g|¦  «        }t%          |g|¦  «        }|                     ||
|j        d         z   | j        | j        f¦  «        }|d d …d |
…f                              |¦  «         |d d …|
d …f                              |¦  «         ~~|                     ||
|j        d         z   | j        | j        f¦  «        }|d d …d |
…f                              |¦  «         |d d …|
d …f                              |¦  «         ~~|                     ||
|j        d         z   | j        | j        f¦  «        }|d d …d |
…f                              |¦  «         |d d …|
d …f                              |¦  «         ~~|||g}~~~t3          ||d¬¦  «        }|d d …d |
…f         }|d d …|
d …f         } ~|                     ||
|¦  «        }|                      |||¦  «        } |                      | ¦  «        } |                      |¦  «        }| j        r*|                      | ¦  «        } |                      |¦  «        }| |fS )Nz)x and y must share batch and channel dimsrL   r™   r   r   r   rº   zpos_img length rø   zlocal image stream length rù   rú   Trü   )r@   r’   râ   rÿ   rL   r   r   rD   rÖ   rE   rF   r“  r”  r  r’  r•  r–  rð   rÝ   r  r  r   Ú	new_emptyrê   r®   r   r—  r˜  r§   r™  rš  )!r_   r8   rœ  r�  rž  rŸ  r  ÚNxr  ÚByÚNyÚCyÚx_shaperL   ÚqxÚkxÚvxr’  ÚqyÚkyÚvyr  r	  ÚNx_fullÚNx_localÚpos_img_localÚq_jointÚk_jointÚv_jointr  Ú	out_jointÚout_yÚout_xs!                                    r!   r~   zMMDiTJointAttention.forward~  s¿  € õ ˜‰OŒOˆÝ˜‰OŒOˆØ”7‰ˆˆ2ˆqØ”W‰
ˆˆB�Ø�BŠwˆw˜1 š7˜7˜7Ð$O™7œ7Ð"ð �b˜$œ.¨!¨t¬~Ñ*=Ð>ˆÝ�4˜Ñ!Ô!ð 	+Ø—J’J˜q‘M”M×)Ò)¨!¨R°°D´NÀAÈÌÑDWÑXÔX×`Ò`ÐabÐdeÐghÐjkÐmnÑoÔoˆEØ˜qœ 5¨¤8¨U°1¬X�B�ˆBØ�à—’˜!‘”×!Ò! 'Ñ*Ô*ˆBØ—’˜!‘”×!Ò! 'Ñ*Ô*ˆBØ—’˜!‘”×!Ò! 'Ñ*Ô*ˆBØˆØ�]Š]˜2ÑÔˆØ�]Š]˜2ÑÔˆØ�]Š]‰_Œ_ˆð —
’
˜1‘”×%Ò% a¨¨Q°´ÀÀTÄ^Ñ@SÑTÔT×\Ò\Ð]^Ð`aÐcdÐfgÐijÑkÔkˆØˆØ˜1”X˜u Qœx¨¨q¬�ˆBˆØ�]Š]˜2ÑÔˆØ�]Š]˜2ÑÔˆØ�]Š]‰_Œ_ˆØð Œ>Ð!Ý)¨2¨$°Ñ8Ô8ˆBÝ)¨2¨$°Ñ8Ô8ˆB‰Bà”n×)Ò)Ñ+Ô+ˆGØ”n×)Ò)Ñ+Ô+ˆGØ”m AÔ&ˆGØ˜WÑ$¨Ò)Ð)Ð)Ð+i¸WÐ+iÐ+iÐ`gÐ+iÐ+iÑ)Ô)Ð)Ø 'Ñ)ˆHØ˜’>�>�>Ð#[ÀÐ#[Ð#[ÐQYÐ#[Ð#[‘>”>�>Ø(˜GœL¨°(ÐO¸W¼]È1È2È2Ô=NÐOÐOÐOÐPWÔXˆMÝ)¨2¨$°Ñ>Ô>ˆBå)¨"¯-ª-©/¬/À1ÈtÌ~Ð^Ñ^Ô^ˆBÝ)¨"¯-ª-©/¬/À1ÈtÌ~Ð^Ñ^Ô^ˆBÝ)¨2¨$°Ñ8Ô8ˆBØÐÝ)¨2¨$°Ñ8Ô8ˆBÝ)¨2¨$°Ñ8Ô8ˆBð —,’,  2¨¬°¬Ñ#3°T´^ÀTÄ]ÐSÑTÔTˆØ����3�B�3�Œ×Ò˜bÑ!Ô!Ð!Ø����2�3�3�Œ×Ò˜bÑ!Ô!Ð!Ø�Ø—,’,  2¨¬°¬Ñ#3°T´^ÀTÄ]ÐSÑTÔTˆØ����3�B�3�Œ×Ò˜bÑ!Ô!Ð!Ø����2�3�3�Œ×Ò˜bÑ!Ô!Ð!Ø�Ø—,’,  2¨¬°¬Ñ#3°T´^ÀTÄ]ÐSÑTÔTˆØ����3�B�3�Œ×Ò˜bÑ!Ô!Ð!Ø����2�3�3�Œ×Ò˜bÑ!Ô!Ð!Ø�à˜W gÐ.ˆØ�W˜gÝ! (¸9ÐPTÐUÑUÔUˆ	à˜!˜!˜!˜S˜b˜S˜&Ô!ˆØ˜!˜!˜!˜R˜S˜S˜&Ô!ˆØð —’˜a  QÑ'Ô'ˆØ—’˜a  QÑ'Ô'ˆð —’˜EÑ"Ô"ˆØ—’˜EÑ"Ô"ˆØŒ=ð 	,Ø×$Ò$ UÑ+Ô+ˆEØ×$Ò$ UÑ+Ô+ˆEØ�eˆ|Ðr#   )rà   Frá   rá   ©NN)r   r€   r�   rš   r  rl   rX   r   r   rõ   rh   r  r   r~   rƒ   r„   s   @r!   r�  r�  Y  s-  ø€ € € € € ð ØØØð6ð 6àð6ð ð6ð ð	6ð
 ð6ð ð6ð 
ð6ð 6ð 6ð 6ð 6ð 6ðB"°8¸LÔ3Ið "ð "ð "ð "ð !%Ø"&ð]ð ]àŒ<ð]ð Œ<ð]ð ”ð	]ð
 ”ð]ð ”<ð]ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð]ð ]ð ]ð ]ð ]ð ]ð ]ð ]r#   r�  c                   ó@   ‡ — e Zd Zdˆ fd„	Zdee         fd„Zdd„Zˆ xZS )	ÚMMDiTBlockT2Ir  Nc                 ó¢  •— t          ¦   «                              ¦   «          || _        || _        ||z  | _        t          |d¬¦  «        | _        t          |d¬¦  «        | _        t          ||d¬¦  «        | _	        t          |d¬¦  «        | _
        t          |d¬¦  «        | _        t          ||z  ¦  «        }t          ||¦  «        | _        t          ||¦  «        | _        |�|n+t!          j        t!          j        |d|z  d¬¦  «        ¦  «        | _        |�|n+t!          j        t!          j        |d|z  d¬¦  «        ¦  «        | _        d S )Nr‡   r#  Fr`  rb  TrU   )rW   rX   rA   Úgroupsrê   r†   Únorm_x1Únorm_y1r�  ri  Únorm_x2Únorm_y2rš   r–   Úmlp_xÚmlp_yrY   rZ   r[   ÚadaLN_modulation_imgÚadaLN_modulation_txt)r_   rA   rº  r  rÁ  rÂ  Úmlp_hidden_dimr`   s          €r!   rX   zMMDiTBlockT2I.__init__ß  sK  ø€ Ý‰Œ×ÒÑÔÐØ&ˆÔØˆŒØ# vÑ-ˆŒõ ˜{°Ð5Ñ5Ô5ˆŒÝ˜{°Ð5Ñ5Ô5ˆŒå'¨¸vÐPUÐVÑVÔVˆŒ	å˜{°Ð5Ñ5Ô5ˆŒÝ˜{°Ð5Ñ5Ô5ˆŒå˜[¨9Ñ4Ñ5Ô5ˆÝ  ¨nÑ=Ô=ˆŒ
Ý  ¨nÑ=Ô=ˆŒ
ð
 $Ð/ð !Ð å”�rœy¨°a¸+±oÈDÐQÑQÔQÑRÔRð 	Ô!ð $Ð/ð !Ð å”�rœy¨°a¸+±oÈDÐQÑQÔQÑRÔRð 	Ô!Ð!Ð!r#   rñ   c                 ó:   — | j                              |¦  «         d S rw   )ri  rõ   rô   s     r!   rõ   z(MMDiTBlockT2I.set_context_parallel_groupþ  s   € àŒ	×,Ò,¨XÑ6Ô6Ð6Ð6Ð6r#   c                 ó  — t          |¦  «        }t          |¦  «        }|                      |¦  «                             dd¬¦  «        \  }}}	}
}}|                      |¦  «                             dd¬¦  «        \  }}}}}}t	          |                      |¦  «        ||¦  «        }t	          |                      |¦  «        ||¦  «        }|g}|g}~~|                      |||||¦  «        \  }}|                     | 	                    |	¦  «        ¦  «         |                     | 	                    |¦  «        ¦  «         ~~|  
                    t	          |                      |¦  «        |
|¦  «        ¦  «        }|                      t	          |                      |¦  «        ||¦  «        ¦  «        }|                     | 	                    |¦  «        ¦  «         |                     | 	                    |¦  «        ¦  «         ~~||fS )Nrb  r+   rf   )r@   rÁ  r{  rÂ  r;   r»  r¼  ri  r7   r6   r¿  r½  rÀ  r¾  )r_   r8   rœ  Úcr�  rž  rŸ  Úshift_msa_xÚscale_msa_xÚ
gate_msa_xÚshift_mlp_xÚscale_mlp_xÚ
gate_mlp_xÚshift_msa_yÚscale_msa_yÚ
gate_msa_yÚshift_mlp_yÚscale_mlp_yÚ
gate_mlp_yrƒ  Úy_normrÐ   Úy_listÚattn_xÚattn_yr¿  rÀ  s                              r!   r~   zMMDiTBlockT2I.forward  sÝ  € Ý˜‰OŒOˆÝ˜‰OŒOˆàUY×UnÒUnÐopÑUqÔUq×UwÒUwØ�2ð Vxñ V
ô V
ÑRˆ�[ *¨k¸;È
ð VZ×UnÒUnÐopÑUqÔUq×UwÒUwØ�2ð Vxñ V
ô V
ÑRˆ�[ *¨k¸;È
õ
 ˜TŸ\š\¨!™_œ_¨k¸;ÑGÔGˆÝ˜TŸ\š\¨!™_œ_¨k¸;ÑGÔGˆØ�ˆØ�ˆØ�FØŸš 6¨6°7¸GÀYÑOÔO‰ˆ�Ø	�Šˆv�{Š{˜:Ñ&Ô&Ñ'Ô'Ð'Ø	�Šˆv�{Š{˜:Ñ&Ô&Ñ'Ô'Ð'Ø�Fð —
’
�; t§|¢|°A¡¤¸À[ÑQÔQÑRÔRˆØ—
’
�; t§|¢|°A¡¤¸À[ÑQÔQÑRÔRˆØ	�Šˆu�zŠz˜*Ñ%Ô%Ñ&Ô&Ð&Ø	�Šˆu�zŠz˜*Ñ%Ô%Ñ&Ô&Ð&Ø�5Ø�!ˆtˆr#   )r  NNr¶  )	r   r€   r�   rX   r   r   rõ   r~   rƒ   r„   s   @r!   r¸  r¸  Þ  sq   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð>7°8¸LÔ3Ið 7ð 7ð 7ð 7ðð ð ð ð ð ð ð r#   r¸  Úcompress_ratioc                 ó�   — | dk    rdS | | dz
  z  dk    rt          d| › �¦  «        ‚t          t          j        | ¦  «        ¦  «        S )Nr   r   z*ed_compress_ratio must be power of 2, got )rH  rš   rj   Úlog2)r×  s    r!   Ú_compute_num_stages_from_ratiorÚ  !  sV   € Ø˜ÒÐØˆqØ˜¨!Ñ+Ñ,°Ò1Ð1ÝÐVÀnÐVÐVÑWÔWÐWÝ�tŒy˜Ñ(Ô(Ñ)Ô)Ð)r#   c                   óÖ   ‡ — e Zd Z	 	 	 	 	 	 	 ddeded	ed
edededededefˆ fd„Z	 	 	 ddej	        dej	        dej	        de
ej	                 de
e         de
e         dej	        fd„Zˆ xZS )Ú_TransformerBlockr  rá   Fr   rV  rW  rg   râ   r  r  Úuse_token_compressionÚtoken_shuffle_window_sizer\  r]  r^  c
                 óâ  •‡‡— t          ¦   «                              ¦   «          ‰| _        || _        || _        || _        |	| _        t          ‰d¬¦  «        | _        t          ‰|d¬¦  «        | _
        t          ‰d¬¦  «        | _        t          ‰||¬¦  «        | _        t          j        t          j        ‰d‰z  d¬¦  «        ¦  «        | _        t%          |¦  «        | _        | j        rt)          |¦  «        nd	Š| j        r\‰d	k    rV G ˆˆfd
„dt          j        ¦  «        }
 G ˆˆfd„dt          j        ¦  «        } |
¦   «         | _         |¦   «         | _        d S d | _        d | _        d S )Nr‡   r#  Fr`  ra  rb  TrU   r   c                   óP   •‡ — e Zd Zˆ ˆˆfd„Zdej        dededej        fd„Zˆ xZS )ú@_TransformerBlock.__init__.<locals>._AttnTokenShuffleCompressionc                 óú  •— t          ¦   «                              ¦   «          ‰‰z  }‰|z   dz
  |z  |z  }|‰k    }||z  }‰| _        || _        || _        |r;t          j        t          j        ‰|d¬¦  «        t          j        ¦   «         ¦  «        nt          j	        ¦   «         | _
        t          j        ||d¬¦  «        | _        |‰k    rt          j	        ¦   «         nt          j        |‰d¬¦  «        | _        d S ©Nr   TrU   )rW   rX   ÚsÚadapted_hiddenÚcompressed_dimrY   rZ   r[   r  rë   Ú
adapter_inÚ	proj_downÚproj_to_attn)r_   Ús2rå  Úneeds_adapter_inræ  r`   rg   Úts_wss        €€€r!   rX   zI_TransformerBlock.__init__.<locals>._AttnTokenShuffleCompression.__init__G  sþ   ø€ Ý‘G”G×$Ò$Ñ&Ô&Ð&Ø ™�BØ'*¨R¡x°!¡|¸Ñ&:¸bÑ%@�NØ'5¸Ò'<Ð$Ø%3°rÑ%9�NØ"�D”FØ*8�DÔ'Ø*8�DÔ'ð ,ð+�œ¥b¤i°°^È$Ð&OÑ&OÔ&OÕQSÔQXÑQZÔQZÑ[Ô[Ð[åœ[™]œ]ð ”Oõ
 &(¤Y¨~¸~ÐTXÐ%YÑ%YÔ%Y�D”Nà)7¸3Ò)>Ð)>�œ™œ˜ÅBÄIÈnÐ^aÐhlÐDmÑDmÔDmð Ô%Ð%Ð%r#   r8   r³   r´   rÒ   c                 óL  — |j         \  }}}|||z  k    sJ d|› d|› d|› �¦   «         ‚| j        }||z  dk    r	||z  dk    sJ d|› d|› d|› �¦   «         ‚|                     ||||¦  «        }|                      |¦  «        }|                      |¦  «        }| j        }|                     |||z  |||z  ||¦  «        }|                     ddd	d
dd¦  «                             ¦   «         }|                     |||z  ||z  z  ||z  |z  ¦  «        }|                      |¦  «        }|S )NúToken count ú != Ú*r   zHeight z and Width z) must be divisible by token shuffle size r   r™   r   rº   rF  )	r’   rä  rÖ   rç  rè  ræ  r   r  ré  ©	r_   r8   r³   r´   r  r  r  rä  Úc_pers	            r!   r~   zH_TransformerBlock.__init__.<locals>._AttnTokenShuffleCompression.forwardZ  s\  € Øœg‘G�A�q˜!Ø ¨¡Ò.Ð.Ð.Ð0V¸qÐ0VÐ0VÀfÐ0VÐ0VÈuÐ0VÐ0VÑ.Ô.Ð.Øœ�AØ! A™:¨š?˜?¨u°q©y¸Aª~¨~¨~Øh &ÐhÐh°UÐhÐhÐefÐhÐhñ 0>¬~Ð=ð Ÿš˜q &¨%°Ñ3Ô3�AØŸš¨Ñ*Ô*�AØŸš qÑ)Ô)�AØ Ô/�EØŸš˜q &¨A¡+¨q°%¸1±*¸aÀÑGÔG�AØŸ	š	 ! Q¨¨1¨a°Ñ3Ô3×>Ò>Ñ@Ô@�AØŸš˜q 6¨Q¡;°5¸A±:Ñ">ÀÀAÁÈÁÑNÔN�AØ×)Ò)¨!Ñ,Ô,�AØ�Hr#   ©	r   r€   r�   rX   rh   r  rš   r~   rƒ   ©r`   rg   rì  s   @€€r!   Ú_AttnTokenShuffleCompressionrá  F  sw   øø€ € € € € ðð ð ð ð ð ð ð& U¤\ð ¸3ð Àsð ÈuÌ|ð ð ð ð ð ð ð ð r#   rõ  c                   óT   •‡ — e Zd Zˆ ˆˆfd„Zdej        dededej        fˆfd„Zˆ xZS )ú>_TransformerBlock.__init__.<locals>._AttnTokenShuffleExpansionc                 óB  •— t          ¦   «                              ¦   «          ‰‰z  }‰|z   dz
  |z  |z  }|‰k    }||z  }‰| _        || _        || _        |‰k    rt          j        ¦   «         nt          j        ‰|d¬¦  «        | _        t          j	        t          j        ||d¬¦  «        t          j
        ¦   «         ¦  «        | _        |r;t          j	        t          j        |‰d¬¦  «        t          j
        ¦   «         ¦  «        nt          j        ¦   «         | _        d S rã  )rW   rX   rä  rå  ræ  rY   rë   r[   Úproj_from_attnrZ   r  Úproj_upÚadapter_out)r_   rê  rå  Úneeds_adapter_outræ  r`   rg   rì  s        €€€r!   rX   zG_TransformerBlock.__init__.<locals>._AttnTokenShuffleExpansion.__init__l  s  ø€ Ý‘G”G×$Ò$Ñ&Ô&Ð&Ø ™�BØ'*¨R¡x°!¡|¸Ñ&:¸bÑ%@�NØ(6¸#Ò(=Ð%Ø%3°rÑ%9�NØ"�D”FØ*8�DÔ'Ø*8�DÔ'à)7¸3Ò)>Ð)>�œ™œ˜ÅBÄIÈcÐSaÐhlÐDmÑDmÔDmð Ô'õ $&¤=µ´¸>È>Ð`dÐ1eÑ1eÔ1eÕgiÔgnÑgpÔgpÑ#qÔ#q�D”Lð -ð+�œ¥b¤i°ÀÈ$Ð&OÑ&OÔ&OÕQSÔQXÑQZÔQZÑ[Ô[Ð[åœ[™]œ]ð Ô$Ð$Ð$r#   r8   r³   r´   rÒ   c                 óŒ  •— |j         \  }}}| j        }||z  ||z  }	}|||	z  k    sJ d|› d|› d|	› �¦   «         ‚|                      |¦  «        }| j        }
|                     |||	|||
¦  «        }|                     ||z  |	z  |z  |z  |
¦  «        }|                      |¦  «        }|                     |||	||| j        ¦  «        }|                     dddddd	¦  «         	                    ¦   «         }|                     |||z  |	|z  | j        ¦  «        }|  
                    |¦  «        }|                     |||z  ‰¦  «        }|S )
Nrî  rï  rð  r   r   r™   r   rº   rF  )r’   rä  rù  ræ  rÖ   r   rú  rå  r   r  rû  )r_   r8   r³   r´   r  ÚNpr  rä  rO  rP  rò  Úx_flatÚ
x_expandedrg   s                €r!   r~   zF_TransformerBlock.__init__.<locals>._AttnTokenShuffleExpansion.forward  s^  ø€ Ø œw‘H�A�r˜1Øœ�AØ# q™[¨%°1©*˜�BØ  b¡š=˜=˜=Ð*J¸Ð*JÐ*JÀÐ*JÐ*JÀbÐ*JÐ*J™=œ=˜=Ø×+Ò+¨AÑ.Ô.�AØ Ô/�EØŸš˜q " b¨!¨Q°Ñ6Ô6�AØŸYšY q¨2¡v°¡{°Q¡¸Ñ':¸EÑBÔB�FØ!%§¢¨fÑ!5Ô!5�JØ!+§¢°°B¸¸A¸qÀ$ÔBUÑ!VÔ!V�JØ!+×!3Ò!3°A°q¸!¸QÀÀ1Ñ!EÔ!E×!PÒ!PÑ!RÔ!R�JØ!+§¢°°B¸±F¸BÀ¹FÀDÔDWÑ!XÔ!X�JØ!%×!1Ò!1°*Ñ!=Ô!=�JØ!+§¢°°F¸U±NÀCÑ!HÔ!H�JØ%Ð%r#   ró  rô  s   @€€r!   Ú_AttnTokenShuffleExpansionr÷  k  s�   øø€ € € € € ðð ð ð ð ð ð ð&& U¤\ð &¸3ð &Àsð &ÈuÌ|ð &ð &ð &ð &ð &ð &ð &ð &ð &ð &r#   r  )rW   rX   rg   râ   r\  r]  r^  r†   rh  rß   ri  rj  r  r]   rY   rZ   r[   rk  r  rÝ  rš   r  Ú_ts_compressÚ
_ts_expand)r_   rg   râ   r  r  rÝ  rÞ  r\  r]  r^  rõ  r  rì  r`   s    `          @€r!   rX   z_TransformerBlock.__init__*  s°  øøø€ õ 	‰Œ×ÒÑÔÐØˆŒØ"ˆŒØ"ˆŒØ.ˆÔØ.ˆÔÝ˜S dÐ+Ñ+Ô+ˆŒ
Ý# C°9ÀuÐMÑMÔMˆŒ	Ý˜S dÐ+Ñ+Ô+ˆŒ
Ý�s i°dÐ;Ñ;Ô;ˆŒÝ "¤­b¬i¸¸QÀ¹WÈ4Ð.PÑ.PÔ.PÑ QÔ QˆÔÝ%)Ð*?Ñ%@Ô%@ˆÔ"Ø26Ô2LÐS•Ð-Ñ.Ô.Ð.ÐRSˆàÔ%ð P	#¨%°!ª)¨)ð#ð #ð #ð #ð #ð #ð #ð #­r¬yñ #ô #ð #ðJ#&ð #&ð #&ð #&ð #&ð #&ð #&ð #&­R¬Yñ #&ô #&ð #&ðJ !=Ð <Ñ >Ô >ˆDÔØ8Ð8Ñ:Ô:ˆDŒOˆOˆOà $ˆDÔØ"ˆDŒOˆOˆOr#   Nr8   rÆ  r0   r  r³   r´   rÒ   c                 ó®  — t          |¦  «        }|                      |¦  «                             dd¬¦  «        \  }}}	}
}}| j        o| j        d uo| j        d uo|d uo|d u}|�r(t          |                      |¦  «        ||¦  «        }|                      |||¦  «        }~| j        j        }||z  ||z  }}| j	        | j
        z  }| j        dk    r6t          |||| j        | j        ¦  «                             |j        ¦  «        }n)t#          |||¦  «                             |j        ¦  «        }|g}d }|                      |||¦  «        }|                      |||¦  «        }|                     |                     |	¦  «        ¦  «         ~nht          |                      |¦  «        ||¦  «        }|g}~|                      |||¦  «        }|                     |                     |	¦  «        ¦  «         ~|                      t          |                      |¦  «        |
|¦  «        ¦  «        }|                     |                     |¦  «        ¦  «         ~|S )Nrb  r+   rf   rs  )r@   rk  r{  rÝ  r  r  r;   rh  rä  rg   râ   r\  rÏ   r]  r^  rz   re   rÂ   ri  r7   r6   r]   rj  )r_   r8   rÆ  r0   r  r³   r´   r�  r‚  r‡  rˆ  r‰  rŠ  Úuse_tsrƒ  Úx_comprä  rO  rP  rê   r„  rÐ   r…  r�  s                           r!   r~   z_TransformerBlock.forward–  sZ  € õ ˜‰OŒOˆØIM×I^ÒI^Ð_`ÑIaÔIa×IgÒIgÐhiÐoqÐIgÑIrÔIrÑFˆ	�9˜h¨	°9¸hàÔ&ð "ØÔ!¨Ð-ð"à” tÐ+ð"ð ˜dÐ"ð"ð ˜TÐ!ð 	ð ñ 	Ý  §¢¨A¡¤°	¸9ÑEÔEˆFØ×&Ò& v¨v°uÑ=Ô=ˆFØØÔ!Ô#ˆAØ˜q‘[ %¨1¡*�ˆBØ”x 4¤>Ñ1ˆHØŒ~ Ò,Ð,Ý6°xÀÀRÈÔI]Ð_cÔ_sÑtÔt×wÒwØ”Hñô ��õ 3°8¸RÀÑDÔD×GÒGÈÌÑQÔQ�Ø�XˆFØˆFØ—y’y ¨°4Ñ8Ô8ˆHØ—’ x°¸Ñ?Ô?ˆHØ�FŠF�8—=’= Ñ*Ô*Ñ+Ô+Ð+Ø�å  §¢¨A¡¤°	¸9ÑEÔEˆFØ�XˆFØØ—y’y ¨¨dÑ3Ô3ˆHØ�FŠF�8—=’= Ñ*Ô*Ñ+Ô+Ð+ØØ—(’(�; t§z¢z°!¡}¤}°iÀÑKÔKÑLÔLˆØ	�Šˆw�|Š|˜HÑ%Ô%Ñ&Ô&Ð&ØØˆr#   )r  rá   Fr   rV  rW  rW  rS  )r   r€   r�   rš   rl   r  rŽ  rX   rh   r  r   r~   rƒ   r„   s   @r!   rÜ  rÜ  )  sA  ø€ € € € € ð
 ØØ&+Ø)*Ø#Ø!Ø!ðj#ð j#àðj#ð ðj#ð ð	j#ð
 ðj#ð  $ðj#ð $'ðj#ð ðj#ð ðj#ð ðj#ð j#ð j#ð j#ð j#ð j#ðb (,Ø $Ø#ð/ð /àŒ<ð/ð Œ<ð/ð Œ\ð	/ð
 �u”|Ô$ð/ð ˜”ð/ð ˜Œ}ð/ð 
Œð/ð /ð /ð /ð /ð /ð /ð /r#   rÜ  c                   óH   ‡ — e Zd Zd	dedefˆ fd„Zdej        dedefd„Zˆ xZS )
Ú_PatchMergingr   rA   Úwindow_sizec                 óÐ  •— t          ¦   «                              ¦   «          || _        t          |¦  «        | _        | j        | j        z  }||z   dz
  |z  |z  | _        | j        |k    | _        | j        r@t          j        t          j	        || j        d¬¦  «        t          j
        ¦   «         ¦  «        nt          j        ¦   «         | _        | j        |z  | _        t          j	        | j        | j        d¬¦  «        | _        | j        |k    rt          j        ¦   «         n?t          j        t          j	        | j        |d¬¦  «        t          j
        ¦   «         ¦  «        | _        d S rã  )rW   rX   rA   rš   r	  rå  Úneeds_adapterrY   rZ   r[   r  rë   rç  ræ  rè  Úproj_to_hidden©r_   rA   r	  rê  r`   s       €r!   rX   z_PatchMerging.__init__É  sC  ø€ Ý‰Œ×ÒÑÔÐØ&ˆÔÝ˜{Ñ+Ô+ˆÔØÔ Ô 0Ñ0ˆØ +¨bÑ 0°1Ñ 4¸Ñ;¸rÑAˆÔØ!Ô0°KÒ?ˆÔð Ô!ð�BŒM�"œ) K°Ô1DÈ4ÐPÑPÔPÕRTÔRYÑR[ÔR[Ñ\Ô\Ð\å”‘”ð 	Œð
 #Ô1°RÑ7ˆÔÝœ 4Ô#6¸Ô8KÐRVÐWÑWÔWˆŒð Ô" kÒ1Ð1õ ŒK‰MŒMˆMå”�rœy¨Ô)<¸kÐPTÐUÑUÔUÕWYÔW^ÑW`ÔW`ÑaÔað 	ÔÐÐr#   r8   r³   r´   c                 óR  — |j         \  }}}|||z  k    sJ d|› d||z  › �¦   «         ‚| j        }||z  dk    r	||z  dk    sJ d|› �¦   «         ‚|                     ||||¦  «        }|                      |¦  «        }|                      |¦  «        }| j        }|                     |||z  |||z  ||¦  «        }|                     dddddd	¦  «                             ¦   «         }|                     |||z  ||z  z  ||z  |z  ¦  «        }|                      |¦  «        }|||z  ||z  fS )
Nrî  z doesn't match H*W=r   zH and W must be divisible by r   r™   r   rº   rF  )	r’   r	  rÖ   rç  rè  ræ  r   r  r  rñ  s	            r!   r~   z_PatchMerging.forwardÝ  sU  € Ø”'‰ˆˆ1ˆaØ�F˜U‘NÒ"Ð"Ð"Ð$Y°1Ð$YÐ$YÈÐRWÉÐ$YÐ$YÑ"Ô"Ð"ØÔˆØ˜‰z˜QŠˆ 5¨1¡9°¢> > >Ð3VÐSTÐ3VÐ3V¡>¤>Ð1Ø�FŠF�1�f˜e QÑ'Ô'ˆØ�OŠO˜AÑÔˆØ�NŠN˜1ÑÔˆØÔ#ˆØ�FŠF�1�f ‘k 1 e¨q¡j°!°UÑ;Ô;ˆØ�IŠI�a˜˜A˜q ! QÑ'Ô'×2Ò2Ñ4Ô4ˆØ�FŠF�1�v ‘{ u°¡zÑ2°A¸±E¸E±MÑBÔBˆØ×Ò Ñ"Ô"ˆØ�&˜A‘+˜u¨™zÐ)Ð)r#   ©r   ©	r   r€   r�   rš   rX   rh   r  r~   rƒ   r„   s   @r!   r  r  È  s{   ø€ € € € € ð
ð 
 Cð 
°cð 
ð 
ð 
ð 
ð 
ð 
ð(*˜œð *¨sð *¸3ð *ð *ð *ð *ð *ð *ð *ð *r#   r  c                   óH   ‡ — e Zd Zd	dedefˆ fd„Zdej        dedefd„Zˆ xZS )
Ú_PatchExpandingr   rA   r	  c                 óÐ  •— t          ¦   «                              ¦   «          || _        t          |¦  «        | _        | j        | j        z  }||z   dz
  |z  |z  | _        | j        |k    | _        | j        |k    rt          j        ¦   «         nt          j	        || j        d¬¦  «        | _
        | j        |z  | _        t          j        t          j	        | j        | j        d¬¦  «        t          j        ¦   «         ¦  «        | _        | j        r@t          j        t          j	        | j        |d¬¦  «        t          j        ¦   «         ¦  «        nt          j        ¦   «         | _        d S rã  )rW   rX   rA   rš   r	  rå  r  rY   rë   r[   Úproj_from_hiddenræ  rZ   r  rú  rû  r  s       €r!   rX   z_PatchExpanding.__init__î  sC  ø€ Ý‰Œ×ÒÑÔÐØ&ˆÔÝ˜{Ñ+Ô+ˆÔØÔ Ô 0Ñ0ˆØ +¨bÑ 0°1Ñ 4¸Ñ;¸rÑAˆÔØ!Ô0°KÒ?ˆÔð Ô" kÒ1Ð1õ ŒK‰MŒMˆMå”˜;¨Ô(;À$ÐGÑGÔGð 	Ôð
 #Ô1°RÑ7ˆÔÝ”}¥R¤Y¨tÔ/BÀDÔDWÐ^bÐ%cÑ%cÔ%cÕegÔelÑenÔenÑoÔoˆŒð Ô!ð�BŒM�"œ) DÔ$7¸È4ÐPÑPÔPÕRTÔRYÑR[ÔR[Ñ\Ô\Ð\å”‘”ð 	ÔÐÐr#   r8   r³   r´   c                 óz  — |j         \  }}}||}}| j        }	|                      |¦  «        }| j        |	|	z  z  }
|                     ||||	|	|
¦  «        }|                     ||z  |z  |	z  |	z  |
¦  «        }|                      |¦  «        }|                     ||||	|	| j        ¦  «        }|                     dddddd¦  «                             ¦   «         }|                     |||	z  ||	z  | j        ¦  «        }|  	                    |¦  «        }|                     |||	z  ||	z  z  | j
        ¦  «        }|||	z  ||	z  fS )Nr   r   r™   r   rº   rF  )r’   r	  r  rå  rÖ   r   rú  r   r  rû  rA   )r_   r8   r³   r´   r  rþ  r  rO  rP  rä  rò  rÿ  r   s                r!   r~   z_PatchExpanding.forward  sJ  € Ø”7‰ˆˆ2ˆqØ˜ˆBˆØÔˆØ×!Ò! !Ñ$Ô$ˆØÔ#¨¨A©Ñ.ˆØ�FŠF�1�b˜"˜a  EÑ*Ô*ˆØ—’˜1˜r™6 B™;¨™?¨QÑ.°Ñ6Ô6ˆØ—\’\ &Ñ)Ô)ˆ
Ø—_’_ Q¨¨B°°1°dÔ6IÑJÔJˆ
Ø×'Ò'¨¨1¨a°°A°qÑ9Ô9×DÒDÑFÔFˆ
Ø—_’_ Q¨¨Q©°°Q±¸Ô8KÑLÔLˆ
Ø×%Ò% jÑ1Ô1ˆ
Ø—_’_ Q¨¨a©°B¸±FÑ(;¸TÔ=MÑNÔNˆ
Ø˜2 ™6 2¨¡6Ð)Ð)r#   r  r  r„   s   @r!   r  r  í  s{   ø€ € € € € ð
ð 
 Cð 
°cð 
ð 
ð 
ð 
ð 
ð 
ð(*˜œð *¨sð *¸3ð *ð *ð *ð *ð *ð *ð *ð *r#   r  c                   óª   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 dd	ed
edededededededededefˆ fd„Zdededej	        fd„Z
dej        dededej        fd„Zˆ xZS )Ú
_EncoderEDr   rà   r   r  rá   FrV  rW  rA   Ú
num_stagesÚdepth_per_stagerâ   r	  r  r  Úuse_attn_token_shuffler\  r]  r^  c                 óî  •‡ ‡‡‡‡‡	‡
‡‡— t          ¦   «                              ¦   «          t          ‰¦  «        ‰ _        t          ‰¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        ‰	‰ _	        ‰
‰ _
        ‰‰ _        i ‰ _        g }t          ‰ j        ¦  «        D ]š}‰ j        rd‰ j        |z
  z  ndŠt          j        ˆˆˆˆˆ	ˆ
ˆˆ ˆf	d„t          t          |¦  «        ¦  «        D ¦   «         ¦  «        }t!          ‰‰ j        ¬¦  «        }|                     t          j        ||dœ¦  «        ¦  «         Œ›t          j        |¦  «        ‰ _        d S )Nr   r   c                 óJ   •	— g | ]}t          ‰‰‰‰‰	j        ‰
‰‰‰¬ ¦	  «	        ‘Œ S ©)rÝ  rÞ  r\  r]  r^  ©rÜ  r  ©Ú.0rK  r  rA   r  râ   r\  r]  r^  r_   rì  s     €€€€€€€€€r!   ú
<listcomp>z'_EncoderED.__init__.<locals>.<listcomp>0  óX   ø€ ð ð ð ð õ &Ø#Ø!Ø!ØØ.2Ô.IØ27Ø"+Ø(7Ø(7ð
ñ 
ô 
ðð ð r#   ©r	  )ÚblocksÚcompress)rW   rX   rš   rA   râ   r  r	  r  r  r\  r]  r^  r4  r­   rY   Ú
ModuleListr  ÚappendÚ
ModuleDictÚstages)r_   rA   r  r  râ   r	  r  r  r  r\  r]  r^  r)  Úi_stager$  r%  rì  r`   s   ``  ` `` ```    @€r!   rX   z_EncoderED.__init__  s�  øøøøøøøøøø€ õ 	‰Œ×ÒÑÔÐÝ˜{Ñ+Ô+ˆÔÝ˜Y™œˆŒÝ˜j™/œ/ˆŒÝ˜{Ñ+Ô+ˆÔÝ&*Ð+AÑ&BÔ&BˆÔ#Ø"ˆŒØ.ˆÔØ.ˆÔØˆŒØˆÝ˜Tœ_Ñ-Ô-ð 	Sð 	SˆGØ8<Ô8SÐZ�A˜$œ/¨GÑ3Ñ4Ð4ÐYZˆEÝ”]ðð ð ð ð ð ð ð ð ð ð ð õ #¥3 Ñ#7Ô#7Ñ8Ô8ðñ ô ñô ˆFõ  % [¸dÔ>NÐOÑOÔOˆHØ�MŠM�"œ-°6ÀxÐ(PÐ(PÑQÔQÑRÔRÐRÐRÝ”m FÑ+Ô+ˆŒˆˆr#   r³   r´   re   c                 ó,  — ||f}|| j         v r | j         |                              |¦  «        S | j        | j        z  }| j        dk    rt          |||| j        | j        ¦  «        }nt          |||¦  «        }|| j         |<   |                     |¦  «        S rr  ©	r4  rz   rA   râ   r\  rÏ   r]  r^  rÂ   rt  s          r!   ru  z_EncoderED._fetch_posC  óš   € Ø�uˆoˆØ�$”/Ð!Ð!Ø”? 3Ô'×*Ò*¨6Ñ2Ô2Ð2ØÔ# t¤~Ñ5ˆØŒ>˜[Ò(Ð(Ý-¨h¸ÀÀtÔG[Ð]aÔ]qÑrÔrˆCˆCå)¨(°F¸EÑBÔBˆCØ"ˆŒ˜ÑØ�vŠv�f‰~Œ~Ðr#   r8   rÆ  c           
      óF  — t          |¦  «        }||}}g }| j        D ]}|d         D ]H}	|                      |||j        ¦  «        }
|g}d }| j        r |	|||
d ||¦  «        n |	|||
d ¦  «        }ŒI|                     |¦  «          |d         |||¦  «        \  }}}Œ€||||fS )Nr$  r%  )r@   r)  ru  re   r  r'  )r_   r8   r³   r´   rÆ  rM  rN  Úskip_tokensÚstageÚblkr0   rÐ   s               r!   r~   z_EncoderED.forwardO  så   € Ý˜‰OŒOˆØ�uˆ1ˆØˆØ”[ð 	1ð 	1ˆEØ˜X”ð rð r�Ø—o’o a¨¨A¬HÑ5Ô5�Ø˜�Ø�Ø7;Ô7RÐq�C�C˜  3¨¨a°Ñ3Ô3Ð3ÐX[ÐX[Ð\bÐdeÐgjÐlpÑXqÔXq��Ø×Ò˜qÑ!Ô!Ð!Ø'�e˜JÔ'¨¨1¨aÑ0Ô0‰GˆAˆq�!�!Ø�+˜q !Ð#Ð#r#   ©	r   rà   r   r  rá   FrV  rW  rW  ©r   r€   r�   rš   rl   r  rŽ  rX   rh   re   ru  r  r~   rƒ   r„   s   @r!   r  r    s+  ø€ € € € € ð
  !ØØØØØ',Ø#Ø!Ø!ð-,ð -,àð-,ð ð-,ð ð	-,ð
 ð-,ð ð-,ð ð-,ð ð-,ð !%ð-,ð ð-,ð ð-,ð ð-,ð -,ð -,ð -,ð -,ð -,ð^
 ð 
¨Sð 
¸%¼,ð 
ð 
ð 
ð 
ð$˜œð $¨sð $¸3ð $À5Ä<ð $ð $ð $ð $ð $ð $ð $ð $r#   r  c                   óª   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 dd	ed
edededededededededefˆ fd„Zdededej	        fd„Z
dej        dededej        fd„Zˆ xZS )Ú
_DecoderEDr   rà   r   r  rá   FrV  rW  rA   r  r  râ   r	  r  r  r  r\  r]  r^  c                 óÞ  •‡ ‡‡‡‡‡	‡
‡‡— t          ¦   «                              ¦   «          t          ‰¦  «        ‰ _        t          ‰¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        ‰	‰ _	        ‰
‰ _
        ‰‰ _        i ‰ _        g }t          ‰ j        ¦  «        D ]’}‰ j        rd|z  ndŠt          j        ˆˆˆˆˆ	ˆ
ˆˆ ˆf	d„t          t          |¦  «        ¦  «        D ¦   «         ¦  «        }t!          ‰‰ j        ¬¦  «        }|                     t          j        ||dœ¦  «        ¦  «         Œ“t          j        |¦  «        ‰ _        d S )Nr   r   c                 óJ   •	— g | ]}t          ‰‰‰‰‰	j        ‰
‰‰‰¬ ¦	  «	        ‘Œ S r  r  r  s     €€€€€€€€€r!   r!  z'_DecoderED.__init__.<locals>.<listcomp>{  r"  r#   r#  )r$  Úexpand)rW   rX   rš   rA   râ   r  r	  r  r  r\  r]  r^  r4  r­   rY   r&  r  r'  r(  r)  )r_   rA   r  r  râ   r	  r  r  r  r\  r]  r^  r)  r*  r$  r8  rì  r`   s   ``  ` `` ```    @€r!   rX   z_DecoderED.__init___  s†  øøøøøøøøøø€ õ 	‰Œ×ÒÑÔÐÝ˜{Ñ+Ô+ˆÔÝ˜Y™œˆŒÝ˜j™/œ/ˆŒÝ˜{Ñ+Ô+ˆÔÝ&*Ð+AÑ&BÔ&BˆÔ#Ø"ˆŒØ.ˆÔØ.ˆÔØˆŒØˆÝ˜Tœ_Ñ-Ô-ð 	Oð 	OˆGØ"&Ô"=ÐD�A�w‘J�JÀ1ˆEÝ”]ðð ð ð ð ð ð ð ð ð ð ð õ #¥3 Ñ#7Ô#7Ñ8Ô8ðñ ô ñô ˆFõ  % [¸dÔ>NÐOÑOÔOˆFØ�MŠM�"œ-°6ÀVÐ(LÐ(LÑMÔMÑNÔNÐNÐNÝ”m FÑ+Ô+ˆŒˆˆr#   r³   r´   re   c                 ó,  — ||f}|| j         v r | j         |                              |¦  «        S | j        | j        z  }| j        dk    rt          |||| j        | j        ¦  «        }nt          |||¦  «        }|| j         |<   |                     |¦  «        S rr  r,  rt  s          r!   ru  z_DecoderED._fetch_posŽ  r-  r#   r8   Úbottleneck_hÚbottleneck_wrÆ  c           
      ó  — t          |¦  «        }||}}t          | j        ¦  «        D ]Þ\  }}	|	d         D ]H}
|                      |||j        ¦  «        }|g}d }| j        r |
|||d ||¦  «        n |
|||d ¦  «        }ŒI |	d         |||¦  «        \  }}}t          | j        ¦  «        dz
  |z
  }d|cxk    rt          |¦  «        k     r=n Œ¤||         }d ||<   ||z  }|j        d         |k    r|                     |¦  «         d }Œß|||fS )Nr$  r8  r   r   )	r@   Ú	enumerater)  ru  re   r  Úlenr’   r7   )r_   r8   r:  r;  r/  rÆ  rM  rN  Úir0  r1  r0   rÐ   Úskip_idxÚskipÚexpected_tokenss                   r!   r~   z_DecoderED.forwardš  sW  € Ý˜‰OŒOˆØ˜\ˆ1ˆÝ! $¤+Ñ.Ô.ð 	ð 	‰HˆAˆuØ˜X”ð rð r�Ø—o’o a¨¨A¬HÑ5Ô5�Ø˜�Ø�Ø7;Ô7RÐq�C�C˜  3¨¨a°Ñ3Ô3Ð3ÐX[ÐX[Ð\bÐdeÐgjÐlpÑXqÔXq��Ø%�e˜H”o a¨¨AÑ.Ô.‰GˆAˆq�!Ý˜4œ;Ñ'Ô'¨!Ñ+¨aÑ/ˆHØ�HÐ/Ð/Ò/Ð/�s ;Ñ/Ô/Ò/Ð/Ð/Ð/Ð/Ø" 8Ô,�Ø(,�˜HÑ%Ø"# a¡%�Ø”:˜a”= OÒ3Ð3Ø—F’F˜4‘L”L�LØ�øØ�!�Qˆwˆr#   r2  r3  r„   s   @r!   r5  r5  ^  s-  ø€ € € € € ð
  !ØØØØØ',Ø#Ø!Ø!ð-,ð -,àð-,ð ð-,ð ð	-,ð
 ð-,ð ð-,ð ð-,ð ð-,ð !%ð-,ð ð-,ð ð-,ð ð-,ð -,ð -,ð -,ð -,ð -,ð^
 ð 
¨Sð 
¸%¼,ð 
ð 
ð 
ð 
ð˜œð °Sð Èð Ð]bÔ]ið ð ð ð ð ð ð ð r#   r5  c                   óè   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d(dededededededededededee         dee         defˆ fd„Ze	defd „¦   «         Z
d!efd"„Zd#„ Zd$„ Zd%„ Zd&„ Zd)d'„Zˆ xZS )*Ú
PixDiT_T2Ir™   é   é€  é@   Né   r   rº   é   é   Tr±   rV  r+   Fr   Úuse_text_ropeÚtext_rope_thetar\  Ú
rope_ref_hÚ
rope_ref_wÚrepa_encoder_indexÚ	enable_edÚed_compress_ratioÚed_depth_per_stageÚed_window_sizeÚed_num_headsÚed_hidden_sizeÚed_use_token_shufflec                 ó@  •‡ — t          ¦   «                              ¦   «          t          |¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        t          |	¦  «        ‰ _	        t          |
¦  «        ‰ _
        t          |¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        t!          |¦  «        ‰ _        |‰ _        |‰ j
        z  ‰ _        |‰ j
        z  ‰ _        t          |¦  «        ‰ _        ‰ j        dk    rt-          d¦  «        ‚t/          |‰ j        ¦  «        ‰ _        t3          ||
dz  z  |d¬¦  «        ‰ _        t7          |¦  «        ‰ _        t3          ‰ j        |dt:          ¬¦  «        ‰ _        t?          j         tC          j"        d‰ j        |¦  «        ¦  «        ‰ _#        d ‰ _$        d ‰ _%        d ‰ _&        t?          j'        ˆ fd„tQ          ‰ j        ¦  «        D ¦   «         ¦  «        ‰ _)        d ‰ _*        |�t          |¦  «        n‰ j        ‰ _+        |�t          |¦  «        n‰ j        ‰ _,        t?          j'        ˆ fd	„tQ          ‰ j        ¦  «        D ¦   «         ¦  «        ‰ _-        t]          ‰ j        ‰ j        ¦  «        ‰ _/        ta          ¦   «         ‰ _1        ta          ¦   «         ‰ _2        d ‰ _3        t          |¦  «        ‰ _4        t          |¦  «        ‰ _5        t          |¦  «        ‰ _6        t          |¦  «        ‰ _7        |�t          |¦  «        n‰ j        ‰ _8        |�t          |¦  «        n‰ j        ‰ _9        t          |¦  «        ‰ _:        d ‰ _;        d ‰ _<        d ‰ _=        d ‰ _>        d ‰ _?        d ‰ _@        d ‰ _A        ‰ j4        rt…          ‰ j5        ¦  «        nd}‰ j4        o|dk    ‰ _C        ‰ jC        �rÍ‰ j9        ‰ j8        z  dk    rt-          d
‰ j9        › d‰ j8        › �¦  «        ‚‰ j9        ‰ j        k    rt?          jD        ¦   «         n t?          jE        ‰ j        ‰ j9        d¬¦  «        ‰ _=        ‰ j9        ‰ j        k    rt?          jD        ¦   «         n t?          jE        ‰ j9        ‰ j        d¬¦  «        ‰ _>        ‰ j9        ‰ j        k    rt?          jD        ¦   «         n t?          jE        ‰ j        ‰ j9        d¬¦  «        ‰ _?        t;          ‰ j9        d¬¦  «        ‰ _@        t;          ‰ j        d¬¦  «        ‰ _A        t�          ‰ j9        |‰ j6        ‰ j8        ‰ j7        ‰ j:        ‰ j        ‰ j        ‰ j        ¬¦	  «	        ‰ _;        t�          ‰ j9        |‰ j6        ‰ j8        ‰ j7        ‰ j:        ‰ j        ‰ j        ‰ j        ¬¦	  «	        ‰ _<        ‰  H                    ¦   «          d ‰ _I        d‰ _J        d S )Nr   z>PixDiT_T2I expects pixel_depth > 0 to retain the pixel pathwayr   TrU   )rV   rç   r   c                 ó^   •— g | ])}t          ‰j        ‰j        ‰j        ‰j        ¬ ¦  «        ‘Œ*S ))rÁ  rÂ  )r¸  rA   Ú
num_groupsÚ_shared_cond_adaln_imgÚ_shared_cond_adaln_txt©r   rK  r_   s     €r!   r!  z'PixDiT_T2I.__init__.<locals>.<listcomp>ö  sQ   ø€ ð ð ð ð õ ØÔ$Ø”OØ)-Ô)DØ)-Ô)Dð	ñ ô ðð ð r#   c                 óœ   •— g | ]H}t          ‰j        ‰j        ‰j        ‰j        d ‰j        ‰j        ‰j        ‰j        ‰j	        ¬¦
  «
        ‘ŒIS )r  )r5  râ   r  rZ  r[  r\  r]  r^  )
rU  rX  rA   r5  rY  rB   Úpixel_num_groupsr\  r]  r^  r\  s     €r!   r!  z'PixDiT_T2I.__init__.<locals>.<listcomp>  sp   ø€ ð ð ð ð õ ØÔ*ØÔ$Ø#œØ"œoØ!Ø%)Ô%@Ø#'Ô#8Ø"œnØ$(Ô$8Ø$(Ô$8ðñ ô ðð ð r#   zed_hidden_size z# must be divisible by ed_num_heads r‡   r#  )	rA   r  r  râ   r	  r  r\  r]  r^  F)KrW   rX   rš   r0  r&  rA   rY  Úpatch_depthÚpixel_depthÚnum_text_blocksr5  rX  Útxt_embed_dimÚtxt_max_lengthr  rK  rl   rL  r\  r]  r^  rO  rH  r/  Úpixel_embedderr)  Ú
s_embedderrQ   Ú
t_embedderr†   Ú
y_embedderrY   r‰   rh   ÚrandnÚy_pos_embeddingÚ_shared_cond_adalnrZ  r[  r&  r­   Úpatch_blocksÚtext_refine_blocksrB   r^  Úpixel_blocksr!  Úfinal_layerr3  Úprecompute_posÚprecompute_pos_txtÚlast_repa_tokensrP  rQ  rR  rS  rT  rU  rV  Ú
encoder_edÚ
decoder_edÚs_ed_proj_inÚs_ed_proj_outÚs_ed_cond_projÚs_ed_in_normÚs_ed_out_normrÚ  Úuse_edrë   r[   r  r5  Úinitialize_weightsrð   Ú_is_context_parallel_enabled)r_   r0  rY  rA   rX  rB   r^  r_  r`  ra  r5  rb  rc  rK  rL  r\  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  r  r`   s   `                          €r!   rX   zPixDiT_T2I.__init__µ  sâ  øø€ õ> 	‰Œ×ÒÑÔÐÝ˜{Ñ+Ô+ˆÔÝ Ñ,Ô,ˆÔÝ˜{Ñ+Ô+ˆÔÝ˜j™/œ/ˆŒÝ˜{Ñ+Ô+ˆÔÝ˜{Ñ+Ô+ˆÔÝ" ?Ñ3Ô3ˆÔÝ˜j™/œ/ˆŒÝ!$Ð%6Ñ!7Ô!7ˆÔÝ  Ñ/Ô/ˆÔÝ! .Ñ1Ô1ˆÔÝ! -Ñ0Ô0ˆÔÝ$ _Ñ5Ô5ˆÔØ"ˆŒØ)¨T¬_Ñ<ˆÔØ)¨T¬_Ñ<ˆÔÝ"%Ð&8Ñ"9Ô"9ˆÔØÔ˜qÒ Ð ÝÐ]Ñ^Ô^Ð^õ 1°¸dÔ>TÑUÔUˆÔÝ,¨[¸:Àq¹=Ñ-HÈ+Ð\`ÐaÑaÔaˆŒÝ-¨kÑ:Ô:ˆŒÝ,¨TÔ-?ÀÐSWÕdkÐlÑlÔlˆŒÝ!œ|­E¬K¸¸4Ô;NÐP[Ñ,\Ô,\Ñ]Ô]ˆÔð #'ˆÔØ&*ˆÔ#Ø&*ˆÔ#ÝœMðð ð ð õ ˜tÔ/Ñ0Ô0ðñ ô ñ

ô 

ˆÔð #'ˆÔà+AÐ+M�CÐ&Ñ'Ô'Ð'ÐSWÔScð 	Ô#ð :JÐ9U¥Ð$4Ñ 5Ô 5Ð 5Ð[_Ô[jˆÔÝœMðð ð ð õ ˜tÔ/Ñ0Ô0ðñ ô ñ
ô 
ˆÔõ$ & dÔ&<¸dÔ>OÑPÔPˆÔå"™fœfˆÔÝ"&¡&¤&ˆÔØ $ˆÔå˜i™œˆŒÝ!$Ð%6Ñ!7Ô!7ˆÔÝ"%Ð&8Ñ"9Ô"9ˆÔÝ! .Ñ1Ô1ˆÔØ1=Ð1I�C Ñ-Ô-Ð-ÈtÌˆÔØ5CÐ5O�c .Ñ1Ô1Ð1ÐUYÔUeˆÔÝ$(Ð)=Ñ$>Ô$>ˆÔ!Ø04ˆŒØ04ˆŒØ15ˆÔØ26ˆÔØ37ˆÔØ/3ˆÔØ04ˆÔØOSÌ~ÐdÕ3°DÔ4JÑKÔKÐKÐcdˆ
Ø”nÐ7¨°aªˆŒØŒ;ñ +	ØÔ" TÔ%6Ñ6¸!Ò;Ð;Ý Øq dÔ&9ÐqÐqÐ^bÔ^oÐqÐqñô ð ð
 Ô&¨$Ô*:Ò:Ð:õ ”‘”�å”Y˜tÔ/°Ô1DÈ4ÐPÑPÔPð Ôð Ô&¨$Ô*:Ò:Ð:õ ”‘”�å”Y˜tÔ2°DÔ4DÈ4ÐPÑPÔPð Ôð Ô&¨$Ô*:Ò:Ð:õ ”‘”�å”Y˜tÔ/°Ô1DÈ4ÐPÑPÔPð Ôõ
 !(¨Ô(;ÀÐ FÑ FÔ FˆDÔÝ!(¨Ô)9¸tÐ!DÑ!DÔ!DˆDÔÝ(Ø Ô/Ø%Ø $Ô 7ØÔ+Ø Ô/Ø'+Ô'@Øœ.Ø $Ô 4Ø $Ô 4ð
ñ 
ô 
ˆDŒOõ )Ø Ô/Ø%Ø $Ô 7ØÔ+Ø Ô/Ø'+Ô'@Øœ.Ø $Ô 4Ø $Ô 4ð
ñ 
ô 
ˆDŒOð 	×ÒÑ!Ô!Ð!ð 26ˆŒØ27ˆÔ)Ð)Ð)r#   rÒ   c                 ó   — | j         S rw   )r{  )r_   s    r!   Úis_context_parallel_enabledz&PixDiT_T2I.is_context_parallel_enablede  s   € àÔ0Ð0r#   rñ   c                 óÊ   — | j         rt          d¦  «        ‚| j        D ]}|                     |¦  «         Œ| j        D ]}|                     |¦  «         Œ|| _        d| _        d S )NzrPixDiT_T2I context parallel is not implemented for the encoder-decoder path. Build with enable_ed=False to use CP.T)ry  ÚNotImplementedErrorrk  rõ   rm  rð   r{  )r_   rñ   Úblocks      r!   Úenable_context_parallelz"PixDiT_T2I.enable_context_paralleli  sŽ   € ð Œ;ð 	Ý%ð8ñô ð ð Ô&ð 	7ð 	7ˆEØ×,Ò,¨XÑ6Ô6Ð6Ð6ØÔ&ð 	7ð 	7ˆEØ×,Ò,¨XÑ6Ô6Ð6Ð6Ø!ˆŒØ,0ˆÔ)Ð)Ð)r#   c                 óž   — | j         D ]}|                     d ¦  «         Œ| j        D ]}|                     d ¦  «         Œd | _        d| _        d S )NF)rk  rõ   rm  rð   r{  )r_   r€  s     r!   Údisable_context_parallelz#PixDiT_T2I.disable_context_parallely  si   € ØÔ&ð 	3ð 	3ˆEØ×,Ò,¨TÑ2Ô2Ð2Ð2ØÔ&ð 	3ð 	3ˆEØ×,Ò,¨TÑ2Ô2Ð2Ð2ØˆŒØ,1ˆÔ)Ð)Ð)r#   c                 ó0  — ||f| j         v r"| j         ||f                              |¦  «        S | j        | j        z  }| j        dk    rt          |||| j        | j        ¦  «        }nt          |||¦  «        }|| j         ||f<   |                     |¦  «        S rr  )	ro  rz   rA   rY  r\  rÏ   r]  r^  rÂ   )r_   r³   r´   re   rê   r0   s         r!   Ú	fetch_poszPixDiT_T2I.fetch_pos�  s    € Ø�Eˆ?˜dÔ1Ð1Ð1ØÔ&¨° Ô7×:Ò:¸6ÑBÔBÐBØÔ# t¤Ñ6ˆØŒ>˜[Ò(Ð(Ý-¨h¸ÀÀtÔG[Ð]aÔ]qÑrÔrˆCˆCå)¨(°F¸EÑBÔBˆCØ/2ˆÔ˜V U˜OÑ,Ø�vŠv�f‰~Œ~Ðr#   c                 ó8  — || j         v r | j         |                              |¦  «        S | j        | j        z  }d| j        t          j        d|d¦  «                             ¦   «         |z  z  z  }t          j        d|¦  «                             ¦   «                              d¦  «        }||                     d¦  «        z  }t          j	        | 
                    ¦   «         |                     ¦   «         gd¬¦  «        }|| j         |<   |                     |¦  «        S )Nr*   r   r   r   r+   rf   )rp  rz   rA   rY  rL  rh   r   rl   rG  r   r/   r.   )r_   Úlengthre   rê   rr   Ú	positionsÚanglesrÑ   s           r!   Úfetch_pos_textzPixDiT_T2I.fetch_pos_textŒ  sö   € Ø�TÔ,Ð,Ð,ØÔ*¨6Ô2×5Ò5°fÑ=Ô=Ð=àÔ# t¤Ñ6ˆà�tÔ+µ´¸QÀÈ!Ñ0LÔ0L×0RÒ0RÑ0TÔ0TÐW_Ñ0_Ñ`ÑaˆÝ”L  FÑ+Ô+×1Ò1Ñ3Ô3×=Ò=¸aÑ@Ô@ˆ	Ø˜UŸ_š_¨QÑ/Ô/Ñ/ˆÝ”K §¢¡¤¨v¯zªz©|¬|Ð <À"ÐEÑEÔEˆ	Ø*3ˆÔ Ñ'Ø�|Š|˜FÑ#Ô#Ð#r#   c                 óž  — | j         j        j        j        }t          j                             |                     |j        d         dg¦  «        ¦  «         t          j         	                    | j         j        j
        d¦  «         t          j                             | j        j        d         j        d¬¦  «         t          j                             | j        j        d         j        d¬¦  «         t          j                             | j        j        j        ¦  «         t          j                             | j        j        j
        ¦  «         d S )Nr   r+   g{®Gáz”?)Ústdr   )re  rï   r‹   ÚdatarY   ÚinitÚxavier_uniform_rÖ   r’   Ú	constant_rV   Únormal_rf  r]   Úzeros_rn  r%  )r_   Úws     r!   rz  zPixDiT_T2I.initialize_weights™  sí   € àŒOÔ Ô'Ô,ˆÝ
Œ×Ò §¢¨¬°¬
°BÐ'7Ñ 8Ô 8Ñ9Ô9Ð9Ý
Œ×Ò˜$œ/Ô.Ô3°QÑ7Ô7Ð7õ 	Œ�Š˜œÔ+¨AÔ.Ô5¸4ˆÑ@Ô@Ð@Ý
Œ�Š˜œÔ+¨AÔ.Ô5¸4ˆÑ@Ô@Ð@õ 	Œ�Š�tÔ'Ô.Ô5Ñ6Ô6Ð6Ý
Œ�Š�tÔ'Ô.Ô3Ñ4Ô4Ð4Ð4Ð4r#   c           	      óÚ  — |j         \  }}}}	|| j        z  }
|	| j        z  }|
|z  }|                      |
||j        ¦  «        }t          j        j                             || j        | j        ¬¦  «                             dd¦  «        }|  	                    | 
                    d¦  «        ¦  «         
                    |d| j        ¦  «        }|                     ¦   «         dk    rt          d¦  «        ‚t          |j         d         | j        ¦  «        }|d d …d |…d d …f         }|                      |¦  «         
                    ||| j        ¦  «        }|| j        d d …d |…d d …f                              |j        ¦  «        z   }t          j        j                             |¦  «        }d }| j        r|                      ||j        ¦  «        nd }|�÷t/          |t          j        ¦  «        rÝ|}|                     ¦   «         dk    r_|                     d¦  «        dk    rF|                     d¦  «        }|                     ¦   «         dk    r|                     d¦  «        dk    °F|                     ¦   «         dk    r.|                     d¦  «        dk    r|                     d¦  «        }|                     ¦   «         dk    r|dk    }|�€u|g}~|                      |¦  «        }d | _        | j        �rò| j        ��ê| j        ��â|
|}}| j         €|n|                       |¦  «        }| j!        �|  !                    |¦  «        }| j"        €|n|  "                    |¦  «        }|                      ||||¦  «        \  }}}}|                      |||j        ¦  «        } | j#        €|n|  #                    |¦  «        }!| j$        �|  $                    |!¦  «        }!t          j        j                             ||!z   ¦  «        }!d }"|�Ì|!j         d         }#t	          j%        ||#ft          j&        |j        ¬¦  «        }$|                     d¦  «        |k    r|d d …d |…f         n>t          j        j         '                    |d||                     d¦  «        z
  fd	¬
¦  «        }%t	          j(        |%|$gd¬¦  «         
                    |dd||#z   ¦  «        }"tS          | j*        ¦  «        D ]M}&tW          ¦   «           | j,        |&         |!||| ||"¦  «        \  }!}d| j-        cxk     r	|&dz   k    r
n ŒF|!| _        ŒN| j         €|!n|                       |!¦  «        }'| j!        �|  !                    |'¦  «        }'|                      |'||||¦  «        \  }(}}| j#        €|(n|  #                    |(¦  «        }| j$        �|  $                    |¦  «        }t          j        j                             ||z   ¦  «        }�n[|}!d }"|�Ì|!j         d         }#t	          j%        ||#ft          j&        |j        ¬¦  «        }$|                     d¦  «        |k    r|d d …d |…f         n>t          j        j         '                    |d||                     d¦  «        z
  fd	¬
¦  «        }%t	          j(        |%|$gd¬¦  «         
                    |dd||#z   ¦  «        }"tS          | j*        ¦  «        D ]M}&tW          ¦   «           | j,        |&         |!|||||"¦  «        \  }!}d| j-        cxk     r	|&dz   k    r
n ŒF|!| _        ŒNt          j        j                             ||!z   ¦  «        }d| j-        cxk     r| j*        k    s	n || _        |j         \  })}*}|*|k    rW|*|k    r|d d …d |…d d …f         }n=||*z
  }+t	          j(        || .                    ||+|j         d         ¦  «        gd¬¦  «        }|}*| 
                    ||z  | j        ¦  «        },|g}d }|  /                    |||	| j        ¬¦  «        }-| j0        D ]%}.tW          ¦   «           |.|-|,||	| j        |¦  «        }-Œ&|  1                    |-¦  «        }-| j2        }/| j        | j        z  }0|- 
                    |||0|/¦  «         3                    dddd¦  «         4                    ¦   «         }-|- 
                    ||/|0z  |¦  «        }-t          j        j         5                    |-||	f| j        | j        ¬¦  «        }1|1S )N)Úkernel_sizeÚstrider   r   r+   r™   z"Text embedding y must be [B, L, D]r   )r   re   TrÔ   rf   )rB  rC  r5  )6r’   r5  r…  re   rh   rY   r    ÚunfoldÚ	transposerf  rÖ   rA   rg   rH  rª   rc  rg  ri  rz   r   r¡   rK  rŠ  r=   r  r  Úsqueezere  rq  ry  rr  rs  rt  rw  rv  ru  rx  r   r  Úpadrm   r­   r_  r   rk  rO  Ú	new_zerosrd  rm  rn  r&  r   r  Úfold)2r_   r8   ro   rœ  rä  r  r  rK  rM  rN  rO  rP  r|  r0   Ú	x_patchesr}   ÚLtxtÚy_embÚ	conditionrš  rž  ÚmrÐ   Ús0ÚH_tokensÚW_tokensÚs_edÚc_edÚ
bottleneckr/  ÚHbÚWbÚpos_bÚs_mainÚattn_mask_jointÚ
L_img_currÚpad_imgÚpad_txtr?  Ús_bottleneck2ÚdecodedÚ
batch_sizer‡  Úpad_lenrv  Úx_pixelsr1  ÚC_outrQ  Úx_imgs2                                                     r!   r~   zPixDiT_T2I.forward§  sñ  € Ø”W‰
ˆˆ1ˆa�à�$”/Ñ!ˆØ�$”/Ñ!ˆØ�‰Gˆð �nŠn˜R  Q¤XÑ.Ô.ˆÝ”HÔ'×.Ò.¨q¸d¼oÐVZÔVeÐ.ÑfÔf×pÒpÐqrÐtuÑvÔvˆ	à—’ §¢ r¡
¤
Ñ+Ô+×0Ò0°°B¸Ô8HÑIÔIˆð �5Š5‰7Œ7�aŠ<ˆ<ÝÐAÑBÔBÐBÝ�1”7˜1”:˜tÔ2Ñ3Ô3ˆØˆaˆaˆa��$�˜˜˜ˆkŒNˆØ—’ Ñ"Ô"×'Ò'¨¨4°Ô1AÑBÔBˆØ˜Ô,¨Q¨Q¨Q°°°°q°q°q¨[Ô9×<Ò<¸U¼[ÑIÔIÑIˆõ ”HÔ'×,Ò,¨UÑ3Ô3ˆ	ð ˆØ9=Ô9KÐU�$×%Ò% d¨A¬HÑ5Ô5Ð5ÐQUˆØÐ¥
¨4µ´Ñ >Ô >ÐØˆAØ—%’%‘'”'˜A’+�+ !§&¢&¨¡)¤)¨q¢. .Ø—I’I˜a‘L”L�ð —%’%‘'”'˜A’+�+ !§&¢&¨¡)¤)¨q¢. .à�uŠu‰wŒw˜!Š|ˆ| §¢ q¡	¤	¨Q¢ Ø—I’I˜a‘L”L�Ø�uŠu‰wŒw˜!Š|ˆ|Ø˜1’f�à‰9Ø�[ˆFØØ—’ Ñ(Ô(ˆBØ$(ˆDÔ!ØŒ{ñ 7=˜tœÑ:¸t¼Ñ?ZØ%'¨˜(�Ø!Ô.Ð6�r�r¸D×<MÒ<MÈbÑ<QÔ<Q�ØÔ$Ð0Ø×,Ò,¨TÑ2Ô2�DØ$(Ô$7Ð$?�y�yÀT×EXÒEXÐYbÑEcÔEc�Ø26·/²/À$ÈÐRZÐ\`Ñ2aÔ2aÑ/�
˜K¨¨RØŸš r¨2¨q¬xÑ8Ô8�Ø'+Ô'9Ð'A˜˜Àt×GYÒGYÐZdÑGeÔGe�ØÔ%Ð1Ø!×/Ò/°Ñ7Ô7�FÝœÔ,×1Ò1°%¸&±.ÑAÔA�à"&�Ø�?Ø!'¤¨a¤�JÝ#œk¨1¨j¨/ÅÄÐTUÔT\Ð]Ñ]Ô]�Gð Ÿ8š8 A™;œ;¨$Ò.Ð.ð ˜A˜A˜A˜u ˜u˜Hœ˜å"œXÔ0×4Ò4°S¸1¸dÀSÇXÂXÈaÁ[Ä[Ñ>PÐ:QÐY]Ð4Ñ^Ô^ð õ
 ',¤i°¸'Ð0BÈÐ&JÑ&JÔ&J×&OÒ&OÐPQÐSTÐVWÐY]Ð`jÑYjÑ&kÔ&k�Oå˜tÔ/Ñ0Ô0ð 7ð 7�AÝ(Ñ*Ô*Ð*Ø$8 DÔ$5°aÔ$8¸ÀÈ	ÐSXÐZaÐcrÑ$sÔ$s‘M�F˜EØ˜4Ô2Ð=Ð=Ò=Ð=°q¸1±uÒ=Ð=Ð=Ð=Ð=Ø06˜Ô-øØ*.Ô*;Ð*C  È×IZÒIZÐ[aÑIbÔIb�ØÔ$Ð0Ø$(×$5Ò$5°mÑ$DÔ$D�MØ $§¢°¸rÀ2À{ÐTXÑ YÔ Y‘�˜˜AØ#Ô1Ð9�G�G¸t×?QÒ?QÐRYÑ?ZÔ?Z�ØÔ%Ð1Ø×*Ò*¨1Ñ-Ô-�AÝ”HÔ'×,Ò,¨U°Q©YÑ7Ô7�‘à�Ø"&�Ø�?Ø!'¤¨a¤�JÝ#œk¨1¨j¨/ÅÄÐTUÔT\Ð]Ñ]Ô]�Gð Ÿ8š8 A™;œ;¨$Ò.Ð.ð ˜A˜A˜A˜u ˜u˜Hœ˜å"œXÔ0×4Ò4°S¸1¸dÀSÇXÂXÈaÁ[Ä[Ñ>PÐ:QÐY]Ð4Ñ^Ô^ð õ
 ',¤i°¸'Ð0BÈÐ&JÑ&JÔ&J×&OÒ&OÐPQÐSTÐVWÐY]Ð`jÑYjÑ&kÔ&k�Oå˜tÔ/Ñ0Ô0ð 7ð 7�AÝ(Ñ*Ô*Ð*Ø$8 DÔ$5°aÔ$8¸ÀÈ	ÐSVÐX_ÐapÑ$qÔ$q‘M�F˜EØ˜4Ô2Ð=Ð=Ò=Ð=°q¸1±uÒ=Ð=Ð=Ð=Ð=Ø06˜Ô-øÝ”HÔ'×,Ò,¨U°V©^Ñ<Ô<�à�DÔ+Ð?Ð?Ò?Ð?¨tÔ/?Ò?Ð?Ð?Ð?Ø$%ˆDÔ!ð !"¤Ñˆ
�F˜AØ�QŠ;ˆ;Ø˜ŠzˆzØ�a�a�a˜˜!˜˜Q˜Q˜Q�h”K��à˜f™*�Ý”I˜q !§+¢+¨a°¸!¼'À!¼*Ñ"EÔ"EÐFÈAÐNÑNÔN�ØˆFð —’˜˜A™˜tÔ/Ñ0Ô0ˆØ�ˆØˆØ×&Ò& v¸!ÀqÐUYÔUdÐ&ÑeÔeˆØÔ$ð 	Jð 	JˆCÝ Ñ"Ô"Ð"Ø�s˜8 V¨Q°°4´?ÀDÑIÔIˆHˆHð ×#Ò# HÑ-Ô-ˆØÔ!ˆØŒ_˜tœÑ.ˆØ—=’=  A r¨5Ñ1Ô1×9Ò9¸!¸QÀÀ1ÑEÔE×PÒPÑRÔRˆØ—=’=  E¨B¡J°Ñ2Ô2ˆÝ”Ô#×(Ò(¨°A°q°6ÀtÄÐ_cÔ_nÐ(ÑoÔoˆØˆr#   )r™   rE  rF  rG  NNrH  r   rº   rE  rI  rJ  Tr±   rV  rJ  rJ  r+   Fr   r   r   NNTr¶  )r   r€   r�   r  rl   rŽ  rš   r   rX   Úpropertyr}  r   r�  rƒ  r…  rŠ  rz  r~   rƒ   r„   s   @r!   rD  rD  ´  sÊ  ø€ € € € € ð ØØØØ#ØØØØØØØØ"Ø!(ð $ØØØ"$ØØ!"Ø"#ØØ&*Ø(,Ø%)ð;n8ð n8ð ðn8ð ðn8ð& ð'n8ð( ð)n8ð* ð+n8ð,  ð-n8ð. ð/n8ð0 ð1n8ð2  ð3n8ð4 ð5n8ð6 ˜s”mð7n8ð8 ! œð9n8ð: #ð;n8ð n8ð n8ð n8ð n8ð n8ð` ð1¨Tð 1ð 1ð 1ñ „Xð1ð1°ð 1ð 1ð 1ð 1ð 2ð 2ð 2ð	ð 	ð 	ð$ð $ð $ð5ð 5ð 5ðð ð ð ð ð ð ð r#   rD  )Fr   )r±   r²   )4Úshared.utils.media_controlr   rj   Útypingr   r   Únumpyr   rh   Útorch.nnrY   Útorch.nn.functionalr    r�   Útorch.distributedr   Ú)postprocessing.pid.utils.context_parallelr   Úshared.attentionr   r"   r   r%   r;   r@   rš   rO   r  rQ   r†   r–   rl   rÂ   rÏ   r>   r  rÝ   rß   r  r!  r)  r/  rU  r�  r¸  rÚ  rÜ  r  r  r  r5  rD  rN   r#   r!   ú<module>rÀ     sg  ðØ ;Ð ;Ð ;Ð ;Ð ;Ð ;ð €€€Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *à NÐ NÐ NÐ NÐ NÐ NØ *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð$ð ð ðð ð ð*)ð )ð )ðð ð ð¨#ð Àsð ð ð ð ðð ð ð ð ˜"œ)ñ ô ð ð>	ið 	ið 	ið 	ið 	iˆbŒiñ 	iô 	ið 	iðð ð ð ð �"”)ñ ô ð ð>
;ð 
; ð 
;¨cð 
;¸#ð 
;Àeð 
;ð 
;ð 
;ð 
;ð& Øð$;ð $;Ø	ð$;àð$;ð ð$;ð ð	$;ð
 ð$;ð ð$;ð ð$;ð $;ð $;ð $;ðN Tð °e´lð ÀuÄ|ð ð ð ð ð,Oð Oð Oð Oð O�b”iñ Oô Oð Oðdð ð ð ð ˆ"Œ)ñ ô ð ðD	ð 	ð 	ð 	ð 	�”ñ 	ô 	ð 	ð"ð ð ð ð ˜œñ ô ð ð*Ucð Ucð Ucð Ucð Uc˜œñ Ucô Ucð Ucðpjð jð jð jð jˆrŒyñ jô jð jðfBð Bð Bð Bð B˜"œ)ñ Bô Bð BðJ@ð @ð @ð @ð @�B”Iñ @ô @ð @ðF*°3ð *¸3ð *ð *ð *ð *ð\ð \ð \ð \ð \˜œ	ñ \ô \ð \ð~"*ð "*ð "*ð "*ð "*�B”Iñ "*ô "*ð "*ðJ#*ð #*ð #*ð #*ð #*�b”iñ #*ô #*ð #*ðLH$ð H$ð H$ð H$ð H$�”ñ H$ô H$ð H$ðVNð Nð Nð Nð N�”ñ Nô Nð Nðlrð rð rð rð r�”ñ rô rð rð rð rr#   