§
    ‚Štj@·  ã                   óê  — 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j1        e2¦  «        Z3ee G d„ de¦  «        ¦   «         ¦   «         Z4 G d„ de&¦  «        Z5 G d„ de'¦  «        Z6 G d„ dej7        ¦  «        Z8 G d„ de$¦  «        Z9 G d„ dej7        ¦  «        Z: G d „ d!ej7        ¦  «        Z; G d"„ d#ej7        ¦  «        Z< G d$„ d%ej7        ¦  «        Z= G d&„ d'ej7        ¦  «        Z> G d(„ d)ej7        ¦  «        Z? G d*„ d+ej7        ¦  «        Z@ G d,„ d-e,¦  «        ZA G d.„ d/ejB        ¦  «        ZC G d0„ d1ej7        ¦  «        ZD G d2„ d3ej7        ¦  «        ZE G d4„ d5ej7        ¦  «        ZF G d6„ d7ej7        ¦  «        ZG G d8„ d9ej7        ¦  «        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¢ZPdS )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                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )Ú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__© ó    úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/emu3/modular_emu3.pyr!   r!   -   s6   € € € € € € ðð ð
 -1€L�%Ô" TÑ)Ð0Ð0Ñ0Ð0Ð0r+   r!   c                   ó   — e Zd ZdS )ÚEmu3AttentionN©r#   r$   r%   r*   r+   r,   r.   r.   8   ó   € € € € € Ø€Dr+   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                 óˆ   •— t          ¦   «                              ||¦  «         t          j        |j        ¦  «        | _        d S ©N)ÚsuperÚ__init__ÚnnÚDropoutÚattention_dropoutÚdropout)Úselfr3   r4   Ú	__class__s      €r,   r8   zEmu3DecoderLayer.__init__>   s5   ø€ Ý‰Œ×Ò˜ Ñ+Ô+Ð+Ý”z &Ô":Ñ;Ô;ˆŒˆˆr+   NFÚhidden_statesÚattention_maskÚposition_idsÚpast_key_valuesÚ	use_cacheÚposition_embeddingsÚkwargsÚreturnc           
      ó  — |}|                       |¦  «        } | j        d||||||dœ|¤Ž\  }}	||                      |¦  «        z   }|}|                      |¦  «        }|                      |¦  «        }||                      |¦  «        z   }|S )N)r?   r@   rA   rB   rC   rD   r*   )Úinput_layernormÚ	self_attnr<   Úpost_attention_layernormÚmlp)
r=   r?   r@   rA   rB   rC   rD   rE   ÚresidualÚ_s
             r,   ÚforwardzEmu3DecoderLayer.forwardB   s·   € ð !ˆØ×,Ò,¨]Ñ;Ô;ˆà)˜4œ>ð 
Ø'Ø)Ø%Ø+ØØ 3ð
ð 
ð ð
ð 
Ñˆ�qð ! 4§<¢<°Ñ#>Ô#>Ñ>ˆà ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆØ  4§<¢<°Ñ#>Ô#>Ñ>ˆØÐr+   )NNNFN)r#   r$   r%   r   Úintr8   r'   ÚTensorr(   r   ÚboolÚtupler   r   rN   Ú__classcell__©r>   s   @r,   r2   r2   =   s÷   ø€ € € € € ð<˜zð <°cð <ð <ð <ð <ð <ð <ð /3Ø04Ø(,Ø!&ØHLðð à”|ðð œ tÑ+ðð Ô&¨Ñ-ð	ð
  ™ðð ˜$‘;ðð # 5¤<°´Ð#=Ô>ÀÑEðð Ð+Ô,ðð 
Œðð ð ð ð ð ð ð r+   r2   c                   ó>   ‡ — 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         	                    d|j        z  d|j        z  ¦  «         d S )Ng      ð¿g      ð?)
r7   r8   r9   Ú	EmbeddingÚcodebook_sizeÚ	embed_dimÚ	embeddingÚweightÚdataÚuniform_©r=   r3   r>   s     €r,   r8   z!Emu3VQVAEVectorQuantizer.__init__l   sf   ø€ Ý‰Œ×ÒÑÔÐÝœ fÔ&:¸FÔ<LÑMÔMˆŒØŒÔÔ"×+Ò+¨D°6Ô3GÑ,GÈÈvÔOcÑIcÑdÔdÐdÐdÐdr+   Úhidden_statec                 óô  — |j         \  }}}}}|                     ddddd¦  «                             ¦   «         }|                     d|¦  «        }t	          j        |dz  dd¬¦  «        }t	          j        | j        j        dz  d¬	¦  «        }	dt	          j        || j        j         	                    dd¦  «        ¦  «        z  }
||	z   |
z
  }
t	          j
        |
d¬	¦  «        }|                     ||||¦  «        }|S )
Nr   r   r   é   r   éÿÿÿÿT)ÚdimÚkeepdim©rd   )ÚshapeÚpermuteÚ
contiguousÚviewr'   Úsumr[   r\   ÚmatmulÚ	transposeÚargmin)r=   r`   Ú
batch_sizeÚtemporalÚchannelsÚheightÚwidthÚhidden_state_flattenedÚhidden_state_sumÚembedding_sumÚ	distancesÚmin_encoding_indicess               r,   rN   z Emu3VQVAEVectorQuantizer.forwardq   s  € Ø8DÔ8JÑ5ˆ
�H˜h¨°Ø#×+Ò+¨A¨q°!°Q¸Ñ:Ô:×EÒEÑGÔGˆØ!-×!2Ò!2°2°xÑ!@Ô!@Ðõ !œ9Ð%;¸QÑ%>ÀAÈtÐTÑTÔTÐÝœ	 $¤.Ô"7¸Ñ":ÀÐBÑBÔBˆð �œÐ%;¸T¼^Ô=R×=\Ò=\Ð]^Ð`aÑ=bÔ=bÑcÔcÑcˆ	Ø$ }Ñ4°yÑ@ˆ	å$œ|¨I¸1Ð=Ñ=Ô=ÐØ3×8Ò8¸ÀXÈvÐW\Ñ]Ô]ÐØ#Ð#r+   )
r#   r$   r%   r&   r   r8   r'   rP   rN   rS   rT   s   @r,   rV   rV   a   sr   ø€ € € € € ðð ðe˜ð eð eð eð eð eð eð
$ E¤Lð $ð $ð $ð $ð $ð $ð $ð $r+   rV   c                   ó   — e Zd ZdS )ÚEmu3VQVAEEncoderConvDownsampleNr/   r*   r+   r,   rz   rz   ƒ   r0   r+   rz   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚEmu3VQVAEEncoderConvUpsamplec                 ó„   •— t          ¦   «                              ¦   «          t          j        ||ddd¬¦  «        | _        d S )Nr   r   ©Úkernel_sizeÚstrideÚpadding)r7   r8   r9   ÚConv2dÚconv)r=   Úin_channelsr>   s     €r,   r8   z%Emu3VQVAEEncoderConvUpsample.__init__ˆ   s:   ø€ Ý‰Œ×ÒÑÔÐÝ”I˜k¨;ÀAÈaÐYZÐ[Ñ[Ô[ˆŒ	ˆ	ˆ	r+   c                 ó^   — t          j        |dd¬¦  «        }|                      |¦  «        }|S )Nç       @Únearest©Úscale_factorÚmode)ÚFÚinterpolaterƒ   ©r=   r?   s     r,   rN   z$Emu3VQVAEEncoderConvUpsample.forwardŒ   s/   € Ýœ mÀ#ÈIÐVÑVÔVˆØŸ	š	 -Ñ0Ô0ˆØÐr+   ©r#   r$   r%   r8   rN   rS   rT   s   @r,   r|   r|   ‡   sL   ø€ € € € € ð\ð \ð \ð \ð \ðð ð ð ð ð ð 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                 ó\  •— t          ¦   «                              ¦   «          d„ t          |dd …         |dd …         ¦  «        D ¦   «         }d| _        |d d d…         D ] }| xj        |dz  |dz  z   |dz  fz  c_        Œ!| xj        dz  c_        t	          j        ||||¬¦  «        | _        d S )Nc                 ó   — g | ]
\  }}||z
  ‘ŒS r*   r*   )Ú.0Ú
