ó
    oM‡j*— ã                   óÜ
  • S SK r S SKrS SKrS SKJs  Jr  S SKJr  SSKJ	r	  SSK
Jr  SSKJrJr  SSKJr      S…S
\R"                  S\S\S\S\S\S\R"                  4S jjr    S†S\S\\\\4   -  S\S\S\S\R.                  S-  S\S\R"                  4S jjr  S‡S\S\\\\4   -  S\S\S\S\R4                  4S jjr      SˆS\R.                  S-  S\4S jjrS‰S jrSŠS jr S‹S jrS  r S! r! " S" S#\RD                  5      r# " S$ S%\RD                  5      r$ " S& S'\RD                  5      r% " S( S)\RD                  5      r&     SŒS+\S,\S-\S.\\\4   S-  S\R.                  S-  S\R"                  \\R"                  \R"                  4   -  4S/ jjr'   S�S0\\\\4   S+\S\R.                  S-  S\R"                  \\R"                  \R"                  4   -  4S1 jjr( SŽS\R.                  S-  S\4S2 jjr)S�S3 jr*S�S4 jr+S‡S5 jr,S6S	SSS*\RZ                  4S7\S8\R4                  \-  S+\4S9 jjr.   S‘S:\R"                  S;\R"                  \\R"                     -  S,\S<\S=\S\\R"                  \R"                  4   4S> jjr/S:\R"                  4S? jr0 " S@ SA\RD                  5      r1 " SB SC\RD                  5      r2 " SD SE\RD                  5      r3 " SF SG\RD                  5      r4 " SH SI\RD                  5      r5 " SJ SK\RD                  5      r6 " SL SM\RD                  5      r7 " SN SO\RD                  5      r8 " SP SQ\RD                  5      r9 " SR SS\RD                  5      r: " ST SU\RD                  5      r; " SV SW\RD                  5      r< " SX SY\RD                  5      r= " SZ S[\RD                  5      r> " S\ S]\RD                  5      r? " S^ S_\RD                  5      r@ " S` Sa\RD                  5      rA " Sb Sc\RD                  5      rB " Sd Se\RD                  5      rC " Sf Sg\RD                  5      rD " Sh Si\RD                  5      rE " Sj Sk\RD                  5      rF " Sl Sm\RD                  5      rG " Sn So\RD                  5      rHSp rI " Sq Sr\RD                  5      rJ " Ss St\RD                  5      rK " Su Sv\RD                  5      rL " Sw Sx\RD                  5      rM " Sy Sz\RD                  5      rN " S{ S|\RD                  5      rO " S} S~\RD                  5      rP " S S€\RD                  5      rQ " S� S‚\RD                  5      rR " Sƒ S„\RD                  5      rSg)’é    N)Únné   )Ú	deprecate)Úmaybe_adjust_dtype_for_deviceé   )ÚFP32SiLUÚget_activation)Ú	AttentionFÚ	timestepsÚembedding_dimÚflip_sin_to_cosÚdownscale_freq_shiftÚscaleÚ
max_periodÚreturnc                 ó¦  • [        U R                  5      S:X  d   S5       eUS-  n[        R                  " U5      * [        R
                  " SU[        R                  U R                  S9-  nXvU-
  -  n[        R                  " U5      nU SS2S4   R                  5       USSS24   -  nXH-  n[        R                  " [        R                  " U5      [        R                  " U5      /SS9nU(       a)  [        R                  " USS2US24   USS2SU24   /SS9nUS-  S:X  a*  [        R                  R                  R                  US	5      nU$ )
aâ  
This matches the implementation in Denoising Diffusion Probabilistic Models: Create sinusoidal timestep embeddings.

Args
    timesteps (torch.Tensor):
        a 1-D Tensor of N indices, one per batch element. These may be fractional.
    embedding_dim (int):
        the dimension of the output.
    flip_sin_to_cos (bool):
        Whether the embedding order should be `cos, sin` (if True) or `sin, cos` (if False)
    downscale_freq_shift (float):
        Controls the delta between frequencies between dimensions
    scale (float):
        Scaling factor applied to the embeddings.
    max_period (int):
        Controls the maximum frequency of the embeddings
Returns
    torch.Tensor: an [N x dim] Tensor of positional embeddings.
r   zTimesteps should be a 1d-arrayr   r   )ÚstartÚendÚdtypeÚdeviceNéÿÿÿÿ©Údim)r   r   r   r   )ÚlenÚshapeÚmathÚlogÚtorchÚarangeÚfloat32r   ÚexpÚfloatÚcatÚsinÚcosr   Ú
functionalÚpad)	r   r   r   r   r   r   Úhalf_dimÚexponentÚembs	            Ú©C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\diffusers/models/embeddings.pyÚget_timestep_embeddingr,      s3  € ô6 ˆy�‰Ó 1Ó$ÐFÐ&FÓFÐ$à Ñ!€HÜ—’˜Ó$Ð$¤u§|¢|Ø�X¤U§]¡]¸9×;KÑ;Kñ(ñ €Hð Ð&:Ñ:Ñ;€Hä
�)Š)�HÓ
€CØ
’A�t�GÑ
×
"Ñ
"Ó
$ s¨4²¨7¡|Ñ
3€Cð ‰+€Cô �)Š)”U—Y’Y˜s“^¤U§Y¢Y¨s£^Ð4¸"Ñ
=€Cö Ü�iŠi˜šQ ¡	˜\Ñ*¨C²°9°H°9°Ñ,=Ð>ÀBÑGˆð �qÑ˜AÓÜ�h‰h×!Ñ!×%Ñ% c¨<Ó8ˆØ€Jó    ç      ð?Ú	embed_dimÚspatial_sizeÚtemporal_sizeÚspatial_interpolation_scaleÚtemporal_interpolation_scaler   Úoutput_typec                 ó  • US:X  a  [        U UUUUS9$ U S-  S:w  a  [        S5      e[        U[        5      (       a  X4nSU -  S-  nU S-  n[        R
                  " US   U[        R                  S9U-  n	[        R
                  " US   U[        R                  S9U-  n
[        R                  " X©S	S
9n[        R                  " USS9nUR                  SSUS   US   /5      n[        X{SS9n[        R
                  " X%[        R                  S9U-  n[        X�SS9nUSSS2SS24   nUR                  USUR                  S   U-  S9nUSS2SSS24   nUR                  US   US   -  SS9n[        R                  " Xì/SS9nU$ )aP  
Creates 3D sinusoidal positional embeddings.

Args:
    embed_dim (`int`):
        The embedding dimension of inputs. It must be divisible by 16.
    spatial_size (`int` or `tuple[int, int]`):
        The spatial dimension of positional embeddings. If an integer is provided, the same size is applied to both
        spatial dimensions (height and width).
    temporal_size (`int`):
        The temporal dimension of positional embeddings (number of frames).
    spatial_interpolation_scale (`float`, defaults to 1.0):
        Scale factor for spatial grid interpolation.
    temporal_interpolation_scale (`float`, defaults to 1.0):
        Scale factor for temporal grid interpolation.

Returns:
    `torch.Tensor`:
        The 3D sinusoidal positional embeddings of shape `[temporal_size, spatial_size[0] * spatial_size[1],
        embed_dim]`.
Únp)r/   r0   r1   r2   r3   é   r   ú"`embed_dim` must be divisible by 4é   r   ©r   r   Úxy©Úindexingr   r   Úpt©r4   N©r   Úoutput_sizer   )Ú_get_3d_sincos_pos_embed_npÚ
ValueErrorÚ
isinstanceÚintr   r   r    ÚmeshgridÚstackÚreshapeÚ!get_2d_sincos_pos_embed_from_gridÚ!get_1d_sincos_pos_embed_from_gridÚrepeat_interleaver   Úconcat)r/   r0   r1   r2   r3   r   r4   Úembed_dim_spatialÚembed_dim_temporalÚgrid_hÚgrid_wÚgridÚpos_embed_spatialÚgrid_tÚpos_embed_temporalÚ	pos_embeds                   r+   Úget_3d_sincos_pos_embedrV   Q   sÃ  € ð< �dÓÜ*ØØ%Ø'Ø(CØ)Eñ
ð 	
ð �1�}˜ÓÜÐ=Ó>Ð>Ü�,¤×$Ñ$Ø$Ð3ˆà˜I™¨Ñ*ÐØ" a™Ðô �\Š\˜, q™/°&ÄÇÁÑNÐQlÑl€FÜ�\Š\˜, q™/°&ÄÇÁÑNÐQlÑl€FÜ�>Š>˜&°4Ñ8€DÜ�;Š;�t Ñ#€Dà�<‰<˜˜A˜|¨A™°¸Q±Ð@ÓA€DÜ9Ð:KÐ_cÑdÐô �\Š\˜-¼e¿m¹mÑLÐOkÑk€FÜ:Ð;MÐcgÑhÐð *¨$²²1¨*Ñ5ÐØ)×;Ñ;Ø˜1Ð*;×*AÑ*AÀ!Ñ*DÀ}Ñ*Tð <ð Ðð ,ªA¨t²Q¨JÑ7ÐØ+×=Ñ=Ø�Q‰˜, q™/Ñ)¨qð >ð Ðô —’Ð0ÐDÈ"ÑM€IØÐr-   c                 ó6  • Sn[        SSUSS9  U S-  S:w  a  [        S5      e[        U[        5      (       a  X4nS	U -  S-  nU S-  n[        R
                  " US
   [        R                  S9U-  n[        R
                  " US   [        R                  S9U-  n	[        R                  " X˜5      n
[        R                  " U
SS9n
U
R                  SS
US
   US   /5      n
[        Xj5      n[        R
                  " U[        R                  S9U-  n[        X|5      nU[        R                  SS2SS24   n[        R                  " X²SS9nUSS2[        R                  SS24   n[        R                  " XÑS   US
   -  S
S9n[        R                  " XÛ/SS9nU$ )aN  
Creates 3D sinusoidal positional embeddings.

Args:
    embed_dim (`int`):
        The embedding dimension of inputs. It must be divisible by 16.
    spatial_size (`int` or `tuple[int, int]`):
        The spatial dimension of positional embeddings. If an integer is provided, the same size is applied to both
        spatial dimensions (height and width).
    temporal_size (`int`):
        The temporal dimension of positional embeddings (number of frames).
    spatial_interpolation_scale (`float`, defaults to 1.0):
        Scale factor for spatial grid interpolation.
    temporal_interpolation_scale (`float`, defaults to 1.0):
        Scale factor for temporal grid interpolation.

Returns:
    `np.ndarray`:
        The 3D sinusoidal positional embeddings of shape `[temporal_size, spatial_size[0] * spatial_size[1],
        embed_dim]`.
z•`get_3d_sincos_pos_embed` uses `torch` and supports `device`. `from_numpy` is no longer required.  Pass `output_type='pt' to use the new version now.úoutput_type=='np'ú0.33.0F©Ústandard_warnr7   r   r8   r9   r   ©r   ©Úaxisr   Nr   )r   rC   rD   rE   r6   r   r    rF   rG   rH   rI   rJ   ÚnewaxisÚrepeatÚconcatenate)r/   r0   r1   r2   r3   Údeprecation_messagerM   rN   rO   rP   rQ   rR   rS   rT   rU   s                  r+   rB   rB   ›   s�  € ð:	?ð ô
 Ð! 8Ð-@ÐPUÒVØ�1�}˜ÓÜÐ=Ó>Ð>Ü�,¤×$Ñ$Ø$Ð3ˆà˜I™¨Ñ*ÐØ" a™Ðô �YŠY�| A‘¬b¯j©jÑ9Ð<WÑW€FÜ�YŠY�| A‘¬b¯j©jÑ9Ð<WÑW€FÜ�;Š;�vÓ&€DÜ�8Š8�D˜qÑ!€Dà�<‰<˜˜A˜|¨A™°¸Q±Ð@ÓA€DÜ9Ð:KÓRÐô �YŠY�}¬B¯J©JÑ7Ð:VÑV€FÜ:Ð;MÓVÐð *¬"¯*©*²aºÐ*:Ñ;ÐÜŸ	š	Ð"3ÈÑKÐà+ªA¬r¯z©zº1Ð,<Ñ=ÐÜŸšÐ#5ÀA±ÈÐVWÉÑ7XÐ_`ÑaÐä—’Ð 2ÐFÈRÑP€IØÐr-   c           	      óV  • US:X  a  Sn[        SSUSS9  [        U UUUUUS9$ [        U[        5      (       a  X4n[        R
                  " US   U[        R                  S	9US   U-  -  U-  n	[        R
                  " US
   U[        R                  S	9US
   U-  -  U-  n
[        R                  " X©SS9n[        R                  " USS9nUR                  SS
US
   US   /5      n[        XUS9nU(       a2  US:”  a,  [        R                  " [        R                  " X0/5      U/SS9nU$ )aŽ  
Creates 2D sinusoidal positional embeddings.

Args:
    embed_dim (`int`):
        The embedding dimension.
    grid_size (`int`):
        The size of the grid height and width.
    cls_token (`bool`, defaults to `False`):
        Whether or not to add a classification token.
    extra_tokens (`int`, defaults to `0`):
        The number of extra tokens to add.
    interpolation_scale (`float`, defaults to `1.0`):
        The scale of the interpolation.

Returns:
    pos_embed (`torch.Tensor`):
        Shape is either `[grid_size * grid_size, embed_dim]` if not using cls_token, or `[1 + grid_size*grid_size,
        embed_dim]` if using cls_token
r6   ú•`get_2d_sincos_pos_embed` uses `torch` and supports `device`. `from_numpy` is no longer required.  Pass `output_type='pt' to use the new version now.rX   rY   FrZ   )r/   Ú	grid_sizeÚ	cls_tokenÚextra_tokensÚinterpolation_scaleÚ	base_sizer   r:   r   r;   r<   r   r   r?   )r   Úget_2d_sincos_pos_embed_nprD   rE   r   r   r    rF   rG   rH   rI   rL   Úzeros)r/   re   rf   rg   rh   ri   r   r4   rb   rO   rP   rQ   rU   s                r+   Úget_2d_sincos_pos_embedrl   Ý   sO  € ð< �dÓðCð 	ô
 	Ð% xÐ1DÐTYÒZÜ)ØØØØ%Ø 3Øñ
ð 	
ô �)œS×!Ñ!ØÐ*ˆ	ô 	�Š�Y˜q‘\¨&¼¿¹ÑFØ�Q‰<˜)Ñ#ñ	%à
ñ	ð ô 	�Š�Y˜q‘\¨&¼¿¹ÑFØ�Q‰<˜)Ñ#ñ	%à
ñ	ð ô
 �>Š>˜&°4Ñ8€DÜ�;Š;�t Ñ#€Dà�<‰<˜˜A˜y¨™|¨Y°q©\Ð:Ó;€DÜ1°)È{Ñ[€IÞ�\ AÓ%Ü—L’L¤%§+¢+¨|Ð.GÓ"HÈ)Ð!TÐZ[Ñ\ˆ	ØÐr-   c                 óÚ   • US:X  a  Sn[        SSUSS9  [        U US9$ U S-  S	:w  a  [        S
5      e[        U S-  US	   US9n[        U S-  US   US9n[        R
                  " XE/SS9nU$ )a+  
This function generates 2D sinusoidal positional embeddings from a grid.

Args:
    embed_dim (`int`): The embedding dimension.
    grid (`torch.Tensor`): Grid of positions with shape `(H * W,)`.

Returns:
    `torch.Tensor`: The 2D sinusoidal positional embeddings with shape `(H * W, embed_dim)`
r6   zŸ`get_2d_sincos_pos_embed_from_grid` uses `torch` and supports `device`. `from_numpy` is no longer required.  Pass `output_type='pt' to use the new version now.rX   rY   FrZ   )r/   rQ   r   r   ú embed_dim must be divisible by 2r?   r   r   )r   Ú$get_2d_sincos_pos_embed_from_grid_nprC   rJ   r   rL   )r/   rQ   r4   rb   Úemb_hÚemb_wr*   s          r+   rI   rI   !  sž   € ð �dÓðCð 	ô
 	Ð% xÐ1DÐTYÒZÜ3ØØñ
ð 	
ð �1�}˜ÓÜÐ;Ó<Ð<ô .¨i¸1©n¸dÀ1¹gÐS^Ñ_€EÜ-¨i¸1©n¸dÀ1¹gÐS^Ñ_€Eä
�,Š,˜�~¨1Ñ
-€CØ€Jr-   c                 óX  • US:X  a  Sn[        SSUSS9  [        XS9$ U S-  S	:w  a  [        S
5      eUc$  [        [        R
                  UR                  5      n[        R                  " U S-  UR                  US9nX`S-  -  nSSU-  -  nUR                  S5      n[        R                  " X5      n[        R                  " U5      n[        R                  " U5      n	[        R                  " X‰/SS9n
U(       a/  [        R                  " U
SS2U S-  S24   U
SS2SU S-  24   /SS9n
U
$ )a¶  
This function generates 1D positional embeddings from a grid.

Args:
    embed_dim (`int`): The embedding dimension `D`
    pos (`torch.Tensor`): 1D tensor of positions with shape `(M,)`
    output_type (`str`, *optional*, defaults to `"np"`): Output type. Use `"pt"` for PyTorch tensors.
    flip_sin_to_cos (`bool`, *optional*, defaults to `False`): Whether to flip sine and cosine embeddings.
    dtype (`torch.dtype`, *optional*): Data type for frequency calculations. If `None`, defaults to
        `torch.float32` on MPS devices (which don't support `torch.float64`) and `torch.float64` on other devices.

Returns:
    `torch.Tensor`: Sinusoidal positional embeddings of shape `(M, D)`.
r6   zŸ`get_1d_sincos_pos_embed_from_grid` uses `torch` and supports `device`. `from_numpy` is no longer required.  Pass `output_type='pt' to use the new version now.rX   z0.34.0FrZ   )r/   Úposr   r   rn   Nr:   ç       @r.   é'  r   r   r   )r   Ú$get_1d_sincos_pos_embed_from_grid_nprC   r   r   Úfloat64r   r   rH   Úouterr$   r%   rL   r#   )r/   rs   r4   r   r   rb   ÚomegaÚoutÚemb_sinÚemb_cosr*   s              r+   rJ   rJ   B  s)  € ð �dÓðCð 	ô
 	Ð% xÐ1DÐTYÒZÜ3¸iÑQÐQØ�1�}˜ÓÜÐ;Ó<Ð<ð �}Ü-¬e¯m©m¸S¿Z¹ZÓHˆä�LŠL˜ a™°·
±
À%ÑH€EØ	˜‰_Ñ€EØ�%˜‘,Ñ€Eà
�+‰+�b‹/€CÜ
�+Š+�cÓ
!€Cä�iŠi˜‹n€GÜ�iŠi˜‹n€Gä
�,Š,˜Ð)¨qÑ
1€Cö Ü�iŠi˜šQ 	¨Q¡Ñ 0Ð0Ñ1°3²qÐ:J¸IÈ¹NÐ:JÐ7JÑ3KÐLÐRSÑTˆà€Jr-   c                 ó  • [        U[        5      (       a  X4n[        R                  " US   [        R                  S9US   U-  -  U-  n[        R                  " US   [        R                  S9US   U-  -  U-  n[        R
                  " Xv5      n[        R                  " USS9nUR                  SSUS   US   /5      n[        X5      n	U(       a2  US:”  a,  [        R                  " [        R                  " X0/5      U	/SS9n	U	$ )aŒ  
Creates 2D sinusoidal positional embeddings.

Args:
    embed_dim (`int`):
        The embedding dimension.
    grid_size (`int`):
        The size of the grid height and width.
    cls_token (`bool`, defaults to `False`):
        Whether or not to add a classification token.
    extra_tokens (`int`, defaults to `0`):
        The number of extra tokens to add.
    interpolation_scale (`float`, defaults to `1.0`):
        The scale of the interpolation.

Returns:
    pos_embed (`np.ndarray`):
        Shape is either `[grid_size * grid_size, embed_dim]` if not using cls_token, or `[1 + grid_size*grid_size,
        embed_dim]` if using cls_token
r   r\   r   r]   r   )rD   rE   r6   r   r    rF   rG   rH   ro   ra   rk   )
r/   re   rf   rg   rh   ri   rO   rP   rQ   rU   s
             r+   rj   rj   s  sê   € ô. �)œS×!Ñ!ØÐ*ˆ	ä�YŠY�y ‘|¬2¯:©:Ñ6¸)ÀA¹,ÈÑ:RÑSÐViÑi€FÜ�YŠY�y ‘|¬2¯:©:Ñ6¸)ÀA¹,ÈÑ:RÑSÐViÑi€FÜ�;Š;�vÓ&€DÜ�8Š8�D˜qÑ!€Dà�<‰<˜˜A˜y¨™|¨Y°q©\Ð:Ó;€DÜ4°YÓE€IÞ�\ AÓ%Ü—N’N¤B§H¢H¨lÐ-FÓ$GÈÐ#SÐZ[Ñ\ˆ	ØÐr-   c                 ó¢   • U S-  S:w  a  [        S5      e[        U S-  US   5      n[        U S-  US   5      n[        R                  " X#/SS9nU$ )a'  
This function generates 2D sinusoidal positional embeddings from a grid.

Args:
    embed_dim (`int`): The embedding dimension.
    grid (`np.ndarray`): Grid of positions with shape `(H * W,)`.

Returns:
    `np.ndarray`: The 2D sinusoidal positional embeddings with shape `(H * W, embed_dim)`
r   r   rn   r   r]   )rC   rv   r6   ra   )r/   rQ   rp   rq   r*   s        r+   ro   ro   ™  s]   € ð �1�}˜ÓÜÐ;Ó<Ð<ô 1°¸a±ÀÀaÁÓI€EÜ0°¸a±ÀÀaÁÓI€Eä
�.Š.˜%˜¨aÑ
0€CØ€Jr-   c                 ól  • U S-  S:w  a  [        S5      e[        R                  " U S-  [        R                  S9nX S-  -  nSSU-  -  nUR	                  S5      n[        R
                  " S	X5      n[        R                  " U5      n[        R                  " U5      n[        R                  " XE/S
S9nU$ )a  
This function generates 1D positional embeddings from a grid.

Args:
    embed_dim (`int`): The embedding dimension `D`
    pos (`numpy.ndarray`): 1D tensor of positions with shape `(M,)`

Returns:
    `numpy.ndarray`: Sinusoidal positional embeddings of shape `(M, D)`.
r   r   rn   r\   rt   r.   ru   r   zm,d->mdr   r]   )	rC   r6   r   rw   rH   Úeinsumr$   r%   ra   )r/   rs   ry   rz   r{   r|   r*   s          r+   rv   rv   ¯  s�   € ð �1�}˜ÓÜÐ;Ó<Ð<ä�IŠI�i 1‘n¬B¯J©JÑ7€EØ	˜‰_Ñ€EØ�%˜‘,Ñ€Eà
�+‰+�b‹/€CÜ
�)Š)�I˜sÓ
*€Cä�fŠf�S‹k€GÜ�fŠf�S‹k€Gä
�.Š.˜'Ð+°!Ñ
4€CØ€Jr-   c                   óR   ^ • \ rS rSrSr           SU 4S jjrS rS rSrU =r	$ )Ú
PatchEmbediË  a•  
2D Image to Patch Embedding with support for SD3 cropping.

Args:
    height (`int`, defaults to `224`): The height of the image.
    width (`int`, defaults to `224`): The width of the image.
    patch_size (`int`, defaults to `16`): The size of the patches.
    in_channels (`int`, defaults to `3`): The number of input channels.
    embed_dim (`int`, defaults to `768`): The output dimension of the embedding.
    layer_norm (`bool`, defaults to `False`): Whether or not to use layer normalization.
    flatten (`bool`, defaults to `True`): Whether or not to flatten the output.
    bias (`bool`, defaults to `True`): Whether or not to use bias.
    interpolation_scale (`float`, defaults to `1`): The scale of the interpolation.
    pos_embed_type (`str`, defaults to `"sincos"`): The type of positional embedding.
    pos_embed_max_size (`int`, defaults to `None`): The maximum size of the positional embedding.
c                 óV  >• [         TU ]  5         X-  X#-  -  nXpl        X`l        X°l        [
        R                  " XEX34X8S9U l        U(       a  [
        R                  " USSS9U l	        OS U l	        X0l
        X-  X#-  sU l        U l        X-  U l        X�l        U(       a  UnO[        US-  5      nU
c  S U l        g U
S:X  a[  [#        UUU R                  U R                  SS9nU(       a  S	OSnU R%                  S
UR'                  5       R)                  S5      US9  g [+        SU
 35      e)N©Úkernel_sizeÚstrideÚbiasFg�íµ ÷Æ°>)Úelementwise_affineÚepsç      à?Úsincosr>   )ri   rh   r4   TrU   r   ©Ú
persistentzUnsupported pos_embed_type: )ÚsuperÚ__init__ÚflattenÚ
layer_normÚpos_embed_max_sizer   ÚConv2dÚprojÚ	LayerNormÚnormÚ
patch_sizeÚheightÚwidthri   rh   rE   rU   rl   Úregister_bufferr"   Ú	unsqueezerC   )Úselfr˜   r™   r—   Úin_channelsr/   r‘   r�   r‡   rh   Úpos_embed_typer’   Únum_patchesre   rU   r�   Ú	__class__s                   €r+   r�   ÚPatchEmbed.__init__Ý  s.  ø€ ô 	‰ÑÔàÑ+°Ñ0CÑDˆØŒØ$ŒØ"4Ôä—I’IØ°Ð0HÐQ[ñ
ˆŒ	ö ÜŸš YÀ5ÈdÑSˆD�IàˆDŒIà$ŒØ"(Ñ"6¸Ñ8KÐˆŒ�T”ZØÑ-ˆŒØ#6Ô ö Ø*‰Iä˜K¨Ñ,Ó-ˆIàÑ!Ø!ˆD�NØ˜xÓ'Ü/ØØØŸ.™.Ø$(×$<Ñ$<Ø ñˆIö "4™¸ˆJØ× Ñ  ¨i¯o©oÓ.?×.IÑ.IÈ!Ó.LÐYcÐ ÒdäÐ;¸NÐ;KÐLÓMÐMr-   c                 ó0  • U R                   c  [        S5      eXR                  -  nX R                  -  nXR                   :”  a  [        SU SU R                    S35      eX R                   :”  a  [        SU SU R                    S35      eU R                   U-
  S-  nU R                   U-
  S-  nU R                  R	                  SU R                   U R                   S	5      nUSS2X3U-   2XDU-   2SS24   nUR	                  SS	UR
                  S	   5      nU$ )
z2Crops positional embeddings for SD3 compatibility.Nz.`pos_embed_max_size` must be set for cropping.zHeight (z/) cannot be greater than `pos_embed_max_size`: Ú.zWidth (r   r   r   )r’   rC   r—   rU   rH   r   )rœ   r˜   r™   ÚtopÚleftÚspatial_pos_embeds         r+   Úcropped_pos_embedÚPatchEmbed.cropped_pos_embed  s>  € à×"Ñ"Ñ*ÜÐMÓNÐNàŸ?™?Ñ*ˆØŸ™Ñ(ˆØ×+Ñ+Ó+ÜØ˜6˜(Ð"QÐRV×RiÑRiÐQjÐjkÐlóð ð ×*Ñ*Ó*ÜØ˜%˜Ð OÐPT×PgÑPgÐOhÐhiÐjóð ð ×&Ñ&¨Ñ/°AÑ5ˆØ×'Ñ'¨%Ñ/°AÑ5ˆØ ŸN™N×2Ñ2°1°d×6MÑ6MÈt×OfÑOfÐhjÓkÐØ-ªa°¸V±|Ð1CÀTÐSXÉLÐEXÒZ[Ð.[Ñ\ÐØ-×5Ñ5°a¸Ð=N×=TÑ=TÐUWÑ=XÓYÐØ Ð r-   c           	      óh  • U R                   b  UR                  SS  u  p#O7UR                  S   U R                  -  UR                  S   U R                  -  p2U R                  U5      nU R                  (       a!  UR	                  S5      R                  SS5      nU R                  (       a  U R                  U5      nU R                  c  UR                  UR                  5      $ U R                   (       a  U R                  X#5      nO�U R                  U:w  d  U R                  U:w  ad  [        U R                  R                  S   X#4U R                  U R                   UR"                  SS9nUR%                  5       R'                  S5      nOU R                  nX-   R                  UR                  5      $ )Néþÿÿÿr   r   r   r>   )r/   re   ri   rh   r   r4   r   )r’   r   r—   r”   r�   Ú	transposer‘   r–   rU   Útor   r§   r˜   r™   rl   ri   rh   r   r"   r›   )rœ   Úlatentr˜   r™   rU   s        r+   ÚforwardÚPatchEmbed.forward+  sW  € Ø×"Ñ"Ñ.Ø"ŸL™L¨¨Ð-‰MˆF�Eà"ŸL™L¨Ñ,°·±Ñ?ÀÇÁÈbÑAQÐUY×UdÑUdÑAd�EØ—‘˜6Ó"ˆØ�<�<Ø—^‘^ AÓ&×0Ñ0°°AÓ6ˆFØ�?�?Ø—Y‘Y˜vÓ&ˆFØ�>‰>Ñ!Ø—9‘9˜VŸ\™\Ó*Ð*à×"×"Ø×.Ñ.¨vÓ=‰Ià�{‰{˜fÓ$¨¯
©
°eÓ(;Ü3Ø"Ÿn™n×2Ñ2°2Ñ6Ø%˜oØ"Ÿn™nØ(,×(@Ñ(@Ø!Ÿ=™=Ø $ñ�	ð &ŸO™OÓ-×7Ñ7¸Ó:‘	à ŸN™N�	àÑ"×&Ñ& v§|¡|Ó4Ð4r-   )ri   r�   r˜   rh   r‘   r–   r—   rU   r’   r”   r™   )éà   r°   é   r9   é   FTTr   r‹   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r�   r§   r®   Ú__static_attributes__Ú__classcell__©r    s   @r+   r‚   r‚   Ë  sA   ø† ñð& ØØØØØØØØØØ÷5Nòn!÷.5ð 5r-   r‚   c                   ó6   ^ • \ rS rSrSrSU 4S jjrS rSrU =r$ )ÚLuminaPatchEmbediK  a^  
2D Image to Patch Embedding with support for Lumina-T2X

Args:
    patch_size (`int`, defaults to `2`): The size of the patches.
    in_channels (`int`, defaults to `4`): The number of input channels.
    embed_dim (`int`, defaults to `768`): The output dimension of the embedding.
    bias (`bool`, defaults to `True`): Whether or not to use bias.
c                 ón   >• [         TU ]  5         Xl        [        R                  " X-  U-  UUS9U l        g )N©Úin_featuresÚout_featuresr‡   )rŽ   r�   r—   r   ÚLinearr”   )rœ   r—   r�   r/   r‡   r    s        €r+   r�   ÚLuminaPatchEmbed.__init__V  s4   ø€ Ü‰ÑÔØ$ŒÜ—I’IØ"Ñ/°+Ñ=Ø"Øñ
ˆ�	r-   c                 ó:  • UR                  US   R                  5      nU R                  =p4UR                  5       u  pVpxXs-  X„-  p©UR	                  XVX“X¤5      R                  SSSSSS5      nUR                  S5      nU R                  U5      nUR                  SS5      n[        R                  " UR                  S   UR                  S   [        R                  UR                  S9nUUXx4/U-  USU	2SU
24   R                  SS5      R                  S5      4$ )	a‰  
Patchifies and embeds the input tensor(s).

Args:
    x (list[torch.Tensor] | torch.Tensor): The input tensor(s) to be patchified and embedded.

Returns:
    tuple[torch.Tensor, torch.Tensor, list[tuple[int, int]], torch.Tensor]: A tuple containing the patchified
    and embedded tensor(s), the mask indicating the valid patches, the original image size(s), and the
    frequency tensor(s).
r   r   r7   r   r9   é   ©r   r   N)r¬   r   r—   ÚsizeÚviewÚpermuter�   r”   r   Úonesr   Úint32r›   )rœ   ÚxÚ	freqs_cisÚpatch_heightÚpatch_widthÚ
batch_sizeÚchannelr˜   r™   Úheight_tokensÚwidth_tokensÚmasks               r+   r®   ÚLuminaPatchEmbed.forward_  s  € ð —L‘L  1¡§¡Ó-ˆ	Ø%)§_¡_Ð4ˆØ-.¯V©V«XÑ*ˆ
˜VØ&,Ñ&<¸eÑ>R�|à�F‰F�:¨À\Ó_×gÑgØˆq�!�Q˜˜1ó
ˆð �I‰I�a‹LˆØ�I‰I�a‹LˆØ�I‰I�a˜‹Oˆä�zŠz˜!Ÿ'™' !™* a§g¡g¨a¡j¼¿¹ÈAÏHÉHÑUˆð ØØˆ_Ð 
Ñ*Ø�n�}�n m | mÐ3Ñ4×<Ñ<¸QÀÓB×LÑLÈQÓOð	
ð 	
r-   )r—   r”   )r   r7   r²   T©	r³   r´   rµ   r¶   r·   r�   r®   r¸   r¹   rº   s   @r+   r¼   r¼   K  s   ø† ñ÷
÷
ð 
r-   r¼   c            !       ó   ^ • \ rS rSr               SS\S\S-  S\S\S\S\S	\S
\S\S\S\S\S\S\S\SS4 U 4S jjjr SS
\S	\S\S\R                  S-  S\R                  4
S jjrS\R                  S\R                  4S jrSrU =r$ )ÚCogVideoXPatchEmbedi�  Nr—   Úpatch_size_tr�   r/   Útext_embed_dimr‡   Úsample_widthÚsample_heightÚsample_framesÚtemporal_compression_ratioÚmax_text_seq_lengthr2   r3   Úuse_positional_embeddingsÚ!use_learned_positional_embeddingsr   c                 óØ  >• [         TU ]  5         Xl        X l        X@l        X€l        Xpl        X�l        X l        X°l	        XÀl
        XÐl        Xàl        Xðl        Uc  [        R                  " X4X4XS9U l        O$[        R"                  " X1-  U-  U-  U5      U l        [        R"                  " XT5      U l        U(       d  U(       a&  UnU R'                  X‡U	5      nU R)                  SUUS9  g g )Nr„   Úpos_embeddingrŒ   )rŽ   r�   r—   rØ   r/   rÛ   rÚ   rÜ   rÝ   rÞ   r2   r3   rß   rà   r   r“   r”   rÁ   Ú	text_projÚ_get_positional_embeddingsrš   )rœ   r—   rØ   r�   r/   rÙ   r‡   rÚ   rÛ   rÜ   rÝ   rÞ   r2   r3   rß   rà   r�   râ   r    s                     €r+   r�   ÚCogVideoXPatchEmbed.__init__‚  sâ   ø€ ô$ 	‰ÑÔà$ŒØ(ÔØ"ŒØ*ÔØ(ÔØ*ÔØ*DÔ'Ø#6Ô Ø+FÔ(Ø,HÔ)Ø)BÔ&Ø1RÔ.àÑäŸ	š	Ø°ZÐ4LÐU_ñˆD�Iô
 Ÿ	š	 +Ñ":¸ZÑ"GÈ,Ñ"VÐXaÓbˆDŒIäŸš >Ó=ˆŒæ$Ö(IØ:ˆJØ ×;Ñ;¸MÐYfÓgˆMØ× Ñ  °-ÈJÐ ÒWð )Jr-   r   c           
      ó¤  • XR                   -  nX R                   -  nUS-
  U R                  -  S-   nXV-  U-  n[        U R                  Xe4UU R                  U R
                  USS9n	U	R                  SS5      n	U	R                  SU R                  U-   U R                  SS9n
U
R                  S S 2U R                  S 24   R                  U	5        U
$ )Nr   r>   )r   r4   r   F©Úrequires_grad)r—   rÝ   rV   r/   r2   r3   r�   Ú	new_zerosrÞ   ÚdataÚcopy_)rœ   rÛ   rÚ   rÜ   r   Úpost_patch_heightÚpost_patch_widthÚpost_time_compression_framesrŸ   râ   Újoint_pos_embeddings              r+   rä   Ú.CogVideoXPatchEmbed._get_positional_embeddings³  sì   € ð *¯_©_Ñ<ÐØ'¯?©?Ñ:ÐØ(5¸Ñ(9¸d×>]Ñ>]Ñ']Ð`aÑ'aÐ$Ø'Ñ:Ð=YÑYˆä/Ø�N‰NØÐ1Ø(Ø×,Ñ,Ø×-Ñ-ØØñ
ˆð &×-Ñ-¨a°Ó3ˆØ+×5Ñ5Øˆt×'Ñ'¨+Ñ5°t·~±~ÐUZð 6ð 
Ðð 	× Ñ ¢ D×$<Ñ$<Ñ$>Ð!>Ñ?×EÑEÀmÔTà"Ð"r-   Útext_embedsÚimage_embedsc           
      óŽ  • U R                  U5      nUR                  u  p4pVnU R                  cx  UR                  SXVU5      nU R	                  U5      nUR
                  " X4/UR                  SS Q76 nUR                  S5      R                  SS5      nUR                  SS5      nO“U R                  nU R                  n	UR                  SSSSS5      nUR                  X4U	-  X–U-  X‡U-  X…5      nUR                  SSSSS	SSS
5      R                  SS	5      R                  SS5      nU R	                  U5      n[        R                  " X/SS9R                  5       n
U R                  (       d  U R                  (       aÅ  U R                  (       a+  U R                  U:w  d  U R                   U:w  a  [#        S5      eUS-
  U R$                  -  S-   nU R                   U:w  d   U R                  U:w  d  U R&                  U:w  a  U R)                  XgXºR*                  S9nOU R,                  nUR/                  U
R0                  S9nX¬-   n
U
$ )a  
Args:
    text_embeds (`torch.Tensor`):
        Input text embeddings. Expected shape: (batch_size, seq_length, embedding_dim).
    image_embeds (`torch.Tensor`):
        Input image embeddings. Expected shape: (batch_size, num_frames, channels, height, width).
Nr   r   r9   r   r   r7   rÄ   é   é   r   a   It is currently not possible to generate videos at a different resolution that the defaults. This should only be the case with 'THUDM/CogVideoX-5b-I2V'.If you think this is incorrect, please open an issue at https://github.com/huggingface/diffusers/issues.©r   r\   )rã   r   rØ   rH   r”   rÇ   r�   r«   r—   rÈ   r   r#   Ú
contiguousrß   rà   rÚ   rÛ   rC   rÝ   rÜ   rä   r   râ   r¬   r   )rœ   rñ   rò   rÏ   Ú
num_framesÚchannelsr˜   r™   ÚpÚp_tÚembedsÚpre_time_compression_framesrâ   s                r+   r®   ÚCogVideoXPatchEmbed.forwardÌ  sK  € ð —n‘n [Ó1ˆà:F×:LÑ:LÑ7ˆ
 °%à×ÑÑ$Ø'×/Ñ/°°HÀeÓLˆLØŸ9™9 \Ó2ˆLØ'×,Ò,¨ZÐ]Àl×FXÑFXÐYZÐY[ÐF\Ò]ˆLØ'×/Ñ/°Ó2×<Ñ<¸QÀÓBˆLØ'×/Ñ/°°1Ó5‰Là—‘ˆAØ×#Ñ#ˆCà'×/Ñ/°°1°a¸¸AÓ>ˆLØ'×/Ñ/Ø¨#Ñ-¨s¸a±KÀÈQÁJÐPQóˆLð (×/Ñ/°°1°a¸¸A¸qÀ!ÀQÓG×OÑOÐPQÐSTÓU×]Ñ]Ð^_ÐabÓcˆLØŸ9™9 \Ó2ˆLä—’ØÐ'¨Qñ
ç
‰*‹,ð 	ð ×)×)¨T×-S×-SØ×5×5¸4×;LÑ;LÐPUÓ;UÐY]×YkÑYkÐouÓYuÜ ðóð ð
 ,6¸©>¸T×=\Ñ=\Ñ*\Ð_`Ñ*`Ð'ð ×"Ñ" fÓ,Ø×$Ñ$¨Ó-Ø×%Ñ%Ð)DÓDà $× ?Ñ ?ØÐ#>Ç}Á}ð !@ð !‘ð !%× 2Ñ 2�à)×,Ñ,°6·<±<Ð,Ð@ˆMØÑ+ˆFàˆr-   )r/   rÞ   r—   rØ   r”   rÜ   rÛ   rÚ   r2   rÝ   r3   rã   rà   rß   )r   Nr±   i€  é   TéZ   é<   é1   r7   éâ   g      þ?r.   TT©N)r³   r´   rµ   r¶   rE   Úboolr"   r�   r   r   ÚTensorrä   r®   r¸   r¹   rº   s   @r+   r×   r×   �  sU  ø† ð Ø#'ØØØ"ØØØØØ*+Ø#&Ø-2Ø.1Ø*.Ø26ñ!/Xàð/Xð ˜D‘jð/Xð ð	/Xð
 ð/Xð ð/Xð ð/Xð ð/Xð ð/Xð ð/Xð %(ð/Xð !ð/Xð &+ð/Xð ',ð/Xð $(ð/Xð  ,0ð!/Xð" 
÷#/Xð /Xðd hlñ#Ø ð#Ø03ð#ØDGð#ØQV×Q]ÑQ]Ð`dÑQdð#à	�‰õ#ð28 5§<¡<ð 8¸u¿|¹|÷ 8ò 8r-   r×   c                   ó    ^ • \ rS rSr     SS\S\S\S\S\4
U 4S jjjrS\R                  S	\R                  S
\R                  4S jrSr	U =r
$ )ÚCogView3PlusPatchEmbedi  r�   Úhidden_sizer—   Útext_hidden_sizer’   c                 óN  >• [         TU ]  5         Xl        X l        X0l        X@l        XPl        [        R                  " XS-  -  U5      U l	        [        R                  " XB5      U l
        [        X%USS9nUR                  XUU5      nU R                  SUR                  5       SS9  g )Nr   r>   )ri   r4   rU   FrŒ   )rŽ   r�   r�   r	  r—   r
  r’   r   rÁ   r”   rã   rl   rH   rš   r"   )rœ   r�   r	  r—   r
  r’   rU   r    s          €r+   r�   ÚCogView3PlusPatchEmbed.__init__  s�   ø€ ô 	‰ÑÔØ&ÔØ&ÔØ$ŒØ 0ÔØ"4Ôä—I’I˜k¸©MÑ9¸;ÓGˆŒ	ô ŸšÐ#3ÓAˆŒä+ØÐ7IÐW[ñ
ˆ	ð ×%Ñ%Ð&8ÈkÓZˆ	Ø×Ñ˜[¨)¯/©/Ó*;ÈÐÒNr-   Úhidden_statesÚencoder_hidden_statesr   c                 óZ  • UR                   u  p4pVXPR                  -  S:w  d  X`R                  -  S:w  a  [        S5      eXPR                  -  nX`R                  -  nUR                  X4XPR                  X`R                  5      nUR	                  SSSSSS5      R                  5       nUR                  X5U-  X@R                  -  U R                  -  5      nU R                  U5      nU R                  U5      n[        R                  " X!/SS9nUR                   S   nU R                  S U2S U24   R                  XV-  S	5      n[        R                  " XpR                  4UR                  UR                  S
9n	[        R                  " X˜/SS9S   n
X-   R!                  UR                  5      $ )Nr   z0Height and width must be divisible by patch sizer   r7   r   r9   rÄ   r   r   rÅ   )N.)r   r—   rC   rÇ   rÈ   r÷   r”   rã   r   r#   rU   rH   rk   r	  r   r   r¬   )rœ   r  r  rÏ   rÐ   r˜   r™   Útext_lengthÚimage_pos_embedÚtext_pos_embedrU   s              r+   r®   ÚCogView3PlusPatchEmbed.forward"  s�  € Ø-:×-@Ñ-@Ñ*ˆ
˜Và—O‘OÑ# qÓ(¨E·O±OÑ,CÀqÓ,HÜÐOÓPÐPàŸ?™?Ñ*ˆØŸ™Ñ(ˆØ%×*Ñ*¨:ÀÏÉÐY^×`oÑ`oÓpˆØ%×-Ñ-¨a°°A°q¸!¸QÓ?×JÑJÓLˆØ%×*Ñ*¨:À±~Àw×Q`ÑQ`ÑG`Ðcg×crÑcrÑGrÓsˆð Ÿ	™	 -Ó0ˆØ $§¡Ð/DÓ EÐÜŸ	š	Ð#8Ð"HÈaÑPˆð ,×1Ñ1°!Ñ4ˆàŸ.™.¨¨&¨°&°5°&¨Ñ9×AÑAÀ&Á.ÐRTÓUˆÜŸšØ×*Ñ*Ð+°?×3HÑ3HÐQ`×QgÑQgñ
ˆô —I’I˜~Ð?ÀQÑGÈ	ÑRˆ	àÑ)×-Ñ-¨m×.AÑ.AÓBÐBr-   )r	  r�   r—   r’   r”   r
  rã   )r±   i 
  r   rÿ   é€   ©r³   r´   rµ   r¶   rE   r�   r   r  r®   r¸   r¹   rº   s   @r+   r  r    sˆ   ø† ð ØØØ $Ø"%ñOàðOð ðOð ð	Oð
 ðOð  ÷Oð Oð4C U§\¡\ð CÈ%Ï,É,ð CÐ[`×[gÑ[g÷ Cò Cr-   r  TÚthetaÚuse_realÚ	grid_typeÚmax_sizec	                 óÞ  ^^^ • USLa  [        S5      eUS:X  aÇ  Uu  pšUu  mm [        R                  " U	S   U
S   TS-
  -  T-  TU[        R                  S9n[        R                  " U	S   U
S   T S-
  -  T -  T U[        R                  S9n[        R                  " TU[        R                  S9n[        R                  " STTS-
  -  T-  TU[        R                  S9nO…US:X  at  Uu  pïUu  mm [        R                  " Xè[        R                  S9n[        R                  " Xø[        R                  S9n[        R                  " TU[        R                  S9nO[        S5      eU S	-  nU S
-  S-  nU S
-  S-  n[        UXÔSS9n[        UX´SS9n[        UXÄSS9nUU U4S jnUu  nnUu  nnUu  nnUS:X  a  UST UST nnUST UST nnUST  UST  nnU" UUU5      nU" UUU5      nUU4$ )a‹  
RoPE for video tokens with 3D structure.

Args:
embed_dim: (`int`):
    The embedding dimension size, corresponding to hidden_size_head.
crops_coords (`tuple[int]`):
    The top-left and bottom-right coordinates of the crop.
grid_size (`tuple[int]`):
    The grid size of the spatial positional embedding (height, width).
temporal_size (`int`):
    The size of the temporal dimension.
theta (`float`):
    Scaling factor for frequency computation.
grid_type (`str`):
    Whether to use "linspace" or "slice" to compute grids.

Returns:
    `torch.Tensor`: positional embedding with shape `(temporal_size * grid_size[0] * grid_size[1], embed_dim/2)`.
TzJ `use_real = False` is not currently supported for get_3d_rotary_pos_embedÚlinspacer   r   r:   Úslicez%Invalid value passed for `grid_type`.r7   é   r9   )r  r  c                 ó   >• U S S 2S S S S 24   R                  STTS5      n US S S 2S S S 24   R                  TSTS5      nUS S S S 2S S 24   R                  TTSS5      n[        R                  " XU/SS9nUR                  TT-  T-  S5      nU$ )Nr   r   )Úexpandr   r#   rÇ   )Úfreqs_tÚfreqs_hÚfreqs_wÚfreqsÚgrid_size_hÚgrid_size_wr1   s       €€€r+   Úcombine_time_height_widthÚ:get_3d_rotary_pos_embed.<locals>.combine_time_height_widthƒ  s¼   ø€ Øš!˜T 4ªÐ*Ñ+×2Ñ2Ø�˜[¨"ó
ˆð ˜$¢ 4ªÐ*Ñ+×2Ñ2Ø˜2˜{¨Bó
ˆð ˜$ ¢aªÐ*Ñ+×2Ñ2Ø˜;¨¨Bó
ˆô —	’	Ø˜wÐ'¨Rñ
ˆð —
‘
Ø˜KÑ'¨+Ñ5°ró
ˆð ˆr-   N)rC   r   r  r    r   Úget_1d_rotary_pos_embed)!r/   Úcrops_coordsre   r1   r  r  r  r  r   r   ÚstoprO   rP   rS   Úmax_hÚmax_wÚdim_tÚdim_hÚdim_wr   r!  r"  r&  Út_cosÚt_sinÚh_cosÚh_sinÚw_cosÚw_sinr%   r$   r$  r%  s!      `                           @@r+   Úget_3d_rotary_pos_embedr6  ?  s6  ú€ ð> �tÒÜÐeÓfÐfà�JÓØ"‰ˆØ#,Ñ ˆ�[Ü—’Ø�!‰H�d˜1‘g ¨q¡Ñ1°KÑ?ÀÐU[Ôch×cpÑcpñ
ˆô —’Ø�!‰H�d˜1‘g ¨q¡Ñ1°KÑ?ÀÐU[Ôch×cpÑcpñ
ˆô —’˜m°FÄ%Ç-Á-ÑPˆÜ—’Øˆ} °Ñ 1Ñ2°]ÑBÀMÐZ`Ôhm×huÑhuñ
‰ð 
�gÓ	Ø‰ˆØ#,Ñ ˆ�[Ü—’˜e¼%¿-¹-ÑHˆÜ—’˜e¼%¿-¹-ÑHˆÜ—’˜m°FÄ%Ç-Á-ÑP‰äÐ@ÓAÐAð ˜‰N€EØ˜‰N˜QÑ€EØ˜‰N˜QÑ€Eô & e¨VÈ4ÑP€Gä% e¨VÈ4ÑP€GÜ% e¨VÈ4ÑP€G÷ð& �L€Eˆ5Ø�L€Eˆ5Ø�L€Eˆ5à�GÓØ˜^˜mÐ,¨e°N°]Ð.CˆuˆØ˜\˜kÐ*¨E°,°;Ð,?ˆuˆØ˜\˜kÐ*¨E°,°;Ð,?ˆuˆá
# E¨5°%Ó
8€CÙ
# E¨5°%Ó
8€CØ�ˆ8€Or-   rh   c                 óÎ  • Uu  pxUu  pšUu  p¼n[         R                  " SX3S-
  -  U-  X6[         R                  S9n[         R                  " US   US   U	S-
  -  U	-  X–[         R                  S9n[         R                  " US   US   U
S-
  -  U
-  X¦[         R                  S9nU S-  nU S-  nU S-  n[        UXë-  USSS9n[        UXü-  USSS9n[        UUU-  USSS9nUUUXïU4$ )Nr   r   r:   r9   TF)r  r  Úrepeat_interleave_real)r   r  r    r(  )r/   r)  re   r1   rh   r  r   r   r*  r$  r%  Úinterpolation_scale_tÚinterpolation_scale_hÚinterpolation_scale_wrS   rO   rP   r-  r.  r/  r   r!  r"  s                          r+   Úget_3d_rotary_pos_embed_allegror<  ¤  s:  € ð �K€EØ(Ñ€KØJ]ÑGÐÐ2GÜ�^Š^Ø	ˆ=¨AÑ-Ñ.°Ñ>ÀÔdi×dqÑdqñ€Fô �^Š^Øˆa‰�$�q‘'˜[¨1™_Ñ-°Ñ;¸[Ô_d×_lÑ_lñ€Fô �^Š^Øˆa‰�$�q‘'˜[¨1™_Ñ-°Ñ;¸[Ô_d×_lÑ_lñ€Fð
 ˜‰N€EØ˜‰N€EØ˜‰N€Eô &ØˆvÑ-°UÀTÐbgñ€Gô &ØˆvÑ-°UÀTÐbgñ€Gô &ØˆvÐ-Ñ-°UÀTÐbgñ€Gð �G˜W f°fÐ<Ð<r-   c                 óò  • US:X  a  Sn[        SSUSS9  [        U UUUS9$ Uu  px[        R                  " US   US   US   S	-
  -  US   -  US   U[        R                  S
9n	[        R                  " US	   US	   US	   S	-
  -  US	   -  US	   U[        R                  S
9n
[        R
                  " X©SS9n[        R                  " USS9nUR                  SS	/UR                  S	S Q5      n[        XUS9nU$ )a/  
RoPE for image tokens with 2d structure.

Args:
embed_dim: (`int`):
    The embedding dimension size
crops_coords (`tuple[int]`)
    The top-left and bottom-right coordinates of the crop.
grid_size (`tuple[int]`):
    The grid size of the positional embedding.
use_real (`bool`):
    If True, return real part and imaginary part separately. Otherwise, return complex numbers.
device: (`torch.device`, **optional**):
    The device used to create tensors.

Returns:
    `torch.Tensor`: positional embedding with shape `( grid_size * grid_size, embed_dim/2)`.
r6   rd   rX   rY   FrZ   )r/   r)  re   r  r   r   r:   r;   r<   r   r   N©r  )
r   Ú_get_2d_rotary_pos_embed_npr   r  r    rF   rG   rH   r   Ú!get_2d_rotary_pos_embed_from_grid)r/   r)  re   r  r   r4   rb   r   r*  rO   rP   rQ   rU   s                r+   Úget_2d_rotary_pos_embedrA  Ï  s,  € ð* �dÓðCð 	ô
 	Ð% xÐ1DÐTYÒZÜ*ØØ%ØØñ	
ð 	
ð �K€Eä�^Š^Øˆa‰�$�q‘'˜Y q™\¨AÑ-Ñ.°¸1±Ñ=¸yÈ¹|ÐTZÔbg×boÑboñ€Fô �^Š^Øˆa‰�$�q‘'˜Y q™\¨AÑ-Ñ.°¸1±Ñ=¸yÈ¹|ÐTZÔbg×boÑboñ€Fô �>Š>˜&°4Ñ8€DÜ�;Š;�t Ñ#€Dà�<‰<˜˜AÐ/ §
¡
¨1¨2 Ð/Ó0€DÜ1°)ÈHÑU€IØÐr-   c                 óx  • Uu  pE[         R                  " US   US   US   S[         R                  S9n[         R                  " US   US   US   S[         R                  S9n[         R                  " Xv5      n[         R                  " USS9nUR                  SS/UR                  SS Q5      n[        XUS9n	U	$ )	aà  
RoPE for image tokens with 2d structure.

Args:
embed_dim: (`int`):
    The embedding dimension size
crops_coords (`tuple[int]`)
    The top-left and bottom-right coordinates of the crop.
grid_size (`tuple[int]`):
    The grid size of the positional embedding.
use_real (`bool`):
    If True, return real part and imaginary part separately. Otherwise, return complex numbers.

Returns:
    `torch.Tensor`: positional embedding with shape `( grid_size * grid_size, embed_dim/2)`.
r   F)Úendpointr   r   r]   r   Nr>  )r6   r  r    rF   rG   rH   r   r@  )
r/   r)  re   r  r   r*  rO   rP   rQ   rU   s
             r+   r?  r?    s¯   € ð" �K€EÜ�[Š[˜˜q™ 4¨¡7¨I°a©LÀ5ÔPR×PZÑPZÑ[€FÜ�[Š[˜˜q™ 4¨¡7¨I°a©LÀ5ÔPR×PZÑPZÑ[€FÜ�;Š;�vÓ&€DÜ�8Š8�D˜qÑ!€Dà�<‰<˜˜AÐ/ §
¡
¨1¨2 Ð/Ó0€DÜ1°)ÈHÑU€IØÐr-   c                 óP  • U S-  S:X  d   e[        U S-  US   R                  S5      US9n[        U S-  US   R                  S5      US9nU(       a=  [        R                  " US   US   /SS9n[        R                  " US   US   /SS9nXV4$ [        R                  " X4/SS9nU$ )a‘  
Get 2D RoPE from grid.

Args:
embed_dim: (`int`):
    The embedding dimension size, corresponding to hidden_size_head.
grid (`np.ndarray`):
    The grid of the positional embedding.
use_real (`bool`):
    If True, return real part and imaginary part separately. Otherwise, return complex numbers.

Returns:
    `torch.Tensor`: positional embedding with shape `( grid_size * grid_size, embed_dim/2)`.
r7   r   r   r   r>  r   r   )r(  rH   r   r#   )r/   rQ   r  rp   rq   r%   r$   r*   s           r+   r@  r@    s»   € ð �q‰=˜AÓÐÐô $Ø�Q‰˜˜Q™Ÿ™¨Ó+°hñ€Eô $Ø�Q‰˜˜Q™Ÿ™¨Ó+°hñ€Eö Ü�iŠi˜˜q™ 5¨¡8Ð,°!Ñ4ˆÜ�iŠi˜˜q™ 5¨¡8Ð,°!Ñ4ˆØˆxˆä�iŠi˜˜¨AÑ.ˆØˆ
r-   c                 ó@  • U S-  S:X  d   e[        U S-  XUS9n[        U S-  X#US9nUR                  USU S-  S5      R                  SUSS5      nUR                  SX S-  S5      R                  USSS5      n[        R                  " XV/SS9R                  S5      nU$ )a;  
Get 2D RoPE from grid.

Args:
embed_dim: (`int`):
    The embedding dimension size, corresponding to hidden_size_head.
grid (`np.ndarray`):
    The grid of the positional embedding.
linear_factor (`float`):
    The linear factor of the positional embedding, which is used to scale the positional embedding in the linear
    layer.
ntk_factor (`float`):
    The ntk factor of the positional embedding, which is used to scale the positional embedding in the ntk layer.

Returns:
    `torch.Tensor`: positional embedding with shape `( grid_size * grid_size, embed_dim/2)`.
r7   r   r   )Úlinear_factorÚ
ntk_factorr   r   r   )r(  rÇ   r`   r   r#   r�   )r/   Úlen_hÚlen_wrF  rG  rp   rq   r*   s           r+   Úget_2d_rotary_pos_embed_luminarJ  ?  s¶   € ð$ �q‰=˜AÓÐÐä#Ø�Q‰˜Àzñ€Eô $Ø�Q‰˜Àzñ€Eð �J‰J�u˜a ¨a¡°Ó3×:Ñ:¸1¸eÀQÈÓJ€EØ�J‰J�q˜%¨a¡°Ó3×:Ñ:¸5À!ÀQÈÓJ€Eä
�)Š)�U�N¨Ñ
+×
3Ñ
3°AÓ
6€CØ€Jr-   ç     ˆÃ@r   rs   c           
      óN  • U S-  S:X  d   e[        U[        5      (       a  [        R                  " U5      n[        U[        R
                  5      (       a  [        R                  " U5      nX%-  nSU[        R                  " SU SXqR                  S9U -  -  -  U-  n[        R                  " X5      nUR                  R                  S:H  n	U	(       a  UR                  5       nU(       a„  U(       a}  UR                  5       R                  SSUR                  S   S-  S9R                  5       n
UR                  5       R                  SSUR                  S   S-  S9R                  5       nX«4$ U(       a…  [        R                  " UR                  5       UR                  5       /SS	9R                  5       n
[        R                  " UR                  5       UR                  5       /SS	9R                  5       nX«4$ [        R                   " [        R"                  " U5      U5      nU$ )
aµ  
Precompute the frequency tensor for complex exponentials (cis) with given dimensions.

This function calculates a frequency tensor with complex exponentials using the given dimension 'dim' and the end
index 'end'. The 'theta' parameter scales the frequencies. The returned tensor contains complex values in complex64
data type.

Args:
    dim (`int`): Dimension of the frequency tensor.
    pos (`np.ndarray` or `int`): Position indices for the frequency tensor. [S] or scalar
    theta (`float`, *optional*, defaults to 10000.0):
        Scaling factor for frequency computation. Defaults to 10000.0.
    use_real (`bool`, *optional*):
        If True, return real part and imaginary part separately. Otherwise, return complex numbers.
    linear_factor (`float`, *optional*, defaults to 1.0):
        Scaling factor for the context extrapolation. Defaults to 1.0.
    ntk_factor (`float`, *optional*, defaults to 1.0):
        Scaling factor for the NTK-Aware RoPE. Defaults to 1.0.
    repeat_interleave_real (`bool`, *optional*, defaults to `True`):
        If `True` and `use_real`, real part and imaginary part are each interleaved with themselves to reach `dim`.
        Otherwise, they are concateanted with themselves.
    freqs_dtype (`torch.float32` or `torch.float64`, *optional*, defaults to `torch.float32`):
        the dtype of the frequency tensor.
Returns:
    `torch.Tensor`: Precomputed frequency tensor with complex exponentials. [S, D/2]
r   r   r.   rÅ   Únpur   r@   r   r   )rD   rE   r   r   r6   ÚndarrayÚ
from_numpyr   rx   Útyper"   r%   rK   r   r$   r#   ÚpolarÚ	ones_like)r   rs   r  r  rF  rG  r8  Úfreqs_dtyper#  Úis_npuÚ	freqs_cosÚ	freqs_sinrÌ   s                r+   r(  r(  `  s¶  € ðH �‰7�a‹<Ðˆ<ä�#”s×ÑÜ�lŠl˜3ÓˆÜ�#”r—z‘z×"Ñ"Ü×Ò˜sÓ#ˆàÑ€EàˆuœŸš a¨¨a°{Ï:É:ÑVÐY\Ñ\Ñ]Ñ^ÐanÑnð 
ô �KŠK˜Ó#€EØ�\‰\×Ñ %Ñ'€FÞØ—‘“ˆÞÖ*à—I‘I“K×1Ñ1°!¸ÈÏÉÐTUÉÐYZÑHZÐ1Ð[×aÑaÓcˆ	Ø—I‘I“K×1Ñ1°!¸ÈÏÉÐTUÉÐYZÑHZÐ1Ð[×aÑaÓcˆ	ØÐ#Ð#Þ	ä—I’I˜uŸy™y›{¨E¯I©I«KÐ8¸bÑA×GÑGÓIˆ	Ü—I’I˜uŸy™y›{¨E¯I©I«KÐ8¸bÑA×GÑGÓIˆ	ØÐ#Ð#ô —K’K¤§¢°Ó 6¸Ó>ˆ	ØÐr-   rË   rÌ   Úuse_real_unbind_dimÚsequence_dimc                 óN  • U(       Ga�  Uu  pVUS:X  a  USSSS2SS24   nUSSSS2SS24   nO0US:X  a  USSS2SSS24   nUSSS2SSS24   nO[        SU S35      eUR                  U R                  5      UR                  U R                  5      peUS:X  a\  U R                  " / U R                  SS QSPSP76 R                  S5      u  px[        R                  " U* U/SS9R                  S5      n	ObUS	:X  aM  U R                  " / U R                  SS QSPSP76 R                  S	5      u  px[        R                  " U* U/SS9n	O[        S
U S35      eU R                  5       U-  U	R                  5       U-  -   R                  U R                  5      n
U
$ [        R                  " U R                  5       R                  " / U R                  SS QSPSP76 5      n	UR                  S5      n[        R                  " X‘-  5      R                  S5      nUR                  U 5      $ )a  
Apply rotary embeddings to input tensors using the given frequency tensor. This function applies rotary embeddings
to the given query or key 'x' tensors using the provided frequency tensor 'freqs_cis'. The input tensors are
reshaped as complex numbers, and the frequency tensor is reshaped for broadcasting compatibility. The resulting
tensors contain rotary embeddings and are returned as real tensors.

Args:
    x (`torch.Tensor`):
        Query or key tensor to apply rotary embeddings. [B, H, S, D] xk (torch.Tensor): Key tensor to apply
    freqs_cis (`tuple[torch.Tensor]`): Precomputed frequency tensor for complex exponentials. ([S, D], [S, D],)

Returns:
    tuple[torch.Tensor, torch.Tensor]: tuple of modified query tensor and key tensor with rotary embeddings.
r   Nr   z`sequence_dim=z` but should be 1 or 2.r   r   r9   rª   z`use_real_unbind_dim=z` but should be -1 or -2.)rC   r¬   r   rH   r   Úunbindr   rG   r�   r#   r"   r   Úview_as_complexr›   Úview_as_realÚtype_as)rË   rÌ   r  rW  rX  r%   r$   Úx_realÚx_imagÚ	x_rotatedrz   Úx_outs               r+   Úapply_rotary_embrb  £  s  € ÷* Ø‰ˆØ˜1ÓØ�d˜D¢!¢QÐ&Ñ'ˆCØ�d˜D¢!¢QÐ&Ñ'‰CØ˜QÓØ�dšA˜t¢QÐ&Ñ'ˆCØ�dšA˜t¢QÐ&Ñ'‰Cä˜~¨l¨^Ð;RÐSÓTÐTà—6‘6˜!Ÿ(™(Ó# S§V¡V¨A¯H©HÓ%5ˆSà "Ó$àŸYšYÐ<¨¯©°°¨Ð<°bÐ<¸!Ò<×CÑCÀBÓG‰NˆFÜŸš f W¨fÐ$5¸2Ñ>×FÑFÀqÓI‰IØ  BÓ&àŸYšYÐ<¨¯©°°¨Ð<°aÐ<¸Ò<×CÑCÀBÓG‰NˆFÜŸ	š	 F 7¨FÐ"3¸Ñ<‰IäÐ4Ð5HÐ4IÐIbÐcÓdÐdà�w‰w‹y˜3‰ §¡Ó!2°SÑ!8Ñ8×<Ñ<¸Q¿W¹WÓEˆàˆ
ô ×)Ò)¨!¯'©'«)×*;Ò*;Ð*Q¸Q¿W¹WÀSÀb¸\Ð*QÈ2Ð*QÈqÒ*QÓRˆ	Ø×'Ñ'¨Ó*ˆ	Ü×"Ò" 9Ñ#8Ó9×AÑAÀ!ÓDˆà�}‰}˜QÓÐr-   c                 óÀ   • S nUu  u  pEu  pgu  p‰U R                  SSS9u  p«nU" X¢S   XE5      n
U" X²S   Xg5      nU" XÂS   X‰5      n[        R                  " X«U/SS9n U $ )Nc                 ó   • [         R                  " X5      S S 2S S S 2S S 24   n[         R                  " X5      S S 2S S S 2S S 24   nU SS U R                  S   S-  24   U SU R                  S   S-  S 24   pT[        R                  " U* U4SS9nU R                  5       U-  UR                  5       U-  -   R                  U R                  5      $ )N.r   r   r   )ÚFÚ	embeddingr   r   r#   r"   r¬   r   )Útokensrs   r%   r$   Úx1Úx2Útokens_rotateds          r+   Úapply_1d_ropeÚ/apply_rotary_emb_allegro.<locals>.apply_1d_ropeÞ  sÃ   € Ü�kŠk˜#Ó#¢A tªQ² MÑ2ˆÜ�kŠk˜#Ó#¢A tªQ² MÑ2ˆØ˜Ð4˜vŸ|™|¨BÑ/°1Ñ4Ð4Ð4Ñ5°v¸cÀ6Ç<Á<ÐPRÑCSÐWXÑCXÑCZÐ>ZÑ7[ˆBÜŸš R C¨ 9°"Ñ5ˆØ—‘“ Ñ$ ~×';Ñ';Ó'=ÀÑ'CÑC×GÑGÈÏÉÓUÐUr-   r9   r   r   r   r   r   )Úchunkr   r#   )rË   rÌ   Ú	positionsrk  r0  r1  r2  r3  r4  r5  ÚtÚhÚws                r+   Úapply_rotary_emb_allegrorr  Ü  s{   € òVð 6?Ñ2�N€U‘N�U¡N UØ�g‰g�a˜RˆgÐ �G€Aˆ!Ù�a 1™ uÓ4€AÙ�a 1™ uÓ4€AÙ�a 1™ uÓ4€AÜ�	Š	�1˜�) Ñ$€AØ€Hr-   c                   ó^   ^ • \ rS rSr     SS\S\S\S\S\S-  4
U 4S jjjrSS	 jrS
rU =r	$ )ÚTimestepEmbeddingiî  Nr�   Útime_embed_dimÚact_fnÚout_dimÚpost_act_fnc                 óB  >• [         T	U ]  5         [        R                  " XU5      U l        Ub  [        R                  " XaSS9U l        OS U l        [        U5      U l        Ub  UnOUn[        R                  " X(U5      U l        Uc  S U l	        g [        U5      U l	        g )NF©r‡   )
rŽ   r�   r   rÁ   Úlinear_1Ú	cond_projr	   ÚactÚlinear_2Úpost_act)
rœ   r�   ru  rv  rw  rx  Úcond_proj_dimÚsample_proj_biasÚtime_embed_dim_outr    s
            €r+   r�   ÚTimestepEmbedding.__init__ï  sŒ   ø€ ô 	‰ÑÔäŸ	š	 +Ð?OÓPˆŒàÑ$ÜŸYšY }ÈÑNˆD�Nà!ˆDŒNä! &Ó)ˆŒàÑØ!(Ñà!/ÐÜŸ	š	 .ÐFVÓWˆŒàÑØ ˆD�Mä*¨;Ó7ˆD�Mr-   c                 óî   • Ub  XR                  U5      -   nU R                  U5      nU R                  b  U R                  U5      nU R                  U5      nU R                  b  U R	                  U5      nU$ r  )r|  r{  r}  r~  r  )rœ   ÚsampleÚ	conditions      r+   r®   ÚTimestepEmbedding.forward  sj   € ØÑ ØŸn™n¨YÓ7Ñ7ˆFØ—‘˜vÓ&ˆà�8‰8ÑØ—X‘X˜fÓ%ˆFà—‘˜vÓ&ˆà�=‰=Ñ$Ø—]‘] 6Ó*ˆFØˆr-   )r}  r|  r{  r~  r  )ÚsiluNNNTr  )
r³   r´   rµ   r¶   rE   Ústrr�   r®   r¸   r¹   rº   s   @r+   rt  rt  î  s]   ø† ð
 ØØ"&ØØñ8àð8ð ð8ð ð	8ð
 ð8ð ˜4‘Z÷8ð 8÷@ò r-   rt  c            	       óz   ^ • \ rS rSrSS\S\S\S\4U 4S jjjrS\R                  S\R                  4S	 jr
S
rU =r$ )Ú	Timestepsi  Únum_channelsr   r   r   c                 óR   >• [         TU ]  5         Xl        X l        X0l        X@l        g r  )rŽ   r�   rŒ  r   r   r   )rœ   rŒ  r   r   r   r    s        €r+   r�   ÚTimesteps.__init__  s%   ø€ Ü‰ÑÔØ(ÔØ.ÔØ$8Ô!Ø�
r-   r   r   c                 óp   • [        UU R                  U R                  U R                  U R                  S9nU$ )N)r   r   r   )r,   rŒ  r   r   r   )rœ   r   Út_embs      r+   r®   ÚTimesteps.forward&  s8   € Ü&ØØ×ÑØ ×0Ñ0Ø!%×!:Ñ!:Ø—*‘*ñ
ˆð ˆr-   )r   r   rŒ  r   )r   )r³   r´   rµ   r¶   rE   r  r"   r�   r   r  r®   r¸   r¹   rº   s   @r+   r‹  r‹    sK   ø† ñ Sð ¸4ð ÐW\ð Ðeh÷ ð ð §¡ð °%·,±,÷ ò r-   r‹  c                   óD   ^ • \ rS rSrSr SS\S\4U 4S jjjrS rSr	U =r
$ )	ÚGaussianFourierProjectioni1  z-Gaussian Fourier embeddings for noise levels.Úembedding_sizer   c                 ó8  >• [         TU ]  5         [        R                  " [        R
                  " U5      U-  SS9U l        X@l        XPl        U(       aG  U ?[        R                  " [        R
                  " U5      U-  SS9U l	        U R                  U l        U ?	g g )NFrç   )
rŽ   r�   r   Ú	Parameterr   ÚrandnÚweightr   r   ÚW)rœ   r”  r   Úset_W_to_weightr   r   r    s         €r+   r�   Ú"GaussianFourierProjection.__init__4  sz   ø€ ô 	‰ÑÔÜ—l’l¤5§;¢;¨~Ó#>ÀÑ#FÐV[Ñ\ˆŒØŒØ.Ôæà�Ü—\’\¤%§+¢+¨nÓ"=ÀÑ"EÐUZÑ[ˆDŒFØŸ&™&ˆDŒKØ‘ð r-   c                 óØ  • U R                   (       a  [        R                   " U5      nUS S 2S 4   U R                  S S S 24   -  S-  [        R                  -  nU R
                  (       aA  [        R                  " [        R                  " U5      [        R                  " U5      /SS9nU$ [        R                  " [        R                  " U5      [        R                  " U5      /SS9nU$ )Nr   r   r   )	r   r   r˜  r6   Úpir   r#   r%   r$   )rœ   rË   Úx_projrz   s       r+   r®   Ú!GaussianFourierProjection.forwardC  s¨   € Ø�8�8Ü—	’	˜!“ˆAà’1�d�7‘˜dŸk™k¨$²¨'Ñ2Ñ2°QÑ6¼¿¹Ñ>ˆà××Ü—)’)œUŸYšY vÓ.´·	²	¸&Ó0AÐBÈÑKˆCð ˆ
ô —)’)œUŸYšY vÓ.´·	²	¸&Ó0AÐBÈÑKˆCØˆ
r-   )r™  r   r   r˜  )é   r.   TTF)r³   r´   rµ   r¶   r·   rE   r"   r�   r®   r¸   r¹   rº   s   @r+   r“  r“  1  s1   ø† Ù7ð nsñØ!ðØ05÷ð ÷
ð 
r-   r“  c                   óB   ^ • \ rS rSrSrSS\S\4U 4S jjjrS rSrU =r	$ )	ÚSinusoidalPositionalEmbeddingiP  aC  Apply positional information to a sequence of embeddings.

Takes in a sequence of embeddings with shape (batch_size, seq_length, embed_dim) and adds positional embeddings to
them

Args:
    embed_dim: (int): Dimension of the positional embedding.
    max_seq_length: Maximum sequence length to apply positional embeddings

r/   Úmax_seq_lengthc                 óØ  >• [         TU ]  5         [        R                  " U5      R	                  S5      n[        R
                  " [        R                  " SUS5      [        R                  " S5      * U-  -  5      n[        R                  " SX!5      n[        R                  " X4-  5      USS S 2SS S24'   [        R                  " X4-  5      USS S 2SS S24'   U R                  SU5        g )Nr   r   r   rK  Úpe)rŽ   r�   r   r   r›   r!   r   r   rk   r$   r%   rš   )rœ   r/   r£  ÚpositionÚdiv_termr¥  r    s         €r+   r�   Ú&SinusoidalPositionalEmbedding.__init__\  s»   ø€ Ü‰ÑÔÜ—<’< Ó/×9Ñ9¸!Ó<ˆÜ—9’9œUŸ\š\¨!¨Y¸Ó:¼t¿xºxÈÓ?PÐ>PÐS\Ñ>\Ñ]Ó^ˆÜ�[Š[˜˜NÓ6ˆÜŸš 8Ñ#6Ó7ˆˆ1Ša���A�ˆ:‰ÜŸš 8Ñ#6Ó7ˆˆ1Ša���A�ˆ:‰Ø×Ñ˜T 2Õ&r-   c                 óR   • UR                   u  p#nXR                  S S 2S U24   -   nU$ r  )r   r¥  )rœ   rË   Ú_Ú
seq_lengths       r+   r®   Ú%SinusoidalPositionalEmbedding.forwarde  s.   € ØŸ7™7Ñˆ�qØ—‘š˜;˜J˜;˜Ñ'Ñ'ˆØˆr-   © )é    ©
r³   r´   rµ   r¶   r·   rE   r�   r®   r¸   r¹   rº   s   @r+   r¢  r¢  P  s*   ø† ñ	ñ' #ð '°s÷ 'ð '÷ð r-   r¢  c                   óF   ^ • \ rS rSrSrS\S\S\S\4U 4S jjrS rS	rU =r	$ )
ÚImagePositionalEmbeddingsik  aU  
Converts latent image classes into vector embeddings. Sums the vector embeddings with positional embeddings for the
height and width of the latent space.

For more details, see figure 10 of the dall-e paper: https://huggingface.co/papers/2102.12092

For VQ-diffusion:

Output vector embeddings are used as input for the transformer.

Note that the vector embeddings for the transformer are different than the vector embeddings from the VQVAE.

Args:
    num_embed (`int`):
        Number of embeddings for the latent pixels embeddings.
    height (`int`):
        Height of the latent image i.e. the number of height embeddings.
    width (`int`):
        Width of the latent image i.e. the number of width embeddings.
    embed_dim (`int`):
        Dimension of the produced vector embeddings. Used for the latent pixel, height, and width embeddings.
Ú	num_embedr˜   r™   r/   c                 ó6  >• [         TU ]  5         X l        X0l        Xl        X@l        [        R                  " U R                  U5      U l        [        R                  " U R                  U5      U l	        [        R                  " U R                  U5      U l
        g r  )rŽ   r�   r˜   r™   r²  r/   r   Ú	Embeddingr*   Ú
height_embÚ	width_emb)rœ   r²  r˜   r™   r/   r    s        €r+   r�   Ú"ImagePositionalEmbeddings.__init__ƒ  sf   ø€ ô 	‰ÑÔàŒØŒ
Ø"ŒØ"Œä—<’< §¡°	Ó:ˆŒÜŸ,š, t§{¡{°IÓ>ˆŒÜŸš d§j¡j°)Ó<ˆ�r-   c                 óJ  • U R                  U5      nU R                  [        R                  " U R                  UR
                  S9R                  SU R                  5      5      nUR                  S5      nU R                  [        R                  " U R                  UR
                  S9R                  SU R                  5      5      nUR                  S5      nX4-   nUR                  SU R                  U R                  -  S5      nX%S S 2S UR                  S   2S S 24   -   nU$ )Nrö   r   r   r   )r*   rµ  r   r   r˜   r   rÇ   r›   r¶  r™   r   )rœ   Úindexr*   rµ  r¶  Úpos_embs         r+   r®   Ú!ImagePositionalEmbeddings.forward•  sí   € Ø�h‰h�u‹oˆà—_‘_¤U§\¢\°$·+±+ÀeÇlÁlÑ%S×%XÑ%XÐYZÐ\`×\gÑ\gÓ%hÓiˆ
ð  ×)Ñ)¨!Ó,ˆ
à—N‘N¤5§<¢<°·
±
À5Ç<Á<Ñ#P×#UÑ#UÐVWÐY]×YcÑYcÓ#dÓeˆ	ð ×'Ñ'¨Ó*ˆ	àÑ(ˆð —,‘,˜q $§+¡+°·
±
Ñ":¸BÓ?ˆàšA˜~ §¡¨1¡˜~ªqÐ0Ñ1Ñ1ˆàˆ
r-   )r*   r/   r˜   rµ  r²  r™   r¶  r¯  rº   s   @r+   r±  r±  k  s=   ø† ñð.=àð=ð ð=ð ð	=ð
 ÷=÷$ð r-   r±  c                   ó\   ^ • \ rS rSrSrU 4S jrSS jrSS\R                  4S jjr	Sr
U =r$ )	ÚLabelEmbeddingi¬  a  
Embeds class labels into vector representations. Also handles label dropout for classifier-free guidance.

Args:
    num_classes (`int`): The number of classes.
    hidden_size (`int`): The size of the vector embeddings.
    dropout_prob (`float`): The probability of dropping a label.
c                 ó€   >• [         TU ]  5         US:„  n[        R                  " X-   U5      U l        Xl        X0l        g ©Nr   )rŽ   r�   r   r´  Úembedding_tableÚnum_classesÚdropout_prob)rœ   rÁ  r	  rÂ  Úuse_cfg_embeddingr    s        €r+   r�   ÚLabelEmbedding.__init__¶  s;   ø€ Ü‰ÑÔØ(¨1Ñ,ÐÜ!Ÿ|š|¨KÑ,KÈ[ÓYˆÔØ&ÔØ(Õr-   c                 óô   • Uc:  [         R                  " UR                  S   UR                  S9U R                  :  nO[         R
                  " US:H  5      n[         R                  " X0R                  U5      nU$ )z2
Drops labels to enable classifier-free guidance.
r   rö   r   )r   Úrandr   r   rÂ  ÚtensorÚwhererÁ  )rœ   ÚlabelsÚforce_drop_idsÚdrop_idss       r+   Ú
token_dropÚLabelEmbedding.token_drop½  s_   € ð Ñ!Ü—z’z &§,¡,¨q¡/¸&¿-¹-ÑHÈ4×K\ÑK\Ñ\‰Hä—|’| N°aÑ$7Ó8ˆHÜ—’˜X×'7Ñ'7¸Ó@ˆØˆr-   rÉ  c                 óž   • U R                   S:„  nU R                  (       a  U(       d  Ub  U R                  X5      nU R                  U5      nU$ r¿  )rÂ  ÚtrainingrÌ  rÀ  )rœ   rÉ  rÊ  Úuse_dropoutÚ
embeddingss        r+   r®   ÚLabelEmbedding.forwardÈ  sD   € Ø×'Ñ'¨!Ñ+ˆØ�M�Mžk¨~Ñ/IØ—_‘_ VÓ<ˆFØ×)Ñ)¨&Ó1ˆ
ØÐr-   )rÂ  rÀ  rÁ  r  )r³   r´   rµ   r¶   r·   r�   rÌ  r   Ú
LongTensorr®   r¸   r¹   rº   s   @r+   r½  r½  ¬  s)   ø† ñõ)ô	ñ˜e×.Ñ.÷ ó r-   r½  c            	       ó‚   ^ • \ rS rSr    SS\S\S\S\4U 4S jjjrS\R                  S\R                  4S	 jrS
r	U =r
$ )ÚTextImageProjectioniÐ  rÙ   Úimage_embed_dimÚcross_attention_dimÚnum_image_text_embedsc                 ó´   >• [         TU ]  5         X@l        [        R                  " X R                  U-  5      U l        [        R                  " X5      U l        g r  )rŽ   r�   rØ  r   rÁ   rò   rã   )rœ   rÙ   rÖ  r×  rØ  r    s        €r+   r�   ÚTextImageProjection.__init__Ñ  sC   ø€ ô 	‰ÑÔà%:Ô"ÜŸIšI o×7QÑ7QÐTgÑ7gÓhˆÔÜŸš >ÓGˆ�r-   rñ   rò   c                 óÈ   • UR                   S   nU R                  U5      nUR                  X0R                  S5      nU R	                  U5      n[
        R                  " XA/SS9$ )Nr   r   r   r   )r   rò   rH   rØ  rã   r   r#   )rœ   rñ   rò   rÏ   Úimage_text_embedss        r+   r®   ÚTextImageProjection.forwardÞ  sd   € Ø ×&Ñ& qÑ)ˆ
ð !×-Ñ-¨lÓ;ÐØ-×5Ñ5°j×B\ÑB\Ð^`ÓaÐð —n‘n [Ó1ˆä�yŠyÐ+Ð9¸qÑAÐAr-   )rò   rØ  rã   )é   r²   r²   é
   r  rº   s   @r+   rÕ  rÕ  Ð  sk   ø† ð #Ø"Ø#&Ø%'ñHàðHð ðHð !ð	Hð
  #÷Hð Hð
B 5§<¡<ð 
B¸u¿|¹|÷ 
Bò 
Br-   rÕ  c                   ód   ^ • \ rS rSr   S	S\S\S\4U 4S jjjrS\R                  4S jrSr	U =r
$ )
ÚImageProjectionië  rÖ  r×  rØ  c                 ó´   >• [         TU ]  5         X0l        [        R                  " XR                  U-  5      U l        [        R                  " U5      U l        g r  )rŽ   r�   rØ  r   rÁ   rò   r•   r–   )rœ   rÖ  r×  rØ  r    s       €r+   r�   ÚImageProjection.__init__ì  sD   ø€ ô 	‰ÑÔà%:Ô"ÜŸIšI o×7QÑ7QÐTgÑ7gÓhˆÔÜ—L’LÐ!4Ó5ˆ�	r-   rò   c                 óú   • UR                   S   nU R                  UR                  U R                  R                  R                  5      5      nUR                  X R                  S5      nU R                  U5      nU$ )Nr   r   )r   rò   r¬   r˜  r   rH   rØ  r–   )rœ   rò   rÏ   s      r+   r®   ÚImageProjection.forwardø  sl   € Ø!×'Ñ'¨Ñ*ˆ
ð ×(Ñ(¨¯©¸×9JÑ9J×9QÑ9Q×9WÑ9WÓ)XÓYˆØ#×+Ñ+¨J×8RÑ8RÐTVÓWˆØ—y‘y Ó.ˆØÐr-   )rò   r–   rØ  )r²   r²   r®  r  rº   s   @r+   rá  rá  ë  sI   ø† ð  #Ø#&Ø%'ñ	
6àð
6ð !ð
6ð  #÷	
6ð 
6ð E§L¡L÷ ò r-   rá  c                   óN   ^ • \ rS rSrSU 4S jjrS\R                  4S jrSrU =r	$ )ÚIPAdapterFullImageProjectioni  c                 ó~   >• [         TU ]  5         SSKJn  U" XSSS9U l        [
        R                  " U5      U l        g ©Nr   ©ÚFeedForwardÚgelu)ÚmultÚactivation_fn)rŽ   r�   Ú	attentionrë  Úffr   r•   r–   )rœ   rÖ  r×  rë  r    s       €r+   r�   Ú%IPAdapterFullImageProjection.__init__  s3   ø€ Ü‰ÑÔÝ*á˜oÈÐZ`ÑaˆŒÜ—L’LÐ!4Ó5ˆ�	r-   rò   c                 óB   • U R                  U R                  U5      5      $ r  )r–   rð  )rœ   rò   s     r+   r®   Ú$IPAdapterFullImageProjection.forward
  s   € Ø�y‰y˜Ÿ™ Ó.Ó/Ð/r-   )rð  r–   )rÞ  rÞ  ©
r³   r´   rµ   r¶   r�   r   r  r®   r¸   r¹   rº   s   @r+   rç  rç    s   ø† ÷6ð0 E§L¡L÷ 0ò 0r-   rç  c                   óN   ^ • \ rS rSrSU 4S jjrS\R                  4S jrSrU =r	$ )ÚIPAdapterFaceIDImageProjectioni  c                 óœ   >• [         TU ]  5         SSKJn  X@l        X l        U" XU-  USS9U l        [        R                  " U5      U l	        g ré  )
rŽ   r�   rï  rë  Ú
num_tokensr×  rð  r   r•   r–   )rœ   rÖ  r×  rí  rø  rë  r    s         €r+   r�   Ú'IPAdapterFaceIDImageProjection.__init__  sD   ø€ Ü‰ÑÔÝ*à$ŒØ#6Ô Ù˜oÀZÑ/OÐVZÐjpÑqˆŒÜ—L’LÐ!4Ó5ˆ�	r-   rò   c                 ó”   • U R                  U5      nUR                  SU R                  U R                  5      nU R	                  U5      $ )Nr   )rð  rH   rø  r×  r–   )rœ   rò   rË   s      r+   r®   Ú&IPAdapterFaceIDImageProjection.forward  s:   € Ø�G‰G�LÓ!ˆØ�I‰I�b˜$Ÿ/™/¨4×+CÑ+CÓDˆØ�y‰y˜‹|Ðr-   )r×  rð  r–   rø  )rÞ  rÞ  r   r   rô  rº   s   @r+   rö  rö    s   ø† ÷6ð E§L¡L÷ ò r-   rö  c                   ó6   ^ • \ rS rSrSU 4S jjrSS jrSrU =r$ )ÚCombinedTimestepLabelEmbeddingsi  c                 ó‚   >• [         TU ]  5         [        SSSS9U l        [	        SUS9U l        [        XU5      U l        g )Nr   Tr   ©rŒ  r   r   ©r�   ru  )rŽ   r�   r‹  Ú	time_projrt  Útimestep_embedderr½  Úclass_embedder)rœ   rÁ  r   Úclass_dropout_probr    s       €r+   r�   Ú(CombinedTimestepLabelEmbeddings.__init__  s?   ø€ Ü‰ÑÔä"°ÀTÐ`aÑbˆŒÜ!2¸sÐS`Ñ!aˆÔÜ,¨[ÐI[Ó\ˆÕr-   c                 óŽ   • U R                  U5      nU R                  UR                  US95      nU R                  U5      nXR-   nU$ ©Nr\   )r  r  r¬   r  )rœ   ÚtimestepÚclass_labelsÚhidden_dtypeÚtimesteps_projÚtimesteps_embÚconditionings          r+   r®   Ú'CombinedTimestepLabelEmbeddings.forward&  sL   € ØŸ™¨Ó1ˆØ×.Ñ.¨~×/@Ñ/@À|Ð/@Ð/TÓUˆà×*Ñ*¨<Ó8ˆà$Ñ3ˆàÐr-   )r  r  r  )gš™™™™™¹?r  ©r³   r´   rµ   r¶   r�   r®   r¸   r¹   rº   s   @r+   rý  rý    s   ø† ÷]÷ò r-   rý  c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )Ú"CombinedTimestepTextProjEmbeddingsi1  c                 ó~   >• [         TU ]  5         [        SSSS9U l        [	        SUS9U l        [        X!SS9U l        g ©Nr   Tr   rÿ  r   rˆ  ©rv  )rŽ   r�   r‹  r  rt  r  ÚPixArtAlphaTextProjectionÚtext_embedder©rœ   r   Úpooled_projection_dimr    s      €r+   r�   Ú+CombinedTimestepTextProjEmbeddings.__init__2  s@   ø€ Ü‰ÑÔä"°ÀTÐ`aÑbˆŒÜ!2¸sÐS`Ñ!aˆÔÜ6Ð7LÐdjÑkˆÕr-   c                 ó¢   • U R                  U5      nU R                  UR                  UR                  S95      nU R	                  U5      nXE-   nU$ r  )r  r  r¬   r   r  )rœ   r  Úpooled_projectionr  r  Úpooled_projectionsr  s          r+   r®   Ú*CombinedTimestepTextProjEmbeddings.forward9  sU   € ØŸ™¨Ó1ˆØ×.Ñ.¨~×/@Ñ/@ÐGX×G^ÑG^Ð/@Ð/_Ó`ˆà!×/Ñ/Ð0AÓBÐà$Ñ9ˆàÐr-   )r  r  r  r  rº   s   @r+   r  r  1  s   ø† õl÷ð r-   r  c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )Ú*CombinedTimestepGuidanceTextProjEmbeddingsiD  c                 óœ   >• [         TU ]  5         [        SSSS9U l        [	        SUS9U l        [	        SUS9U l        [        X!SS9U l        g r  )	rŽ   r�   r‹  r  rt  r  Úguidance_embedderr  r  r  s      €r+   r�   Ú3CombinedTimestepGuidanceTextProjEmbeddings.__init__E  sP   ø€ Ü‰ÑÔä"°ÀTÐ`aÑbˆŒÜ!2¸sÐS`Ñ!aˆÔÜ!2¸sÐS`Ñ!aˆÔÜ6Ð7LÐdjÑkˆÕr-   c                 ó  • U R                  U5      nU R                  UR                  UR                  S95      nU R                  U5      nU R	                  UR                  UR                  S95      nXW-   nU R                  U5      n	X‰-   n
U
$ r  )r  r  r¬   r   r!  r  )rœ   r  Úguidancer  r  r  Úguidance_projÚguidance_embÚtime_guidance_embr  r  s              r+   r®   Ú2CombinedTimestepGuidanceTextProjEmbeddings.forwardM  s‘   € ØŸ™¨Ó1ˆØ×.Ñ.¨~×/@Ñ/@ÐGX×G^ÑG^Ð/@Ð/_Ó`ˆàŸ™ xÓ0ˆØ×-Ñ-¨m×.>Ñ.>ÐEV×E\ÑE\Ð.>Ð.]Ó^ˆà)Ñ8Ðà!×/Ñ/Ð0AÓBÐØ(Ñ=ˆàÐr-   )r!  r  r  r  r  rº   s   @r+   r  r  D  s   ø† õl÷ð r-   r  c                   óÚ   ^ • \ rS rSrSS\S\S\S\4U 4S jjjrS\R                  S\R                  S	\R                  S
\R                  S\R                  S\R                  4S jr	Sr
U =r$ )Ú&CogView3CombinedTimestepSizeEmbeddingsi\  r   Úcondition_dimr  Útimesteps_dimc                 óœ   >• [         TU ]  5         [        USSS9U l        [        USSS9U l        [        XAS9U l        [        X1SS9U l        g )NTr   rÿ  r   rˆ  r  )	rŽ   r�   r‹  r  Úcondition_projrt  r  r  Úcondition_embedder)rœ   r   r+  r  r,  r    s        €r+   r�   Ú/CogView3CombinedTimestepSizeEmbeddings.__init__]  sP   ø€ Ü‰ÑÔä"°ÈtÐjkÑlˆŒÜ'°]ÐTXÐopÑqˆÔÜ!2¸}Ñ!kˆÔÜ";Ð<QÐioÑ"pˆÕr-   r  Úoriginal_sizeÚtarget_sizeÚcrop_coordsr
  r   c                 óJ  • U R                  U5      nU R                  UR                  5       5      R                  UR	                  S5      S5      nU R                  UR                  5       5      R                  UR	                  S5      S5      nU R                  UR                  5       5      R                  UR	                  S5      S5      n	[
        R                  " XxU	/SS9n
U R                  UR                  US95      nU R                  U
R                  US95      nX¼-   nU$ )Nr   r   r   r   r\   )
r  r.  r�   rÇ   rÆ   r   r#   r  r¬   r/  )rœ   r  r1  r2  r3  r
  r  Úoriginal_size_projÚcrop_coords_projÚtarget_size_projr.  r  Úcondition_embr  s                 r+   r®   Ú.CogView3CombinedTimestepSizeEmbeddings.forwarde  s  € ð Ÿ™¨Ó1ˆà!×0Ñ0°×1FÑ1FÓ1HÓI×NÑNÈ}×OaÑOaÐbcÓOdÐfhÓiÐØ×.Ñ.¨{×/BÑ/BÓ/DÓE×JÑJÈ;×K[ÑK[Ð\]ÓK^Ð`bÓcÐØ×.Ñ.¨{×/BÑ/BÓ/DÓE×JÑJÈ;×K[ÑK[Ð\]ÓK^Ð`bÓcÐô ŸšÐ$6ÐJZÐ#[ÐabÑcˆà×.Ñ.¨~×/@Ñ/@À|Ð/@Ð/TÓUˆØ×/Ñ/°×0AÑ0AÈÐ0AÐ0UÓVˆà$Ñ4ˆØÐr-   )r/  r.  r  r  )r   )r³   r´   rµ   r¶   rE   r�   r   r  r   r®   r¸   r¹   rº   s   @r+   r*  r*  \  s�   ø† ñq cð q¸#ð qÐVYð qÐjm÷ qð qðà—,‘,ðð —|‘|ðð —\‘\ð	ð
 —\‘\ðð —k‘kðð 
�‰÷ò r-   r*  c            	       óF   ^ • \ rS rSrS	S\S\S\S\4U 4S jjjrS rSrU =r$ )
ÚHunyuanDiTAttentionPooli}  Úspacial_dimr/   Ú	num_headsÚ
output_dimc                 óŠ  >• [         TU ]  5         [        R                  " [        R
                  " US-   U5      US-  -  5      U l        [        R                  " X"5      U l        [        R                  " X"5      U l	        [        R                  " X"5      U l
        [        R                  " X$=(       d    U5      U l        X0l        g ©Nr   rŠ   )rŽ   r�   r   r–  r   r—  Úpositional_embeddingrÁ   Úk_projÚq_projÚv_projÚc_projr=  )rœ   r<  r/   r=  r>  r    s        €r+   r�   Ú HunyuanDiTAttentionPool.__init__€  s„   ø€ Ü‰ÑÔÜ$&§L¢L´·²¸[È1¹_ÈiÓ1XÐ[dÐfiÑ[iÑ1iÓ$jˆÔ!Ü—i’i 	Ó5ˆŒÜ—i’i 	Ó5ˆŒÜ—i’i 	Ó5ˆŒÜ—i’i 	×+B¸ÓCˆŒØ"�r-   c           
      óJ  • UR                  SSS5      n[        R                  " UR                  SSS9U/SS9nXR                  S S 2S S S 24   R                  UR                  5      -   n[        R                  " S0 SUS S _SU_S	U_S
UR                  S   _SU R                  _SU R                  R                  _SU R                  R                  _SU R                  R                  _SS _S[        R                  " U R                  R                  U R                  R                  U R                  R                  /5      _SS _SS _SS_SS_SU R                   R                  _SU R                   R                  _SS_SU R"                  _SS_6u  pUR%                  S5      $ )Nr   r   r   T©r   Úkeepdimr   ÚqueryÚkeyÚvalueÚembed_dim_to_checkr   r=  Úq_proj_weightÚk_proj_weightÚv_proj_weightÚin_proj_weightÚin_proj_biasÚbias_kÚbias_vÚadd_zero_attnFÚ	dropout_pÚout_proj_weightÚout_proj_biasÚuse_separate_proj_weightrÏ  Úneed_weightsr­  )rÈ   r   r#   ÚmeanrA  r¬   r   re  Úmulti_head_attention_forwardr   r=  rC  r˜  rB  rD  r‡   rE  rÏ  Úsqueeze)rœ   rË   rª  s      r+   r®   ÚHunyuanDiTAttentionPool.forward‰  s°  € Ø�I‰I�a˜˜AÓˆÜ�IŠI�q—v‘v !¨T�vÐ2°AÐ6¸AÑ>ˆØ×)Ñ)ª!¨T²1¨*Ñ5×8Ñ8¸¿¹ÓAÑAˆÜ×-Ò-ò 
Ø�B�Q‘%ð
áð
ñ ð
ð  !Ÿw™w rš{ð	
ð
 —n’nð
ð Ÿ+™+×,Ò,ð
ð Ÿ+™+×,Ò,ð
ð Ÿ+™+×,Ò,ð
ñ  ð
ô Ÿš D§K¡K×$4Ñ$4°d·k±k×6FÑ6FÈÏÉ×HXÑHXÐ#YÔZð
ñ ð
ñ ð
ñ  ð
ñ ð
ð !ŸK™K×.Ò.ð
ð  Ÿ+™+×*Ò*ð!
ñ" &*ð#
ð$ —]’]ð%
ñ& ð'
‰ˆð* �y‰y˜‹|Ðr-   )rE  rB  r=  rA  rC  rD  r  ©	r³   r´   rµ   r¶   rE   r�   r®   r¸   r¹   rº   s   @r+   r;  r;  }  s4   ø† ñ# Cð #°Cð #ÀCð #ÐUX÷ #ð #÷ð r-   r;  c                   ó>   ^ • \ rS rSr    SU 4S jjrSS jrSrU =r$ )Ú-HunyuanCombinedTimestepTextSizeStyleEmbeddingi¥  c                 ó0  >• [         TU ]  5         [        SSSS9U l        [	        SUS9U l        [        SSSS9U l        [        X4SUS9U l        XPl	        U(       a%  [        R                  " SU5      U l        S	U-   U-   nOUn[        UUS
-  USS9U l        g )Nr   Tr   rÿ  r   r  )r=  r>  r   é   r7   Ú	silu_fp32)r¿   r	  rÀ   rv  )rŽ   r�   r‹  r  rt  r  Ú	size_projr;  ÚpoolerÚ"use_style_cond_and_image_meta_sizer   r´  Ústyle_embedderr  Úextra_embedder)rœ   r   r  Úseq_lenr×  rg  Úextra_in_dimr    s          €r+   r�   Ú6HunyuanCombinedTimestepTextSizeStyleEmbedding.__init__¦  s¨   ø€ ô 	‰ÑÔä"°ÀTÐ`aÑbˆŒÜ!2¸sÐS`Ñ!aˆÔä"°ÀTÐ`aÑbˆŒä-Ø°AÐBWñ
ˆŒð
 3UÔ/Þ-Ü"$§,¢,¨q°-Ó"@ˆDÔØ" ]Ñ2Ð5JÑJ‰Là0ˆLä7Ø$Ø%¨Ñ)Ø&Øñ	
ˆÕr-   c                 óÎ  • U R                  U5      nU R                  UR                  US95      nU R                  U5      nU R                  (       aj  U R                  UR                  S5      5      nUR                  US9nUR                  SS5      nU R                  U5      n	[        R                  " XƒU	/SS9n
O[        R                  " U/SS9n
XpR                  U
5      -   nU$ )Nr\   r   rc  r   r   )r  r  r¬   rf  rg  re  rÇ   rh  r   r#   ri  )rœ   r  r  Úimage_meta_sizeÚstyler
  r  r  r  Ústyle_embeddingÚ
extra_condr  s               r+   r®   Ú5HunyuanCombinedTimestepTextSizeStyleEmbedding.forwardÈ  sß   € ØŸ™¨Ó1ˆØ×.Ñ.¨~×/@Ñ/@À|Ð/@Ð/TÓUˆð "Ÿ[™[Ð)>Ó?Ðà×2×2à"Ÿn™n¨_×-AÑ-AÀ"Ó-EÓFˆOØ-×0Ñ0°|Ð0ÐDˆOØ-×2Ñ2°2°wÓ?ˆOð #×1Ñ1°%Ó8ˆOô ŸšÐ$6ÈÐ#YÐ_`Ña‰JäŸšÐ$6Ð#7¸QÑ?ˆJà$×':Ñ':¸:Ó'FÑFˆàÐr-   )ri  rf  re  rh  r  r  rg  )rÞ  r   é   Tr  r  rº   s   @r+   ra  ra  ¥  s!   ø† ð #ØØ Ø+/÷ 
÷Dò r-   ra  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú&LuminaCombinedTimestepCaptionEmbeddingiâ  c           	      óæ   >• [         TU ]  5         [        USSS9U l        [	        X1S9U l        [        R                  " [        R                  " U5      [        R                  " UUSS95      U l
        g )NTç        rÿ  r   rz  )rŽ   r�   r‹  r  rt  r  r   Ú
Sequentialr•   rÁ   Úcaption_embedder)rœ   r	  r×  Úfrequency_embedding_sizer    s       €r+   r�   Ú/LuminaCombinedTimestepCaptionEmbedding.__init__ã  se   ø€ Ü‰ÑÔÜ"Ø1À4Ð^añ
ˆŒô "3Ð?WÑ!tˆÔä "§¢Ü�LŠLÐ,Ó-Ü�IŠIØ#ØØñó!
ˆÕr-   c                 óD  • U R                  U5      nU R                  UR                  UR                  S95      nUR	                  5       R                  S5      nX&-  R                  SS9UR                  SS9-  nUR                  U5      nU R                  U5      nXX-   n	U	$ ©Nr\   r   r   r   )r  r  r¬   r   r"   r›   Úsumry  )
rœ   r  Úcaption_featÚcaption_maskÚ	time_freqÚ
time_embedÚcaption_mask_floatÚcaption_feats_poolÚcaption_embedr  s
             r+   r®   Ú.LuminaCombinedTimestepCaptionEmbedding.forwardô  s©   € à—N‘N 8Ó,ˆ	Ø×+Ñ+¨I¯L©L¸|×?QÑ?Q¨LÐ,RÓSˆ
ð *×/Ñ/Ó1×;Ñ;¸BÓ?ÐØ*Ñ?×DÑDÈÐDÐKÐN`×NdÑNdÐijÐNdÐNkÑkÐØ/×2Ñ2°<Ó@ÐØ×-Ñ-Ð.@ÓAˆà!Ñ1ˆàÐr-   )ry  r  r  )rÿ   rs  r   r  rº   s   @r+   ru  ru  â  s   ø† ÷
÷"ð r-   ru  c                   óÂ   ^ • \ rS rSr  SS\S\S\S\S\SS4U 4S	 jjjr SS
\R                  S\R                  S\R                  S\R                  S-  4S jjr
SrU =r$ )Ú%MochiCombinedTimestepCaptionEmbeddingi  r   r  rÙ   ru  Únum_attention_headsr   Nc                 ó²   >• [         TU ]  5         [        USSS9U l        [	        XAS9U l        [        XSUS9U l        [        R                  " X25      U l
        g )NTrw  rÿ  r   )r‰  r/   r>  )rŽ   r�   r‹  r  rt  r  ÚMochiAttentionPoolrf  r   rÁ   Úcaption_proj)rœ   r   r  rÙ   ru  r‰  r    s         €r+   r�   Ú.MochiCombinedTimestepCaptionEmbedding.__init__  sT   ø€ ô 	‰ÑÔä"°ÐPTÐknÑoˆŒÜ!2¸~Ñ!lˆÔÜ(Ø 3ÐZgñ
ˆŒô ŸIšI nÓLˆÕr-   r  r  Úencoder_attention_maskr
  c                 ó²   • U R                  U5      nU R                  UR                  US95      nU R                  X#5      nU R	                  U5      nXg-   n	X˜4$ r  )r  r  r¬   rf  rŒ  )
rœ   r  r  rŽ  r
  r  Útime_embr  rŒ  r  s
             r+   r®   Ú-MochiCombinedTimestepCaptionEmbedding.forward  s_   € ð —N‘N 8Ó,ˆ	Ø×)Ñ)¨)¯,©,¸\¨,Ð*JÓKˆà!Ÿ[™[Ð)>ÓWÐØ×(Ñ(Ð)>Ó?ˆàÑ4ˆØÐ)Ð)r-   )rŒ  rf  r  r  )r   r  r  )r³   r´   rµ   r¶   rE   r�   r   rÓ  r  r   r®   r¸   r¹   rº   s   @r+   rˆ  rˆ    s£   ø† ð "Ø#$ñMàðMð  #ðMð ð	Mð
 ðMð !ðMð 
÷Mð Mð, ,0ñ*à×"Ñ"ð*ð  %Ÿ|™|ð*ð !&§¡ð	*ð
 —k‘k DÑ(÷*ó *r-   rˆ  c                   óB   ^ • \ rS rSrSS\S\S\4U 4S jjjrS rSrU =r$ )	ÚTextTimeEmbeddingi'  Úencoder_dimru  r=  c                 óä   >• [         TU ]  5         [        R                  " U5      U l        [        X15      U l        [        R                  " X5      U l        [        R                  " U5      U l	        g r  )
rŽ   r�   r   r•   Únorm1ÚAttentionPoolingÚpoolrÁ   r”   Únorm2)rœ   r”  ru  r=  r    s       €r+   r�   ÚTextTimeEmbedding.__init__(  sJ   ø€ Ü‰ÑÔÜ—\’\ +Ó.ˆŒ
Ü$ YÓ<ˆŒ	Ü—I’I˜kÓ:ˆŒ	Ü—\’\ .Ó1ˆ�
r-   c                 óŽ   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ r  )r–  r˜  r”   r™  )rœ   r  s     r+   r®   ÚTextTimeEmbedding.forward/  s@   € ØŸ
™
 =Ó1ˆØŸ	™	 -Ó0ˆØŸ	™	 -Ó0ˆØŸ
™
 =Ó1ˆØÐr-   )r–  r™  r˜  r”   )é@   r_  rº   s   @r+   r“  r“  '  s,   ø† ñ2 Cð 2¸ð 2È÷ 2ð 2÷ð r-   r“  c                   óv   ^ • \ rS rSrS
S\S\S\4U 4S jjjrS\R                  S\R                  4S jrS	r	U =r
$ )ÚTextImageTimeEmbeddingi7  rÙ   rÖ  ru  c                 óÄ   >• [         TU ]  5         [        R                  " X5      U l        [        R
                  " U5      U l        [        R                  " X#5      U l        g r  )rŽ   r�   r   rÁ   rã   r•   Ú	text_normÚ
image_proj)rœ   rÙ   rÖ  ru  r    s       €r+   r�   ÚTextImageTimeEmbedding.__init__8  s>   ø€ Ü‰ÑÔÜŸš >ÓBˆŒÜŸš nÓ5ˆŒÜŸ)š) OÓDˆ�r-   rñ   rò   c                 óp   • U R                  U5      nU R                  U5      nU R                  U5      nXC-   $ r  )rã   r¡  r¢  )rœ   rñ   rò   Útime_text_embedsÚtime_image_embedss        r+   r®   ÚTextImageTimeEmbedding.forward>  s;   € àŸ>™>¨+Ó6ÐØŸ>™>Ð*:Ó;Ðð !ŸO™O¨LÓ9Ðà Ñ3Ð3r-   )r¢  r¡  rã   )r²   r²   rc  r  rº   s   @r+   rŸ  rŸ  7  sH   ø† ñE sð EÀ3ð EÐ^a÷ Eð Eð4 5§<¡<ð 4¸u¿|¹|÷ 4ò 4r-   rŸ  c                   óZ   ^ • \ rS rSrSS\S\4U 4S jjjrS\R                  4S jrSr	U =r
$ )	ÚImageTimeEmbeddingiI  rÖ  ru  c                 óŽ   >• [         TU ]  5         [        R                  " X5      U l        [        R
                  " U5      U l        g r  )rŽ   r�   r   rÁ   r¢  r•   Ú
image_norm©rœ   rÖ  ru  r    s      €r+   r�   ÚImageTimeEmbedding.__init__J  s.   ø€ Ü‰ÑÔÜŸ)š) OÓDˆŒÜŸ,š, ~Ó6ˆ�r-   rò   c                 óJ   • U R                  U5      nU R                  U5      nU$ r  )r¢  r«  )rœ   rò   r¦  s      r+   r®   ÚImageTimeEmbedding.forwardO  s'   € à ŸO™O¨LÓ9ÐØ ŸO™OÐ,=Ó>ÐØ Ð r-   )r«  r¢  ©r²   rc  r  rº   s   @r+   r©  r©  I  s0   ø† ñ7¨ð 7À3÷ 7ð 7ð
! E§L¡L÷ !ò !r-   r©  c                   ór   ^ • \ rS rSrS	S\S\4U 4S jjjrS\R                  S\R                  4S jrSr	U =r
$ )
ÚImageHintTimeEmbeddingiV  rÖ  ru  c                 ó@  >• [         TU ]  5         [        R                  " X5      U l        [        R
                  " U5      U l        [        R                  " [        R                  " SSSSS9[        R                  " 5       [        R                  " SSSSS9[        R                  " 5       [        R                  " SSSSSS9[        R                  " 5       [        R                  " SSSSS9[        R                  " 5       [        R                  " SSSSSS9[        R                  " 5       [        R                  " SSSSS9[        R                  " 5       [        R                  " SS	SSSS9[        R                  " 5       [        R                  " S	S
SSS95      U l
        g )Nr9   r±   r   )Úpaddingr®  r   )r´  r†   é`   r   r7   )rŽ   r�   r   rÁ   r¢  r•   r«  rx  r“   ÚSiLUÚinput_hint_blockr¬  s      €r+   r�   ÚImageHintTimeEmbedding.__init__W  s  ø€ Ü‰ÑÔÜŸ)š) OÓDˆŒÜŸ,š, ~Ó6ˆŒÜ "§¢Ü�IŠI�a˜˜Q¨Ñ*Ü�GŠG‹IÜ�IŠI�b˜"˜a¨Ñ+Ü�GŠG‹IÜ�IŠI�b˜"˜a¨°1Ñ5Ü�GŠG‹IÜ�IŠI�b˜"˜a¨Ñ+Ü�GŠG‹IÜ�IŠI�b˜"˜a¨°1Ñ5Ü�GŠG‹IÜ�IŠI�b˜"˜a¨Ñ+Ü�GŠG‹IÜ�IŠI�b˜#˜q¨!°AÑ6Ü�GŠG‹IÜ�IŠI�c˜1˜a¨Ñ+ó!
