Ë
    ÛÓ^j@·  ã                   óÄ  — d dl Z d dlmZ d dlmZ d dlZd dlmZ d dlmc m	Z
 ddlmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZmZmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0  ejb                  e2«      Z3ee G d„ de«      «       «       Z4 G d„ de&«      Z5 G d„ de'«      Z6 G d„ dejn                  «      Z8 G d„ de$«      Z9 G d„ dejn                  «      Z: G d „ d!ejn                  «      Z; G d"„ d#ejn                  «      Z< G d$„ d%ejn                  «      Z= G d&„ d'ejn                  «      Z> G d(„ d)ejn                  «      Z? G d*„ d+ejn                  «      Z@ G d,„ d-e,«      ZA G d.„ d/ej„                  «      ZC G d0„ d1ejn                  «      ZD G d2„ d3ejn                  «      ZE G d4„ d5ejn                  «      ZF G d6„ d7ejn                  «      ZG G d8„ d9ejn                  «      ZH ed:¬;«       G d<„ d=e«      «       ZI G d>„ d?«      ZJ G d@„ dAe#«      ZK G dB„ dCe)eK«      ZL G dD„ dEe(eKe«      ZM G dF„ dGeK«      ZN G dH„ dIeKe«      ZOg dJ¢ZPy)Ké    N)Ú	dataclass)Úcached_propertyé   )Úinitialization)ÚCache)ÚGenerationMixin)ÚBaseModelOutputWithPoolingÚCausalLMOutputWithPast)ÚPreTrainedModel)ÚUnpack)Úauto_docstringÚcan_return_tupleÚloggingÚtorch_compilable_check)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚChameleonPreTrainedModelÚ#ChameleonVQVAEEncoderConvDownsample)ÚLlamaAttentionÚLlamaDecoderLayerÚLlamaForCausalLMÚ
LlamaModelÚTransformersKwargs)ÚSiglipAttentioné   )Ú
Emu3ConfigÚEmu3TextConfigÚEmu3VQVAEConfigc                   ó:   — e Zd ZU dZdZej                  dz  ed<   y)ÚEmu3VQVAEModelOutputz™
    image_tokens (`torch.LongTensor` of shape `(batch_size, config.vocab_size`):
        Indices of the image tokens predicted by the VQ-VAE model.
    NÚimage_tokens)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   ÚtorchÚ
LongTensorÚ__annotations__© ó    úp/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/emu3/modular_emu3.pyr!   r!   -   s   … ñð
 -1€L�%×"Ñ" TÑ)Ô0r+   r!   c                   ó   — e Zd Zy)ÚEmu3AttentionN©r#   r$   r%   r*   r+   r,   r.   r.   8   ó   „ Ør+   r.   c                   ó  ‡ — e Zd Zdedefˆ fd„Z	 	 	 	 	 ddej                  dej                  dz  dej                  dz  de	dz  d	e
dz  d
eej                  ej                  f   dz  dee   dej                  fd„Zˆ xZS )ÚEmu3DecoderLayerÚconfigÚ	layer_idxc                 ón   •— t         ‰| �  ||«       t        j                  |j                  «      | _        y ©N)ÚsuperÚ__init__ÚnnÚDropoutÚattention_dropoutÚdropout©Úselfr3   r4   Ú	__class__s      €r,   r8   zEmu3DecoderLayer.__init__>   s(   ø€ Ü‰Ñ˜ Ô+Ü—z‘z &×":Ñ":Ó;ˆ�r+   NÚhidden_statesÚattention_maskÚposition_idsÚpast_key_valuesÚ	use_cacheÚposition_embeddingsÚkwargsÚreturnc           
      óü   — |}| j                  |«      } | j                  d||||||dœ|¤Ž\  }}	|| j                  |«      z   }|}| j                  |«      }| j	                  |«      }|| j                  |«      z   }|S )N)r@   rA   rB   rC   rD   rE   r*   )Úinput_layernormÚ	self_attnr<   Úpost_attention_layernormÚmlp)
r>   r@   rA   rB   rC   rD   rE   rF   ÚresidualÚ_s
             r,   ÚforwardzEmu3DecoderLayer.forwardB   s    € ð !ˆØ×,Ñ,¨]Ó;ˆà)˜4Ÿ>™>ð 
Ø'Ø)Ø%Ø+ØØ 3ñ
ð ñ
Ñˆ�qð ! 4§<¡<°Ó#>Ñ>ˆà ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ  4§<¡<°Ó#>Ñ>ˆØÐr+   )NNNFN)r#   r$   r%   r   Úintr8   r'   ÚTensorr(   r   ÚboolÚtupler   r   rO   Ú__classcell__©r?   s   @r,   r2   r2   =   s»   ø„ ð<˜zð <°cõ <ð /3Ø04Ø(,Ø!&ØHLñà—|‘|ðð Ÿ™ tÑ+ðð ×&Ñ&¨Ñ-ð	ð
  ™ðð ˜$‘;ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEðð Ð+Ñ,ðð 
�‰÷r+   r2   c                   óH   ‡ — e Zd ZdZdefˆ fd„Zdej                  fd„Zˆ xZ	S )ÚEmu3VQVAEVectorQuantizeraâ  
    A module for vector quantization using learned embedding vectors.

    This module implements the quantization process similar to te one described in
    the VQ-VAE (Vector Quantized Variational AutoEncoder) paper. It quantizes continuous
    input vectors into discrete codebook vectors, which are learned during training.
    Current implementation improves over previous ones by avoiding costly matrix multiplications
    and allowing for post-hoc remapping of indices.
    r3   c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        | j                  j                  j                  j                  d|j                  z  d|j                  z  «       y )Ng      ð¿g      ð?)
r7   r8   r9   Ú	EmbeddingÚcodebook_sizeÚ	embed_dimÚ	embeddingÚweightÚdataÚuniform_©r>   r3   r?   s     €r,   r8   z!Emu3VQVAEVectorQuantizer.__init__l   sb   ø€ Ü‰ÑÔÜŸ™ f×&:Ñ&:¸F×<LÑ<LÓMˆŒØ�‰×Ñ×"Ñ"×+Ñ+¨D°6×3GÑ3GÑ,GÈÈv×OcÑOcÑIcÕdr+   Úhidden_statec                 ó  — |j                   \  }}}}}|j                  ddddd«      j                  «       }|j                  d|«      }t	        j
                  |dz  dd¬«      }t	        j
                  | j                  j                  dz  d¬	«      }	dt	        j                  || j                  j                  j                  dd«      «      z  }
||	z   |
z
  }