one_kernelÚ
one_strides      r,   ú
<listcomp>z,Emu3VQVAEConv3d.__init__.<locals>.<listcomp>œ   s"   € ÐpÐpÐpÑ5K°ZÀ˜ jÑ0ÐpÐpÐpr+   r   r*   rc   r   )r   r   )r€   )r7   r8   Úzipr�   r9   ÚConv3drƒ   )r=   r‘   r’   r   r€   Úpadding_sizesÚpad_sizer>   s          €r,   r8   zEmu3VQVAEConv3d.__init__“   sÕ   ø€ õ 	‰Œ×ÒÑÔÐàpÐpÍsÐS^Ð_`Ð_aÐ_aÔSbÐdjÐklÐkmÐkmÔdnÑOoÔOoÐpÑpÔpˆØˆŒØ% d d¨ dÔ+ð 	Jð 	JˆHØˆLŒL˜X¨™]¨X¸©\Ñ9¸8Àq¹=ÐIÑIˆLŒLˆLØˆŒ˜ÑˆŒå”IØØØØð	
ñ 
ô 
ˆŒ	ˆ	ˆ	r+   r?   c                 ód   — t          j        || j        ¦  «        }|                      |¦  «        }|S r6   )r‹   Úpadr�   rƒ   r�   s     r,   rN   zEmu3VQVAEConv3d.forward©   s,   € Ýœ˜m¨T¬\Ñ:Ô:ˆØŸ	š	 -Ñ0Ô0ˆØÐr+   )
r#   r$   r%   rO   rR   r8   r'   rP   rN   rS   rT   s   @r,   r�   r�   ’   sˆ   ø€ € € € € ð
àð
ð ð
ð ˜3”Zð	
ð
 �c”
ð
ð 
ð 
ð 
ð 
ð 
ð, U¤\ð ð ð ð ð ð ð ð r+   r�   c                   óL   ‡ — 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¬¦  «        | _        d S )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__°   s•   ø€ õ
 	‰Œ×ÒÑÔÐÝœ,Ø%ØØØð	
ñ 
ô 
ˆŒõ ”iØØØØØð
ñ 
ô 
ˆŒõ ”iØØØØØð
ñ 
ô 
ˆŒˆˆr+   r?   Úquant_statesc                 óÔ   — t          j        ||j        dd …         d¬¦  «        }|                      |¦  «        }||                      |¦  «        z  |                      |¦  «        z   }|S )Néþÿÿÿr‡   )ÚsizerŠ   )r‹   rŒ   rg   r«   r¬   r­   )r=   r?   r¯   s      r,   rN   zEmu3VQVAESpatialNorm.forwardÌ   sd   € Ý”} \¸Ô8KÈBÈCÈCÔ8PÐW`ÐaÑaÔaˆØŸš¨Ñ6Ô6ˆØ%¨¯ª°LÑ(AÔ(AÑAÀDÇKÂKÐP\ÑD]ÔD]Ñ]ˆØÐr+   ©	r#   r$   r%   rO   r8   r'   rP   rN   rS   rT   s   @r,   r    r    ¯   su   ø€ € € € € ð
àð
ð ð
ð 
ð 
ð 
ð 
ð 
ð8 U¤\ð ÀÄð ð ð ð ð ð ð ð r+   r    c                   ó>   ‡ — e Zd Zdedefˆ fd„Zdej        fd„Zˆ xZS )ÚEmu3VQVAETemporalUpsampler‘   r’   c                 óx   •— t          ¦   «                              ¦   «          t          ||dd¬¦  «        | _        d S )N©r   r   r   ©r   r   r   ©r   r€   ©r7   r8   r�   rƒ   ©r=   r‘   r’   r>   s      €r,   r8   z"Emu3VQVAETemporalUpsample.__init__Ô   óA   ø€ õ
 	‰Œ×ÒÑÔÐÝ#ØØØ!Øð	
ñ 
ô 
ˆŒ	ˆ	ˆ	r+   r?   c                 ó|  — |j         \  }}}}}|                     ddddd¦  «                             ¦   «                              |d|¦  «        }t	          j        |dd¬	¦  «        }|                     ||||d¦  «                             ddddd¦  «                             ¦   «         }|                      |¦  «        }|S )
Nr   r   r   rb   r   rc   r†   r‡   rˆ   )rg   rh   ri   rj   r‹   rŒ   rƒ   )r=   r?   ro   rq   rp   rr   rs   s          r,   rN   z!Emu3VQVAETemporalUpsample.forwardá   sÀ   € Ø8EÔ8KÑ5ˆ
�H˜h¨°Ø%×-Ò-¨a°°A°q¸!Ñ<Ô<×GÒGÑIÔI×NÒNÈzÐ[]Ð_gÑhÔhˆÝœ mÀ#ÈIÐVÑVÔVˆØ%×*Ò*¨:°xÀÈÐPRÑSÔS×[Ò[Ð\]Ð_`ÐbcÐefÐhiÑjÔj×uÒuÑwÔwˆØŸ	š	 -Ñ0Ô0ˆØÐr+   r³   rT   s   @r,   rµ   rµ   Ó   sl   ø€ € € € € ð
àð
ð ð
ð 
ð 
ð 
ð 
ð 
ð U¤\ð ð ð ð ð ð ð ð r+   rµ   c                   ó>   ‡ — e Zd Zdedefˆ fd„Zdej        fd„Zˆ xZS )ÚEmu3VQVAETemporalDownsampler‘   r’   c                 óx   •— t          ¦   «                              ¦   «          t          ||dd¬¦  «        | _        d S )N)rb   r   r   )r   r   r   r¹   rº   r»   s      €r,   r8   z$Emu3VQVAETemporalDownsample.__init__ë   r¼   r+   r?   c                 ó0   — |                       |¦  «        }|S r6   )rƒ   r�   s     r,   rN   z#Emu3VQVAETemporalDownsample.forwardø   s   € ØŸ	š	 -Ñ0Ô0ˆØÐr+   r³   rT   s   @r,   r¿   r¿   ê   sl   ø€ € € € € ð
àð
ð ð
ð 
ð 
ð 
ð 
ð 
ð U¤\ð ð ð ð ð ð ð ð r+   r¿   c                   ó(   ‡ — e Zd Z	 dˆ fd„	Zd„ Zˆ xZS )ÚEmu3VQVAETemporalResnetBlockNc                 ó�  •— t          ¦   «                              ¦   «          || _        |€|n|| _        t	          j        |¦  «        | _        t          ||dd¬¦  «        | _        t	          j        |¦  «        | _	        t          ||dd¬¦  «        | _
        | j        | j        k    r t	          j        ||ddd¬¦  «        | _        d S d S )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À\ˆÔå”^ KÑ0Ô0ˆŒ
Ý$ØØØ!Øð	
ñ 
ô 
ˆŒ
õ ”^ LÑ1Ô1ˆŒ
Ý$ØØØ!Øð	
ñ 
ô 
ˆŒ
ð Ô˜tÔ0Ò0Ð0Ý "¤	ØØØØØð!ñ !ô !ˆDÔÐÐð 1Ð0r+   c                 ó^  — |}|                       |¦  «        }|t          j        |¦  «        z  }|                      |¦  «        }|                      |¦  «        }|t          j        |¦  «        z  }|                      |¦  «        }| j        | j        k    r|                      |¦  «        }||z   S r6   )	rÆ   r'   ÚsigmoidrÇ   rÈ   rÉ   r„   r¡   rÊ   )r=   r?   rL   s      r,   rN   z$Emu3VQVAETemporalResnetBlock.forward  s¢   € Ø ˆØŸ
š
 =Ñ1Ô1ˆØ�œ }Ñ5Ô5Ñ5ˆØŸ
š
 =Ñ1Ô1ˆàŸ
š
 =Ñ1Ô1ˆØ�œ }Ñ5Ô5Ñ5ˆØŸ