ˆÕr-   rò   Úhintc                 ón   • U R                  U5      nU R                  U5      nU R                  U5      nX24$ r  )r¢  r«  r·  )rœ   rò   r¹  r¦  s       r+   r®   ÚImageHintTimeEmbedding.forwardm  s:   € à ŸO™O¨LÓ9ÐØ ŸO™OÐ,=Ó>ÐØ×$Ñ$ TÓ*ˆØ Ð&Ð&r-   )r«  r¢  r·  r°  r  rº   s   @r+   r²  r²  V  s;   ø† ñ
¨ð 
À3÷ 
ð 
ð,' E§L¡Lð '¸¿¹÷ 'ò 'r-   r²  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )r—  iu  c                 ó¤  >• [         TU ]  5         X0l        [        R                  " [
        R                  " SU5      US-  -  5      U l        [        R                  " X"U R                  S9U l	        [        R                  " X"U R                  S9U l
        [        R                  " X"U R                  S9U l        Xl        X R                  -  U l        g )Nr   rŠ   r\   )rŽ   r�   r   r   r–  r   r—  rA  rÁ   rB  rC  rD  r=  Údim_per_head)rœ   r=  r/   r   r    s       €r+   r�   ÚAttentionPooling.__init__x  s�   ø€ Ü‰ÑÔØŒ