t	        j                  |
d¬	«      }|j                  ||||«      }|S )
Nr   r   r   é   r   éÿÿÿÿT)ÚdimÚkeepdim©re   )ÚshapeÚpermuteÚ
contiguousÚviewr'   Úsumr\   r]   ÚmatmulÚ	transposeÚargmin)r>   ra   Ú
batch_sizeÚtemporalÚchannelsÚheightÚwidthÚhidden_state_flattenedÚhidden_state_sumÚembedding_sumÚ	distancesÚmin_encoding_indicess               r,   rO   z Emu3VQVAEVectorQuantizer.forwardq   sõ   € Ø8D×8JÑ8JÑ5ˆ
�H˜h¨°Ø#×+Ñ+¨A¨q°!°Q¸Ó:×EÑEÓGˆØ!-×!2Ñ!2°2°xÓ!@Ðô !Ÿ9™9Ð%;¸QÑ%>ÀAÈtÔTÐÜŸ	™	 $§.¡.×"7Ñ"7¸Ñ":ÀÔBˆð œŸ™Ð%;¸T¿^¹^×=RÑ=R×=\Ñ=\Ð]^Ð`aÓ=bÓcÑcˆ	Ø$ }Ñ4°yÑ@ˆ	ä$Ÿ|™|¨I¸1Ô=ÐØ3×8Ñ8¸ÀXÈvÐW\Ó]ÐØ#Ð#r+   )
r#   r$   r%   r&   r   r8   r'   rQ   rO   rT   rU   s   @r,   rW   rW   a   s&   ø„ ñðe˜õ eð
$ E§L¡L÷ $r+   rW   c                   ó   — e Zd Zy)ÚEmu3VQVAEEncoderConvDownsampleNr/   r*   r+   r,   r{   r{   ƒ   r0   r+   r{   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚEmu3VQVAEEncoderConvUpsamplec                 ó`   •— t         ‰| �  «        t        j                  ||ddd¬«      | _        y )Nr   r   ©Úkernel_sizeÚstrideÚpadding)r7   r8   r9   ÚConv2dÚconv)r>   Úin_channelsr?   s     €r,   r8   z%Emu3VQVAEEncoderConvUpsample.__init__ˆ   s'   ø€ Ü‰ÑÔÜ—I‘I˜k¨;ÀAÈaÐYZÔ[ˆ�	r+   c                 óX   — t        j                  |dd¬«      }| j                  |«      }|S )Nç       @Únearest©Úscale_factorÚmode)ÚFÚinterpolater„   ©r>   r@   s     r,   rO   z$Emu3VQVAEEncoderConvUpsample.forwardŒ   s(   € ÜŸ™ mÀ#ÈIÔVˆØŸ	™	 -Ó0ˆØÐr+   ©r#   r$   r%   r8   rO   rT   rU   s   @r,   r}   r}   ‡   s   ø„ ô\ör+   r}   c            	       ó\   ‡ — e Zd Zdededee   dee   fˆ fd„Zdej                  fd„Zˆ xZ	S )ÚEmu3VQVAEConv3dÚ
in_channelÚout_channelr€   r�   c                 óP  •— t         ‰	| �  «        t        |dd  |dd  «      D ��cg c]
  \  }}||z
  ‘Œ }}}d| _        |d d d…   D ]%  }| xj                  |dz  |dz  z   |dz  fz  c_        Œ' | xj                  dz  c_        t	        j
                  ||||¬«      | _        y c c}}w )Nr   r*   rd   r   )r   r   )r�   )r7   r8   Úzipr‚   r9   ÚConv3dr„   )
r>   r’   r“   r€   r�   Ú
one_kernelÚ
one_strideÚpadding_sizesÚpad_sizer?   s
            €r,   r8   zEmu3VQVAEConv3d.__init__“   s½   ø€ ô 	‰ÑÔäORÐS^Ð_`Ð_aÐSbÐdjÐklÐkmÐdnÓOo×pÑ5K°ZÀ˜ jÓ0ÐpˆÑpØˆŒØ%¡d¨ dÑ+ò 	JˆHØ�LŠL˜X¨™]¨X¸©\Ñ9¸8Àq¹=ÐIÑIŽLð	Jà�Š˜Ñ�ä—I‘IØØØØô	
ˆ�	ùó qs   ¥B"r@   c                 óh   — t        j                  || j                  «      }| j                  |«      }|S r6   )rŒ   Úpadr‚   r„   rŽ   s     r,   rO   zEmu3VQVAEConv3d.forward©   s*   € ÜŸ™˜m¨T¯\©\Ó:ˆØŸ	™	 -Ó0ˆØÐr+   )
r#   r$   r%   rP   rS   r8   r'   rQ   rO   rT   rU   s   @r,   r‘   r‘   ’   sF   ø„ ð
àð
ð ð
ð ˜3‘Zð	
ð
 �c‘
õ
ð, U§\¡\÷ r+   r‘   c                   ó`   ‡ — e Zd Zdedefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚEmu3VQVAESpatialNormr…   Úout_channelsc                 óÚ   •— t         ‰| �  «        t        j                  |ddd¬«      | _        t        j
                  ||ddd¬«      | _        t        j
                  ||ddd¬«      | _        y )Né    ç�íµ ÷Æ°>T©Únum_channelsÚ
num_groupsÚepsÚaffiner   r   r   )r7   r8   r9   Ú	GroupNormÚ
norm_layerrƒ   Úconv_yÚconv_b©r>   r…   rŸ   r?   s      €r,   r8   zEmu3VQVAESpatialNorm.__init__°   sn   ø€ ô
 	‰ÑÔÜŸ,™,Ø%ØØØô	
ˆŒô —i‘iØØØØØô
ˆŒô —i‘iØØØØØô
ˆ�r+   r@   Úquant_statesc                 ó¾   — t        j                  ||j                  dd  d¬«      }| j                  |«      }|| j	                  |«      z  | j                  |«      z   }|S )Néþÿÿÿrˆ   )Úsizer‹   )rŒ   r�   rh   r©   rª   r«   )r>   r@   r­   s      r,   rO   zEmu3VQVAESpatialNorm.forwardÌ   sX   € Ü—}‘} \¸×8KÑ8KÈBÈCÐ8PÐW`ÔaˆØŸ™¨Ó6ˆØ%¨¯©°LÓ(AÑAÀDÇKÁKÐP\ÓD]Ñ]ˆØÐr+   ©	r#   r$   r%   rP   r8   r'   rQ   rO   rT   rU   s   @r,   rž   rž   ¯   s5   ø„ ð
àð
ð õ
ð8 U§\¡\ð ÀÇÁ÷ r+   rž   c                   óH   ‡ — e Zd Zdedefˆ fd„Zdej                  fd„Zˆ xZS )ÚEmu3VQVAETemporalUpsampler’   r“   c                 óJ   •— t         ‰| �  «        t        ||dd¬«      | _        y )N©r   r   r   ©r   r   r   ©r€   r�   ©r7   r8   r‘   r„   ©r>   r’   r“   r?   s      €r,   r8   z"Emu3VQVAETemporalUpsample.__init__Ô   ó(   ø€ ô
 	‰ÑÔÜ#ØØØ!Øô	
ˆ�	r+   r@   c                 óP  — |j                   \  }}}}}|j                  ddddd«      j                  «       j                  |d|«      }t	        j
                  |dd¬	«      }|j                  ||||d«      j                  ddddd«      j                  «       }| j                  |«      }|S )
Nr   r   r   rc   r   rd   r‡   rˆ   r‰   )rh   ri   rj   rk   rŒ   r�   r„   )r>   r@   rp   rr   rq   rs   rt   s          r,   rO   z!Emu3VQVAETemporalUpsample.forwardá   sª   € Ø8E×8KÑ8KÑ5ˆ
�H˜h¨°Ø%×-Ñ-¨a°°A°q¸!Ó<×GÑGÓI×NÑNÈzÐ[]Ð_gÓhˆÜŸ™ mÀ#ÈIÔVˆØ%×*Ñ*¨:°xÀÈÐPRÓS×[Ñ[Ð\]Ð_`ÐbcÐefÐhiÓj×uÑuÓwˆØŸ	™	 -Ó0ˆØÐr+   r±   rU   s   @r,   r³   r³   Ó   s*   ø„ ð
àð
ð õ
ð U§\¡\÷ r+   r³   c                   óH   ‡ — e Zd Zdedefˆ fd„Zdej                  fd„Zˆ xZS )ÚEmu3VQVAETemporalDownsampler’   r“   c                 óJ   •— t         ‰| �  «        t        ||dd¬«      | _        y )N)rc   r   r   )r   r   r   r·   r¸   r¹   s      €r,   r8   z$Emu3VQVAETemporalDownsample.__init__ë   rº   r+   r@   c                 ó(   — | j                  |«      }|S r6   )r„   rŽ   s     r,   rO   z#Emu3VQVAETemporalDownsample.forwardø   s   € ØŸ	™	 -Ó0ˆØÐr+   r±   rU   s   @r,   r½   r½   ê   s*   ø„ ð
àð
ð õ
ð U§\¡\÷ r+   r½   c                   ó(   ‡ — e Zd Z	 dˆ fd„	Zd„ Zˆ xZS )ÚEmu3VQVAETemporalResnetBlockc                 óp  •— t         ‰| �  «        || _        |€|n|| _        t	        j
                  |«      | _        t        ||dd¬«      | _        t	        j
                  |«      | _	        t        ||dd¬«      | _
        | j                  | j                  k7  r t	        j                  ||ddd¬«      | _        y y )Nrµ   r¶   r·   r   r   r   )r7   r8   r…   rŸ   r9   ÚBatchNorm3dÚnorm1r‘   Úconv1Únorm2Úconv2r–   Únin_shortcutr¬   s      €r,   r8   z%Emu3VQVAETemporalResnetBlock.__init__þ   s´   ø€ ô
 	‰ÑÔØ&ˆÔØ+7Ð+?™KÀ\ˆÔä—^‘^ KÓ0ˆŒ
Ü$ØØØ!Øô	
ˆŒ
ô —^‘^ LÓ1ˆŒ
Ü$ØØØ!Øô	
ˆŒ
ð ×Ñ˜t×0Ñ0Ò0Ü "§	¡	ØØØØØô!ˆDÕð 1r+   c                 óL  — |}| j                  |«      }|t        j                  |«      z  }| j                  |«      }| j	                  |«      }|t        j                  |«      z  }| j                  |«      }| j                  | j                  k7  r| j                  |«      }||z   S r6   )	rÄ   r'   ÚsigmoidrÅ   rÆ   rÇ   r…   rŸ   rÈ   )r>   r@   rM   s      r,   rO   z$Emu3VQVAETemporalResnetBlock.forward  s”   € Ø ˆØŸ
™
 =Ó1ˆØœŸ™ }Ó5Ñ5ˆØŸ
™
 =Ó1ˆàŸ
™
 =Ó1ˆØœŸ™ }Ó5Ñ5ˆØŸ
™
 =Ó1ˆà×Ñ˜t×0Ñ0Ò0Ø×(Ñ(¨Ó2ˆHà˜-Ñ'Ð'r+   r6   r�   rU   s   @r,   rÁ   rÁ   ý   s   ø„ ð õö@(r+   rÁ   c                   ó~   ‡ — e Zd Z	 	 ddededz  dedz  fˆ fd„Zd	dej                  dej                  dz  fd„Zˆ xZS )
ÚEmu3VQVAEResnetBlockNr…   rŸ   Úquant_channelsc                 ó  •— t         ‰| �  «        || _        |€|n|}|| _        || _        |€=t        j                  |ddd¬«      | _        t        j                  |ddd¬«      | _        n"t        ||«      | _        t        ||«      | _        t        j                  ||ddd¬«      | _        t        j                  ||ddd¬«      | _        | j                  | j                  k7  r t        j                  ||ddd¬«      | _        y y )	Nr¡   r¢   Tr£   r   r   r   r   )r7   r8   r…   rŸ   rÍ   r9   r¨   rÄ   rÆ   rž   rƒ   rÅ   rÇ   rÈ   )r>   r…   rŸ   rÍ   r?   s       €r,   r8   zEmu3VQVAEResnetBlock.__init__/  s  ø€ ô 	‰ÑÔØ&ˆÔØ&2Ð&:‘{ÀˆØ(ˆÔØ,ˆÔàÐ!ÜŸ™°;È2ÐSWÐ`dÔeˆDŒJÜŸ™°<ÈBÐTXÐaeÔfˆD�Jä-¨n¸kÓJˆDŒJÜ-¨n¸lÓKˆDŒJä—Y‘YØØØØØô
ˆŒ
ô —Y‘YØØØØØô
ˆŒ
ð ×Ñ˜t×0Ñ0Ò0Ü "§	¡	ØØØØØô!ˆDÕð 1r+   r@   c                 óv  — | j                   €dn|f}|} | j                  |g|¢­Ž }|t        j                  |«      z  }| j	                  |«      } | j
                  |g|¢­Ž }|t        j                  |«      z  }| j                  |«      }| j                  | j                  k7  r| j                  |«      }||z   S ©Nr*   )