š
 =Ñ1Ô1ˆàÔ˜tÔ0Ò0Ð0Ø×(Ò(¨Ñ2Ô2ˆHà˜-Ñ'Ð'r+   r6   rŽ   rT   s   @r,   rÃ   rÃ   ý   sR   ø€ € € € € ð ðð ð ð ð ð ð@(ð (ð (ð (ð (ð (ð (r+   rÃ   c                   ój   ‡ — 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        k    r t          j
        ||ddd¬¦  «        | _        d S d S )	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ÑeÔeˆDŒJÝœ°<ÈBÐTXÐaeÐfÑfÔfˆDŒJˆJå-¨n¸kÑJÔJˆDŒJÝ-¨n¸lÑKÔKˆDŒJå”YØØØØØð
ñ 
ô 
ˆŒ
õ ”YØØØØØð
ñ 
ô 
ˆŒ
ð Ô˜tÔ0Ò0Ð0Ý "¤	ØØØØØð!ñ !ô !ˆDÔÐÐð 1Ð0r+   r?   c                 óZ  — | j         €dn|f}|} | j        |g|¢R Ž }|t          j        |¦  «        z  }|                      |¦  «        } | j        |g|¢R Ž }|t          j        |¦  «        z  }|                      |¦  «        }| j        | j        k    r|  	                    |¦  «        }||z   S ©Nr*   )
rÏ   rÆ   r'   rÌ   rÇ   rÈ   rÉ   r„   r¡   rÊ   )r=   r?   rÏ   Ú	norm_argsrL   s        r,   rN   zEmu3VQVAEResnetBlock.forward[  sÆ   € ØÔ-Ð5�B�B¸NÐ;Lˆ	à ˆØ"˜œ
 =Ð=°9Ð=Ð=Ð=ˆØ�œ }Ñ5Ô5Ñ5ˆØŸ
š
 =Ñ1Ô1ˆà"˜œ
 =Ð=°9Ð=Ð=Ð=ˆØ�œ }Ñ5Ô5Ñ5ˆØŸ
š
 =Ñ1Ô1ˆàÔ˜tÔ0Ò0Ð0Ø×(Ò(¨Ñ2Ô2ˆHà˜-Ñ'Ð'r+   )NNr6   r³   rT   s   @r,   rÎ   rÎ   .  s    ø€ € € € € ð $(Ø%)ð	*ð *àð*ð ˜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                 óX   •— t          ¦   «                              |¦  «         d| _        d S )Nr   )r7   r8   Únum_key_value_groupsr_   s     €r,   r8   z Emu3VQVAEAttentionBlock.__init__n  s+   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ð %&ˆÔ!Ð!Ð!r+   )r#   r$   r%   r   r8   rS   rT   s   @r,   rÕ   rÕ   m  sD   ø€ € € € € ð&˜ð &ð &ð &ð &ð &ð &ð &ð &ð &ð &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          ¦   «         j        di |¤Ž d S rÒ   )r7   r8   )r=   rE   r>   s     €r,   r8   zEmu3VQVAEGroupNorm.__init__|  s&   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"r+   Nc                 óZ   — t          j        || j        | j        | j        | j        ¦  «        S r6   )r‹   Ú
group_normr§   r\   Úbiasr¨   )r=   Úinputr¯   s      r,   rN   zEmu3VQVAEGroupNorm.forward  s"   € ÝŒ|˜E 4¤?°D´KÀÄÈDÌHÑUÔUÐUr+   r6   )r#   r$   r%   r&   r8   rN   rS   rT   s   @r,   rÙ   rÙ   u  s^   ø€ € € € € ðð ð#ð #ð #ð #ð #ðVð Vð Vð Vð Vð Vð Vð Vr+   rÙ   c                   óL   ‡ — 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          |||¬¦  «        | _	        d S )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__„  s    ø€ Ý‰Œ×ÒÑÔÐå+Ø#Ø$Ø)ð
ñ 
ô 
ˆŒõ
 .¨fÑ5Ô5ˆŒØÐ!Ý/¸[ÐUWÐ]aÐjnÐoÑoÔoˆDŒNˆNå1°.À+ÑNÔNˆDŒNå+Ø#Ø$Ø)ð
ñ 
ô 
ˆŒˆˆr+   r?   r¯   c                 óž  — |                       ||¦  «        }|}|                      ||¦  «        }|j        \  }}}}|                     ||||z  ¦  «                             dd¦  «        }|                      |¦  «        d         }|                     ||||¦  «                             dddd¦  «        }||z   }|                      ||¦  «        }|S )Nr   r   r   r   )	rã   rå   rg   rj   rm   rä   Úreshaperh   ræ   )r=   r?   r¯   rL   ro   rq   rr   rs   s           r,   rN   zEmu3VQVAEMiddleBlock.forward˜  sÕ   € ØŸš ]°LÑAÔAˆØ ˆØŸš }°lÑCÔCˆØ.;Ô.AÑ+ˆ
�H˜f eØ%×*Ò*¨:°xÀÈ%ÁÑPÔP×ZÒZÐ[\Ð^_Ñ`Ô`ˆØŸš MÑ2Ô2°1Ô5ˆØ%×-Ò-¨j¸&À%ÈÑRÔR×ZÒZÐ[\Ð^_ÐabÐdeÑfÔfˆØ  =Ñ0ˆØŸš ]°LÑAÔAˆØÐr+   r6   ©r#   r$   r%   r8   r'   ÚFloatTensorrN   rS   rT   s   @r,   rà   rà   ƒ  sp   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð(
ð 
 UÔ%6ð 
ÀeÔFWÐZ^ÑF^ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r+   rà   c                   ó4   ‡ — 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 �]P}t          j
        ¦   «         }t          j
        ¦   «         }t          j
        ¦   «         }|||         z  }	|||         z  }
t          | j        ¦  «        D ]…}|                     t          |	|
¬¦  «        ¦  «         |
}	|j        �V||j        v rM|                     t!          |¦  «        ¦  «         |                     t          j        |	ddd¬¦  «        ¦  «         Œ†t          j        ¦   «         }||_        ||_        ||_        || j        dz
  k    rt-          |	¦  «        |_        | j                             |¦  «         �ŒRd S )N©r   ©r„   r¡   r£   r¤   Tr¥   r   )r7   r8   ÚlenÚchannel_multiplierÚnum_resolutionsÚnum_res_blocksÚbase_channelsrR   Úin_channel_multiplierr9   Ú
ModuleListÚdownÚrangeÚappendrÎ   Úattn_resolutionsrÕ   rª   ÚModuleÚblockÚattnÚ
attn_normsrz   Ú
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ˆÔØÔ,ˆØ#Ô6Ðà $¥uÐ-?Ñ'@Ô'@Ñ @ÐØ%:ˆÔ"Ý”M‘O”OˆŒ	Ý˜TÔ1Ñ2Ô2ð 	#ñ 	#ˆGÝ”M‘O”OˆEÝ”=‘?”?ˆDÝœ™œˆJØ$Ð'<¸WÔ'EÑEˆHØ%Ð(:¸7Ô(CÑCˆIÝ  Ô!4Ñ5Ô5ð 
qð 
q�Ø—’Ý(Ø$,Ø%.ðñ ô ñô ð ð %�ØÔ*Ð6¸7ÀfÔF]Ð;]Ð;]Ø—K’KÕ 7¸Ñ ?Ô ?Ñ@Ô@Ð@Ø×%Ò%¥b¤lÀÐUWÐ]aÐjnÐ&oÑ&oÔ&oÑpÔpÐpøå”9‘;”;ˆDØˆDŒJØˆDŒIØ(ˆDŒOØ˜$Ô.°Ñ2Ò2Ð2Ý"@ÀÑ"JÔ"J�”ØŒI×Ò˜TÑ"Ô"Ð"Ñ"ð1	#ð 	#r+   r?   c                 óP  — t          | j        ¦  «        D �]\  }}t          | j        ¦  «        D ]Ñ} |j        |         |¦  «        }t          |j        ¦  «        dk    r¡|} |j        |         |¦  «        }|j        \  }}}}	| 	                    ||||	z  ¦  «         
                    dd¦  «        } |j        |         |¦  «        d         }|                     |||	|¦  «                             dddd¦  «        }||z   }ŒÒ|| j        dz
  k    r|                     |¦  «        }�Œ|S )Nr   r   r   r   )Ú	enumerater÷   rø   ró   rü   rð   rý   rþ   rg   rj   rm   rè   rh   rò   rÿ   )
r=   r?   r   Úblocksr  rL   ro   rq   rr   rs   s
             r,   rN   zEmu3VQVAEDownBlock.forwardË  sF  € Ý(¨¬Ñ3Ô3ð 	Añ 	A‰OˆG�VÝ  Ô!4Ñ5Ô5ð =ð =�Ø 5 ¤¨WÔ 5°mÑ DÔ D�Ý�v”{Ñ#Ô# aÒ'Ð'Ø,�HØ$> FÔ$5°gÔ$>¸}Ñ$MÔ$M�Mà:GÔ:MÑ7�J ¨&°%Ø$1×$6Ò$6°zÀ8ÈVÐV[É^Ñ$\Ô$\×$fÒ$fÐghÐjkÑ$lÔ$l�MØ$8 F¤K°Ô$8¸Ñ$GÔ$GÈÔ$J�Mà$1×$9Ò$9¸*ÀfÈeÐU]Ñ$^Ô$^×$fÒ$fÐghÐjkÐmnÐpqÑ$rÔ$r�MØ$,¨}Ñ$<�Møà˜$Ô.°Ñ2Ò2Ð2Ø &× 1Ò 1°-Ñ @Ô @�ùàÐr+   ré   rT   s   @r,   rì   rì   ¥  sW   ø€ € € € € ð##ð ##ð ##ð ##ð ##ðJ UÔ%6ð ð ð ð ð ð ð ð r+   rì   c                   óB   ‡ — 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 �]=}t          j	        ¦   «         }t          j	        ¦   «         }t          j	        ¦   «         }|j        |j        |         z  }t          | j        dz   ¦  «        D ]w}	|                     t          |||¬¦  «        ¦  «         |}||j        v rE|                     t!          |¦  «        ¦  «         |                     t#          ||¦  «        ¦  «         Œxt          j        ¦   «         }
||
_        ||
_        ||
_        |dk    rt-          |¦  «        |
_        | j
                             d|
¦  «         �Œ?d S )Nrc   r   râ   r   )r7   r8   rð   rñ   rò   ró   rZ   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ˆÔàÔ)ˆØÔ'¨&Ô*CÀBÔ*GÑGˆå”-‘/”/ˆŒÝ¥ dÔ&:Ñ ;Ô ;Ñ<Ô<ð 	"ñ 	"ˆGÝ”M‘O”OˆEÝ”=‘?”?ˆDÝœ™œˆJØÔ,¨vÔ/HÈÔ/QÑQˆIÝ  Ô!4°qÑ!8Ñ9Ô9ð Vð V�Ø—’Ý(Ø$,Ø%.Ø'5ðñ ô ñô ð ð %�Ø˜fÔ5Ð5Ð5Ø—K’KÕ 7¸Ñ ?Ô ?Ñ@Ô@Ð@Ø×%Ò%Õ&:¸>È8Ñ&TÔ&TÑUÔUÐUøå”‘”ˆBØˆBŒHØˆBŒGØ&ˆBŒMØ˜!Š|ˆ|Ý:¸8ÑDÔD�”àŒG�NŠN˜1˜bÑ!Ô!Ð!Ñ!ð3	"ð 	"r+   r?   r¯   c                 ó†  — t          | j        d d d…         ¦  «        D �]!\  }}t          | j        dz   ¦  «        D ]Ó} |j        |         ||¦  «        }t          |j        ¦  «        dk    r¢|} |j        |         ||¦  «        }|j        \  }}}	}
| 	                    |||	|
z  ¦  «         
                    dd¦  «        } |j        |         |¦  «        d         }|                     ||	|