Ü$&§L¢L´·²¸QÀ	Ó1JÈYÐX[É^Ñ1[Ó$\ˆÔ!Ü—i’i 	¸D¿J¹JÑGˆŒÜ—i’i 	¸D¿J¹JÑGˆŒÜ—i’i 	¸D¿J¹JÑGˆŒØ"ŒØ%¯©Ñ7ˆÕr-   c                 ó  ^ ^• UR                  5       u  mp#UU 4S jnUR                  SSS9T R                  R                  UR                  5      -   n[
        R                  " XQ/SS9nU" T R                  U5      5      nU" T R                  U5      5      nU" T R                  U5      5      nS[        R                  " [        R                  " T R                  5      5      -  n	[
        R                  " SXi-  Xy-  5      n
[
        R                  " U
R                  5       SS9R!                  U
R                  5      n
[
        R                  " SX¨5      nUR#                  TSS5      R%                  SS	5      nUS S 2S
S S 24   $ )Nc                 óô   >• U R                  TSTR                  TR                  5      n U R                  SS5      n U R	                  TTR                  -  STR                  5      n U R                  SS5      n U $ )Nr   r   r   )rÇ   r=  r¾  r«   rH   )rË   Úbsrœ   s    €€r+   r   Ú'AttentionPooling.forward.<locals>.shape…  sg   ø€ à—‘�r˜2˜tŸ~™~¨t×/@Ñ/@ÓAˆAà—‘˜A˜qÓ!ˆAà—	‘	˜"˜tŸ~™~Ñ-¨r°4×3DÑ3DÓEˆAà—‘˜A˜qÓ!ˆAØˆHr-   r   TrH  r   zbct,bcs->btsr   zbts,bcs->bctr   r   )rÆ   r[  rA  r¬   r   r   r#   rC  rB  rD  r   Úsqrtr¾  r€   Úsoftmaxr"   rP  rH   r«   )rœ   rË   Úlengthr™   r   Úclass_tokenÚqÚkÚvr   r˜  ÚarÂ  s   `           @r+   r®   ÚAttentionPooling.forward‚  s7  ù€ ØŸF™F›HÑˆˆFö		ð —f‘f ¨D�fÐ1°D×4MÑ4M×4PÑ4PÐQR×QXÑQXÓ4YÑYˆÜ�IŠI�{Ð&¨AÑ.ˆñ �$—+‘+˜kÓ*Ó+ˆá�$—+‘+˜a“.Ó!ˆÙ�$—+‘+˜a“.Ó!ˆð ”D—I’IœdŸiši¨×(9Ñ(9Ó:Ó;Ñ;ˆÜ—’˜n¨a©i¸¹ÓCˆÜ—’˜vŸ|™|›~°2Ñ6×;Ñ;¸F¿L¹LÓIˆô �LŠL˜¨Ó3ˆð �I‰I�b˜"˜aÓ ×*Ñ*¨1¨aÓ0ˆà’�A’q�‰zÐr-   )r¾  r   rB  r=  rA  rC  rD  r  r  rº   s   @r+   r—  r—  u  s   ø† ÷8÷"ð "r-   r—  c            	       óþ   ^ • \ rS rSr SS\S\S\S-  SS4U 4S jjjr\SS	.S
\R                  S\R                  S\R                  4S jj5       r	S
\R                  S\R                  S\R                  4S jrSrU =r$ )r‹  i§  Nr‰  r/   r>  r   c                 ó  >• [         TU ]  5         U=(       d    UU l        Xl        [        R
                  " USU-  5      U l        [        R
                  " X"5      U l        [        R
                  " X R                  5      U l        g )Nr   )	rŽ   r�   r>  r‰  r   rÁ   Úto_kvÚto_qÚto_out)rœ   r‰  r/   r>  r    s       €r+   r�   ÚMochiAttentionPool.__init__¨  s\   ø€ ô 	‰ÑÔà$×1¨	ˆŒØ#6Ô ä—Y’Y˜y¨!¨i©-Ó8ˆŒ
Ü—I’I˜iÓ3ˆŒ	Ü—i’i 	¯?©?Ó;ˆ�r-   F©rI  rË   rÓ   c                óF  • U R                  S5      UR                  S5      :X  d   eU R                  S5      UR                  S5      :X  d   eUSS2SS2S4   R                  U R                  S9nXR                  SSS9R	                  SS9-  nX-  R                  SUS9nU$ )zö
Pool tokens in x using mask.

NOTE: We assume x does not require gradients.

Args:
    x: (B, L, D) tensor of tokens.
    mask: (B, L) boolean tensor indicating which tokens are not padding.

Returns:
    pooled: (B, D) tensor of pooled tokens.
r   r   Nr\   TrH  )Úmin)rÆ   r¬   r   r~  Úclamp)rË   rÓ   rI  Úpooleds       r+   Úpool_tokensÚMochiAttentionPool.pool_tokens·  sž   € ð �v‰v�a‹y˜DŸI™I a›LÓ(Ð(Ð(Ø�v‰v�a‹y˜DŸI™I a›LÓ(Ð(Ð(Ø’A’q˜$�JÑ×"Ñ"¨¯©Ð"Ð1ˆØ—h‘h 1¨d�hÐ3×9Ñ9¸aÐ9Ð@Ñ@ˆØ‘(—‘ A¨w�Ð7ˆØˆr-   c                 óº  • UR                  S5      nUSS2SSSS24   R                  5       n[        R                  " USSS9nU R	                  XSS9n[
        R                  " XQ/SS9nU R                  U5      nU R                  USS2S	4   5      nX0R                  -  nUR                  SSU R                  U45      nUR                  SS
5      nUR                  S5      u  pšUR                  SU R                  U45      nUR                  S5      n[        R                  " XyX¤SS9nUR                  S5      R!                  SS5      nU R#                  U5      nU$ )a  
Args:
    x (`torch.Tensor`):
        Tensor of shape `(B, S, D)` of input tokens.
    mask (`torch.Tensor`):
        Boolean ensor of shape `(B, S)` indicating which tokens are not padding.

Returns:
    `torch.Tensor`:
        `(B, D)` tensor of pooled tokens.
r   N)r   r   T)rL  rÓ  r   r   r   r9   rw  )Ú	attn_maskrV  )rÆ   r  re  r'   rØ  r   r#   rÏ  rÐ  r‰  Ú	unflattenr«   rZ  r›   Úscaled_dot_product_attentionr]  r�   rÑ  )rœ   rË   rÓ   ÚDrÛ  Úx_poolÚkvrÈ  Úhead_dimrÉ  rÊ  s              r+   r®   ÚMochiAttentionPool.forwardÌ  sJ  € ð �F‰F�1‹Iˆð š˜D $ªÐ)Ñ*×/Ñ/Ó1ˆ	Ü—E’E˜) V°4Ñ8ˆ	ð ×!Ñ! !°4Ð!Ð8ˆô �IŠI�v�k qÑ)ˆð �Z‰Z˜‹]ˆØ�I‰I�aš˜1˜‘gÓˆð ×0Ñ0Ñ0ˆØ�\‰\˜!˜a ×!9Ñ!9¸8ÐDÓEˆØ�\‰\˜!˜QÓˆØ�y‰y˜‹|‰ˆØ�K‰K˜˜D×4Ñ4°hÐ?Ó@ˆØ�K‰K˜‹Nˆô ×*Ò*¨1°ÐSVÑWˆð �I‰I�a‹L× Ñ   AÓ&ˆØ�K‰K˜‹NˆØˆr-   )r‰  r>  rÏ  rÑ  rÐ  r  )r³   r´   rµ   r¶   rE   r�   Ústaticmethodr   r  rØ  Ú
BoolTensorr®   r¸   r¹   rº   s   @r+   r‹  r‹  §  s¡   ø† ð
 "&ñ	<à ð<ð ð<ð ˜$‘Jð	<ð
 
÷<ð <ð ØDIò �u—|‘|ð ¨5¯<©<ð ÈeÏlÉlô ó ðð(*˜Ÿ™ð *¨U×-=Ñ-=ð *À%Ç,Á,÷ *ò *r-   r‹  c                 ó�  • UR                   SS u  p#S[        R                  " U 5      U -  -  nUS   R                  UR                  UR
                  S9nXAR                  S5      -  n[        R                  " UR                  5       UR                  5       4SS9nUR                  SS	S
SS5      R                  X#U S-  S-  5      nU$ )z±
Args:
    embed_dim: int
    box: a 3-D tensor [B x N x 4] representing the bounding boxes for GLIGEN pipeline
Returns:
    [B x N x embed_dim] tensor of positional embeddings
Nr   éd   )NNNr:   r   r   r   r   r9   r7   )r   r   r   r¬   r   r   r›   rG   r$   r%   rÈ   rH   )r/   ÚboxrÏ   Ú	num_boxesr*   s        r+   Ú#get_fourier_embeds_from_boundingboxré  ù  s¶   € ð  ŸI™I b q˜MÑ€Jà
”%—,’,˜yÓ)¨IÑ5Ñ
6€CØ
ÐÑ
×
"Ñ
"¨#¯*©*¸C¿I¹IÐ
"Ð
F€CØ
—‘˜bÓ!Ñ
!€Cä
�+Š+�s—w‘w“y #§'¡'£)Ð,°"Ñ
5€CØ
�+‰+�a˜˜A˜q !Ó
$×
,Ñ
,¨ZÀIÐPQÁMÐTUÑDUÓ
V€Cà€Jr-   c                   ó@   ^ • \ rS rSrSU 4S jjr     SS jrSrU =r$ )ÚGLIGENTextBoundingboxProjectioni  c           
      ól  >• [         TU ]  5         Xl        X l        X@l        US-  S-  U l        [        U[        5      (       a  US   nUS:X  aà  [        R                  " [        R                  " U R                  U R
                  -   S5      [        R                  " 5       [        R                  " SS5      [        R                  " 5       [        R                  " SU5      5      U l        [        R                  R                  [        R                  " U R                  /5      5      U l        GOÃUS:X  Ga¼  [        R                  " [        R                  " U R                  U R
                  -   S5      [        R                  " 5       [        R                  " SS5      [        R                  " 5       [        R                  " SU5      5      U l        [        R                  " [        R                  " U R                  U R
                  -   S5      [        R                  " 5       [        R                  " SS5      [        R                  " 5       [        R                  " SU5      5      U l        [        R                  R                  [        R                  " U R                  /5      5      U l        [        R                  R                  [        R                  " U R                  /5      5      U l        [        R                  R                  [        R                  " U R
                  /5      5      U l        g )Nr   r7   r   ú	text-onlyé   z
text-image)rŽ   r�   Úpositive_lenrw  Úfourier_embedder_dimÚposition_dimrD   Útupler   rx  rÁ   r¶  Úlinearsr   r–  rk   Únull_positive_featureÚlinears_textÚlinears_imageÚnull_text_featureÚnull_image_featureÚnull_position_feature)rœ   rï  rw  Úfeature_typeÚfourier_freqsr    s        €r+   r�   Ú(GLIGENTextBoundingboxProjection.__init__  s  ø€ Ü‰ÑÔØ(ÔØŒà$1Ô!Ø)¨AÑ-°Ñ1ˆÔä�gœu×%Ñ%Ø˜a‘jˆGà˜;Ó&ÜŸ=š=Ü—	’	˜$×+Ñ+¨d×.?Ñ.?Ñ?ÀÓEÜ—’“	Ü—	’	˜#˜sÓ#Ü—’“	Ü—	’	˜#˜wÓ'óˆDŒLô */¯©×);Ñ);¼E¿KºKÈ×IZÑIZÐH[Ó<\Ó)]ˆDÖ&à˜\Ô)Ü "§¢Ü—	’	˜$×+Ñ+¨d×.?Ñ.?Ñ?ÀÓEÜ—’“	Ü—	’	˜#˜sÓ#Ü—’“	Ü—	’	˜#˜wÓ'ó!ˆDÔô "$§¢Ü—	’	˜$×+Ñ+¨d×.?Ñ.?Ñ?ÀÓEÜ—’“	Ü—	’	˜#˜sÓ#Ü—’“	Ü—	’	˜#˜wÓ'ó"ˆDÔô &+§X¡X×%7Ñ%7¼¿ºÀT×EVÑEVÐDWÓ8XÓ%YˆDÔ"Ü&+§h¡h×&8Ñ&8¼¿ºÀd×FWÑFWÐEXÓ9YÓ&ZˆDÔ#ä%*§X¡X×%7Ñ%7¼¿ºÀT×EVÑEVÐDWÓ8XÓ%YˆÕ"r-   c                 óü  • UR                  S5      n[        U R                  U5      nU R                  R	                  SSS5      n	X‚-  SU-
  U	-  -   nUbQ  U R
                  R	                  SSS5      n
X2-  SU-
  U
-  -   nU R                  [        R                  " X8/SS95      nU$ UR                  S5      nUR                  S5      nU R                  R	                  SSS5      nU R                  R	                  SSS5      nXd-  SU-
  U-  -   nXu-  SU-
  U-  -   nU R                  [        R                  " Xh/SS95      nU R                  [        R                  " Xx/SS95      n[        R                  " Xï/SS9nU$ )Nr   r   r   )r›   ré  rð  rù  rÇ   rô  ró  r   r#   r÷  rø  rõ  rö  )rœ   ÚboxesÚmasksÚpositive_embeddingsÚphrases_masksÚimage_masksÚphrases_embeddingsÚimage_embeddingsÚxyxy_embeddingÚ	xyxy_nullÚpositive_nullÚobjsÚ	text_nullÚ
image_nullÚ	objs_textÚ
objs_images                   r+   r®   Ú'GLIGENTextBoundingboxProjection.forward8  sž  € ð —‘ Ó#ˆô =¸T×=VÑ=VÐX]Ó^ˆð ×.Ñ.×3Ñ3°A°q¸"Ó=ˆ	ð (Ñ/°1°u±9À	Ñ2IÑIˆð Ñ*à ×6Ñ6×;Ñ;¸A¸qÀ"ÓEˆMð #6Ñ"=ÀÀUÁÈmÑ@[Ñ"[Ðà—<‘<¤§	¢	Ð+>Ð*OÐUWÑ XÓYˆDð& ˆð *×3Ñ3°BÓ7ˆMØ%×/Ñ/°Ó3ˆKð ×.Ñ.×3Ñ3°A°q¸"Ó=ˆIØ×0Ñ0×5Ñ5°a¸¸BÓ?ˆJð "4Ñ!CÀqÈ=ÑGXÐ\eÑFeÑ!eÐØ/Ñ=ÀÀ[ÁÐT^Ñ@^Ñ^Ðà×)Ñ)¬%¯)ª)Ð5GÐ4XÐ^`Ñ*aÓbˆIØ×+Ñ+¬E¯IªIÐ7GÐ6XÐ^`Ñ,aÓbˆJÜ—9’9˜iÐ4¸!Ñ<ˆDàˆr-   )rð  ró  rö  rõ  rø  rù  rô  r÷  rw  rñ  rï  )rí  r  )NNNNNr  rº   s   @r+   rë  rë    s%   ø† ÷'ZðZ !ØØØØ÷0ò 0r-   rë  c                   ó>   ^ • \ rS rSrSrSS\4U 4S jjjrS rSrU =r	$ )Ú)PixArtAlphaCombinedTimestepSizeEmbeddingsik  zª
For PixArt-Alpha.

Reference:
https://github.com/PixArt-alpha/PixArt-alpha/blob/0f55e922376d8b797edd44d25d0e7464b260dcab/diffusion/model/nets/PixArtMS.py#L164C9-L168C29
Úuse_additional_conditionsc                 óä   >• [         TU ]  5         X l        [        SSSS9U l        [        SUS9U l        X0l        U(       a/  [        SSSS9U l        [        SUS9U l	        [        SUS9U l
        g g )Nr   Tr   rÿ  r   )rŽ   r�   Úoutdimr‹  r  rt  r  r  Úadditional_condition_projÚresolution_embedderÚaspect_ratio_embedder)rœ   r   Úsize_emb_dimr  r    s       €r+   r�   Ú2PixArtAlphaCombinedTimestepSizeEmbeddings.__init__s  su   ø€ Ü‰ÑÔà"ŒÜ"°ÀTÐ`aÑbˆŒÜ!2¸sÐS`Ñ!aˆÔà)BÔ&Þ$Ü-6ÀCÐY]ÐtuÑ-vˆDÔ*Ü'8ÀSÐYeÑ'fˆDÔ$Ü):ÀsÐ[gÑ)hˆDÕ&ð %r-   c                 óü  • U R                  U5      nU R                  UR                  US95      nU R                  (       a¹  U R	                  UR                  5       5      R                  U5      nU R                  U5      R                  US5      nU R	                  UR                  5       5      R                  U5      n	U R                  U	5      R                  US5      n	U[        R                  " X‰/SS9-   n
U
$ Un
U
$ r}  )r  r  r¬   r  r  r�   r  rH   r  r   r#   )rœ   r  Ú
resolutionÚaspect_ratiorÏ   r
  r  r  Úresolution_embÚaspect_ratio_embr  s              r+   r®   Ú1PixArtAlphaCombinedTimestepSizeEmbeddings.forward€  sï   € ØŸ™¨Ó1ˆØ×.Ñ.¨~×/@Ñ/@À|Ð/@Ð/TÓUˆà×)×)Ø!×;Ñ;¸J×<NÑ<NÓ<PÓQ×TÑTÐUaÓbˆNØ!×5Ñ5°nÓE×MÑMÈjÐZ\Ó]ˆNØ#×=Ñ=¸l×>RÑ>RÓ>TÓU×XÑXÐYeÓfÐØ#×9Ñ9Ð:JÓK×SÑSÐT^Ð`bÓcÐØ(¬5¯9ª9°nÐ5WÐ]^Ñ+_Ñ_ˆLð Ðð )ˆLàÐr-   )r  r  r  r  r  r  r  ©F)
r³   r´   rµ   r¶   r·   r  r�   r®   r¸   r¹   rº   s   @r+   r  r  k  s&   ø† ññiÈt÷ ið i÷ð r-   r  c                   ó6   ^ • \ rS rSrSrSU 4S jjrS rSrU =r$ )r  i�  z¾
Projects caption embeddings. Also handles dropout for classifier-free guidance.

Adapted from https://github.com/PixArt-alpha/PixArt-alpha/blob/master/diffusion/model/nets/PixArt_blocks.py
c                 ó^  >• [         TU ]  5         Uc  Un[        R                  " XSS9U l        US:X  a  [        R
                  " SS9U l        OEUS:X  a  [        R                  " 5       U l        O$US:X  a  [        5       U l        O[        SU 35      e[        R                  " X#SS9U l
        g )	NTr¾   Ú	gelu_tanhÚtanh)Úapproximaterˆ  rd  zUnknown activation function: )rŽ   r�   r   rÁ   r{  ÚGELUÚact_1r¶  r   rC   r~  )rœ   r¿   r	  rÀ   rv  r    s        €r+   r�   Ú"PixArtAlphaTextProjection.__init__—  s�   ø€ Ü‰ÑÔØÑØ&ˆLÜŸ	š	¨kÐZ^Ñ_ˆŒØ�[Ó ÜŸš¨VÑ4ˆD�JØ�vÓÜŸš›ˆD�JØ�{Ó"Ü!›ˆD�JäÐ<¸V¸HÐEÓFÐFÜŸ	š	¨kÐ[_Ñ`ˆ�r-   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ r  )r{  r%  r~  )rœ   Úcaptionr  s      r+   r®   Ú!PixArtAlphaTextProjection.forward¦  s2   € ØŸ™ gÓ.ˆØŸ
™
 =Ó1ˆØŸ™ mÓ4ˆØÐr-   )r%  r{  r~  )Nr!  rÕ   rº   s   @r+   r  r  �  s   ø† ñ÷a÷ð r-   r  c                   óR   ^ • \ rS rSr    SS\S\S\S\SS4
U 4S jjjrS	 rS
rU =r	$ )Ú!IPAdapterPlusImageProjectionBlocki­  Ú
embed_dimsÚdim_headÚheadsÚ	ffn_ratior   Nc                 ó*  >• [         TU ]  5         SSKJn  [        R
                  " U5      U l        [        R
                  " U5      U l        [        UUUSS9U l	        [        R                  " [        R
                  " U5      U" XSUSS95      U l        g )Nr   rê  F)Ú	query_dimr-  r.  Úout_biasrì  ©rî  rí  r‡   )rŽ   r�   rï  rë  r   r•   Úln0Úln1r
   Úattnrx  rð  )rœ   r,  r-  r.  r/  rë  r    s         €r+   r�   Ú*IPAdapterPlusImageProjectionBlock.__init__®  sx   ø€ ô 	‰ÑÔÝ*ä—<’< 
Ó+ˆŒÜ—<’< 
Ó+ˆŒÜØ ØØØñ	
ˆŒ	ô —-’-Ü�LŠL˜Ó$Ù˜
¸fÈ9Ð[`Ñaó
ˆ�r-   c                 óÆ   • U R                  U5      nU R                  U5      n[        R                  " XB/SS9nU R	                  X$5      U-   nU R                  U5      U-   nU$ )Nrª   r   )r4  r5  r   r#   r6  rð  )rœ   rË   ÚlatentsÚresidualr  s        r+   r®   Ú)IPAdapterPlusImageProjectionBlock.forwardÅ  s_   € Ø $§¡¨£ÐØ—(‘(˜7Ó#ˆÜ %§	¢	Ð+@Ð*JÐPRÑ SÐØ—)‘)˜GÓ;¸hÑFˆØ—'‘'˜'Ó" WÑ,ˆØˆr-   )r6  rð  r4  r5  )r²   r�  r±   r7   )
r³   r´   rµ   r¶   rE   r"   r�   r®   r¸   r¹   rº   s   @r+   r+  r+  ­  sU   ø† ð ØØØñ
àð
ð ð
ð ð	
ð
 ð
ð 
÷
ð 
÷.ð r-   r+  c                   ó¢   ^ • \ rS rSrSr        SS\S\S\S\S\S\S	\S
\SS4U 4S jjjrS\R                  S\R                  4S jr
SrU =r$ )ÚIPAdapterPlusImageProjectioniÎ  a´  Resampler of IP-Adapter Plus.

Args:
    embed_dims (int): The feature dimension. Defaults to 768. output_dims (int): The number of output channels,
    that is the same
        number of the channels in the `unet.config.cross_attention_dim`. Defaults to 1024.
    hidden_dims (int):
        The number of hidden channels. Defaults to 1280. depth (int): The number of blocks. Defaults
    to 8. dim_head (int): The number of head channels. Defaults to 64. heads (int): Parallel attention heads.
    Defaults to 16. num_queries (int):
        The number of queries. Defaults to 8. ffn_ratio (float): The expansion ratio
    of feedforward network hidden
        layer channels. Defaults to 4.
r,  Úoutput_dimsÚhidden_dimsÚdepthr-  r.  Únum_queriesr/  r   Nc	                 ó¸  >• [         T
U ]  5         [        R                  " [        R
                  " SXs5      US-  -  5      U l        [        R                  " X5      U l        [        R                  " X25      U l	        [        R                  " U5      U l        [        R                  " [        U5       V	s/ s H  n	[        X5Xh5      PM     sn	5      U l        g s  sn	f r@  )rŽ   r�   r   r–  r   r—  r9  rÁ   Úproj_inÚproj_outr•   Únorm_outÚ
ModuleListÚranger+  Úlayers)rœ   r,  r>  r?  r@  r-  r.  rA  r/  rª  r    s             €r+   r�   Ú%IPAdapterPlusImageProjection.__init__Þ  sœ   ø€ ô 	‰ÑÔÜ—|’|¤E§K¢K°°;Ó$LÈ{Ð\_ÑO_Ñ$_Ó`ˆŒä—y’y Ó9ˆŒäŸ	š	 +Ó;ˆŒÜŸš [Ó1ˆŒä—m’mÜafÐglÔamÓnÒamÐ\]Ô.¨{ÀeÖWÑamÑnó
ˆ�ùÚns   Â4CrË   c                 óü   • U R                   R                  UR                  S5      SS5      nU R                  U5      nU R                   H  nUnU" XU5      nM     U R                  U5      nU R                  U5      $ )zcForward pass.

Args:
    x (torch.Tensor): Input Tensor.
Returns:
    torch.Tensor: Output Tensor.
r   r   )r9  r`   rÆ   rC  rH  rD  rE  )rœ   rË   r9  Úblockr:  s        r+   r®   Ú$IPAdapterPlusImageProjection.forwardõ  so   € ð —,‘,×%Ñ% a§f¡f¨Q£i°°AÓ6ˆà�L‰L˜‹Oˆà—[”[ˆEØˆHÙ˜A¨Ó1ŠGñ !ð —-‘- Ó(ˆØ�}‰}˜WÓ%Ð%r-   )r9  rH  rE  rC  rD  )r²   rÞ  é   r7   r�  r±   r  r7   ©r³   r´   rµ   r¶   r·   rE   r"   r�   r   r  r®   r¸   r¹   rº   s   @r+   r=  r=  Î  s¤   ø† ñð" ØØØØØØØñ
àð
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð ð
ð ð
ð 
÷
ð 
ð.&˜Ÿ™ð &¨%¯,©,÷ &ò &r-   r=  c                   ó´   ^ • \ rS rSrSr           SS\S\S\S\S\S\S	\S
\S\S\S\SS4U 4S jjjrS\R                  S\R                  4S jr
SrU =r$ )Ú"IPAdapterFaceIDPlusImageProjectioni		  ac  FacePerceiverResampler of IP-Adapter Plus.

Args:
    embed_dims (int): The feature dimension. Defaults to 768. output_dims (int): The number of output channels,
    that is the same
        number of the channels in the `unet.config.cross_attention_dim`. Defaults to 1024.
    hidden_dims (int):
        The number of hidden channels. Defaults to 1280. depth (int): The number of blocks. Defaults
    to 8. dim_head (int): The number of head channels. Defaults to 64. heads (int): Parallel attention heads.
    Defaults to 16. num_tokens (int): Number of tokens num_queries (int): The number of queries. Defaults to 8.
    ffn_ratio (float): The expansion ratio of feedforward network hidden
        layer channels. Defaults to 4.
    ffproj_ratio (float): The expansion ratio of feedforward network hidden
        layer channels (for ID embeddings). Defaults to 4.
r,  r>  r?  Úid_embeddings_dimr@  r-  r.  rø  rA  r/  Úffproj_ratior   Nc                 óð  >• [         TU ]  5         SSKJn  X€l        Xl        S U l        SU l        SU l        U" XAU-  SUS9U l	        [        R                  " U5      U l        [        R                  " X15      U l        [        R                  " X5      U l        [        R                  " U5      U l        [        R"                  " [%        U5       Vs/ s H  n['        XXz5      PM     sn5      U l        g s  snf )Nr   rê  Fr.   rì  )rî  rí  )rŽ   r�   rï  rë  rø  r/   Úclip_embedsÚshortcutÚshortcut_scaler”   r   r•   r–   rÁ   rC  rD  rE  rF  rG  r+  rH  )rœ   r,  r>  r?  rQ  r@  r-  r.  rø  rA  r/  rR  rë  rª  r    s                 €r+   r�   Ú+IPAdapterFaceIDPlusImageProjection.__init__	  sÂ   ø€ ô 	‰ÑÔÝ*à$ŒØ#ŒØˆÔØˆŒØ!ˆÔáÐ 1À
Ñ3JÐZ`ÐgsÑtˆŒ	Ü—L’L Ó,ˆŒ	ä—y’y Ó9ˆŒäŸ	š	 *Ó:ˆŒÜŸš [Ó1ˆŒä—m’mÜ`eÐfkÔ`lÓmÒ`lÐ[\Ô.¨zÀUÖVÑ`lÑmó
ˆ�ùÚms   ÃC3Ú	id_embedsc                 ó:  • UR                  U R                  R                  5      nU R                  U5      nUR	                  SU R
                  U R                  5      nU R                  U5      nUnU R                  U R                  5      nUR	                  SUR                  S   UR                  S   5      nU R                   H  nUnU" XBU5      nM     U R                  U5      nU R                  U5      nU R                  (       a  XR                  U-  -   nU$ )zwForward pass.

Args:
    id_embeds (torch.Tensor): Input Tensor (ID embeds).
Returns:
    torch.Tensor: Output Tensor.
r   r   r9   )r¬   rT  r   r”   rH   rø  r/   r–   rC  r   rH  rD  rE  rU  rV  )rœ   rX  r9  rT  rË   rK  r:  rz   s           r+   r®   Ú*IPAdapterFaceIDPlusImageProjection.forward=	  sõ   € ð —L‘L ×!1Ñ!1×!7Ñ!7Ó8ˆ	Ø—I‘I˜iÓ(ˆ	Ø×%Ñ% b¨$¯/©/¸4¿>¹>ÓJˆ	Ø—I‘I˜iÓ(ˆ	Øˆà—l‘l 4×#3Ñ#3Ó4ˆØ×Ñ  K×$5Ñ$5°aÑ$8¸+×:KÑ:KÈAÑ:NÓOˆà—[”[ˆEØˆHÙ˜A¨Ó1ŠGñ !ð —-‘- Ó(ˆØ�m‰m˜GÓ$ˆØ�=�=Ø×1Ñ1°CÑ7Ñ7ˆCØˆ
r-   )rT  r/   rH  r–   rE  rø  r”   rC  rD  rU  rV  )r²   r²   rM  rî  r7   r�  r±   r7   r  r7   r   rN  rº   s   @r+   rP  rP  		  sÌ   ø† ñð$ ØØØ!$ØØØØØØØñ!
àð!
ð ð!
ð ð	!
ð
 ð!
ð ð!
ð ð!
ð ð!
ð ð!
ð ð!
ð ð!
ð ð!
ð 
÷!
ð !
ðF §¡ð °%·,±,÷ ò r-   rP  c                   óº   ^ • \ rS rSrSr    SS\S\S\S\SS4
U 4S	 jjjrS
\R                  S\R                  S\R                  S\R                  4S jr	Sr
U =r$ )Ú!IPAdapterTimeImageProjectionBlockiY	  a€  Block for IPAdapterTimeImageProjection.

Args:
    hidden_dim (`int`, defaults to 1280):
        The number of hidden channels.
    dim_head (`int`, defaults to 64):
        The number of head channels.
    heads (`int`, defaults to 20):
        Parallel attention heads.
    ffn_ratio (`int`, defaults to 4):
        The expansion ratio of feedforward network hidden layer channels.
Ú
hidden_dimr-  r.  r/  r   Nc           	      ót  >• [         TU ]  5         SSKJn  [        R
                  " U5      U l        [        R
                  " U5      U l        [        UUUUSSS9U l	        U" XSUSS9U l
        [        R                  " 5       U l        [        R                  " USU-  5      U l        [        R
                  " U5      U l        S[         R"                  " [         R"                  " U5      5      -  U R                  l        U R                  R'                  5         S U R                  l        S U R                  l        g )Nr   rê  F)r1  r×  r-  r.  r‡   r2  rì  r3  r7   )rŽ   r�   rï  rë  r   r•   r4  r5  r
   r6  rð  r¶  Ú
adaln_silurÁ   Ú
adaln_projÚ
adaln_normr   rÄ  r   Úfuse_projectionsÚto_kÚto_v)rœ   r]  r-  r.  r/  rë  r    s         €r+   r�   Ú*IPAdapterTimeImageProjectionBlock.__init__g	  sæ   ø€ ô 	‰ÑÔÝ*ä—<’< 
Ó+ˆŒÜ—<’< 
Ó+ˆŒÜØ Ø *ØØØØñ
ˆŒ	ñ ˜jÀFÐQZÐafÑgˆŒô Ÿ'š'›)ˆŒÜŸ)š) J°°J±Ó?ˆŒÜŸ,š, zÓ2ˆŒð œdŸiši¬¯	ª	°(Ó(;Ó<Ñ<ˆ�	‰	ŒØ�	‰	×"Ñ"Ô$Øˆ�	‰	ŒØˆ�	‰	�r-   rË   r9  Útimestep_embc                 óÊ  • U R                  U R                  U5      5      nUR                  SSS9u  pVpxUn	U R                  U5      nU R	                  U5      SUSS2S4   -   -  USS2S4   -   nUR
                  S   n
U R                  R                  U5      n[        R                  " X4SS9nU R                  R                  U5      R                  SSS9u  pÞUR
                  S   nXðR                  R                  -  nUR                  U
SU R                  R                  U5      R                  SS5      nUR                  U
SU R                  R                  U5      R                  SS5      nUR                  U
SU R                  R                  U5      R                  SS5      nX°R                  R                  -  XÐR                  R                  -  R                  SS5      -  n[        R                  " UR!                  5       SS9R#                  UR$                  5      nUU-  nUR                  SS5      R'                  U
SU R                  R                  U-  5      nU R                  R(                  S   " U5      nU R                  R(                  S   " U5      nX)-   nUn	U R+                  U5      SUSS2S4   -   -  USS2S4   -   nU R-                  U5      U	-   $ )	zñForward pass.

Args:
    x (`torch.Tensor`):
        Image features.
    latents (`torch.Tensor`):
        Latent features.
    timestep_emb (`torch.Tensor`):
        Timestep embedding.

Returns:
    `torch.Tensor`: Output latent features.
r7   r   r   Nr   rª   r   r   )r`  r_  rm  r4  r5  r   r6  rÐ  r   r#   rÏ  r.  rÇ   r«   r   rÅ  r"   rP  r   rH   rÑ  ra  rð  )rœ   rË   r9  rf  r*   Ú	shift_msaÚ	scale_msaÚ	shift_mlpÚ	scale_mlpr:  rÏ   rJ  Úkv_inputrK  rL  Ú	inner_dimrá  r˜  s                     r+   r®   Ú)IPAdapterTimeImageProjectionBlock.forwardˆ	  sy  € ð  �o‰o˜dŸo™o¨lÓ;Ó<ˆØ58·Y±Y¸qÀa°YÐ5HÑ2ˆ	˜ið ˆØ�H‰H�Q‹KˆØ—(‘(˜7Ó# q¨9²Q¸°WÑ+=Ñ'=Ñ>ÀÊ1ÈdÈ7ÑASÑSˆà—]‘] 1Ñ%ˆ
à—	‘	—‘˜wÓ'ˆÜ—9’9˜a˜\¨rÑ2ˆØ—Y‘Y—_‘_ XÓ.×4Ñ4°Q¸BÐ4Ð?‰
ˆà—I‘I˜b‘Mˆ	Ø§	¡	§¡Ñ/ˆà—
‘
˜: r¨4¯9©9¯?©?¸HÓE×OÑOÐPQÐSTÓUˆØ�h‰h�z 2 t§y¡y§¡¸ÓA×KÑKÈAÈqÓQˆØ—
‘
˜: r¨4¯9©9¯?©?¸HÓE×OÑOÐPQÐSTÓUˆàŸ)™)Ÿ/™/Ñ)¨c·I±I·O±OÑ.C×-NÑ-NÈrÐSUÓ-VÑVˆÜ—’˜vŸ|™|›~°2Ñ6×;Ñ;¸F¿L¹LÓIˆØ˜5‘.ˆà×#Ñ# A qÓ)×1Ñ1°*¸bÀ$Ç)Á)Ç/Á/ÐT\ÑB\Ó]ˆØ—)‘)×"Ñ" 1Ò% gÓ.ˆØ—)‘)×"Ñ" 1Ò% gÓ.ˆØÑ$ˆð ˆØ—/‘/ 'Ó*¨a°)ºA¸t¸GÑ2DÑ.DÑEÈ	ÒRSÐUYÐRYÑHZÑZˆØ�w‰w�wÓ (Ñ*Ð*r-   )ra  r`  r_  r6  rð  r4  r5  )rM  r�  é   r7   )r³   r´   rµ   r¶   r·   rE   r�   r   r  r®   r¸   r¹   rº   s   @r+   r\  r\  Y	  sŠ   ø† ñð ØØØñàðð ðð ð	ð
 ðð 
÷ð ðB1+˜Ÿ™ð 1+°·±ð 1+ÈEÏLÉLð 1+Ð]b×]iÑ]i÷ 1+ò 1+r-   r\  c                   óê   ^ • \ rS rSrSr           SS\S\S\S\S\S\S	\S
\S\S\S\SS4U 4S jjjrS\R                  S\R                  S\
\R                  \R                  4   4S jrSrU =r$ )ÚIPAdapterTimeImageProjectioni½	  a*  Resampler of SD3 IP-Adapter with timestep embedding.

Args:
    embed_dim (`int`, defaults to 1152):
        The feature dimension.
    output_dim (`int`, defaults to 2432):
        The number of output channels.
    hidden_dim (`int`, defaults to 1280):
        The number of hidden channels.
    depth (`int`, defaults to 4):
        The number of blocks.
    dim_head (`int`, defaults to 64):
        The number of head channels.
    heads (`int`, defaults to 20):
        Parallel attention heads.
    num_queries (`int`, defaults to 64):
        The number of queries.
    ffn_ratio (`int`, defaults to 4):
        The expansion ratio of feedforward network hidden layer channels.
    timestep_in_dim (`int`, defaults to 320):
        The number of input channels for timestep embedding.
    timestep_flip_sin_to_cos (`bool`, defaults to True):
        Flip the timestep embedding order to `cos, sin` (if True) or `sin, cos` (if False).
    timestep_freq_shift (`int`, defaults to 0):
        Controls the timestep delta between frequencies between dimensions.
r/   r>  r]  r@  r-  r.  rA  r/  Útimestep_in_dimÚtimestep_flip_sin_to_cosÚtimestep_freq_shiftr   Nc                 óø  >• [         TU ]  5         [        R                  " [        R
                  " SXs5      US-  -  5      U l        [        R                  " X5      U l        [        R                  " X25      U l	        [        R                  " U5      U l        [        R                  " [        U5       Vs/ s H  n[        X5Xh5      PM     sn5      U l        [!        XšU5      U l        [%        X“SS9U l        g s  snf )Nr   rŠ   rˆ  r  )rŽ   r�   r   r–  r   r—  r9  rÁ   rC  rD  r•   rE  rF  rG  r\  rH  r‹  r  rt  Útime_embedding)rœ   r/   r>  r]  r@  r-  r.  rA  r/  rr  rs  rt  rª  r    s                €r+   r�   Ú%IPAdapterTimeImageProjection.__init__Ù	  s¿   ø€ ô 	‰ÑÔÜ—|’|¤E§K¢K°°;Ó$KÈjÐZ]ÉoÑ$]Ó^ˆŒÜ—y’y Ó7ˆŒÜŸ	š	 *Ó9ˆŒÜŸš ZÓ0ˆŒÜ—m’mÜ`eÐfkÔ`lÓmÒ`lÐ[\Ô.¨zÀUÖVÑ`lÑmó
ˆŒô # ?ÐNaÓbˆŒÜ/°ÐTZÑ[ˆÕùò ns   Â4C7rË   r  c                 ó†  • U R                  U5      R                  UR                  S9nU R                  U5      nU R                  R                  UR                  S5      SS5      nU R                  U5      nXSS2S4   -   nU R                   H  nU" XU5      nM     U R                  U5      nU R                  U5      nXC4$ )zãForward pass.

Args:
    x (`torch.Tensor`):
        Image features.
    timestep (`torch.Tensor`):
        Timestep in denoising process.
Returns:
    `tuple`[`torch.Tensor`, `torch.Tensor`]: The pair (latents, timestep_emb).
r\   r   r   N)r  r¬   r   rv  r9  r`   rÆ   rC  rH  rD  rE  )rœ   rË   r  rf  r9  rK  s         r+   r®   Ú$IPAdapterTimeImageProjection.forwardò	  s³   € ð —~‘~ hÓ/×2Ñ2¸¿¹Ð2ÐAˆØ×*Ñ*¨<Ó8ˆà—,‘,×%Ñ% a§f¡f¨Q£i°°AÓ6ˆà�L‰L˜‹OˆØšQ ˜WÑ%Ñ%ˆà—[”[ˆEÙ˜A¨Ó5ŠGñ !ð —-‘- Ó(ˆØ—-‘- Ó(ˆàÐ$Ð$r-   )r9  rH  rE  rC  rD  rv  r  )i€  i€	  rM  r7   r�  ro  r�  r7   i@  Tr   )r³   r´   rµ   r¶   r·   rE   r  r�   r   r  rò  r®   r¸   r¹   rº   s   @r+   rq  rq  ½	  sõ   ø† ñð: ØØØØØØØØ"Ø)-Ø#$ñ\àð\ð ð\ð ð	\ð
 ð\ð ð\ð ð\ð ð\ð ð\ð ð\ð #'ð\ð !ð\ð 
÷\ð \ð2%˜Ÿ™ð %°·±ð %À%ÈÏÉÐV[×VbÑVbÐHbÑBc÷ %ò %r-   rq  c                   óª   ^ • \ rS rSrS\\R                     \\R                     -  4U 4S jjr\	S\
4S j5       rS\\R                     4S jrSrU =r$ )	ÚMultiIPAdapterImageProjectioni
  ÚIPAdapterImageProjectionLayersc                 óX   >• [         TU ]  5         [        R                  " U5      U l        g r  )rŽ   r�   r   rF  Úimage_projection_layers)rœ   r|  r    s     €r+   r�   Ú&MultiIPAdapterImageProjection.__init__
  s    ø€ Ü‰ÑÔÜ')§}¢}Ð5SÓ'TˆÕ$r-   r   c                 ó,   • [        U R                  5      $ )zNumber of IP-Adapters loaded.)r   r~  )rœ   s    r+   Únum_ip_adaptersÚ-MultiIPAdapterImageProjection.num_ip_adapters
  s   € ô �4×/Ñ/Ó0Ð0r-   rò   c                 óF  • / n[        U[        5      (       d   Sn[        SSUSS9  UR                  S5      /n[	        U5      [	        U R
                  5      :w  a-  [        S[	        U5       S[	        U R
                  5       35      e[        XR
                  5       H�  u  pEUR                  S	   UR                  S   pvUR                  Xg-  4UR                  S
S  -   5      nU" U5      nUR                  Xg4UR                  SS  -   5      nUR                  U5        Mƒ     U$ )NzÓYou have passed a tensor as `image_embeds`.This is deprecated and will be removed in a future release. Please make sure to update your script to pass `image_embeds` as a list of tensors to suppress this warning.zimage_embeds not a listú1.0.0FrZ   r   zGimage_embeds must have the same length as image_projection_layers, got z and r   r   )rD   Úlistr   r›   r   r~  rC   Úzipr   rH   Úappend)rœ   rò   Úprojected_image_embedsrb   Úimage_embedÚimage_projection_layerrÏ   Ú
num_imagess           r+   r®   Ú%MultiIPAdapterImageProjection.forward
  sP  € Ø!#Ðô
 ˜,¬×-Ñ-ð@ð  ô Ð/°Ð:MÐ]bÒcØ(×2Ñ2°1Ó5Ð6ˆLäˆ|Ó¤ D×$@Ñ$@Ó AÓAÜØYÔZ]Ð^jÓZkÐYlÐlqÔruÐvz÷  wSñ  wSó  sTð  rUð  Vóð ô 47°|×EaÑEaÖ3bÑ/ˆKØ%0×%6Ñ%6°qÑ%9¸;×;LÑ;LÈQÑ;O˜
Ø%×-Ñ-¨zÑ/FÐ.HÈ;×K\ÑK\Ð]^Ð]_ÐK`Ñ.`ÓaˆKÙ0°Ó=ˆKØ%×-Ñ-¨zÐ.FÈ×IZÑIZÐ[\Ð[]ÐI^Ñ.^Ó_ˆKà"×)Ñ)¨+Ö6ñ 4cð &Ð%r-   )r~  )r³   r´   rµ   r¶   r…  r   ÚModulerò  r�   ÚpropertyrE   r�  r   r  r®   r¸   r¹   rº   s   @r+   r{  r{  
  s\   ø† ðU°t¸B¿I¹I±ÈÈrÏyÉyÑIYÑ7Y÷ Uð ð1 ó 1ó ð1ð& D¨¯©Ñ$6÷ &ò &r-   r{  c                   ó   • \ rS rSrS rSrg)ÚFluxPosEmbedi6
  c                 ó<   • Sn[        SSU5        SSKJn  U" U0 UD6$ )NzœImporting and using `FluxPosEmbed` from `diffusers.models.embeddings` is deprecated. Please import it from `diffusers.models.transformers.transformer_flux`.r�  r„  r   )r�  )r   Útransformers.transformer_fluxr�  )ÚclsÚargsÚkwargsrb   r�  s        r+   Ú__new__ÚFluxPosEmbed.__new__7
  s+   € ð }ÐÜ�. 'Ð+>Ô?å?á˜TÐ, VÑ,Ð,r-   r­  N)r³   r´   rµ   r¶   r–  r¸   r­  r-   r+   r�  r�  6
  s   † õ-r-   r�  )Fr   r   ru   )r.   r.   Nr6   )r.   r.   )Fr   r.   r±   Nr6   )r6   )r6   FN)Fr   r.   r±   )ru   Tr  NN))r.   r.   r.   ru   N)TNr6   )Tr  )Tr   r   )Tr   Únumpyr6   r   Útorch.nn.functionalr   r&   re  Úutilsr   Úutils.torch_utilsr   Úactivationsr   r	   Úattention_processorr
   r  rE   r  r"   r,   rò  r   r‰  rV   rN  rB   rl   rI   rJ   rj   ro   rv   r�  r‚   r¼   r×   r  r6  r<  rA  r?  r@  rJ  r    r(  rb  rr  rt  r‹  r“  r¢  r±  r½  rÕ  rá  rç  rö  rý  r  r  r*  r;  ra  ru  rˆ  r“  rŸ  r©  r²  r—  r‹  ré  rë  r  r  r+  r=  rP  r\  rq  r{  r�  r­  r-   r+   Ú<module>rž     s9  ðó ã Û ß Ð Ý å Ý =ß 1Ý *ð "Ø"#ØØñ3Ø�|‰|ð3àð3ð ð3ð  ð	3ð
 ð3ð ð3ð ‡\�\õ3ðt *-Ø*-Ø"&ØñGØðGà˜˜c 3˜h™Ñ'ðGð ðGð "'ð	Gð
 #(ðGð �L‰L˜4ÑðGð ðGð ‡\�\õGð\ *-Ø*-ñ?Øð?à˜˜c 3˜h™Ñ'ð?ð ð?ð "'ð	?ð
 #(ð?ð ‡Z�Zõ?ðJ ØØØØ"&ØñAð �L‰L˜4ÑðAð õAôHôB.ðd _aô#òLò,ô8}5�—‘ô }5ô@3
�r—y‘yô 3
ôlC˜"Ÿ)™)ô CôL5C˜RŸY™Yô 5Cðz ØØØ'+Ø"&ñbð
 ðbð ðbð ðbð �C˜�H‰o Ñ$ðbð �L‰L˜4Ñðbð ‡\�\�E˜%Ÿ,™,¨¯©Ð4Ñ5Ñ5õbðT 7FØØ"&ñ(=ð
 ˜u e¨UÐ2Ñ3ð(=ð ð(=ð �L‰L˜4Ñð(=ð ‡\�\�E˜%Ÿ,™,¨¯©Ð4Ñ5Ñ5õ(=ðX osñ/Ø?D¿|¹|ÈdÑ?Rð/Øhkõ/ôdô8ôDðH ØØØØØ—‘ñ@Ø	ð@à	�‰�cÑ	ð@ð õ@ðL Ø!Øñ6 Ø‡|�|ð6 à�|‰|˜e E§L¡LÑ1Ñ1ð6 ð ð6 ð ð	6 ð
 ð6 ð ˆ5�<‰<˜Ÿ™Ð%Ñ&õ6 ðr §¡ô ô$-˜Ÿ	™	ô -ô`�—	‘	ô ô& §	¡	ô ô> B§I¡Iô ô6> §	¡	ô >ôB!�R—Y‘Yô !ôHB˜"Ÿ)™)ô Bô6�b—i‘iô ô.	0 2§9¡9ô 	0ô R§Y¡Yô ô  b§i¡iô ô&¨¯©ô ô&°·±ô ô0¨R¯Y©Yô ôB%˜bŸi™iô %ôP:°B·I±Iô :ôz¨R¯Y©Yô ôD *¨B¯I©Iô  *ôF˜Ÿ	™	ô ô 4˜RŸY™Yô 4ô$
!˜Ÿ™ô 
!ô'˜RŸY™Yô 'ô>/�r—y‘yô /ôdO˜Ÿ™ô Oòdô*Z b§i¡iô Zôz"°·	±	ô "ôJ §	¡	ô ô:¨¯	©	ô ôB8& 2§9¡9ô 8&ôvM¨¯©ô Mô``+¨¯	©	ô `+ôHN% 2§9¡9ô N%ôb%& B§I¡Iô %&ôP-�2—9‘9õ -r-   