rÍ   rÄ   r'   rÊ   rÅ   rÆ   rÇ   r…   rŸ   rÈ   )r>   r@   rÍ   Ú	norm_argsrM   s        r,   rO   zEmu3VQVAEResnetBlock.forward[  s·   € Ø×-Ñ-Ð5‘B¸NÐ;Lˆ	à ˆØ"˜Ÿ
™
 =Ð=°9Ò=ˆØœŸ™ }Ó5Ñ5ˆØŸ
™
 =Ó1ˆà"˜Ÿ
™
 =Ð=°9Ò=ˆØœŸ™ }Ó5Ñ5ˆØŸ
™
 =Ó1ˆà×Ñ˜t×0Ñ0Ò0Ø×(Ñ(¨Ó2ˆHà˜-Ñ'Ð'r+   )NNr6   r±   rU   s   @r,   rÌ   rÌ   .  sV   ø„ ð $(Ø%)ñ	*àð*ð ˜D‘jð*ð ˜d™
õ	*ñX( U§\¡\ð (À5Ç<Á<ÐRVÑCV÷ (r+   rÌ   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚEmu3VQVAEAttentionBlockr3   c                 ó2   •— t         ‰| �  |«       d| _        y )Nr   )r7   r8   Únum_key_value_groupsr`   s     €r,   r8   z Emu3VQVAEAttentionBlock.__init__n  s   ø€ Ü‰Ñ˜Ô ð %&ˆÕ!r+   )r#   r$   r%   r   r8   rT   rU   s   @r,   rÓ   rÓ   m  s   ø„ ð&˜÷ &ñ &r+   rÓ   c                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )ÚEmu3VQVAEGroupNormzá
    Same as the torch GroupNorm with the only difference that this ones accepts
    an optional kwarg `quant_states` which is not used. This class makes it easier to
    use SpatialNorm or GroupNorm without conditionals
    c                 ó$   •— t        ‰| �  di |¤Ž y rÐ   )r7   r8   )r>   rF   r?   s     €r,   r8   zEmu3VQVAEGroupNorm.__init__|  s   ø€ Ü‰ÑÑ"˜6Ó"r+   c                 ó„   — t        j                  || j                  | j                  | j                  | j
                  «      S r6   )rŒ   Ú
group_normr¥   r]   Úbiasr¦   )r>   Úinputr­   s      r,   rO   zEmu3VQVAEGroupNorm.forward  s)   € Ü�|‰|˜E 4§?¡?°D·K±KÀÇÁÈDÏHÉHÓUÐUr+   r6   )r#   r$   r%   r&   r8   rO   rT   rU   s   @r,   r×   r×   u  s   ø„ ñô#÷Vr+   r×   c                   ó`   ‡ — e Zd Zdˆ fd„	Zddej
                  dej
                  dz  fd„Zˆ xZS )ÚEmu3VQVAEMiddleBlockNc                 óÞ   •— t         ‰| �  «        t        |||¬«      | _        t	        |«      | _        |€t        |ddd¬«      | _        nt        ||«      | _        t        |||¬«      | _	        y )N©r…   rŸ   rÍ   r¡   r¢   Tr£   )
r7   r8   rÌ   Úblock_1rÓ   Úattn_1r×   Ú	attn_normrž   Úblock_2)r>   r3   r…   rÍ   r?   s       €r,   r8   zEmu3VQVAEMiddleBlock.__init__„  so   ø€ Ü‰ÑÔä+Ø#Ø$Ø)ô
ˆŒô
 .¨fÓ5ˆŒØÐ!Ü/¸[ÐUWÐ]aÐjnÔoˆD�Nä1°.À+ÓNˆDŒNä+Ø#Ø$Ø)ô