|¦  «                             dddd¦  «        }||z   }ŒÔ|t          | j        ¦  «        dz
  k    r|                     |¦  «        }�Œ#|S )Nrc   r   r   r   r   )r  r
  rø   ró   rü   rð   rý   rþ   rg   rj   rm   rè   rh   r  )r=   r?   r¯   r   r  r  rL   ro   rq   rr   rs   s              r,   rN   zEmu3VQVAEUpBlock.forward  sZ  € Ý(¨¬°°°2°¬Ñ7Ô7ð 	?ñ 	?‰OˆG�VÝ  Ô!4°qÑ!8Ñ9Ô9ð =ð =�Ø 5 ¤¨WÔ 5°mÀ\Ñ RÔ R�Ý�v”{Ñ#Ô# aÒ'Ð'Ø,�HØ$> FÔ$5°gÔ$>¸}ÈlÑ$[Ô$[�Mà:GÔ:MÑ7�J ¨&°%Ø$1×$6Ò$6°zÀ8ÈVÐV[É^Ñ$\Ô$\×$fÒ$fÐghÐjkÑ$lÔ$l�MØ$8 F¤K°Ô$8¸Ñ$GÔ$GÈÔ$J�Mà$1×$9Ò$9¸*ÀfÈeÐU]Ñ$^Ô$^×$fÒ$fÐghÐjkÐmnÐpqÑ$rÔ$r�MØ$,¨}Ñ$<�MøØ�#˜dœg™,œ,¨Ñ*Ò*Ð*Ø &§¢°Ñ >Ô >�ùàÐr+   ré   rT   s   @r,   r  r  à  sa   ø€ € € € € ð#"ð #"ð #"ð #"ð #"ðJ UÔ%6ð ÀeÔFWð ð ð ð ð ð ð ð r+   r  c                   ó4   ‡ — 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         	                    ||ddd¬¦  «        | _
        t          |¦  «        | _        t          ||¦  «        | _        t          j                             d|dd¬	¦  «        | _        t          j         	                    ||ddd¬¦  «        | _        t%          t'          j        |j        ¦  «        ¦  «        }	t          j        ¦   «         | _        t          j        ¦   «         | _        t3          |	¦  «        D ],}
t5          ||¦  «        }| j                             |¦  «         Œ-t3          |j        ¦  «        D ]-}t;          ||¬
¦  «        }| j                             |¦  «         Œ.d S )Nr   rc   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_outrO   Ú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ƒ   rM   Útime_res_convr>   s                 €r,   r8   zEmu3VQVAEEncoder.__init__  sÇ  ø€ Ý‰Œ×ÒÑÔÐàÔ,ˆØÔ(ˆØÔ,ˆØ Ô0ˆØ#Ô6ÐØ.;ÐP�q˜?Ñ*Ð*ÀˆØ Ð#5°bÔ#9Ñ9ˆå”x—’ {°MÈqÐYZÐde�ÑfÔfˆŒÝ,¨VÑ4Ô4ˆŒÝ0°¸ÑBÔBˆÔåœ×*Ò*°bÀxÐUYÐbfÐ*ÑgÔgˆŒÝœŸšØØØØØð (ñ 
ô 
ˆŒõ  #¥4¤9¨VÔ-NÑ#OÔ#OÑPÔPÐÝœ™œˆŒÝ œm™oœoˆÔåÐ+Ñ,Ô,ð 	(ð 	(ˆAÝ.¨|¸\ÑJÔJˆDØŒN×!Ò! $Ñ'Ô'Ð'Ð'å�vÔ,Ñ-Ô-ð 	6ð 	6ˆAÝ8Ø(Ø)ðñ ô ˆMð Ô×&Ò& }Ñ5Ô5Ð5Ð5ð	6ð 	6r+   Úpixel_valuesc                 ót  — |j         d         } |j        dg|j         dd …         ¢R Ž }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|t          j        |¦  «        z  }|                      |¦  «        } |j        d|g|j         dd …         ¢R Ž }| 	                    ddddd¦  «        }| j
        D ]$} ||¦  «        }|t          j        |¦  «        z  }Œ%| j        D ]} ||¦  «        }Œ| 	                    ddddd¦  «        }|S )Nr   rc   r   r   r   rb   )rg   rè   r  r  r  r  r'   rÌ   r  rh   r  r  )r=   r!  Útemporal_dimr?   rƒ   Úlayers         r,   rN   zEmu3VQVAEEncoder.forwardB  sf  € Ø#Ô)¨!Ô,ˆØ+�|Ô+¨BÐH°Ô1CÀAÀBÀBÔ1GÐHÐHÐHˆð Ÿš \Ñ2Ô2ˆØŸš¨Ñ6Ô6ˆØ×)Ò)¨-Ñ8Ô8ˆð Ÿš mÑ4Ô4ˆØ�œ }Ñ5Ô5Ñ5ˆØŸš mÑ4Ô4ˆà-˜Ô-¨b°,ÐYÀÔATÐUVÐUWÐUWÔAXÐYÐYÐYˆØ%×-Ò-¨a°°A°q¸!Ñ<Ô<ˆð ”Nð 	:ð 	:ˆDØ ˜D Ñ/Ô/ˆMØ�Uœ]¨=Ñ9Ô9Ñ9ˆMˆMàÔ(ð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMà%×-Ò-¨a°°A°q¸!Ñ<Ô<ˆàÐr+   )r#   r$   r%   r8   r'   r(   rN   rS   rT   s   @r,   r  r    sW   ø€ € € € € ð%6ð %6ð %6ð %6ð %6ðN EÔ$4ð ð ð ð ð ð ð ð r+   r  c                   óH   ‡ — 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 ]7}t          |j        |j        ¬¦  «        }| j                             |¦  «         Œ8t          t          j        |j        ¦  «        ¦  «        }t          j        ¦   «         | _        t          |¦  «        D ]6}t%          |j        |j        ¦  «        }| j                             |¦  «         Œ7t          j        |j        |ddd¬¦  «        | _        t+          |||¬¦  «        | _        t/          |¦  «        | _        |j        |j        d         z  }t3          ||¦  «        | _        t          j        ||j        ddd¬¦  «        | _        d S )Nrc   rï   r   r   r~   )rÏ   r   )r7   r8   rZ   rô   rñ   r9   rö   r  rø   ró   rÃ   r  rù   rO   r  r  r  r  rµ   r‚   r  rà   r  r  Úup_blockr    r  r¡   r  )
r=   r3   rÏ   r  rM   r   Útemp_upsample_block_numr  rƒ   r>   s
            €r,   r8   zEmu3VQVAEDecoder.__init__a  s®  ø€ Ý‰Œ×ÒÑÔÐàÔ)ˆØÔ'¨&Ô*CÀBÔ*GÑGˆÝ œm™oœoˆÔÝ�vÔ,Ñ-Ô-ð 	6ð 	6ˆAÝ8Ø"Ô2ÀÔAWðñ ô ˆMð Ô×&Ò& }Ñ5Ô5Ð5Ð5å"%¥d¤i°Ô0QÑ&RÔ&RÑ"SÔ"SÐÝœ™œˆŒÝÐ.Ñ/Ô/ð 	(ð 	(ˆAÝ,¨VÔ-CÀVÔE[Ñ\Ô\ˆDØŒN×!Ò! $Ñ'Ô'Ð'Ð'å”yØÔ"ØØØØð
ñ 
ô 
ˆŒõ 1°¸ÐR`ÐaÑaÔaˆÔÝ(¨Ñ0Ô0ˆŒàÔ'¨&Ô*CÀAÔ*FÑFˆÝ,¨^¸XÑFÔFˆŒÝœ	ØØÔØØØð
ñ 
ô 
ˆŒˆˆr+   r?   r¯   c                 óÂ  — t          j        ||fd¬¦  «        }|                     ddddd¦  «        }| j        D ]} ||¦  «        }Œ| j        D ]$} ||¦  «        }|t          j        |¦  «        z  }Œ%|                     ddddd¦  «        }t          j        |dd¬¦  «        \  }} |j        dg|j        dd …         ¢R Ž } |j        dg|j        dd …         ¢R Ž }|  	                    |¦  «        }|  
                    ||¦  «        }|                      ||¦  «        }|                      ||¦  «        }|t          j        |¦  «        z  }|                      |¦  «        }|S )Nr   rf   r   r   r   rb   rc   )r'   Úcatrh   r  r  rÌ   Úchunkrè   rg   r  r  r(  r  r  )r=   r?   r¯   Úhidden_quant_statesr$  s        r,   rN   zEmu3VQVAEDecoder.forwardˆ  sš  € Ý#œi¨¸Ð(EÈ1ÐMÑMÔMÐØ1×9Ò9¸!¸QÀÀ1ÀaÑHÔHÐð Ô(ð 	=ð 	=ˆEØ"' %Ð(;Ñ"<Ô"<ÐÐà”^ð 	Fð 	FˆEØ"' %Ð(;Ñ"<Ô"<ÐØ¥5¤=Ð1DÑ#EÔ#EÑEÐÐà1×9Ò9¸!¸QÀÀ1ÀaÑHÔHÐÝ&+¤kÐ2EÀqÈaÐ&PÑ&PÔ&PÑ#ˆ�|Ø-˜Ô-¨bÐK°=Ô3FÀqÀrÀrÔ3JÐKÐKÐKˆØ+�|Ô+¨BÐH°Ô1CÀAÀBÀBÔ1GÐHÐHÐHˆàŸš ]Ñ3Ô3ˆð ×)Ò)¨-¸ÑFÔFˆØŸš m°\ÑBÔBˆàŸš m°\ÑBÔBˆØ�œ }Ñ5Ô5Ñ5ˆØŸš mÑ4Ô4ˆàÐr+   )	r#   r$   r%   r   r8   r'   rP   rN   rS   rT   s   @r,   r&  r&  `  sk   ø€ € € € € ð%
˜ð %
ð %
ð %
ð %
ð %
ð %
ð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Î   rV   ©r?   Ú
attentionsc                 ó  •— t          ¦   «                              |¦  «         t          |t          j        t          j        f¦  «        r†t          j        |j        dd¬¦  «         |j	        �at          j        j                             |j        ¦  «        \  }}dt          j        |¦  «        z  }t          j        |j	        | |¦  «         d S d S t          |t          j        ¦  «        rŸt          j        |j        t          j        d¦  «        ¬¦  «         |j	        �it          j        j                             |j        ¦  «        \  }}|dk    rdt          j        |¦  «        z  nd}t          j        |j	        | |¦  «         d S d S t          |t          j        ¦  «        r\t          j        |j        ¦  «         |j        �>t)          |j        dd	¦  «        s*t          j        |j        |j                 ¦  «         d S d S d S d S )
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_rX   Únormal_Úpadding_idxÚgetattrÚzeros_)r=   ÚmoduleÚfan_inrM   Úboundr>   s        €r,   r=  zEmu3VQVAE._init_weightsÂ  sÏ  ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�rœy­"¬)Ð4Ñ5Ô5ð 	?ÝÔ  ¤°YÈVÐTÑTÔTÐTØŒ{Ð&Ý!œHœM×GÒGÈÌÑVÔV‘	�˜Ø�DœI fÑ-Ô-Ñ-�Ý”˜fœk¨E¨6°5Ñ9Ô9Ð9Ð9Ð9ð 'Ð&õ ˜¥¤	Ñ*Ô*ð 
	?ÝÔ! &¤-µ4´9¸Q±<´<Ð@Ñ@Ô@Ð@ØŒ{Ð&Ý!œHœM×GÒGÈÌÑVÔV‘	�˜Ø17¸!²°˜�DœI fÑ-Ô-Ñ-Ð-À�Ý”˜fœk¨E¨6°5Ñ9Ô9Ð9Ð9Ð9ð 'Ð&õ ˜¥¤Ñ-Ô-ð 	?ÝŒL˜œÑ'Ô'Ð'àÔ!Ð-µg¸f¼mÐMaÐchÑ6iÔ6iÐ-Ý”˜FœM¨&Ô*<Ô=Ñ>Ô>Ð>Ð>Ð>ð		?ð 	?ð .Ð-Ð-Ð-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  | _        |                      ¦   «          |                      ¦   «          d S )Nr   r   )r   r   r   r¸   r¹   )r7   r8   r3   r  Úencoderr&  ÚdecoderrV   Úquantizerð   rñ   Úvision_spatial_factorr�   r  rZ   Ú
quant_convÚpost_quant_convÚspatial_scale_factorÚevalÚ	post_initr_   s     €r,   r8   zEmu3VQVAE.__init__×  sý   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àˆŒå'¨Ñ/Ô/ˆŒÝ'¨Ñ/Ô/ˆŒÝ0°Ñ8Ô8ˆŒØ%&­3¨vÔ/HÑ+IÔ+IÈAÑ+MÑ%NˆÔ"å)ØÔ" FÔ$4À)ÐT]ð
ñ 
ô 
ˆŒõ  /ØÔ˜fÔ4À)ÐT]ð 
ñ  
ô  
ˆÔð %&­#¨fÔ.GÑ*HÔ*HÈ1Ñ*LÑ$MˆÔ!Ø�	Š	‰Œˆà�ŠÑÔÐÐÐr+   Úimage_sizesrE   rF   c                 ó0  ‡ — |j         dk    }|rE‰ j        j        }|j        \  }}}}	|                     d¦  «                             d|ddd¦  «        }n|j        \  }}}}}	‰                      |¦  «        }
|
                     ddddd¦  «        }‰                      |¦  «        }|                     ddddd¦  «        }‰  	                    |¦  «        }|r| 
                    d¦  «        n|}ˆ fd„t          ||¦  «        D ¦   «         }t          |