ˆ�r+   r@   r­   c                 ób  — | j                  ||«      }|}| j                  ||«      }|j                  \  }}}}|j                  ||||z  «      j	                  dd«      }| j                  |«      d   }|j                  ||||«      j                  dddd«      }||z   }| j                  ||«      }|S )Nr   r   r   r   )	rá   rã   rh   rk   rn   râ   Úreshaperi   rä   )r>   r@   r­   rM   rp   rr   rs   rt   s           r,   rO   zEmu3VQVAEMiddleBlock.forward˜  sÀ   € ØŸ™ ]°LÓAˆØ ˆØŸ™ }°lÓCˆØ.;×.AÑ.AÑ+ˆ
�H˜f eØ%×*Ñ*¨:°xÀÈ%ÁÓP×ZÑZÐ[\Ð^_Ó`ˆØŸ™ MÓ2°1Ñ5ˆØ%×-Ñ-¨j¸&À%ÈÓR×ZÑZÐ[\Ð^_ÐabÐdeÓfˆØ  =Ñ0ˆØŸ™ ]°LÓAˆØÐr+   r6   ©r#   r$   r%   r8   r'   ÚFloatTensorrO   rT   rU   s   @r,   rÞ   rÞ   ƒ  s-   ø„ õ
ñ(
 U×%6Ñ%6ð 
Àe×FWÑFWÐZ^ÑF^÷ 
r+   rÞ   c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚEmu3VQVAEDownBlockc           
      óÌ  •— t         ‰| �  «        t        |j                  «      | _        |j
                  | _        |j                  }|j                  }dt        |«      z   }|| _        t        j                  «       | _        t        | j                  «      D �]K  }t        j                  «       }t        j                  «       }t        j                  «       }|||   z  }	|||   z  }
t        | j
                  «      D ]~  }|j                  t        |	|
¬«      «       |
}	|j                  €Œ.||j                  v sŒ=|j                  t!        |«      «       |j                  t        j"                  |	ddd¬«      «       Œ€ t        j$                  «       }||_        ||_        ||_        || j                  dz
  k7  rt-        |	«      |_        | j                  j                  |«       �ŒN y )N)r   ©r…   rŸ   r¡   r¢   Tr£   r   )r7   r8   ÚlenÚchannel_multiplierÚnum_resolutionsÚnum_res_blocksÚbase_channelsrS   Úin_channel_multiplierr9   Ú
ModuleListÚdownÚrangeÚappendrÌ   Úattn_resolutionsrÓ   r¨   ÚModuleÚblockÚattnÚ
attn_normsr{   Ú
downsample)r>   r3   rñ   rî   rò   Úi_levelrù   rú   rû   Úblock_inÚ	block_outÚi_blockrô   r?   s                €r,   r8   zEmu3VQVAEDownBlock.__init__¦  s¢  ø€ Ü‰ÑÔä" 6×#<Ñ#<Ó=ˆÔØ$×3Ñ3ˆÔØ×,Ñ,ˆØ#×6Ñ6Ðà $¤uÐ-?Ó'@Ñ @ÐØ%:ˆÔ"Ü—M‘M“OˆŒ	Ü˜T×1Ñ1Ó2ó 	#ˆGÜ—M‘M“OˆEÜ—=‘=“?ˆDÜŸ™›ˆJØ$Ð'<¸WÑ'EÑEˆHØ%Ð(:¸7Ñ(CÑCˆIÜ  ×!4Ñ!4Ó5ò 
q�Ø—‘Ü(Ø$,Ø%.ôôð %�Ø×*Ñ*Ñ6¸7Àf×F]ÑF]Ò;]Ø—K‘KÔ 7¸Ó ?Ô@Ø×%Ñ%¤b§l¡lÀÐUWÐ]aÐjnÔ&oÕpð
qô —9‘9“;ˆDØˆDŒJØˆDŒIØ(ˆDŒOØ˜$×.Ñ.°Ñ2Ò2Ü"@ÀÓ"J�”Ø�I‰I×Ñ˜TÖ"ñ1	#r+   r@   c                 ó>  — t        | j                  «      D �]  \  }}t        | j                  «      D ]Á  } |j                  |   |«      }t        |j                  «      dkD  sŒ1|} |j                  |   |«      }|j                  \  }}}}	|j                  ||||	z  «      j                  dd«      } |j                  |   |«      d   }|j                  |||	|«      j                  dddd«      }||z   }ŒÃ || j                  dz
  k7  sŒó|j                  |«      }�Œ |S )Nr   r   r   r   )Ú	enumeraterô   rõ   rð   rù   rí   rú   rû   rh   rk   rn   ræ   ri   rï   rü   )
r>   r@   rý   Úblocksr   rM   rp   rr   rs   rt   s
             r,   rO   zEmu3VQVAEDownBlock.forwardË  s5  € Ü(¨¯©Ó3ó 	A‰OˆG�VÜ  ×!4Ñ!4Ó5ò =�Ø 5 §¡¨WÑ 5°mÓ D�Ü�v—{‘{Ó# aÓ'Ø,�HØ$> F×$5Ñ$5°gÑ$>¸}Ó$M�Mà:G×:MÑ:MÑ7�J ¨&°%Ø$1×$6Ñ$6°zÀ8ÈVÐV[É^Ó$\×$fÑ$fÐghÐjkÓ$l�MØ$8 F§K¡K°Ñ$8¸Ó$GÈÑ$J�Mà$1×$9Ñ$9¸*ÀfÈeÐU]Ó$^×$fÑ$fÐghÐjkÐmnÐpqÓ$r�MØ$,¨}Ñ$<‘Mð=ð ˜$×.Ñ.°Ñ2Ó2Ø &× 1Ñ 1°-Ó @’ð	Að" Ðr+   rç   rU   s   @r,   rê   rê   ¥  s   ø„ ô##ðJ U×%6Ñ%6÷ r+   rê   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚEmu3VQVAEUpBlockc           	      ó¨  •— t         ‰| �  «        t        |j                  «      | _        |j
                  | _        |j                  }|j                  |j                  d   z  }t        j                  «       | _
        t        t        | j                  «      «      D �]5  }t        j                  «       }t        j                  «       }t        j                  «       }|j                  |j                  |   z  }t        | j
                  dz   «      D ]e  }	|j                  t        |||¬«      «       |}||j                  v sŒ1|j                  t!        |«      «       |j                  t#        ||«      «       Œg t        j$                  «       }
||
_        ||
_        ||
_        |dk7  rt-        |«      |
_        | j                  j1                  d|
«       �Œ8 y )Nrd   r   rà   r   )r7   r8   rí   rî   rï   rð   r[   rñ   r9   ró   ÚupÚreversedrõ   rö   rÌ   r÷   rÓ   rž   rø   rù   rú   rû   r}   ÚupsampleÚinsert)r>   r3   rÍ   rþ   rý   rù   rú   rû   rÿ   r   r  r?   s              €r,   r8   zEmu3VQVAEUpBlock.__init__á  s  ø€ Ü‰ÑÔä" 6×#<Ñ#<Ó=ˆÔØ$×3Ñ3ˆÔà×)Ñ)ˆØ×'Ñ'¨&×*CÑ*CÀBÑ*GÑGˆä—-‘-“/ˆŒÜ¤ d×&:Ñ&:Ó ;Ó<ó 	"ˆGÜ—M‘M“OˆEÜ—=‘=“?ˆDÜŸ™›ˆJØ×,Ñ,¨v×/HÑ/HÈÑ/QÑQˆIÜ  ×!4Ñ!4°qÑ!8Ó9ò V�Ø—‘Ü(Ø$,Ø%.Ø'5ôôð %�Ø˜f×5Ñ5Ò5Ø—K‘KÔ 7¸Ó ?Ô@Ø×%Ñ%Ô&:¸>È8Ó&TÕUðVô —‘“ˆBØˆBŒHØˆBŒGØ&ˆBŒMØ˜!Š|Ü:¸8ÓD�”à�G‰G�N‰N˜1˜bÖ!ñ3	"r+   r@   r­   c                 óh  — t        | j                  d d d…   «      D �]  \  }}t        | j                  dz   «      D ]Ã  } |j                  |   ||«      }t        |j                  «      dkD  sŒ2|} |j                  |   ||«      }|j                  \  }}}	}
|j                  |||	|
z  «      j                  dd«      } |j                  |   |«      d   }|j                  ||	|
|«      j                  dddd«      }||z   }ŒÅ |t        | j                  «      dz
  k7  s�Œ|j                  |«      }�Œ |S )Nrd   r   r   r   r   )r  r  rõ   rð   rù   rí   rú   rû   rh   rk   rn   ræ   ri   r	  )r>   r@   r­   rý   r  r   rM   rp   rr   rs   rt   s              r,   rO   zEmu3VQVAEUpBlock.forward  sD  € Ü(¨¯©±°2°©Ó7ó 	?‰OˆG�VÜ  ×!4Ñ!4°qÑ!8Ó9ò =�Ø 5 §¡¨WÑ 5°mÀ\Ó R�Ü�v—{‘{Ó# aÓ'Ø,�HØ$> F×$5Ñ$5°gÑ$>¸}ÈlÓ$[�Mà:G×:MÑ:MÑ7�J ¨&°%Ø$1×$6Ñ$6°zÀ8ÈVÐV[É^Ó$\×$fÑ$fÐghÐjkÓ$l�MØ$8 F§K¡K°Ñ$8¸Ó$GÈÑ$J�Mà$1×$9Ñ$9¸*ÀfÈeÐU]Ó$^×$fÑ$fÐghÐjkÐmnÐpqÓ$r�MØ$,¨}Ñ$<‘Mð=ð œ#˜dŸg™g›,¨Ñ*Ô*Ø &§¡°Ó >’ð	?ð  Ðr+   rç   rU   s   @r,   r  r  à  s(   ø„ ô#"ðJ U×%6Ñ%6ð Àe×FWÑFW÷ r+   r  c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚEmu3VQVAEEncoderc                 ó˜  •— t         ‰| �  «        |j                  }|j                  }|j                  }|j
                  }|j                  }|rd|z  n|}||d   z  }t        j                  j                  ||ddd¬«      | _
        t        |«      | _        t        ||«      | _        t        j                  j                  d|dd¬	«      | _        t        j                  j                  ||ddd¬«      | _        t%        t'        j(                  |j*                  «      «      }	t        j,                  «       | _        t        j,                  «       | _        t3        |	«      D ])  }
t5        ||«      }| j.                  j7                  |«       Œ+ t3        |j8                  «      D ]*  }t;        ||¬
«      }| j0                  j7                  |«       Œ, y )Nr   rd   r   r   r   r¡   r¢   T)r¥   r¤   r¦   r§   rì   )r7   r8   rñ   r…   Údouble_latentÚlatent_channelsrî   r'   r9   rƒ   Úconv_inrê   Ú
down_blockrÞ   Úmiddle_blockr¨   Únorm_outÚconv_outrP   ÚmathÚlog2Útemporal_downsample_factorró   Ú	time_convÚtime_res_stackrõ   r½   rö   rð   rÁ   )r>   r3   rñ   r…   r  r  rî   rŸ   rþ   Útemporal_down_blocksÚir„   rN   Útime_res_convr?   s                 €r,   r8   zEmu3VQVAEEncoder.__init__  s”  ø€ Ü‰ÑÔà×,Ñ,ˆØ×(Ñ(ˆØ×,Ñ,ˆØ ×0Ñ0ˆØ#×6Ñ6ÐÙ.;�q˜?Ò*ÀˆØ Ð#5°bÑ#9Ñ9ˆä—x‘x—‘ {°MÈqÐYZÐde�ÓfˆŒÜ,¨VÓ4ˆŒÜ0°¸ÓBˆÔäŸ™×*Ñ*°bÀxÐUYÐbfÐ*ÓgˆŒÜŸ™Ÿ™ØØØØØð (ó 
ˆŒô  #¤4§9¡9¨V×-NÑ-NÓ#OÓPÐÜŸ™›ˆŒÜ Ÿm™m›oˆÔäÐ+Ó,ò 	(ˆAÜ.¨|¸\ÓJˆDØ�N‰N×!Ñ! $Õ'ð	(ô �v×,Ñ,Ó-ò 	6ˆAÜ8Ø(Ø)ôˆMð ×Ñ×&Ñ& }Õ5ñ	6r+   Úpixel_valuesc                 óh  — |j                   d   } |j                  dg|j                   dd  ¢­Ž }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }|t        j                  |«      z  }| j                  |«      } |j                  d|g|j                   dd  ¢­Ž }|j                  ddddd«      }| j                  D ]"  } ||«      }|t        j                  |«      z  }Œ$ | j                  D ]
  } ||«      }Œ |j                  ddddd«      }|S )Nr   rd   r   r   r   rc   )rh   ræ   r  r  r  r  r'   rÊ   r  ri   r  r  )r>   r  Útemporal_dimr@   r„   Úlayers         r,   rO   zEmu3VQVAEEncoder.forwardB  sH  € Ø#×)Ñ)¨!Ñ,ˆØ+�|×+Ñ+¨BÐH°×1CÑ1CÀAÀBÐ1GÒHˆð Ÿ™ \Ó2ˆØŸ™¨Ó6ˆØ×)Ñ)¨-Ó8ˆð Ÿ™ mÓ4ˆØœŸ™ }Ó5Ñ5ˆØŸ™ mÓ4ˆà-˜×-Ñ-¨b°,ÐYÀ×ATÑATÐUVÐUWÐAXÒYˆØ%×-Ñ-¨a°°A°q¸!Ó<ˆð —N‘Nò 	:ˆDÙ  Ó/ˆMØœUŸ]™]¨=Ó9Ñ9‰Mð	:ð ×(Ñ(ò 	1ˆEÙ! -Ó0‰Mð	1ð &×-Ñ-¨a°°A°q¸!Ó<ˆàÐr+   )r#   r$   r%   r8   r'   r(   rO   rT   rU   s   @r,   r  r    s   ø„ ô%6ðN E×$4Ñ$4÷ r+   r  c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚEmu3VQVAEDecoderr3   c                 ó¬  •— t         ‰	| �  «        |j                  }|j                  |j                  d   z  }t        j                  «       | _        t        |j                  «      D ]>  }t        |j                  |j                  ¬«      }| j                  j                  |«       Œ@ t        t        j                  |j                   «      «      }t        j                  «       | _        t        |«      D ]=  }t%        |j                  |j                  «      }| j"                  j                  |«       Œ? t        j&                  |j                  |ddd¬«      | _        t+        |||¬«      | _        t/        |«      | _        |j                  |j                  d   z  }t3        ||«      | _        t        j&                  ||j6                  ddd¬«      | _        y )Nrd   rì   r   r   r   )rÍ   r   )r7   r8   r[   rñ   rî   r9   ró   r  rõ   rð   rÁ   r  rö   rP   r  r  r  r  r³   rƒ   r  rÞ   r  r  Úup_blockrž   r  rŸ   r  )
r>   r3   rÍ   rþ   rN   r  Útemp_upsample_block_numr  r„   r?   s
            €r,   r8   zEmu3VQVAEDecoder.__init__a  sŠ  ø€ Ü‰ÑÔà×)Ñ)ˆØ×'Ñ'¨&×*CÑ*CÀBÑ*GÑGˆÜ Ÿm™m›oˆÔÜ�v×,Ñ,Ó-ò 	6ˆAÜ8Ø"×2Ñ2À×AWÑAWôˆMð ×Ñ×&Ñ& }Õ5ð		6ô #&¤d§i¡i°×0QÑ0QÓ&RÓ"SÐÜŸ™›ˆŒÜÐ.Ó/ò 	(ˆAÜ,¨V×-CÑ-CÀV×E[ÑE[Ó\ˆDØ�N‰N×!Ñ! $Õ'ð	(ô —y‘yØ×"Ñ"ØØØØô
ˆŒô 1°¸ÐR`ÔaˆÔÜ(¨Ó0ˆŒà×'Ñ'¨&×*CÑ*CÀAÑ*FÑFˆÜ,¨^¸XÓFˆŒÜŸ	™	ØØ×ÑØØØô
ˆ�r+   r@   r­   c                 ó¶  — t        j                  ||fd¬«      }|j                  ddddd«      }| j                  D ]
  } ||«      }Œ | j                  D ]"  } ||«      }|t        j
                  |«      z  }Œ$ |j                  ddddd«      }t        j                  |dd¬«      \  }} |j                  dg|j                  dd  ¢­Ž } |j                  dg|j                  dd  ¢­Ž }| j                  |«      }| j                  ||«      }| j                  ||«      }| j                  ||«      }|t        j
                  |«      z  }| j                  |«      }|S )Nr   rg   r   r   r   rc   rd   )r'   Úcatri   r  r  rÊ   Úchunkræ   rh   r  r  r%  r  r  )r>   r@   r­   Úhidden_quant_statesr!  s        r,   rO   zEmu3VQVAEDecoder.forwardˆ  sp  € Ü#Ÿi™i¨¸Ð(EÈ1ÔMÐØ1×9Ñ9¸!¸QÀÀ1ÀaÓHÐð ×(Ñ(ò 	=ˆEÙ"'Ð(;Ó"<Ñð	=ð —^‘^ò 	FˆEÙ"'Ð(;Ó"<ÐØ¤5§=¡=Ð1DÓ#EÑEÑð	Fð 2×9Ñ9¸!¸QÀÀ1ÀaÓHÐÜ&+§k¡kÐ2EÀqÈaÔ&PÑ#ˆ�|Ø-˜×-Ñ-¨bÐK°=×3FÑ3FÀqÀrÐ3JÒKˆØ+�|×+Ñ+¨BÐH°×1CÑ1CÀAÀBÐ1GÒHˆàŸ™ ]Ó3ˆð ×)Ñ)¨-¸ÓFˆØŸ™ m°\ÓBˆàŸ™ m°\ÓBˆØœŸ™ }Ó5Ñ5ˆØŸ™ mÓ4ˆàÐr+   )	r#   r$   r%   r   r8   r'   rQ   rO   rT   rU   s   @r,   r#  r#  `  s+   ø„ ð%
˜õ %
ðN U§\¡\ð ÀÇÁ÷ r+   r#  aR  
    The VQ-VAE model used in Emu3 for encoding/decoding images into discrete tokens.
    This model follows the "Make-a-scene: Scene-based text-to-image generation with human priors" paper from
    [ Oran Gafni, Adam Polyak, Oron Ashual, Shelly Sheynin, Devi Parikh, and Yaniv
    Taigman](https://huggingface.co/papers/2203.13131).
    ©Úcustom_introc            
       ó  ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
dZg d¢ZeegedœZ ej$                  «       ˆ fd„«       Zdefˆ fd	„Zeedej.                  d
ej.                  dee   defd„«       «       Zdej.                  fd„Zˆ xZS )Ú	Emu3VQVAEr3   Ú
emuvideovqr  )ÚimageT)rÁ   rÓ   rÌ   rW   ©r@   Ú
attentionsc                 ót  •— t         ‰| �  |«       t        |t        j                  t        j
                  f«      r t        j                  |j                  dd¬«       |j                  �qt        j                  j                  j                  |j                  «      \  }}dt        j                  |«      z  }t        j                  |j                  | |«       y y t        |t        j                  «      r¹t        j                   |j                  t        j                  d«      ¬«       |j                  �xt        j                  j                  j                  |j                  «      \  }}|dkD  rdt        j                  |«      z  nd}t        j                  |j                  | |«       y y t        |t        j"                  «      rqt        j$                  |j                  «       |j&                  �Et)        |j                  dd	«      s-t        j*                  |j                  |j&                     «       y y y y )