|¬¦  «        S )Nrb   r   r   r   r   c           	      óž   •— g | ]I\  }}|d t          |d         ‰j        z  ¦  «        …d t          |d         ‰j        z  ¦  «        …f         ‘ŒJS )Nr   r   )rO   rP  )r•   Úsingle_imager²   r=   s      €r,   r˜   z$Emu3VQVAE.encode.<locals>.<listcomp>  sm   ø€ ð 
ð 
ð 
á"�˜dð ÐD�3˜t Aœw¨Ô)CÑCÑDÔDÐDÐFqÍÈDÐQRÌGÐVZÔVpÑLpÑHqÔHqÐFqÐqÔrð
ð 
ð 
r+   )Úlast_hidden_stater"   )Úndimr3   r  rg   Ú	unsqueezeÚrepeatrM  rh   rQ  rO  Úsqueezer™   r!   )r=   r!  rV  rE   Úis_imagerp   ro   rq   rr   rs   r?   Úconv_hidden_statesÚcodesr"   s   `             r,   ÚencodezEmu3VQVAE.encodeì  sR  ø€ ð
  Ô$¨Ò)ˆØð 	OØ”{Ô=ˆHØ2>Ô2DÑ/ˆJ˜ &¨%Ø'×1Ò1°!Ñ4Ô4×;Ò;¸A¸xÈÈAÈqÑQÔQˆLˆLà<HÔ<NÑ9ˆJ˜ (¨F°EàŸš \Ñ2Ô2ˆð +×2Ò2°1°a¸¸A¸qÑAÔAÐØ!Ÿ_š_Ð-?Ñ@Ô@Ðð 0×7Ò7¸¸1¸aÀÀAÑFÔFÐØ—’Ð0Ñ1Ô1ˆà+3Ð>�u—}’} QÑ'Ô'Ð'¸ˆð
ð 
ð 
ð 
å&)¨,¸Ñ&DÔ&Dð
ñ 
ô 
ˆõ
 $Ø+Ø%ð
ñ 
ô 
ð 	
r+   r?   c                 ó®  — |j         dk    }|r|                     d¦  «        }|j        \  }}}}| j                             |                     ¦   «         ¦  «        }|j        d         }|                     |||||¦  «                             ddddd¦  «                             ¦   «         }|  	                    |¦  «        }	|                     ddddd¦  «        }|	                     ddddd¦  «        }	|  
                    |	|¦  «        }
|
                     ||| j        j        z  | j        j        || j        z  || j        z  ¦  «        }
|r|
d d …df         n|
S )Nr   r   rc   r   rb   r   )r[  r\  rg   rO  r[   Úflattenrj   rh   ri   rR  rN  rè   r3   r  r¡   rS  )r=   r?   r_  ro   rp   rr   rs   Úquantrq   Ú
post_quantÚvideos              r,   ÚdecodezEmu3VQVAE.decode  s_  € Ø Ô%¨Ò*ˆØð 	7Ø)×3Ò3°AÑ6Ô6ˆMà.;Ô.AÑ+ˆ
�H˜f eØ”×'Ò'¨×(=Ò(=Ñ(?Ô(?Ñ@Ô@ˆà”;˜r”?ˆØ—
’
˜: x°¸ÀÑIÔI×QÒQÐRSÐUVÐXYÐ[\Ð^_Ñ`Ô`×kÒkÑmÔmˆØ×)Ò)¨%Ñ0Ô0ˆ
à—’˜a  A q¨!Ñ,Ô,ˆØ×'Ò'¨¨1¨a°°AÑ6Ô6ˆ
à—’˜Z¨Ñ/Ô/ˆØ—’ØØ�t”{Ô=Ñ=ØŒKÔ$Ø�TÔ.Ñ.Ø�DÔ-Ñ-ñ
ô 
ˆð 'Ð1ˆu�Q�Q�Q˜�TŒ{ˆ{¨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   rP   r   r   r!   rb  rh  rS   rT   s   @r,   r1  r1  ¦  sI  ø€ € € € € € ð ÐÐÑØ$ÐØ$€OØ!ÐØ€NØÐØÐØ"&Ððð ð Ðð /Ð0LÐMØ-ðð Ðð
 €U„]�_„_ð?ð ?ð ?ð ?ñ „_ð?ð(˜ð ð ð ð ð ð ð*  Øð
Ø!œLð
Ø7<´|ð
ØOUÐVhÔOið
à	ð
ð 
ð 
ñ „_ñ  Ôð
ðB2 E¤Lð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r+   r1  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dS )ÚEmu3ImageVocabularyMappingzM
    A class for mapping discrete image tokens from VQGAN to BPE tokens.
    c                 ó|   — || _         |                     d¦  «        | _        |                     d¦  «        | _        d S )Nz<|extra_200|>z<image>)Ú	vocab_mapÚgetÚeol_token_idÚimage_token_id)r=   rv  s     r,   r8   z#Emu3ImageVocabularyMapping.__init__.  s7   € Ø"ˆŒØ%ŸMšM¨/Ñ:Ô:ˆÔØ'Ÿmšm¨IÑ6Ô6ˆÔÐÐr+   c                 ób   — t          d„ | j                             ¦   «         D ¦   «         ¦  «        S )Nc                 óB   — g | ]\  }}|                      d ¦  «        ¯|‘ŒS ©z<|visual token©Ú
startswith©r•   ÚnameÚvals      r,   r˜   z;Emu3ImageVocabularyMapping.image_tokens.<locals>.<listcomp>5  s.   € ÐhÐhÐh™y˜t SÀdÇoÂoÐVfÑFgÔFgÐh�sÐhÐhÐhr+   ©Úsortedrv  Úitems©r=   s    r,   r"   z'Emu3ImageVocabularyMapping.image_tokens3  s-   € åÐhÐh¨D¬N×,@Ò,@Ñ,BÔ,BÐhÑhÔhÑiÔiÐir+   c                 ób   — t          d„ | j                             ¦   «         D ¦   «         ¦  «        S )Nc                 óB   — g | ]\  }}|                      d ¦  «        ¯|‘ŒS r|  r}  r  s      r,   r˜   z?Emu3ImageVocabularyMapping.image_tokens_str.<locals>.<listcomp>9  s.   € ÐiÐiÐi¡	  cÀtÇÂÐWgÑGhÔGhÐi�tÐiÐiÐir+   r‚  r…  s    r,   Úimage_tokens_strz+Emu3ImageVocabularyMapping.image_tokens_str7  s-   € åÐiÐi¨T¬^×-AÒ-AÑ-CÔ-CÐiÑiÔiÑjÔjÐjr+   c                 ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )Nc                 óV   •— i | ]%}t          |d d…         ¦  «        ‰j        |         “Œ&S )iøÿÿÿr±   )rO   rv  )r•   Útokenr=   s     €r,   ú
<dictcomp>z6Emu3ImageVocabularyMapping.img2bpe.<locals>.<dictcomp>=  s2   ø€ Ð\Ð\Ð\¸U•�E˜"˜R˜%”LÑ!Ô! 4¤>°%Ô#8Ð\Ð\Ð\r+   )rˆ  r…  s   `r,   Úimg2bpez"Emu3ImageVocabularyMapping.img2bpe;  s    ø€ à\Ð\Ð\Ð\ÀdÔF[Ð\Ñ\Ô\Ð\r+   c                 óH   — d„ | j                              ¦   «         D ¦   «         S )Nc                 ó   — i | ]\  }}||“Œ	S r*   r*   )r•   ÚkÚvs      r,   rŒ  z6Emu3ImageVocabularyMapping.bpe2img.<locals>.<dictcomp>A  s   € Ð6Ð6Ð6™˜˜A��1Ð6Ð6Ð6r+   )r�  r„  r…  s    r,   Úbpe2imgz"Emu3ImageVocabularyMapping.bpe2img?  s$   € à6Ð6 ¤×!3Ò!3Ñ!5Ô!5Ð6Ñ6Ô6Ð6r+   c                 óÜ   — t          j        t          | j                             ¦   «         ¦  «        dz   t           j        ¬¦  «        }| j                             ¦   «         D ]
\  }}|||<   Œ|S ©Nr   ©Údtype)r'   ÚzerosÚmaxr’  ÚkeysrO   r„  ©r=   Úmappingr�  r‘  s       r,   Úbpe2img_mapping_tensorz1Emu3ImageVocabularyMapping.bpe2img_mapping_tensorC  ód   € å”+�c $¤,×"3Ò"3Ñ"5Ô"5Ñ6Ô6¸Ñ:Å%Ä)ÐLÑLÔLˆØ”L×&Ò&Ñ(Ô(ð 	ð 	‰DˆAˆqØˆG�A‰JˆJØˆr+   c                 óÜ   — t          j        t          | j                             ¦   «         ¦  «        dz   t           j        ¬¦  «        }| j                             ¦   «         D ]
\  }}|||<   Œ|S r”  )r'   r—  r˜  r�  r™  rO   r„  rš  s       r,   Úimg2bpe_mapping_tensorz1Emu3ImageVocabularyMapping.img2bpe_mapping_tensorJ  r�  r+   Ú	img_batchrF   c                 ó  — |j         }t          j        |j        d         dft          j        ¬¦  «        | j        z  }| j        |                     d¦  «                 }t          j        ||gd¬¦  «        }|                     |¦  «        S )Nr   r   r•  Úcpurc   rf   )	Údevicer'   Úonesrg   rO   rx  rŸ  Útor+  )r=   r   r£  Úeol_rowÚ
img_tokenss        r,   Úconvert_img2bpez*Emu3ImageVocabularyMapping.convert_img2bpeQ  sx   € ØÔ!ˆÝ”*˜iœo¨aÔ0°!Ð4½E¼IÐFÑFÔFÈÔIZÑZˆØÔ0°·²¸eÑ1DÔ1DÔEˆ
Ý”Y 
¨GÐ4¸"Ð=Ñ=Ô=ˆ
Ø�}Š}˜VÑ$Ô$Ð$r+   c                 ó’   — |j         }|dd d…f         }| j        |                     d¦  «                 }|                     |¦  «        S )N.rc   r¢  )r£  rœ  r¥  )r=   r   r£  r§  s       r,   Úconvert_bpe2imgz*Emu3ImageVocabularyMapping.convert_bpe2imgX  sG   € ØÔ!ˆØ˜c 3 B 3˜hÔ'ˆ	ØÔ0°·²¸eÑ1DÔ1DÔEˆ
Ø�}Š}˜VÑ$Ô$Ð$r+   N)r#   r$   r%   r&   r8   r   r"   rˆ  r�  r’  rœ  rŸ  Úlistr'   rP   r¨  rª  r*   r+   r,   rt  rt  )  s)  € € € € € ðð ð7ð 7ð 7ð
 ðjð jñ „_ðjð ðkð kñ „_ðkð ð]ð ]ñ „_ð]ð ð7ð 7ñ „_ð7ð ðð ñ „_ðð ðð ñ „_ðð%¨¨e¬lÔ);ð %ÀÄð %ð %ð %ð %ð%¨¬ð %¸%¼,ð %ð %ð %ð %ð %ð %r+   rt  c                   ó&   — e Zd ZdgZdZdZeedœZdS )ÚEmu3PreTrainedModelr2   Tr4  N)	r#   r$   r%   rp  rn  ro  r2   r.   rq  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        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r*   )r2   )r•   r4   r3   s     €r,   r˜   z*Emu3TextModel.__init__.<locals>.<listcomp>q  s$   ø€ ÐbÐbÐb°YÕ˜f iÑ0Ô0ÐbÐbÐbr+   )r7   r8   r9   rö   rø   Únum_hidden_layersÚlayersr_   s    `€r,   r8   zEmu3TextModel.__init__n  sU   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”mØbÐbÐbÐbÅ%ÈÔH`ÑBaÔBaÐbÑbÔbñ