NÚfan_outÚrelu)r‹   Únonlinearityr   é   )Úar   Ú_is_hf_initializedF)r7   Ú_init_weightsÚ
isinstancer9   rƒ   r–   ÚinitÚkaiming_normal_r]   rÛ   r'   Ú_calculate_fan_in_and_fan_outr  Úsqrtr_   ÚLinearÚkaiming_uniform_rY   Únormal_Úpadding_idxÚgetattrÚzeros_)r>   ÚmoduleÚfan_inrN   Úboundr?   s        €r,   r:  zEmu3VQVAE._init_weightsÂ  s‡  ø€ ä‰Ñ˜fÔ%Ü�fœrŸy™y¬"¯)©)Ð4Ô5Ü× Ñ  §¡°YÈVÕTØ�{‰{Ð&Ü!ŸH™HŸM™M×GÑGÈÏÉÓV‘	�˜ØœDŸI™I fÓ-Ñ-�Ü—‘˜fŸk™k¨E¨6°5Õ9ð 'ô ˜¤§	¡	Ô*Ü×!Ñ! &§-¡-´4·9±9¸Q³<Õ@Ø�{‰{Ð&Ü!ŸH™HŸM™M×GÑGÈÏÉÓV‘	�˜Ø17¸!²˜œDŸI™I fÓ-Ò-À�Ü—‘˜fŸk™k¨E¨6°5Õ9ð 'ô ˜¤§¡Ô-Ü�L‰L˜Ÿ™Ô'à×!Ñ!Ð-´g¸f¿m¹mÐMaÐchÔ6iÜ—‘˜FŸM™M¨&×*<Ñ*<Ñ=Õ>ð 7jÐ-ð .r+   c                 óò  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        |«      | _        dt        |j                  «      dz
  z  | _        t        |j                  |j                  dd¬«      | _        t        |j                  |j                  dd¬«      | _        dt        |j                  «      dz
  z  | _        | j%                  «        | j'                  «        y )Nr   r   )r   r   r   r¶   r·   )r7   r8   r3   r  Úencoderr#  ÚdecoderrW   Úquantizerí   rî   Úvision_spatial_factorr‘   r  r[   Ú
quant_convÚpost_quant_convÚspatial_scale_factorÚevalÚ	post_initr`   s     €r,   r8   zEmu3VQVAE.__init__×  sÑ   ø€ Ü‰Ñ˜Ô àˆŒä'¨Ó/ˆŒÜ'¨Ó/ˆŒÜ0°Ó8ˆŒØ%&¬3¨v×/HÑ/HÓ+IÈAÑ+MÑ%NˆÔ"ä)Ø×"Ñ" F×$4Ñ$4À)ÐT]ô
ˆŒô  /Ø×Ñ˜f×4Ñ4À)ÐT]ô 
ˆÔð %&¬#¨f×.GÑ.GÓ*HÈ1Ñ*LÑ$MˆÔ!Ø�	‰	Œà�‰Õr+   Úimage_sizesrF   rG   c                 óœ  — |j                   dk(  }|rL| j                  j                  }|j                  \  }}}}	|j	                  d«      j                  d|ddd«      }n|j                  \  }}}}}	| j                  |«      }
|
j                  ddddd«      }| j                  |«      }|j                  ddddd«      }| j                  |«      }|r|j                  d«      n|}t        ||«      D ��cg c]B  \  }}|d t        |d   | j                  z  «      …d t        |d   | j                  z  «      …f   ‘ŒD }}}t        |
|¬«      S c c}}w )Nrc   r   r   r   r   )Úlast_hidden_stater"   )Úndimr3   r  rh   Ú	unsqueezeÚrepeatrJ  ri   rN  rL  Úsqueezer•   rP   rM  r!   )r>   r  rS  rF   Úis_imagerq   rp   rr   rs   rt   r@   Úconv_hidden_statesÚcodesr"   Úsingle_imager°   s                   r,   ÚencodezEmu3VQVAE.encodeì  sl  € ð
  ×$Ñ$¨Ñ)ˆÙØ—{‘{×=Ñ=ˆHØ2>×2DÑ2DÑ/ˆJ˜ &¨%Ø'×1Ñ1°!Ó4×;Ñ;¸A¸xÈÈAÈqÓQ‰Là<H×<NÑ<NÑ9ˆJ˜ (¨F°EàŸ™ \Ó2ˆð +×2Ñ2°1°a¸¸A¸qÓAÐØ!Ÿ_™_Ð-?Ó@Ðð 0×7Ñ7¸¸1¸aÀÀAÓFÐØ—‘Ð0Ó1ˆá+3�u—}‘} QÔ'¸ˆô '*¨,¸Ó&D÷
á"�˜dð ÐDœ3˜t A™w¨×)CÑ)CÑCÓDÐDÐFqÌÈDÐQRÉGÐVZ×VpÑVpÑLpÓHqÐFqÐqÓrð
ˆñ 
ô
 $Ø+Ø%ô
ð 	
ùó
s   Ã1AEr@   c                 ó¬  — |j                   dk(  }|r|j                  d«      }|j                  \  }}}}| j                  j	                  |j                  «       «      }|j                  d   }|j                  |||||«      j                  ddddd«      j                  «       }| j                  |«      }	|j                  ddddd«      }|	j                  ddddd«      }	| j                  |	|«      }
|
j                  ||| j                  j                  z  | j                  j                  || j                  z  || j                  z  «      }
|r	|
d d …df   S |
S )Nr   r   rd   r   rc   r   )rV  rW  rh   rL  r\   Úflattenrk   ri   rj   rO  rK  ræ   r3   r  rŸ   rP  )r>   r@   rZ  rp   rq   rs   rt   Úquantrr   Ú
post_quantÚvideos              r,   ÚdecodezEmu3VQVAE.decode  sK  € Ø ×%Ñ%¨Ñ*ˆÙØ)×3Ñ3°AÓ6ˆMà.;×.AÑ.AÑ+ˆ
�H˜f eØ—‘×'Ñ'¨×(=Ñ(=Ó(?Ó@ˆà—;‘;˜r‘?ˆØ—
‘
˜: x°¸ÀÓI×QÑQÐRSÐUVÐXYÐ[\Ð^_Ó`×kÑkÓmˆØ×)Ñ)¨%Ó0ˆ
à—‘˜a  A q¨!Ó,ˆØ×'Ñ'¨¨1¨a°°AÓ6ˆ
à—‘˜Z¨Ó/ˆØ—‘ØØ�t—{‘{×=Ñ=Ñ=Ø�K‰K×$Ñ$Ø�T×.Ñ.Ñ.Ø�D×-Ñ-Ñ-ó
ˆñ 'ˆu’Q˜�T‰{Ð1¨EÐ1r+   )r#   r$   r%   r   r)   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendÚ_no_split_modulesrÌ   rÁ   rÓ   Ú_can_record_outputsr'   Úno_gradr:  r8   r   r   rQ   r   r   r!   r^  rd  rT   rU   s   @r,   r.  r.  ¦  sÔ   ø… ð ÓØ$ÐØ$€OØ!ÐØ€NØÐØÐØ"&ÐòÐð /Ð0LÐMØ-ñÐð
 €U‡]�]ƒ_ó?ó ð?ð(˜õ ð*  Øð
Ø!ŸL™Lð
Ø7<·|±|ð
ØOUÐVhÑOið
à	ò
ó ó  ð
ðB2 E§L¡L÷ 2r+   r.  c                   óì   — e Zd ZdZd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zd	eej                     d
ej                  fd„Zd	ej                  d
ej                  fd„Zy)ÚEmu3ImageVocabularyMappingzM
    A class for mapping discrete image tokens from VQGAN to BPE tokens.
    c                 ój   — || _         |j                  d«      | _        |j                  d«      | _        y )Nz<|extra_200|>z<image>)Ú	vocab_mapÚgetÚeol_token_idÚimage_token_id)r>   rr  s     r,   r8   z#Emu3ImageVocabularyMapping.__init__.  s+   € Ø"ˆŒØ%ŸM™M¨/Ó:ˆÔØ'Ÿm™m¨IÓ6ˆÕr+   c           	      óž   — t        | j                  j                  «       D ��cg c]  \  }}|j                  d«      sŒ|‘Œ c}}«      S c c}}w ©Nz<|visual token©Úsortedrr  ÚitemsÚ
startswith©r>   ÚnameÚvals      r,   r"   z'Emu3ImageVocabularyMapping.image_tokens3  s8   € ä¨D¯N©N×,@Ñ,@Ó,B×h™y˜t SÀdÇoÁoÐVfÕFg’sÓhÓiÐiùÓhó
   £A	
½A	
c           	      óž   — t        | j                  j                  «       D ��cg c]  \  }}|j                  d«      sŒ|‘Œ c}}«      S c c}}w rw  rx  r|  s      r,   Úimage_tokens_strz+Emu3ImageVocabularyMapping.image_tokens_str7  s8   € ä¨T¯^©^×-AÑ-AÓ-C×i¡	  cÀtÇÁÐWgÕGh’tÓiÓjÐjùÓir  c                 ót   — | j                   D �ci c]  }t        |dd «      | j                  |   “Œ  c}S c c}w )Niøÿÿÿr¯   )r�  rP   rr  )r>   Útokens     r,   Úimg2bpez"Emu3ImageVocabularyMapping.img2bpe;  s5   € àFJ×F[ÑF[Ö\¸U”�E˜"˜R�LÓ! 4§>¡>°%Ñ#8Ñ8Ò\Ð\ùÒ\s   �#5c                 ój   — | j                   j                  «       D ��ci c]  \  }}||“Œ
 c}}S c c}}w r6   )r„  rz  )r>   ÚkÚvs      r,   Úbpe2imgz"Emu3ImageVocabularyMapping.bpe2img?  s+   € à!%§¡×!3Ñ!3Ó!5×6™˜˜A��1‘Ó6Ð6ùÓ6s   ž/c                 óæ   — t        j                  t        | j                  j	                  «       «      dz   t         j
                  ¬«      }| j                  j                  «       D ]
  \  }}|||<   Œ |S ©Nr   ©Údtype)r'   ÚzerosÚmaxrˆ  ÚkeysrP   rz  ©r>   Úmappingr†  r‡  s       r,   Úbpe2img_mapping_tensorz1Emu3ImageVocabularyMapping.bpe2img_mapping_tensorC  ó[   € ä—+‘+œc $§,¡,×"3Ñ"3Ó"5Ó6¸Ñ:Ä%Ç)Á)ÔLˆØ—L‘L×&Ñ&Ó(ò 	‰DˆAˆqØˆG�AŠJð	àˆr+   c                 óæ   — t        j                  t        | j                  j	                  «       «      dz   t         j
                  ¬«      }| j                  j                  «       D ]
  \  }}|||<   Œ |S rŠ  )r'   r�  rŽ  r„  r�  rP   rz  r�  s       r,   Úimg2bpe_mapping_tensorz1Emu3ImageVocabularyMapping.img2bpe_mapping_tensorJ  r“  r+   Ú	img_batchrG   c                 ó,  — |j                   }t        j                  |j                  d   dft        j                  ¬«      | j
                  z  }| j                  |j                  d«         }t        j                  ||gd¬«      }|j                  |«      S )Nr   r   r‹  Úcpurd   rg   )	Údevicer'   Úonesrh   rP   rt  r•  Útor(  )r>   r–  r™  Úeol_rowÚ
img_tokenss        r,   Úconvert_img2bpez*Emu3ImageVocabularyMapping.convert_img2bpeQ  sw   € Ø×!Ñ!ˆÜ—*‘*˜iŸo™o¨aÑ0°!Ð4¼E¿I¹IÔFÈ×IZÑIZÑZˆØ×0Ñ0°·±¸eÓ1DÑEˆ
Ü—Y‘Y 
¨GÐ4¸"Ô=ˆ
Ø�}‰}˜VÓ$Ð$r+   c                 óŠ   — |j                   }|dd d…f   }| j                  |j                  d«         }|j                  |«      S )N.rd   r˜  )r™  r’  r›  )r>   r–  r™  r�  s       r,   Úconvert_bpe2imgz*Emu3ImageVocabularyMapping.convert_bpe2imgX  sG   € Ø×!Ñ!ˆØ˜c 3 B 3˜hÑ'ˆ	Ø×0Ñ0°·±¸eÓ1DÑEˆ
Ø�}‰}˜VÓ$Ð$r+   N)r#   r$   r%   r&   r8   r   r"   r�  r„  rˆ  r’  r•  Úlistr'   rQ   rž  r   r*   r+   r,   rp  rp  )  sÅ   „ ñò7ð
 ñjó ðjð ñkó ðkð ñ]ó ð]ð ñ7ó ð7ð ñó ðð ñó ðð%¨¨e¯l©lÑ);ð %ÀÇÁó %ð%¨¯©ð %¸%¿,¹,ô %r+   rp  c                   ó$   — e Zd ZdgZdZdZeedœZy)ÚEmu3PreTrainedModelr2   Tr1  N)	r#   r$   r%   rl  rj  rk  r2   r.   rm  r*   r+   r,   r£  r£  _  s)   „ àðÐð ÐØ"&Ðà)Ø#ñÑr+   r£  c                   ó0   ‡ — e Zd ZU eed<   defˆ fd„Zˆ xZS )ÚEmu3TextModelr3   c           	      ó¸   •— t         ‰| �  |«       t        j                  t	        |j
                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        y c c}w r6   )r7   r8   r9   ró   rõ   Únum_hidden_layersr2   Úlayersr=   s      €r,   r8   zEmu3TextModel.__init__n  sD   ø€ Ü‰Ñ˜Ô Ü—m‘mÜBGÈ×H`ÑH`ÓBaÖb°YÔ˜f iÕ0Òbó