ô 
ˆŒˆˆr+   )r#   r$   r%   r   r)   r8   rS   rT   s   @r,   r¯  r¯  k  sR   ø€ € € € € € ØÐÐÑð
˜~ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r+   r¯  c                   ó4   ‡ — e Zd ZU eed<   ˆ fd„Zˆ fd„Zˆ xZS )ÚEmu3ForCausalLMr3   c                 ór   •— t          ¦   «                              |¦  «         t          |¦  «        | _        d S r6   )r7   r8   r¯  Úmodelr_   s     €r,   r8   zEmu3ForCausalLM.__init__x  s.   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý" 6Ñ*Ô*ˆŒ
ˆ
ˆ
r+   c                  óH   •— t          ¦   «                              ¦   «          dS )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   rN   )Úsuper_kwargsr>   s    €r,   rN   zEmu3ForCausalLM.forward|  s   ø€ õ& 	‰Œ�ŠÑÔÐÐÐr+   )r#   r$   r%   r   r)   r8   rN   rS   rT   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        ¦  «        | _        t          |j        ¦  «        | _        t          |j
        ¦  «        | _        |                      ¦   «          d S r6   )r7   r8   r¯  Ú_from_configÚtext_configÚ
text_modelr1  Ú	vq_configÚvqmodelrt  Úvocabulary_mapÚvocabulary_mappingrU  r_   s     €r,   r8   zEmu3Model.__init__“  sp   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý'×4Ò4°VÔ5GÑHÔHˆŒÝ  Ô!1Ñ2Ô2ˆŒÝ"<¸VÔ=RÑ"SÔ"SˆÔð 	�ŠÑÔÐÐÐr+   c                 ó4   — | j                              ¦   «         S r6   )r¿  Úget_input_embeddingsr…  s    r,   rÅ  zEmu3Model.get_input_embeddingsœ  s   € ØŒ×3Ò3Ñ5Ô5Ð5r+   c                 ó:   — | j                              |¦  «         d S r6   )r¿  Úset_input_embeddings©r=   Úvalues     r,   rÇ  zEmu3Model.set_input_embeddingsŸ  s   € ØŒ×,Ò,¨UÑ3Ô3Ð3Ð3Ð3r+   r!  rV  rF   c                 ó�   ‡ — ‰ j                              ||d¬¦  «        }ˆ fd„|j        D ¦   «         }t          j        |¦  «        }|S )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_dictc                 óh   •— g | ].}‰j                              |¦  «                             ¦   «         ‘Œ/S r*   ©rÃ  r¨  rd  ©r•   Útokensr=   s     €r,   r˜   z.Emu3Model.get_image_tokens.<locals>.<listcomp>¯  óC   ø€ ð 
ð 
ð 
ØJPˆDÔ#×3Ò3°FÑ;Ô;×CÒCÑEÔEð
ð 
ð 
r+   )rÁ  rb  r"   r'   r+  )r=   r!  rV  Úvqmodel_outputsÚbpe_tokens_listÚ
bpe_tokenss   `     r,   Úget_image_tokenszEmu3Model.get_image_tokens¢  se   ø€ ð 15´×0CÒ0CÀLÐR]ÐkoÐ0CÑ0pÔ0pˆð
ð 
ð 
ð 
ØTcÔTpð
ñ 
ô 
ˆõ ”Y˜Ñ/Ô/ˆ
ØÐr+   zbTokenizes images into discrete tokens with VQGAN module and embeds them with text embeddings layerr.  rE   c                 ó  ‡ —  ‰ j         j        ||fddi|¤Ž}ˆ fd„|D ¦   «         }ˆ fd„|j        D ¦   «         }t          j        |¦  «        } ‰                      ¦   «         |¦  «        }t          j        ||¦  «        }	|	|_        |S )z­
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)):
            The tensors corresponding to the input images.
        rË  Tc                 óZ   •— g | ]'\  }}|‰j         j        z  |‰j         j        z  d z   z  ‘Œ(S rî   )rÁ  rP  )r•   rr   rs   r=   s      €r,   r˜   z0Emu3Model.get_image_features.<locals>.<listcomp>Ã  sL   ø€ ð 
ð 
ð 
á�˜ð �t”|Ô9Ñ9¸eÀtÄ|ÔGiÑ>iÐlmÑ>mÑnð
ð 
ð 
r+   c                 óh   •— g | ].}‰j                              |¦  «                             ¦   «         ‘Œ/S r*   rÍ  rÎ  s     €r,   r˜   z0Emu3Model.get_image_features.<locals>.<listcomp>Ç  rÐ  r+   )rÁ  rb  r"   r'   r+  rÅ  ÚsplitÚpooler_output)
r=   r!  rV  rE   rÑ  Úsplit_sizesrÒ  rÓ  Úimage_embeddingsÚimage_featuress
   `         r,   Úget_image_featureszEmu3Model.get_image_featuresµ  sÖ   ø€ ð 1D°´Ô0CØ˜+ð1
ð 1
Ø37ð1
Ø;Að1
ð 1
ˆð
ð 
ð 
ð 
à!,ð
ñ 
ô 
ˆð
ð 
ð 
ð 
ØTcÔTpð
ñ 
ô 
ˆõ ”Y˜Ñ/Ô/ˆ
Ø6˜4×4Ò4Ñ6Ô6°zÑBÔBÐÝœÐ%5°{ÑCÔCˆØ(6ˆÔ%àÐr+   r"   rr   rs   c                 óº   — |dd…dd…f                               d||dz   ¦  «        }| 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éýÿÿÿrc   r   )rj   rÃ  rª  rÁ  rh  )r=   r"   rr   rs   Ú	sequencesr3  s         r,   Údecode_image_tokenszEmu3Model.decode_image_tokensÑ  s`   € ð !    C R C Ô(×-Ò-¨b°&¸%À!¹)ÑDÔDˆ	ØÔ.×>Ò>¸yÑIÔIˆØ”×#Ò# LÑ1Ô1ˆØˆr+   Ú	input_idsÚinputs_embedsrÜ  c                 ó   — |€e| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }n|| j        j        k    }|                     ¦   «         }|j	        d         |j	        d         z  }| 
                    d¦  «                             |j        ¦  «        }t          ||j	        d         z  |                     ¦   «         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.
        N)r–  r£  rc   r   r   z6Image features and image tokens do not match, tokens: z, features: )rÅ  r'   ÚtensorrÃ  ry  Úlongr£  Úallrk   rg   r\  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Ô2MÝ”˜TÔ4ÔCÍ5Ì:Ð^kÔ^rÐsÑsÔsñ3ô 3ò "Ðð "4×!7Ò!7¸Ñ!;Ô!;ÐÐà!*¨dÔ.EÔ.TÒ!TÐà+×/Ò/Ñ1Ô1ˆØ)Ô/°Ô2°^Ô5IÈ!Ô5LÑLÐØ/×9Ò9¸"Ñ=Ô=×@Ò@ÀÔAUÑVÔVÐÝØ˜]Ô0°Ô4Ñ4¸×8LÒ8LÑ8NÔ8NÒNØsÀ^ÐsÐsÐaqÐsÐsñ	
ô 	
ð 	
ð "Ð!r+   Nr@   rA   rB   rC   c	           	      ó\  — |du |duz  rt          d¦  «        ‚|€ |                      ¦   «         |¦  «        }|�_|                      ||¦  «        j        }
t	          j        |
d¬¦  «        }
|                      |||
¬¦  «        }|                     ||
¦  «        } | 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   rf   )rã  rÜ  )r@   rA   rB   rã  rC   r*   )	Ú
ValueErrorrÅ  rÝ  rÙ  r'   r+  rì  Úmasked_scatterr¿  )r=   râ  r!  rV  r@   rA   rB   rã  rC   rE   rÜ  ré  Úoutputss                r,   rN   zEmu3Model.forwardü  sþ   € ð( ˜Ð -°tÐ";Ñ<ð 	ÝØsñô ð ð Ð Ø7˜D×5Ò5Ñ7Ô7¸	ÑBÔBˆMàÐ#Ø!×4Ò4°\À;ÑOÔOÔ]ˆNÝ"œY ~¸1Ð=Ñ=Ô=ˆNØ!%×!:Ò!:Ø¨À~ð ";ñ "ô "Ðð *×8Ò8Ð9KÈ^Ñ\Ô\ˆMð "�$”/ð 
Ø)Ø%Ø+Ø'Øð
ð 
ð ð
ð 
ˆð ˆr+   )NNNNNNNN)r#   r$   r%   r8   rÅ  rÇ  r'   rê   r(   rÔ  r   r   r   r   rR   r!   rÝ  rr  rO   rá  rì  rP   r   rQ   r
   rN   rS   rT   s   @r,   r»  r»  ’  sa  ø€ € € € € ðð ð ð ð ð6ð 6ð 6ð4ð 4ð 4ð¨UÔ->ð ÈUÔM]ð ÐbgÔbrð ð ð ð ð& Ø€^Øyðñ ô ðØ!Ô-ðØ<AÔ<LðØX^Ð_qÔXrðà	Ð%Ñ	%ðð ð ñô ñ Ôðð0 €U„]�_„_ð°Ô0@ð È#ð ÐVYð ð ð ñ „_ðð$"ØÔ)ð"Ø:?Ô:Kð"Ø]bÔ]nð"ð "ð "ð "ð0 Øð .2Ø15Ø+/Ø.2Ø04Ø(,Ø26Ø!%ð,ð ,àÔ# dÑ*ð,ð Ô'¨$Ñ.ð,ð ”\ DÑ(ð	,ð
 œ tÑ+ð,ð Ô&¨Ñ-ð,ð  ™ð,ð Ô(¨4Ñ/ð,ð ˜$‘;ð,ð Ð+Ô,ð,ð 
Ð'Ñ	'ð,ð ,ð ,ñ „^ñ Ôð,ð ,ð ,ð ,ð ,r+   r»  c                   óx  ‡ — 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)r3  Útextzlm_head.weightz$model.text_model.embed_tokens.weightc                 óú   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        j        |j        j        d¬¦  «        | _	        |  
                    ¦   «          d S )NF)rÝ   )r7   r8   r»  r·  r9   rC  r¾  Úhidden_sizeÚ
vocab_sizeÚlm_headrU  r_   s     €r,   r8   z%Emu3ForConditionalGeneration.__init__1  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý˜vÑ&Ô&ˆŒ
Ý”y Ô!3Ô!?ÀÔASÔA^ÐejÐkÑkÔkˆŒà�ŠÑÔÐÐÐr+   c                 ó4   — | j                              ¦   «         S r6   )r·  rÅ  r…  s    r,   rÅ  z1Emu3ForConditionalGeneration.get_input_embeddings8  s   € ØŒz×.Ò.Ñ0Ô0Ð0r+   c                 ó:   — | j                              |¦  «         d S r6   )r·  rÇ  rÈ  s     r,   rÇ  z1Emu3ForConditionalGeneration.set_input_embeddings;  s   € ØŒ
×'Ò'¨Ñ.Ô.Ð.Ð.Ð.r+   rF   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=   rE   s     r,   rá  z0Emu3ForConditionalGeneration.decode_image_tokensA  s   € Ø-ˆtŒzÔ-Ð7Ð7°Ð7Ð7Ð7r+   Nr   râ  r!  rV  r@   rA   rB   rã  rC   ÚlabelsÚlogits_to_keeprE   c           
      ó\  —  | j         d||||||dœ|¤Ž}|d         }t          |
t          ¦  «        rt          |
 d¦  «        n|
}|                      |dd…|dd…f         ¦  «        }d}|	�  | 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â  r@   rA   rB   rã  rC   r   N)Úlogitsrý  rö  )Úlossr   rB   r?   r5  r*   )r·  r>  rO   Úslicer÷  Úloss_functionr3   r¾  rö  r
   rB   r?   r5  )r=   râ  r!  rV  r@   rA   rB   rã  rC   rý  rþ  rE   rð  r?   Úslice_indicesr   r  s                    r,   rN   z$Emu3ForConditionalGeneration.forwardD  s  € ð@ �$”*ð 
ØØ)Ø%Ø+Ø'Øð
ð 
ð ð
ð 
ˆð   œ
ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô%ð Ø f¸¼Ô9PÔ9[ðð Ø_eðð ˆDõ &ØØØ#Ô3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r+   TFc	                 ó^   •—  t          ¦   «         j        |f|||||||dœ|	¤Ž}
|s|rd |
d<   |
S )N)rB   r@   rã  rA   r!  rC   Úis_first_iterationr!  )r7   Úprepare_inputs_for_generation)r=   râ  rB   r@   rã  rA   rC   r!  r  rE   Úmodel_inputsr>   s              €r,   r  z:Emu3ForConditionalGeneration.prepare_inputs_for_generation¡  sj   ø€ ð =•u‘w”wÔ<Øð

à+Ø)Ø'Ø%Ø%ØØ1ð

ð 

ð ð

ð 

ˆð "ð 	0 ið 	0Ø+/ˆL˜Ñ(àÐr+   )
NNNNNNNNNr   )NNNNTNF)r#   r$   r%   Úoutput_modalitiesÚ_tied_weights_keysr8   rÅ  rÇ  r9   rû   rû  rá  r   r   r'   r(   rê   rP   r   rQ   rO   r   r   rR   r
   rN   r  rS   rT   s   @r,   rò  rò  -  sò  ø€ € € € € Ø)ÐØ*Ð,RÐSÐðð ð ð ð ð1ð 1ð 1ð/ð /ð /ð r¤yð ð ð ð ð8ð 8ð 8ð Øð .2Ø15Ø+/Ø.2Ø04Ø(,Ø26Ø!%Ø*.Ø-.ðY
ð Y
àÔ# dÑ*ðY
ð Ô'¨$Ñ.ðY
ð ”\ DÑ(ð	Y
ð
 œ tÑ+ðY
ð Ô&¨Ñ-ðY
ð  ™ðY
ð Ô(¨4Ñ/ðY
ð ˜$‘;ðY
ð Ô  4Ñ'ðY
ð ˜eœlÑ*ðY
ð Ð+Ô,ðY
ð 
Ð'Ñ	'ðY
ð Y
ð Y
ñ „^ñ ÔðY
ð| ØØØØØØ ðð ð ð ð ð ð ð ð ð r+   rò  )rò  rµ  r¯  r­  r1  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û   rV   rz   r|   r�   r    rµ   r¿   rÃ   rÎ   rÕ   rª   rÙ   rà   rì   r  r  r&  r1  rt  r­  r¯  rµ  r»  rò  Ú__all__r*   r+   r,   ú<module>r      sº  ðð  €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø %Ð %Ð %Ð %Ð %Ð %à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø  Ð  Ð  Ð  Ð  Ð  Ø )Ð )Ð )Ð )Ð )Ð )Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð wÐ vÐ vÐ vÐ vÐ vÐ vÐ vÐ vÐ vÐ vÐ vÐ vÐ vØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kð 
ˆÔ	˜HÑ	%Ô	%€ð Ø
ð1ð 1ð 1ð 1ð 1Ð5ñ 1ô 1ñ „ñ „ð1ð	ð 	ð 	ð 	ð 	�Nñ 	ô 	ð 	ð
!ð !ð !ð !ð !Ð(ñ !ô !ð !ðH$ð $ð $ð $ð $˜rœyñ $ô $ð $ðD	ð 	ð 	ð 	ð 	Ð%Hñ 	ô 	ð 	ðð ð ð ð  2¤9ñ ô ð ðð ð ð ð �b”iñ ô ð ð:!ð !ð !ð !ð !˜2œ9ñ !ô !ð !ðHð ð ð ð  ¤	ñ ô ð ð.ð ð ð ð  "¤)ñ ô ð ð&.(ð .(ð .(ð .(ð .( 2¤9ñ .(ô .(ð .(ðb<(ð <(ð <(ð <(ð <(˜2œ9ñ <(ô <(ð <(ð~&ð &ð &ð &ð &˜oñ &ô &ð &ðVð Vð Vð Vð V˜œñ Vô Vð Vðð ð ð ð ˜2œ9ñ ô ð ðD8ð 8ð 8ð 8ð 8˜œñ 8ô 8ð 8ðv7ð 7ð 7ð 7ð 7�r”yñ 7ô 7ð 7ðtCð Cð Cð Cð C�r”yñ Cô Cð CðLCð Cð Cð Cð C�r”yñ Cô Cð CðL €ððñ ô ðx2ð x2ð x2ð x2ð x2�ñ x2ô x2ñô ðx2ðv3%ð 3%ð 3%ð 3%ð 3%ñ 3%ô 3%ð 3%ðl	ð 	ð 	ð 	ð 	Ð2ñ 	ô 	ð 	ð
ð 
ð 
ð 
ð 
�JÐ 3ñ 
ô 
ð 
ðð ð ð ð Ð&Ð(;¸_ñ ô ð ð:Xð Xð Xð Xð XÐ#ñ Xô Xð XðvQð Qð Qð Qð QÐ#6¸ñ Qô Qð Qðhð ð €€€r+   