ˆ�ùÚbs   ·A)r#   r$   r%   r   r)   r8   rT   rU   s   @r,   r¥  r¥  k  s   ø… ØÓð
˜~÷ 
ñ 
r+   r¥  c                   ó4   ‡ — e Zd ZU eed<   ˆ fd„Zˆ fd„Zˆ xZS )ÚEmu3ForCausalLMr3   c                 óD   •— t         ‰| �  |«       t        |«      | _        y r6   )r7   r8   r¥  Úmodelr`   s     €r,   r8   zEmu3ForCausalLM.__init__x  s   ø€ Ü‰Ñ˜Ô Ü" 6Ó*ˆ�
r+   c                  ó6   •— t        «       j                  «        y)aÃ  
        Example:

        ```python
        >>> from transformers import Emu3Processor, Emu3ForConditionalGeneration
        >>> import torch
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image

        >>> model = Emu3ForCausalLM.from_pretrained("BAAI/Emu3-Chat-hf", dtype=torch.bfloat16)
        >>> processor = Emu3Processor.from_pretrained("BAAI/Emu3-Chat-hf")

        >>> inputs = processor(text=["Can you write me a poem about winter."], return_tensors="pt").to(model.device)

        >>> generated_ids = model.generate(**inputs, max_new_tokens=100, do_sample=False)
        >>> processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
        ```N)r7   rO   )Úsuper_kwargsr?   s    €r,   rO   zEmu3ForCausalLM.forward|  s   ø€ ô& 	‹�‰Õr+   )r#   r$   r%   r   r)   r8   rO   rT   rU   s   @r,   rª  rª  u  s   ø… ØÓô+÷ð r+   rª  c                   ó’  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zdej                  dej                  dej                  fd„Z	e
 ed¬	«      dej                  dej                  d
ee   deez  fd„«       «       Z ej"                  «       dej                  dedefd„«       Zdej                  dej                  dej                  fd„Ze
e	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej*                  dz  dej*                  dz  dej                  dz  dedz  dej                  dz  dedz  d
ee   deez  fd„«       «       Zˆ xZS )Ú	Emu3Modelc                 óô   •— t         ‰| �  |«       t        j                  |j                  «      | _        t        |j                  «      | _        t        |j                  «      | _        | j                  «        y r6   )r7   r8   r¥  Ú_from_configÚtext_configÚ
text_modelr.  Ú	vq_configÚvqmodelrp  Úvocabulary_mapÚvocabulary_mappingrR  r`   s     €r,   r8   zEmu3Model.__init__“  sY   ø€ Ü‰Ñ˜Ô Ü'×4Ñ4°V×5GÑ5GÓHˆŒÜ  ×!1Ñ!1Ó2ˆŒÜ"<¸V×=RÑ=RÓ"SˆÔð 	�‰Õr+   c                 ó6   — | j                   j                  «       S r6   )r´  Úget_input_embeddings©r>   s    r,   rº  zEmu3Model.get_input_embeddingsœ  s   € Ø�‰×3Ñ3Ó5Ð5r+   c                 ó:   — | j                   j                  |«       y r6   )r´  Úset_input_embeddings©r>   Úvalues     r,   r½  zEmu3Model.set_input_embeddingsŸ  s   € Ø�‰×,Ñ,¨UÕ3r+   r  rS  rG   c                 óö   — | j                   j                  ||d¬«      }|j                  D �cg c]+  }| j                  j	                  |«      j                  «       ‘Œ- }}t        j                  |«      }|S c c}w )a  
        Tokenizes images into discrete tokens with VQGAN module. Converts
        obtained image tokens into BPE tokens and wraps with "boi" and "eoi"
        special tokens.

        Args:
            pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
                The tensors corresponding to the input images.
            image_sizes (`torch.LongTensor` of shape `(batch_size, 2)`):
                The sizes of the images in the batch, being (height, width) for each image.
        T)Úreturn_dict)r¶  r^  r"   r¸  rž  r`  r'   r(  )r>   r  rS  Úvqmodel_outputsÚtokensÚbpe_tokens_listÚ
bpe_tokenss          r,   Úget_image_tokenszEmu3Model.get_image_tokens¢  sv   € ð 15·±×0CÑ0CÀLÐR]ÐkoÐ0CÓ0pˆàTc×TpÑTpö
ØJPˆD×#Ñ#×3Ñ3°FÓ;×CÑCÕEð
ˆð 
ô —Y‘Y˜Ó/ˆ
ØÐùò	
s   ­0A6zbTokenizes images into discrete tokens with VQGAN module and embeds them with text embeddings layerr+  rF   c                 óü  —  | j                   j                  ||fddi|¤Ž}|D ��cg c];  \  }}|| j                   j                  z  || j                   j                  z  dz   z  ‘Œ= }}}|j                  D �cg c]+  }| j                  j                  |«      j                  «       ‘Œ- }	}t        j                  |	«      }
 | j                  «       |
«      }t        j                  ||«      }||_        |S c c}}w c c}w )z­
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)):
            The tensors corresponding to the input images.
        rÁ  Tr   )r¶  r^  rM  r"   r¸  rž  r`  r'   r(  rº  ÚsplitÚpooler_output)r>   r  rS  rF   rÂ  rs   rt   Úsplit_sizesrÃ  rÄ  rÅ  Úimage_embeddingsÚimage_featuress                r,   Úget_image_featureszEmu3Model.get_image_featuresµ  s	  € ð 1D°·±×0CÑ0CØ˜+ñ1
Ø37ð1
Ø;Añ1
ˆð
 "-÷
á�˜ð �t—|‘|×9Ñ9Ñ9¸eÀtÇ|Á|×GiÑGiÑ>iÐlmÑ>mÓnð
ˆñ 
ð
 Ud×TpÑTpö
ØJPˆD×#Ñ#×3Ñ3°FÓ;×CÑCÕEð
ˆð 
ô —Y‘Y˜Ó/ˆ
Ø6˜4×4Ñ4Ó6°zÓBÐÜŸ™Ð%5°{ÓCˆØ(6ˆÔ%àÐùó
ùò
s   ¦A C3Á70C9r"   rs   rt   c                 ó°   — |dd…dd…f   j                  d||dz   «      }| j                  j                  |«      }| j                  j	                  |«      }|S )aå  
        Decodes generated image tokens from language model to continuous pixel values
        with VQGAN module via upsampling.

        Args:
            image_tokens (`torch.LongTensor` of shape `(batch_size, num_of_tokens)`):
                The tensors corresponding to the input images.
            height (`int`):
                Height of the generated image before upsampling.
            width (`int`):
                Width of the generated image before upsampling.
        Néýÿÿÿrd   r   )rk   r¸  r   r¶  rd  )r>   r"   rs   rt   Ú	sequencesr0  s         r,   Údecode_image_tokenszEmu3Model.decode_image_tokensÑ  sX   € ð !¢ C R C Ñ(×-Ñ-¨b°&¸%À!¹)ÓDˆ	Ø×.Ñ.×>Ñ>¸yÓIˆØ—‘×#Ñ# LÓ1ˆØˆr+   Ú	input_idsÚinputs_embedsrÌ  c                 ó.  — |€m| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  }|j                  d«      }n|| j                  j                  k(  }|j                  «       }|j                  d   |j                  d   z  }|j                  d«      j                  |j                  «      }t        ||j                  d   z  |j                  «       k(  d|› d|› �«       |S )zï
        Obtains multimodal placeholder mask from `input_ids` or `inputs_embeds`, and checks that the placeholder token count is
        equal to the length of multimodal features. If the lengths are different, an error is raised.
        )rŒ  r™  rd   r   r   z6Image features and image tokens do not match, tokens: z, features: )rº  r'   Útensorr¸  ru  Úlongr™  Úallrl   rh   rW  r›  r   Únumel)r>   rÒ  rÓ  rÌ  Úspecial_image_maskÚn_image_tokensÚn_image_featuress          r,   Úget_placeholder_maskzEmu3Model.get_placeholder_maskä  s  € ð ÐØ!.Ð2M°$×2KÑ2KÓ2MÜ—‘˜T×4Ñ4×CÑCÌ5Ï:É:Ð^k×^rÑ^rÔsó3ñ "Ðð "4×!7Ñ!7¸Ó!;Ñà!*¨d×.EÑ.E×.TÑ.TÑ!TÐà+×/Ñ/Ó1ˆØ)×/Ñ/°Ñ2°^×5IÑ5IÈ!Ñ5LÑLÐØ/×9Ñ9¸"Ó=×@Ñ@À×AUÑAUÓVÐÜØ˜]×0Ñ0°Ñ4Ñ4¸×8LÑ8LÓ8NÑNØDÀ^ÐDTÐT`ÐaqÐ`rÐsô	
ð "Ð!r+   NrA   rB   rC   rD   c	           	      óD  — |du |duz  rt        d«      ‚|€ | j                  «       |«      }|�Y| j                  ||«      j                  }
t	        j
                  |
d¬«      }
| j                  |||
¬«      }|j                  ||
«      } | j                  d|||||dœ|	¤Ž}|S )ap  
        image_sizes (`torch.LongTensor` of shape `(batch_size, 2)`):
            The sizes of the images in the batch, being (height, width) for each image. Image sizes can be obtained using
            [`AutoImageProcessor`]. See [`Emu3ImageProcessor.__call__`] for details ([]`Emu3Processor`] uses
            [`Emu3ImageProcessor`] for processing images).
        NzaYou cannot specify both input_ids and inputs_embeds at the same time, and must specify either oner   rg   )rÓ  rÌ  )rA   rB   rC   rÓ  rD   r*   )	Ú
ValueErrorrº  rÍ  rÉ  r'   r(  rÜ  Úmasked_scatterr´  )r>   rÒ  r  rS  rA   rB   rC   rÓ  rD   rF   rÌ  rÙ  Úoutputss                r,   rO   zEmu3Model.forwardü  sÚ   € ð( ˜Ð -°tÐ";Ò<ÜØsóð ð Ð Ø7˜D×5Ñ5Ó7¸	ÓBˆMàÐ#Ø!×4Ñ4°\À;ÓO×]Ñ]ˆNÜ"ŸY™Y ~¸1Ô=ˆNØ!%×!:Ñ!:Ø¨À~ð ";ó "Ðð *×8Ñ8Ð9KÈ^Ó\ˆMð "�$—/‘/ð 
Ø)Ø%Ø+Ø'Øñ
ð ñ
ˆð ˆr+   )NNNNNNNN)r#   r$   r%   r8   rº  r½  r'   rè   r(   rÆ  r   r   r   r   rS   r!   rÍ  rn  rP   rÑ  rÜ  rQ   r   rR   r
   rO   rT   rU   s   @r,   r°  r°  ’  sì  ø„ ôò6ò4ð¨U×->Ñ->ð ÈU×M]ÑM]ð Ðbg×brÑbró ð& ÙØyôðØ!×-Ñ-ðØ<A×<LÑ<LðØX^Ð_qÑXrðà	Ð%Ñ	%òóó ðð0 €U‡]�]ƒ_ð°×0@Ñ0@ð È#ð ÐVYò ó ðð$"Ø×)Ñ)ð"Ø:?×:KÑ:Kð"Ø]b×]nÑ]nó"ð0 Øð .2Ø15Ø+/Ø.2Ø04Ø(,Ø26Ø!%ñ,à×#Ñ# dÑ*ð,ð ×'Ñ'¨$Ñ.ð,ð —\‘\ DÑ(ð	,ð
 Ÿ™ tÑ+ð,ð ×&Ñ&¨Ñ-ð,ð  ™ð,ð ×(Ñ(¨4Ñ/ð,ð ˜$‘;ð,ð Ð+Ñ,ð,ð 
Ð'Ñ	'ò,ó ó ô,r+   r°  c                   óÀ  ‡ — e Zd ZdZddiZˆ fd„Zd„ Zd„ Zdej                  fd„Z
d	„ Zee	 	 	 	 	 	 	 	 	 	 ddej                  d
z  dej                   d
z  dej"                  d
z  dej"                  d
z  dej                  d
z  ded
z  dej                   d
z  ded
z  dej                  d
z  deej"                  z  dee   deez  fd„«       «       Z	 	 	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚEmu3ForConditionalGeneration)r0  Útextzlm_head.weightz$model.text_model.embed_tokens.weightc                 óî   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  j                  |j                  j                  d¬«      | _	        | j                  «        y )NF)rÛ   )r7   r8   r°  r¬  r9   r@  r³  Úhidden_sizeÚ
vocab_sizeÚlm_headrR  r`   s     €r,   r8   z%Emu3ForConditionalGeneration.__init__1  sS   ø€ Ü‰Ñ˜Ô Ü˜vÓ&ˆŒ
Ü—y‘y ×!3Ñ!3×!?Ñ!?À×ASÑAS×A^ÑA^ÐejÔkˆŒà�‰Õr+   c                 ó6   — | j                   j                  «       S r6   )r¬  rº  r»  s    r,   rº  z1Emu3ForConditionalGeneration.get_input_embeddings8  s   € Ø�z‰z×.Ñ.Ó0Ð0r+   c                 ó:   — | j                   j                  |«       y r6   )r¬  r½  r¾  s     r,   r½  z1Emu3ForConditionalGeneration.set_input_embeddings;  s   € Ø�
‰
×'Ñ'¨Õ.r+   rG   c                 ó   — | j                   S r6   )rç  r»  s    r,   Úget_output_embeddingsz2Emu3ForConditionalGeneration.get_output_embeddings>  s   € Ø�|‰|Ðr+   c                 ó:   —  | j                   j                  di |¤ŽS rÐ   )r¬  rÑ  )r>   rF   s     r,   rÑ  z0Emu3ForConditionalGeneration.decode_image_tokensA  s   € Ø-ˆt�z‰z×-Ñ-Ñ7°Ñ7Ð7r+   NrÒ  r  rS  rA   rB   rC   rÓ  rD   ÚlabelsÚlogits_to_keeprF   c           
      ó~  —  | j                   d||||||dœ|¤Ž}|d   }t        |
t        «      rt        |
 d«      n|
}| j	                  |dd…|dd…f   «      }d}|	�4 | j
                  d||	| j                  j                  j                  dœ|¤Ž}t        |||j                  |j                  |j                  ¬«      S )aÕ  
        image_sizes (`torch.LongTensor` of shape `(batch_size, 2)`):
            The sizes of the images in the batch, being (height, width) for each image. Image sizes can be obtained using
            [`AutoImageProcessor`]. See [`Emu3ImageProcessor.__call__`] for details ([]`Emu3Processor`] uses
            [`Emu3ImageProcessor`] for processing images).
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example:

        ```python
        >>> from transformers import Emu3Processor, Emu3ForConditionalGeneration
        >>> import torch
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image

        >>> model = Emu3ForConditionalGeneration.from_pretrained("BAAI/Emu3-Chat-hf", dtype=torch.bfloat16)
        >>> processor = Emu3Processor.from_pretrained("BAAI/Emu3-Chat-hf")

        >>> conversation = [
        ...     {
        ...     "role": "system",
        ...     "content": [
        ...         {"type": "text", "text": "You are a helpful assistant."},
        ...         ],
        ...     },
        ...     {
        ...     "role": "user",
        ...     "content": [
        ...         {"type": "image"},
        ...         {"type": "text", "text": "Please describe the image."},
        ...         ],
        ...     },
        ... ]

        >>> prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
        >>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(images=[image], text=[prompt], return_tensors="pt").to(model.device, torch.bfloat16)

        >>> generated_ids = model.generate(**inputs, max_new_tokens=100, do_sample=False)
        >>> processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
        ```)rÒ  rA   rB   rC   rÓ  rD   r   N)Úlogitsrí  ræ  )Úlossrð  rC   r@   r2  r*   )r¬  r;  rP   Úslicerç  Úloss_functionr3   r³  ræ  r
   rC   r@   r2  )r>   rÒ  r  rS  rA   rB   rC   rÓ  rD   rí  rî  rF   rà  r@   Úslice_indicesrð  rñ  s                    r,   rO   z$Emu3ForConditionalGeneration.forwardD  sç   € ð@ �$—*‘*ð 
ØØ)Ø%Ø+Ø'Øñ
ð ñ
ˆð   ™
ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ð Ø f¸¿¹×9PÑ9P×9[Ñ9[ñØ_eñˆDô &ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r+   c	                 óJ   •— t        ‰| �  |f|||||||dœ|	¤Ž}
|s|rd |
d<   |
S )N)rC   rA   rÓ  rB   r  rD   Úis_first_iterationr  )r7   Úprepare_inputs_for_generation)r>   rÒ  rC   rA   rÓ  rB   rD   r  rö  rF   Úmodel_inputsr?   s              €r,   r÷  z:Emu3ForConditionalGeneration.prepare_inputs_for_generation¡  sR   ø€ ô ‘wÑ<Øð

à+Ø)Ø'Ø%Ø%ØØ1ñ

ð ñ

ˆñ "¡iØ+/ˆL˜Ñ(àÐr+   )
NNNNNNNNNr   )NNNNTNF)r#   r$   r%   Úoutput_modalitiesÚ_tied_weights_keysr8   rº  r½  r9   rø   rë  rÑ  r   r   r'   r(   rè   rQ   r   rR   rP   r   r   rS   r
   rO   r÷  rT   rU   s   @r,   râ  râ  -  s�  ø„ Ø)ÐØ*Ð,RÐSÐôò1ò/ð r§y¡yó ò8ð Øð .2Ø15Ø+/Ø.2Ø04Ø(,Ø26Ø!%Ø*.Ø-.ñY
à×#Ñ# dÑ*ðY
ð ×'Ñ'¨$Ñ.ðY
ð —\‘\ DÑ(ð	Y
ð
 Ÿ™ tÑ+ðY
ð ×&Ñ&¨Ñ-ðY
ð  ™ðY
ð ×(Ñ(¨4Ñ/ðY
ð ˜$‘;ðY
ð × Ñ  4Ñ'ðY
ð ˜eŸl™lÑ*ðY
ð Ð+Ñ,ðY
ð 
Ð'Ñ	'òY
ó ó ðY
ð| ØØØØØØ ÷ñ r+   râ  )râ  rª  r¥  r£  r.  r°  )Qr  Údataclassesr   Ú	functoolsr   r'   Útorch.nnr9   Útorch.nn.functionalÚ
functionalrŒ   Ú r   r<  Úcache_utilsr   Ú
generationr   Úmodeling_outputsr	   r
   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úchameleon.modeling_chameleonr   r   Úllama.modeling_llamar   r   r   r   r   Úsiglip.modeling_siglipr   Úconfiguration_emu3r   r   r   Ú
get_loggerr#   Úloggerr!   r.   r2   rø   rW   r{   r}   r‘   rž   r³   r½   rÁ   rÌ   rÓ   r¨   r×   rÞ   rê   r  r  r#  r.  rp  r£  r¥  rª  r°  râ  Ú__all__r*   r+   r,   ú<module>r     s6  ðó  Ý !Ý %ã Ý ß Ð å &Ý  Ý )ß RÝ -Ý &ß VÓ VÝ 7Ý 5÷÷ wÕ vÝ 4ß KÑ Kð 
ˆ×	Ñ	˜HÓ	%€ð Ø
ô1Ð5ó 1ó ó ð1ô	�Nô 	ô
!Ð(ô !ôH$˜rŸy™yô $ôD	Ð%Hô 	ô 2§9¡9ô ô�b—i‘iô ô:!˜2Ÿ9™9ô !ôH §	¡	ô ô. "§)¡)ô ô&.( 2§9¡9ô .(ôb<(˜2Ÿ9™9ô <(ô~&˜oô &ôV˜Ÿ™ô Vô˜2Ÿ9™9ô ôD8˜Ÿ™ô 8ôv7�r—y‘yô 7ôtC�r—y‘yô CôLC�r—y‘yô CñL ðôôx2�ó x2óðx2÷v3%ñ 3%ôl	Ð2ô 	ô
�JÐ 3ô 
ôÐ&Ð(;¸_ô ô:XÐ#ô XôvQÐ#6¸ô Qòh�r+   