§
    ‚ŠtjÞ¿  ã                   óæ  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	Z	ddl
mc 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 ddlmZ ddlmZmZmZ ddlm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4  e+j5        e6¦  «        Z7e)e G d„ de¦  «        ¦   «         ¦   «         Z8 G d„ dej9        ¦  «        Z: G d„ dej9        ¦  «        Z;d„ Z<dPd„Z= G d „ d!ej9        ¦  «        Z> G d"„ d#ej?        ¦  «        Z@d$e	jA        d%eBd&e	jA        fd'„ZC	 dQd)ej9        d*e	jA        d+e	jA        d,e	jA        d-e	jA        dz  d.eDd/eDd0e&e(         fd1„ZE G d2„ d3ej9        ¦  «        ZF G d4„ d5e¦  «        ZG G d6„ d7e¦  «        ZH G d8„ d9ej9        ¦  «        ZI G d:„ d;ej9        ¦  «        ZJ G d<„ d=ej9        ¦  «        ZK G d>„ d?ej9        ¦  «        ZL G d@„ dAej9        ¦  «        ZM G dB„ dC¦  «        ZNe) G dD„ dEe$¦  «        ¦   «         ZO e)dF¬G¦  «         G dH„ dIeO¦  «        ¦   «         ZPe) G dJ„ dKeO¦  «        ¦   «         ZQ e)dL¬G¦  «         G dM„ dNeOe¦  «        ¦   «         ZRg dO¢ZSdS )RzPyTorch Chameleon model.é    )ÚCallable)Ú	dataclass)Úcached_property)ÚOptionalN)Únné   )ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚCausalLMOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚtorch_compilable_check)Úmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )ÚChameleonConfigÚChameleonVQVAEConfigc                   ón   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dS )ÚChameleonVQVAEModelOutputa­  
    quantized_last_hidden_state (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
        Quantized last hidden state from the VQ-VAE model.
    image_tokens (`torch.FloatTensor` of shape `(batch_size, config.vocab_size`):
        Indices of the image tokens predicted by the VQ-VAE model.
    embedding_loss (`torch.FloatTensor`):
        The embedding loss computed during quantization.
    NÚquantized_last_hidden_stateÚimage_tokensÚembedding_loss)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   ÚtorchÚFloatTensorÚ__annotations__r&   r'   © ó    ún/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/chameleon/modeling_chameleon.pyr$   r$   2   sh   € € € € € € ðð ð =AÐ Ô!2°TÑ!9Ð@Ð@Ñ@Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø/3€N�EÔ%¨Ñ,Ð3Ð3Ñ3Ð3Ð3r0   r$   c                   óT   ‡ — e Zd Zd	deddfˆ fd„Zdej        dej        fd„Zd„ Zˆ xZ	S )
ÚChameleonRMSNormç�íµ ÷Æ°>ÚepsÚreturnNc                 ó¬   •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        || _        dS )z?
        ChameleonRMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__r   Ú	Parameterr,   ÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer5   Ú	__class__s      €r1   r9   zChameleonRMSNorm.__init__E   sD   ø€ õ 	‰Œ×ÒÑÔÐÝ”l¥5¤:¨kÑ#:Ô#:Ñ;Ô;ˆŒØ #ˆÔÐÐr0   Úhidden_statesc                 ó  — |j         }|                     t          j        ¦  «        }|                     d¦  «                             dd¬¦  «        }|t          j        || j        z   ¦  «        z  }| j        |                     |¦  «        z  S )Né   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor,   Úfloat32ÚpowÚmeanÚrsqrtr=   r<   )r>   rA   Úinput_dtypeÚvariances       r1   ÚforwardzChameleonRMSNorm.forwardM   s|   € Ø#Ô)ˆØ%×(Ò(­¬Ñ7Ô7ˆØ ×$Ò$ QÑ'Ô'×,Ò,¨R¸Ð,Ñ>Ô>ˆØ%­¬°H¸tÔ?TÑ4TÑ(UÔ(UÑUˆØŒ{˜]×-Ò-¨kÑ:Ô:Ñ:Ð:r0   c                 óH   — t          | j        j        ¦  «        › d| j        › �S )Nz, eps=)Útupler<   Úshaper=   ©r>   s    r1   Ú
extra_reprzChameleonRMSNorm.extra_reprT   s&   € Ý˜œÔ)Ñ*Ô*ÐIÐI°$Ô2GÐIÐIÐIr0   )r4   )
r(   r)   r*   Úfloatr9   r,   ÚTensorrN   rS   Ú__classcell__©r@   s   @r1   r3   r3   D   sŒ   ø€ € € € € ð$ð $¨ð $¸$ð $ð $ð $ð $ð $ð $ð; U¤\ð ;°e´lð ;ð ;ð ;ð ;ðJð Jð Jð Jð Jð Jð Jr0   r3   c                   óÔ   ‡ — e Zd ZU ej        ed<   ddefˆ fd„Ze	 	 	 ddedz  de	d         de
dz  ded	ef         fd
„¦   «         Z ej        ¦   «         ed„ ¦   «         ¦   «         Zˆ xZS )ÚChameleonRotaryEmbeddingÚinv_freqNÚconfigc                 ó²  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        | j        j        d         | _        | j        }| j        dk    rt          | j                 } || j        |¦  «        \  }| _
        |                      d|d¬¦  «         |                      d|                     ¦   «         d¬¦  «         d S )NÚ	rope_typeÚdefaultrZ   F)Ú
persistentÚoriginal_inv_freq)r8   r9   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenr[   Úrope_parametersr]   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)r>   r[   ÚdeviceÚrope_init_fnrZ   r@   s        €r1   r9   z!ChameleonRotaryEmbedding.__init__\   sÊ   ø€ Ý‰Œ×ÒÑÔÐØ"(Ô"@ˆÔØ$*Ô$BˆÔ!àˆŒàœÔ4°[ÔAˆŒØ!%Ô!EˆØŒ>˜YÒ&Ð&Ý.¨t¬~Ô>ˆLØ+7¨<¸¼ÀVÑ+LÔ+LÑ(ˆ�$Ô(à×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUÐUÐUr0   ri   ztorch.deviceÚseq_lenr6   ztorch.Tensorc                 óü   — | j         d         }t          | dd¦  «        p| j        | j        z  }d}d|t	          j        d|dt          j        ¬¦  «                             |t          j        ¬¦  «        |z  z  z  }||fS )	a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚhead_dimNg      ð?r   rC   ©rF   )ri   rF   )	rd   Úgetattrr?   Únum_attention_headsr,   ÚarangeÚint64rG   rT   )r[   ri   rk   ÚbaseÚdimÚattention_factorrZ   s          r1   re   z8ChameleonRotaryEmbedding.compute_default_rope_parametersl   sŒ   € ð& Ô% lÔ3ˆÝ�f˜j¨$Ñ/Ô/Ðc°6Ô3EÈÔIcÑ3cˆàÐð Ø•U”\ ! S¨!µ5´;Ð?Ñ?Ô?×BÒBÈ&ÕX]ÔXcÐBÑdÔdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r0   c                 óN  — | j         d d d …d f                              ¦   «                              |j        d         dd¦  «                             |j        ¦  «        }|d d …d d d …f                              ¦   «         }t          |j        j        t          ¦  «        r|j        j        dk    r|j        j        nd}t          |d¬¦  «        5  |                     ¦   «         |                     ¦   «         z   
                    dd¦  «        }t          j        ||fd¬	¦  «        }|                     ¦   «         | j        z  }|                     ¦   «         | j        z  }	d d d ¦  «         n# 1 swxY w Y   |                     |j        ¬
¦  «        |	                     |j        ¬
¦  «        fS )Nr   rD   r    ÚmpsÚcpuF)Údevice_typeÚenabledrC   ©ru   ro   )rZ   rT   ÚexpandrQ   rG   ri   Ú
isinstanceÚtypeÚstrr   Ú	transposer,   ÚcatÚcosrf   ÚsinrF   )
r>   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrz   ÚfreqsÚembrƒ   r„   s
             r1   rN   z ChameleonRotaryEmbedding.forwardŠ   s·  € ð !œM¨$°°°°4¨-Ô8×>Ò>Ñ@Ô@×GÒGÈÔHZÐ[\ÔH]Ð_aÐcdÑeÔe×hÒhÐijÔiqÑrÔrÐØ ,¨Q¨Q¨Q°°a°a°a¨ZÔ 8× >Ò >Ñ @Ô @Ðå'1°!´(´-ÅÑ'EÔ'EÐkÈ!Ì(Ì-Ð[`ÒJ`ÐJ`�a”h”m�mÐfkˆÝ¨¸UÐCÑCÔCð 	5ð 	5Ø&×,Ò,Ñ.Ô.Ð1F×1LÒ1LÑ1NÔ1NÑN×YÒYÐZ[Ð]^Ñ_Ô_ˆEÝ”)˜U E˜N°Ð3Ñ3Ô3ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCð		5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð �vŠv˜AœGˆvÑ$Ô$ c§f¢f°1´7 fÑ&;Ô&;Ð;Ð;s   ÃBE&Å&E*Å-E*©N)NNN)r(   r)   r*   r,   rU   r.   r!   r9   Ústaticmethodr   ÚintrP   rT   re   Úno_gradr   rN   rV   rW   s   @r1   rY   rY   Y   sù   ø€ € € € € € ØŒlÐÐÑðVð V˜ð Vð Vð Vð Vð Vð Vð  à)-Ø+/Ø"ð*ð *Ø $Ñ&ð*à˜Ô(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ô	%ð	*ð *ð *ñ „\ð*ð: €U„]�_„_Øð<ð <ñ Ôñ „_ð<ð <ð <ð <ð <r0   rY   c                 óœ   — | dd| j         d         dz  …f         }| d| j         d         dz  d…f         }t          j        | |fd¬¦  «        S )z*Rotates half the hidden dims of the input..NrD   rC   r|   )rQ   r,   r‚   )r…   Úx1Úx2s      r1   Úrotate_halfr’   ›   s]   € à	
ˆ3Ð"�!”'˜"”+ Ñ"Ð"Ð"Ô	#€BØ	
ˆ3�”˜”˜qÑ Ð"Ð"Ð"Ô	#€BÝŒ9�r�c˜2�Y BÐ'Ñ'Ô'Ð'r0   c                 ó¾   — |                      |¦  «        }|                      |¦  «        }| |z  t          | ¦  «        |z  z   }||z  t          |¦  «        |z  z   }||fS )a…  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    )Ú	unsqueezer’   )ÚqÚkrƒ   r„   Úunsqueeze_dimÚq_embedÚk_embeds          r1   Úapply_rotary_pos_embrš   £   sc   € ð$ �-Š-˜Ñ
&Ô
&€CØ
�-Š-˜Ñ
&Ô
&€CØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�GÐÐr0   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚChameleonMLPc                 ó¶  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        t          j        | j        | j        |j        ¬¦  «        | _        t          j        | j        | j        |j        ¬¦  «        | _	        t          j        | j        | j        |j        ¬¦  «        | _
        t          |j                 | _        d S )N©Úbias)r8   r9   r[   r?   Úintermediate_sizer   ÚLinearÚmlp_biasÚ	gate_projÚup_projÚ	down_projr	   Ú
hidden_actÚact_fn©r>   r[   r@   s     €r1   r9   zChameleonMLP.__init__¾   s¯   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ!Ô-ˆÔØ!'Ô!9ˆÔÝœ 4Ô#3°TÔ5KÐRXÔRaÐbÑbÔbˆŒÝ”y Ô!1°4Ô3IÐPVÔP_Ð`Ñ`Ô`ˆŒÝœ 4Ô#9¸4Ô;KÐRXÔRaÐbÑbÔbˆŒÝ˜VÔ.Ô/ˆŒˆˆr0   c                 ó¨   — |                       |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        }|S r‹   )r¥   r§   r£   r¤   )r>   r…   r¥   s      r1   rN   zChameleonMLP.forwardÉ   sA   € Ø—N’N 4§;¢;¨t¯~ª~¸aÑ/@Ô/@Ñ#AÔ#AÀDÇLÂLÐQRÁOÄOÑ#SÑTÔTˆ	ØÐr0   ©r(   r)   r*   r9   rN   rV   rW   s   @r1   rœ   rœ   ½   sG   ø€ € € € € ð0ð 0ð 0ð 0ð 0ðð ð ð ð ð ð r0   rœ   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚChameleonLayerNorma†  
    LayerNorm but computes stats only over the last dim because Chameleon applies gamma and beta
    from each shard separately to each head, instead of reducing. We can apply each head's own
    gamma/beta by repeat-interleaving weights from each shard, but the stats have to be computed
    in the last dimension. This module applies gamma/beta manually to fulfill this requirement.
    c                 ó^   •—  t          ¦   «         j        |g|¢R i |¤Ž |d         f| _        d S )NrD   )r8   r9   Únormalized_shape)r>   r?   ÚargsÚkwargsr@   s       €r1   r9   zChameleonLayerNorm.__init__Ö   s?   ø€ Ø�‰ŒÔ˜Ð6 tÐ6Ð6Ð6¨vÐ6Ð6Ð6Ø!,¨R¤Ð 2ˆÔÐÐr0   c                 óf   — t          j        || j        d d d¬¦  «        }|| j        z  | j        z   }|S )Ngñhãˆµøä>©r5   )ÚFÚ
layer_normr®   r<   rŸ   ©r>   rA   s     r1   rN   zChameleonLayerNorm.forwardÚ   s:   € Ýœ ]°DÔ4IÈ4ÐQUÐ[_Ð`Ñ`Ô`ˆØ%¨¬Ñ3°d´iÑ?ˆØÐr0   )r(   r)   r*   r+   r9   rN   rV   rW   s   @r1   r¬   r¬   Î   sQ   ø€ € € € € ðð ð3ð 3ð 3ð 3ð 3ðð ð ð ð ð ð r0   r¬   rA   Ún_repr6   c                 ó¸   — | j         \  }}}}|dk    r| S | dd…dd…ddd…dd…f                              |||||¦  «        } |                      |||z  ||¦  «        S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r    N)rQ   r}   Úreshape)rA   r¶   ÚbatchÚnum_key_value_headsÚslenrn   s         r1   Ú	repeat_kvr¼   á   s„   € ð
 2?Ô1DÑ.€EÐ  hØ�‚z€zØÐØ! ! ! ! Q Q Q¨¨a¨a¨a°°°Ð"2Ô3×:Ò:¸5ÐBUÐW\Ð^bÐdlÑmÔm€MØ× Ò  Ð(;¸eÑ(CÀTÈ8ÑTÔTÐTr0   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutr°   c                 ó  — t          || j        ¦  «        }t          || j        ¦  «        }	t          j        ||                     dd¦  «        ¦  «        |z  }
|�|
|z   }
t
          j                             |
dt          j        ¬¦  «         	                    |j
        ¦  «        }
t
          j                             |
|| j        ¬¦  «        }
t          j        |
|	¦  «        }|                     dd¦  «                             ¦   «         }||
fS )NrC   r   rD   )ru   rF   )ÚpÚtrainingr    )r¼   Únum_key_value_groupsr,   Úmatmulr�   r   Ú
functionalÚsoftmaxrH   rG   rF   rÄ   rÇ   Ú
contiguous)r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   r°   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r1   Úeager_attention_forwardrÑ   î   sé   € õ ˜3 Ô ;Ñ<Ô<€JÝ˜U FÔ$?Ñ@Ô@€Lå”<  z×';Ò';¸A¸qÑ'AÔ'AÑBÔBÀWÑL€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€LÝ”,˜|¨\Ñ:Ô:€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r0   c                   óò   ‡ — e Zd ZdZddededz  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edej        dz  deej        ej        dz  eej                 dz  f         fd„Zˆ xZS )ÚChameleonAttentionz=Multi-headed attention from 'Attention Is All You Need' paperNr[   Ú	layer_idxc                 ó<  •— t          ¦   «                              ¦   «          || _        || _        |€(t                               d| j        j        › d�¦  «         |j        | _        |j	        | _	        |j
        | _        | j	        | j        z  | _        |j        | _        | j        | j        z  | _        |j        | _        d| _        |j        | _        | j        dz  | _        | j        | j        z  | j	        k    r t'          d| j	        › d| j        › d�¦  «        ‚t)          j        | j	        | j        | j        z  |j        ¬¦  «        | _        t)          j        | j	        | j        | j        z  |j        ¬¦  «        | _        t)          j        | j	        | j        | j        z  |j        ¬¦  «        | _        t)          j        | j	        | j	        |j        ¬¦  «        | _        t7          | j        | j        f¦  «        | _        t7          | j        | j        f¦  «        | _        d S )	NzInstantiating z¹ without passing a `layer_idx` is not recommended and will lead to errors during the forward call if caching is used. Please make sure to provide a `layer_idx` when creating this class.Tç      à¿z?hidden_size must be divisible by num_heads (got `hidden_size`: z and `num_heads`: z).rž   )r8   r9   r[   rÔ   ÚloggerÚwarning_oncer@   r(   Úattention_dropoutr?   rq   Ú	num_headsrn   rº   rÈ   ra   Ú	is_causalÚmodel_parallel_sizerÃ   Ú
ValueErrorr   r¡   Úattention_biasÚq_projÚk_projÚv_projÚo_projr¬   Úq_normÚk_norm©r>   r[   rÔ   r@   s      €r1   r9   zChameleonAttention.__init__
  sÿ  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒØÐÝ×Òð, ¤Ô!8ð ,ð ,ð ,ñô ð ð "(Ô!9ˆÔØ!Ô-ˆÔØÔ3ˆŒØÔ(¨D¬NÑ:ˆŒØ#)Ô#=ˆÔ Ø$(¤N°dÔ6NÑ$NˆÔ!Ø'-Ô'EˆÔ$àˆŒØ#)Ô#=ˆÔ Ø”} dÑ*ˆŒàŒM˜DœNÑ*¨tÔ/?Ò?Ð?Ýð8ÐRVÔRbð 8ð 8Ø%)¤^ð8ð 8ð 8ñô ð õ
 ”i Ô 0°$´.À4Ä=Ñ2PÐW]ÔWlÐmÑmÔmˆŒÝ”i Ô 0°$Ô2JÈTÌ]Ñ2ZÐagÔavÐwÑwÔwˆŒÝ”i Ô 0°$Ô2JÈTÌ]Ñ2ZÐagÔavÐwÑwÔwˆŒÝ”i Ô 0°$Ô2BÈÔI^Ð_Ñ_Ô_ˆŒÝ(¨$¬.¸$¼-Ð)HÑIÔIˆŒÝ(¨$Ô*BÀDÄMÐ)RÑSÔSˆŒˆˆr0   FrA   rÂ   r†   Úpast_key_valuesÚoutput_attentionsÚ	use_cacheÚposition_embeddingsr6   c                 óZ  — |                      ¦   «         \  }	}
}|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                     d| j        | j        ¦  «        }|                      |¦  «        }|                     d| j        | j        ¦  «        }|  	                    |¦  «        }|                     |	|
| j        | j        ¦  «         
                    dd¦  «        }|                     |	|
| j        | j        ¦  «         
                    dd¦  «        }|                     |	|
| j        | j        ¦  «         
                    dd¦  «        }|\  }}t          ||||¦  «        \  }}|�|                     ||| j        ¦  «        \  }}t          j        | j        j        t&          ¦  «        } || ||||f| j        sdn| j        | j        dœ|¤Ž\  }}|                     |	|
d¦  «                             ¦   «         }|                      |¦  «        }||fS )NrD   r    rC   r½   )rÄ   rÃ   )Úsizerß   rà   rá   r¸   rÚ   rn   rã   rº   rä   r�   Úviewrš   ÚupdaterÔ   r   Úget_interfacer[   Ú_attn_implementationrÑ   rÇ   rÙ   rÃ   rÌ   râ   )r>   rA   rÂ   r†   ræ   rç   rè   ré   r°   ÚbszÚq_lenÚ_Úquery_statesrÍ   rÎ   rƒ   r„   Úattention_interfacerÐ   rÏ   s                       r1   rN   zChameleonAttention.forward.  s2  € ð &×*Ò*Ñ,Ô,‰ˆˆU�Aà—{’{ =Ñ1Ô1ˆØ—[’[ Ñ/Ô/ˆ
Ø—{’{ =Ñ1Ô1ˆà#×+Ò+¨B°´ÀÄÑNÔNˆØ—{’{ <Ñ0Ô0ˆà×'Ò'¨¨DÔ,DÀdÄmÑTÔTˆ
Ø—[’[ Ñ,Ô,ˆ
à#×+Ò+¨C°¸¼ÈÌÑVÔV×`Ò`ÐabÐdeÑfÔfˆØ×'Ò'¨¨U°DÔ4LÈdÌmÑ\Ô\×fÒfÐghÐjkÑlÔlˆ
Ø#×(Ò(¨¨e°TÔ5MÈtÌ}Ñ]Ô]×gÒgÐhiÐklÑmÔmˆà&‰ˆˆSÝ#7¸ÀjÐRUÐWZÑ#[Ô#[Ñ ˆ�jàÐ&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð "×)Ò)¨#¨u°bÑ9Ô9×DÒDÑFÔFˆØ—k’k +Ñ.Ô.ˆà˜LÐ(Ð(r0   r‹   ©NNNFFN)r(   r)   r*   r+   r!   r�   r9   r,   rU   Ú
LongTensorr
   ÚboolrP   rN   rV   rW   s   @r1   rÓ   rÓ     s  ø€ € € € € ØGÐGð"Tð "T˜ð "T¸3À¹:ð "Tð "Tð "Tð "Tð "Tð "TðN /3Ø04Ø(,Ø"'ØØ37ð3)ð 3)à”|ð3)ð œ tÑ+ð3)ð Ô&¨Ñ-ð	3)ð
  ™ð3)ð  ð3)ð ð3)ð #œ\¨DÑ0ð3)ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð3)ð 3)ð 3)ð 3)ð 3)ð 3)ð 3)ð 3)r0   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
dz  dej        dz  deej        eej        ej        f         dz  f         fd„Zˆ xZS )ÚChameleonDecoderLayerr[   rÔ   c                 ó4  •— t          ¦   «                              ¦   «          |j        | _        t          ||¬¦  «        | _        t          |¦  «        | _        t          |j        |j        ¬¦  «        | _	        t          |j        |j        ¬¦  «        | _
        d S ©N)r[   rÔ   r²   ©r8   r9   r?   rÓ   Ú	self_attnrœ   Úmlpr3   Úrms_norm_epsÚinput_layernormÚpost_attention_layernormrå   s      €r1   r9   zChameleonDecoderLayer.__init__f  ó„   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔå+°6ÀYÐOÑOÔOˆŒå Ñ'Ô'ˆŒÝ/°Ô0BÈÔH[Ð\Ñ\Ô\ˆÔÝ(8¸Ô9KÐQWÔQdÐ(eÑ(eÔ(eˆÔ%Ð%Ð%r0   NFrA   rÂ   r†   ræ   rç   rè   ré   r6   c                 óæ   — |}	|                       |¦  «        } | j        d|||||||dœ|¤Ž\  }}
|	|z   }|}	|                      |¦  «        }|                      |¦  «        }|	|z   }|f}|r||
fz  }|S )a<  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`, *optional*):
                attention mask of size `(batch_size, sequence_length)` if flash attention is used or `(batch_size, 1,
                query_sequence_length, key_sequence_length)` if default attention is used.
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
            past_key_values (`Cache`, *optional*): cached past key and value projection states
            kwargs (`dict`, *optional*):
                Arbitrary kwargs to be ignored, used for FSDP and other methods that injects code
                into the model
        ©rA   rÂ   r†   ræ   rç   rè   ré   r/   )r   rý   r  rþ   ©r>   rA   rÂ   r†   ræ   rç   rè   ré   r°   ÚresidualÚself_attn_weightsÚoutputss               r1   rN   zChameleonDecoderLayer.forwardp  sÄ   € ð8 !ˆà×,Ò,¨]Ñ;Ô;ˆð ,:¨4¬>ð 	,
Ø'Ø)Ø%Ø+Ø/ØØ 3ð	,
ð 	,
ð ð	,
ð 	,
Ñ(ˆÐ(ð ! =Ñ0ˆð !ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆà Ð"ˆàð 	,ØÐ)Ð+Ñ+ˆGàˆr0   rõ   ©r(   r)   r*   r!   r�   r9   r,   rU   rö   r
   r÷   rP   r-   rN   rV   rW   s   @r1   rù   rù   e  s  ø€ € € € € ðf˜ð f¸3ð fð fð fð fð fð fð /3Ø04Ø(,Ø).Ø!&Ø37ð8ð 8à”|ð8ð œ tÑ+ð8ð Ô&¨Ñ-ð	8ð
  ™ð8ð   $™;ð8ð ˜$‘;ð8ð #œ\¨DÑ0ð8ð 
ˆuÔ  %¨Ô(9¸5Ô;LÐ(LÔ"MÐPTÑ"TÐTÔ	Uð8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r0   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
dz  dej        dz  deej        eej        ej        f         dz  f         fd„Zˆ xZS )ÚChameleonSwinDecoderLayerr[   rÔ   c                 ó4  •— t          ¦   «                              ¦   «          |j        | _        t          ||¬¦  «        | _        t          |¦  «        | _        t          |j        |j        ¬¦  «        | _	        t          |j        |j        ¬¦  «        | _
        d S rû   rü   rå   s      €r1   r9   z"ChameleonSwinDecoderLayer.__init__¬  r  r0   NFrA   rÂ   r†   ræ   rç   rè   ré   r6   c                 óæ   — |}	 | j         d|||||||dœ|¤Ž\  }}
|                      |¦  «        }|	|z   }|}	|                      |¦  «        }|                      |¦  «        }|	|z   }|f}|r||
fz  }|S )ad  
        Args:
            hidden_states (`torch.FloatTensor`):
                input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`, *optional*):
                attention mask of size `(batch_size, sequence_length)` if flash attention is used or `(batch_size, 1,
                query_sequence_length, key_sequence_length)` if default attention is used.
            position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
                Indices of positions of each input sequence tokens in the position embeddings
            past_key_values (`Cache`, *optional*): cached past key and value projection states
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
        r  r/   )rý   r   rþ   r  r  s               r1   rN   z!ChameleonSwinDecoderLayer.forward¶  sÂ   € ð: !ˆð ,:¨4¬>ð 	,
Ø'Ø)Ø%Ø+Ø/ØØ 3ð	,
ð 	,
ð ð	,
ð 	,
Ñ(ˆÐ(ð ×,Ò,¨]Ñ;Ô;ˆØ  =Ñ0ˆà ˆØŸš Ñ/Ô/ˆØ×5Ò5°mÑDÔDˆØ  =Ñ0ˆØ Ð"ˆàð 	,ØÐ)Ð+Ñ+ˆGàˆr0   rõ   r	  rW   s   @r1   r  r  «  s  ø€ € € € € ðf˜ð f¸3ð fð fð fð fð fð fð /3Ø04Ø(,Ø).Ø!&Ø37ð6ð 6à”|ð6ð œ tÑ+ð6ð Ô&¨Ñ-ð	6ð
  ™ð6ð   $™;ð6ð ˜$‘;ð6ð #œ\¨DÑ0ð6ð 
ˆuÔ  %¨Ô(9¸5Ô;LÐ(LÔ"MÐPTÑ"TÐTÔ	Uð6ð 6ð 6ð 6ð 6ð 6ð 6ð 6r0   r  c                   ó8   ‡ — e Zd ZdZˆ fd„Zdej        fd„Zˆ xZS )ÚChameleonVQVAEVectorQuantizeraâ  
    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.
    c                 óì   •— t          ¦   «                              ¦   «          |j        | _        |j        | _        t          |dd¦  «        | _        t          j        | j        | j        ¦  «        | _	        d S )NÚbetag      Ð?)
r8   r9   Únum_embeddingsÚ	embed_dimÚembedding_dimrp   r  r   Ú	EmbeddingÚ	embeddingr¨   s     €r1   r9   z&ChameleonVQVAEVectorQuantizer.__init__ú  s_   ø€ Ý‰Œ×ÒÑÔÐØ$Ô3ˆÔØ#Ô-ˆÔÝ˜F F¨DÑ1Ô1ˆŒ	åœ dÔ&9¸4Ô;MÑNÔNˆŒˆˆr0   Úhidden_statec           
      óR  — |                      dddd¦  «                             ¦   «         }|                     d| j        ¦  «        }t	          j        |dz  dd¬¦  «        t	          j        | j        j        dz  d¬¦  «        z   dt	          j        d	|| j        j         	                    dd¦  «        ¦  «        z  z
  }t	          j
        |d¬¦  «        }|                      |¦  «                             |j        ¦  «        }t	          j        |                     ¦   «         |z
  dz  ¦  «        | j        t	          j        ||                     ¦   «         z
  dz  ¦  «        z  z   }|||z
                       ¦   «         z   }|                      dddd¦  «                             ¦   «         }|||fS )
Nr   rC   r   r    rD   T)ru   rE   r|   z	bd,dn->bn)ÚpermuterÌ   rì   r  r,   Úsumr  r<   Úeinsumr�   ÚargminrQ   rJ   Údetachr  )r>   r  Úhidden_state_flattenedÚ	distancesÚmin_encoding_indicesÚhidden_state_quantÚlosss          r1   rN   z%ChameleonVQVAEVectorQuantizer.forward  s¨  € Ø#×+Ò+¨A¨q°!°QÑ7Ô7×BÒBÑDÔDˆØ!-×!2Ò!2°2°tÔ7IÑ!JÔ!JÐõ ŒIÐ,¨aÑ/°QÀÐEÑEÔEÝŒi˜œÔ-¨qÑ0°aÐ8Ñ8Ô8ñ9à•%”,˜{Ð,BÀDÄNÔDY×DcÒDcÐdeÐghÑDiÔDiÑjÔjÑjñkð 	õ  %œ|¨I¸1Ð=Ñ=Ô=ÐØ!Ÿ^š^Ð,@ÑAÔA×FÒFÀ|ÔGYÑZÔZÐõ ŒzÐ-×4Ò4Ñ6Ô6¸ÑEÈ!ÑKÑLÔLÈtÌyÕ[`Ô[eØ ,×"5Ò"5Ñ"7Ô"7Ñ7¸AÑ=ñ\
ô \
ñ P
ñ 
ˆð
 *Ð-?À,Ñ-N×,VÒ,VÑ,XÔ,XÑXÐð 0×7Ò7¸¸1¸aÀÑCÔC×NÒNÑPÔPÐà! 4Ð)=Ð=Ð=r0   )	r(   r)   r*   r+   r9   r,   rU   rN   rV   rW   s   @r1   r  r  ï  sd   ø€ € € € € ðð ðOð Oð Oð Oð Oð> E¤Lð >ð >ð >ð >ð >ð >ð >ð >r0   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú#ChameleonVQVAEEncoderConvDownsamplec                 ó„   •— t          ¦   «                              ¦   «          t          j        ||ddd¬¦  «        | _        d S )Nr   rC   r   ©Úkernel_sizeÚstrideÚpadding)r8   r9   r   ÚConv2dÚconv©r>   Úin_channelsr@   s     €r1   r9   z,ChameleonVQVAEEncoderConvDownsample.__init__  s:   ø€ Ý‰Œ×ÒÑÔÐÝ”I˜k¨;ÀAÈaÐYZÐ[Ñ[Ô[ˆŒ	ˆ	ˆ	r0   c                 ó`   — t          j        |ddd¬¦  «        }|                      |¦  «        }|S )N)r   r    r   r    Úconstantr   )ÚpadÚmoderÁ   )r³   r0  r+  rµ   s     r1   rN   z+ChameleonVQVAEEncoderConvDownsample.forward#  s2   € åœ˜m°ÀJÐVWÐXÑXÔXˆØŸ	š	 -Ñ0Ô0ˆØÐr0   rª   rW   s   @r1   r$  r$    sL   ø€ € € € € ð\ð \ð \ð \ð \ðð ð ð ð ð ð r0   r$  c                   ó*   ‡ — e Zd Z	 	 dˆ fd„	Zd„ Zˆ xZS )Ú ChameleonVQVAEEncoderResnetBlockNFc                 óê  •— t          ¦   «                              ¦   «          || _        |€|n|| _        || _        t
          j                             d|dd¬¦  «        | _        t
          j         	                    ||ddd¬¦  «        | _
        t
          j                             d|dd¬¦  «        | _        t
          j                             |j        ¦  «        | _        t
          j         	                    ||ddd¬¦  «        | _        | j        | j        k    r]| j        r+t
          j         	                    ||ddd¬¦  «        | _        d S t
          j         	                    ||ddd¬¦  «        | _        d S d S )	Né    r4   T©Ú
num_groupsÚnum_channelsr5   Úaffiner   r    r&  r   )r8   r9   r-  Úout_channelsÚuse_conv_shortcutr,   r   Ú	GroupNormÚnorm1r*  Úconv1Únorm2ÚDropoutrÄ   Úconv2Úconv_shortcutÚnin_shortcut)r>   r[   r-  r:  rB  r@   s        €r1   r9   z)ChameleonVQVAEEncoderResnetBlock.__init__+  sR  ø€ õ 	‰Œ×ÒÑÔÐØ&ˆÔØ+7Ð+?˜K˜KÀ\ˆÔØ!.ˆÔå”X×'Ò'°2ÀKÐUYÐbfÐ'ÑgÔgˆŒ
Ý”X—_’_ [°,ÈAÐVWÐab�_ÑcÔcˆŒ
Ý”X×'Ò'°2ÀLÐVZÐcgÐ'ÑhÔhˆŒ
Ý”x×'Ò'¨¬Ñ7Ô7ˆŒÝ”X—_’_ \°<ÈQÐWXÐbc�_ÑdÔdˆŒ
ØÔ˜tÔ0Ò0Ð0ØÔ%ð sÝ%*¤X§_¢_°[À,Ð\]ÐfgÐqr _Ñ%sÔ%s�Ô"Ð"Ð"å$)¤H§O¢O°KÀÐ[\ÐefÐpq OÑ$rÔ$r�Ô!Ð!Ð!ð	 1Ð0r0   c                 óÂ  — |}|                       |¦  «        }|t          j        |¦  «        z  }|                      |¦  «        }|                      |¦  «        }|t          j        |¦  «        z  }|                      |¦  «        }|                      |¦  «        }| j        | j        k    r2| j	        r|  
                    |¦  «        }n|                      |¦  «        }||z   S r‹   )r=  r,   Úsigmoidr>  r?  rÄ   rA  r-  r:  r;  rB  rC  )r>   rA   r  s      r1   rN   z(ChameleonVQVAEEncoderResnetBlock.forwardB  sÓ   € Ø ˆØŸ
š
 =Ñ1Ô1ˆØ�œ }Ñ5Ô5Ñ5ˆØŸ
š
 =Ñ1Ô1ˆàŸ
š
 =Ñ1Ô1ˆØ�œ }Ñ5Ô5Ñ5ˆØŸš ]Ñ3Ô3ˆØŸ
š
 =Ñ1Ô1ˆàÔ˜tÔ0Ò0Ð0ØÔ%ð 7Ø×-Ò-¨hÑ7Ô7��à×,Ò,¨XÑ6Ô6�à˜-Ñ'Ð'r0   )NFrª   rW   s   @r1   r3  r3  *  sZ   ø€ € € € € ð
 Øðsð sð sð sð sð sð.(ð (ð (ð (ð (ð (ð (r0   r3  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚChameleonVQVAEEncoderAttnBlockc                 óî  •— t          ¦   «                              ¦   «          || _        t          j                             d|dd¬¦  «        | _        t          j                             ||ddd¬¦  «        | _        t          j                             ||ddd¬¦  «        | _	        t          j                             ||ddd¬¦  «        | _
        t          j                             ||ddd¬¦  «        | _        d S )Nr5  r4   Tr6  r    r   r&  )r8   r9   r-  r,   r   r<  Únormr*  r•   r–   ÚvÚproj_outr,  s     €r1   r9   z'ChameleonVQVAEEncoderAttnBlock.__init__W  sË   ø€ Ý‰Œ×ÒÑÔÐØ&ˆÔå”H×&Ò&°"À;ÐTXÐaeÐ&ÑfÔfˆŒ	Ý”—’ ¨kÀqÐQRÐ\]�Ñ^Ô^ˆŒÝ”—’ ¨kÀqÐQRÐ\]�Ñ^Ô^ˆŒÝ”—’ ¨kÀqÐQRÐ\]�Ñ^Ô^ˆŒÝœŸš¨°[ÈaÐXYÐcd˜ÑeÔeˆŒˆˆr0   c                 óÄ  — |}|                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|j        \  }}}}	|                     ||||	z  ¦  «                             ddd¦  «        }|                     ||||	z  ¦  «        }t          j        ||¦  «        }
|
t          |¦  «        dz  z  }
t          j        |
d¬¦  «        }
|                     ||||	z  ¦  «        }|
                     ddd¦  «        }
t          j        ||
¦  «                             ||||	¦  «        }|                      |¦  «        }||z   S )Nr   rC   r    rÖ   r|   )rI  r•   r–   rJ  rQ   r¸   r  r,   Úbmmr�   r³   rË   rK  )r>   rA   r  ró   rÍ   rÎ   Ú
batch_sizeÚchannelsÚheightÚwidthrÏ   rÐ   s               r1   rN   z&ChameleonVQVAEEncoderAttnBlock.forwarda  s[  € Ø ˆØŸ	š	 -Ñ0Ô0ˆØ—v’v˜mÑ,Ô,ˆØ—V’V˜MÑ*Ô*ˆ
Ø—v’v˜mÑ,Ô,ˆð /;Ô.@Ñ+ˆ
�H˜f eØ#×+Ò+¨J¸À&È5Á.ÑQÔQ×YÒYÐZ[Ð]^Ð`aÑbÔbˆØ×'Ò'¨
°H¸fÀu¹nÑMÔMˆ
Ý”y ¨zÑ:Ô:ˆØ#¥s¨8¡}¤}¸Ñ'>Ñ?ˆÝ”y °1Ð5Ñ5Ô5ˆð $×+Ò+¨J¸À&È5Á.ÑQÔQˆØ#×+Ò+¨A¨q°!Ñ4Ô4ˆÝ”i ¨lÑ;Ô;×CÒCÀJÐPXÐZ`ÐbgÑhÔhˆà—m’m KÑ0Ô0ˆØ˜+Ñ%Ð%r0   rª   rW   s   @r1   rG  rG  V  sL   ø€ € € € € ðfð fð fð fð fð&ð &ð &ð &ð &ð &ð &r0   rG  c                   ó4   ‡ — e Zd Zˆ fd„Zdej        fd„Zˆ xZS )ÚChameleonVQVAEEncoderc           	      óÀ  •— t          ¦   «                              ¦   «          t          |j        ¦  «        | _        |j        | _        |j        }|j        }|j        }|j	        }|j
        }|j        }t          j                             ||ddd¬¦  «        | _        |}dt          |¦  «        z   }	|	| _        t          j        ¦   «         | _        t'          | j        ¦  «        D �]}
t          j        ¦   «         }t          j        ¦   «         }||	|
         z  }|||
         z  }t'          | j        ¦  «        D ]f}|                     t+          |||¬¦  «        ¦  «         |}|j        �6||j        v r-|j        dk    r"|                     t1          |¦  «        ¦  «         Œgt          j        ¦   «         }||_        ||_        |
| j        dz
  k    rt9          |¦  «        |_        |dz  }| j                             |¦  «         �Œt          j        ¦   «         | _        t+          |||¬¦  «        | j        _        |j        dk    rt1          |¦  «        nt          j         ¦   «         | j        _!        t+          |||¬¦  «        | j        _"        t          j         #                    d|d	d
¬¦  «        | _$        t          j                             ||rd|z  n|ddd¬¦  «        | _%        d S )Nr   r    r&  ©r    )r[   r-  r:  ÚvanillarC   r5  r4   Tr6  )&r8   r9   ÚlenÚchannel_multiplierÚnum_resolutionsÚnum_res_blocksÚbase_channelsÚ
resolutionr-  Údouble_latentÚlatent_channelsr,   r   r*  Úconv_inrP   Úin_channel_multiplierÚ
ModuleListÚdownÚrangeÚappendr3  Úattn_resolutionsÚ	attn_typerG  ÚModuleÚblockÚattnr$  Ú
downsampleÚmidÚblock_1ÚIdentityÚattn_1Úblock_2r<  Únorm_outÚconv_out)r>   r[   r[  r\  r-  r]  r^  rX  Úcurr_resr`  Úi_levelrh  ri  Úblock_inÚ	block_outÚi_blockrb  r@   s                    €r1   r9   zChameleonVQVAEEncoder.__init__z  sß  ø€ Ý‰Œ×ÒÑÔÐå" 6Ô#<Ñ=Ô=ˆÔØ$Ô3ˆÔØÔ,ˆØÔ&ˆ
ØÔ(ˆØÔ,ˆØ Ô0ˆØ#Ô6Ðå”x—’ {°MÈqÐYZÐde�ÑfÔfˆŒàˆØ $¥uÐ-?Ñ'@Ô'@Ñ @ÐØ%:ˆÔ"Ý”M‘O”OˆŒ	Ý˜TÔ1Ñ2Ô2ð 	#ñ 	#ˆGÝ”M‘O”OˆEÝ”=‘?”?ˆDØ$Ð'<¸WÔ'EÑEˆHØ%Ð(:¸7Ô(CÑCˆIÝ  Ô!4Ñ5Ô5ð Jð J�Ø—’Ý4Ø%Ø$,Ø%.ðñ ô ñô ð ð %�àÔ+Ð7Ø  FÔ$;Ð;Ð;ØÔ(¨IÒ5Ð5à—K’KÕ >¸xÑ HÔ HÑIÔIÐIøå”9‘;”;ˆDØˆDŒJØˆDŒIØ˜$Ô.°Ñ2Ò2Ð2Ý"EÀhÑ"OÔ"O�”Ø# q™=�ØŒI×Ò˜TÑ"Ô"Ð"Ñ"å”9‘;”;ˆŒÝ;ØØ Ø!ð
ñ 
ô 
ˆŒÔð
 GMÔFVÐZcÒFcÐFcÕ8¸ÑBÔBÐBÕikÔitÑivÔivˆŒŒÝ;ØØ Ø!ð
ñ 
ô 
ˆŒÔõ œ×*Ò*°bÀxÐUYÐbfÐ*ÑgÔgˆŒÝœŸšØØ#0ÐEˆA�ÑÐ°oØØØð (ñ 
ô 
ˆŒˆˆr0   Úpixel_valuesc                 óJ  — |                       |¦  «        g}t          | j        ¦  «        D ]à}t          | j        ¦  «        D ]‚} | j        |         j        |         |d         ¦  «        }t          | j        |         j        ¦  «        dk    r! | j        |         j        |         |¦  «        }|                     |¦  «         Œƒ|| j        dz
  k    r9|                     | j        |          	                    |d         ¦  «        ¦  «         Œá|d         }| j
                             |¦  «        }| j
                             |¦  «        }| j
                             |¦  «        }|                      |¦  «        }|t          j        |¦  «        z  }|                      |¦  «        }|S )NrD   r   r    )r_  rc  rY  rZ  rb  rh  rW  ri  rd  rj  rk  rl  rn  ro  rp  r,   rE  rq  )r>   rw  rA   rs  rv  r  Úlast_hidden_states          r1   rN   zChameleonVQVAEEncoder.forward¿  sŸ  € àŸš lÑ3Ô3Ð4ˆÝ˜TÔ1Ñ2Ô2ð 		Wð 		WˆGÝ  Ô!4Ñ5Ô5ð 3ð 3�Ø@˜tœy¨Ô1Ô7¸Ô@Ø! "Ô%ñ ô  �õ �t”y Ô)Ô.Ñ/Ô/°!Ò3Ð3Ø#C 4¤9¨WÔ#5Ô#:¸7Ô#CÀLÑ#QÔ#Q�LØ×$Ò$ \Ñ2Ô2Ð2Ð2Ø˜$Ô.°Ñ2Ò2Ð2Ø×$Ò$ T¤Y¨wÔ%7×%BÒ%BÀ=ÐQSÔCTÑ%UÔ%UÑVÔVÐVøð *¨"Ô-ÐØ œH×,Ò,Ð->Ñ?Ô?ÐØ œHŸOšOÐ,=Ñ>Ô>ÐØ œH×,Ò,Ð->Ñ?Ô?Ðð !ŸMšMÐ*;Ñ<Ô<ÐØ�Uœ]Ð+<Ñ=Ô=Ñ=ÐØ ŸMšMÐ*;Ñ<Ô<ÐØ Ð r0   )r(   r)   r*   r9   r,   rö   rN   rV   rW   s   @r1   rS  rS  y  s\   ø€ € € € € ðC
ð C
ð C
ð C
ð C
ðJ! EÔ$4ð !ð !ð !ð !ð !ð !ð !ð !r0   rS  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j        d
ej        fd„ZdS )ÚChameleonImageVocabularyMappingzM
    A class for mapping discrete image tokens from VQGAN to BPE tokens.
    c                 óH   — || _         |                     d¦  «        | _        d S )Nz<image>)Ú	vocab_mapÚgetÚimage_token_id)r>   r}  s     r1   r9   z(ChameleonImageVocabularyMapping.__init__ß  s#   € Ø"ˆŒØ'Ÿmšm¨IÑ6Ô6ˆÔÐÐr0   c                 óH   — d„ | j                              ¦   «         D ¦   «         S )Nc                 ó   — i | ]\  }}||“Œ	S r/   r/   ©Ú.0r–   rJ  s      r1   ú
<dictcomp>z<ChameleonImageVocabularyMapping.val2name.<locals>.<dictcomp>å  s   € Ð8Ð8Ð8™˜˜A��1Ð8Ð8Ð8r0   )r}  ÚitemsrR   s    r1   Úval2namez(ChameleonImageVocabularyMapping.val2nameã  s$   € à8Ð8 ¤×!5Ò!5Ñ!7Ô!7Ð8Ñ8Ô8Ð8r0   c                 ób   — t          d„ | j                             ¦   «         D ¦   «         ¦  «        S )Nc                 óB   — g | ]\  }}|                      d ¦  «        ¯|‘ŒS )ÚIMGIMG)Ú
startswith)rƒ  ÚnameÚvals      r1   ú
<listcomp>z@ChameleonImageVocabularyMapping.image_tokens.<locals>.<listcomp>é  s.   € Ð`Ð`Ð`™y˜t SÀdÇoÂoÐV^ÑF_ÔF_Ð`�sÐ`Ð`Ð`r0   )Úsortedr}  r…  rR   s    r1   r&   z,ChameleonImageVocabularyMapping.image_tokensç  s-   € åÐ`Ð`¨D¬N×,@Ò,@Ñ,BÔ,BÐ`Ñ`Ô`ÑaÔaÐar0   c                 óŠ   ‡ ‡‡— d„ t          d¦  «        D ¦   «         Šdt          dt          fˆfd„Šˆˆ fd„‰ j        D ¦   «         S )Nc                 óh   — i | ]/}t          t          d ¦  «        |z   ¦  «        t          |¦  «        “Œ0S )ÚA)ÚchrÚordr€   )rƒ  Úis     r1   r„  z;ChameleonImageVocabularyMapping.bpe2img.<locals>.<dictcomp>í  s2   € ÐLÐLÐL¸Q�s¥3 s¡8¤8¨a¡<Ñ0Ô0µ#°a±&´&ÐLÐLÐLr0   é
   Úold_namer6   c                 óp   •— d                      ˆfd„| t          d¦  «        d…         D ¦   «         ¦  «        S )NÚ c              3   óD   •K  — | ]}‰                      ||¦  «        V — Œd S r‹   )r~  )rƒ  ÚcÚimg_tkn_chr_mappings     €r1   ú	<genexpr>zIChameleonImageVocabularyMapping.bpe2img.<locals>.remap.<locals>.<genexpr>ð  s4   øè è € Ð_Ð_¸QÐ.×2Ò2°1°aÑ8Ô8Ð_Ð_Ð_Ð_Ð_Ð_r0   r‰  rD   )ÚjoinrW  )r–  r›  s    €r1   Úremapz6ChameleonImageVocabularyMapping.bpe2img.<locals>.remapï  s;   ø€ Ø—7’7Ð_Ð_Ð_Ð_À(Í3ÈxÉ=Ì=Ð[]ÐK]ÔB^Ð_Ñ_Ô_Ñ_Ô_Ð_r0   c           	      óX   •— i | ]&}|t           ‰‰j        |         ¦  «        ¦  «        “Œ'S r/   )r�   r†  )rƒ  Útokrž  r>   s     €€r1   r„  z;ChameleonImageVocabularyMapping.bpe2img.<locals>.<dictcomp>ò  s4   ø€ ÐQÐQÐQ¸�•S˜˜˜tœ}¨SÔ1Ñ2Ô2Ñ3Ô3ÐQÐQÐQr0   )rc  r€   r&   )r>   r›  rž  s   `@@r1   Úbpe2imgz'ChameleonImageVocabularyMapping.bpe2imgë  sv   øøø€ àLÐLÅ%ÈÁ)Ä)ÐLÑLÔLÐð	`�Cð 	`¥Cð 	`ð 	`ð 	`ð 	`ð 	`ð 	`ð RÐQÐQÐQÐQ¸tÔ?PÐQÑQÔQÐQr0   c                 óH   — d„ | j                              ¦   «         D ¦   «         S )Nc                 ó   — i | ]\  }}||“Œ	S r/   r/   r‚  s      r1   r„  z;ChameleonImageVocabularyMapping.img2bpe.<locals>.<dictcomp>ö  s   € Ð6Ð6Ð6™˜˜A��1Ð6Ð6Ð6r0   )r¡  r…  rR   s    r1   Úimg2bpez'ChameleonImageVocabularyMapping.img2bpeô  s$   € à6Ð6 ¤×!3Ò!3Ñ!5Ô!5Ð6Ñ6Ô6Ð6r0   c                 óâ   — t          j        t          | j                             ¦   «         ¦  «        ¦  «        t          j        t          | j                             ¦   «         ¦  «        ¦  «        fS r‹   )r,   ÚtensorrŽ  r¡  ÚkeysÚvaluesrR   s    r1   Úbpe2img_search_tensorsz6ChameleonImageVocabularyMapping.bpe2img_search_tensorsø  sM   € åŒ|�F 4¤<×#4Ò#4Ñ#6Ô#6Ñ7Ô7Ñ8Ô8½%¼,ÅvÈdÌl×NaÒNaÑNcÔNcÑGdÔGdÑ:eÔ:eÐeÐer0   c                 óÜ   — t          j        t          | j                             ¦   «         ¦  «        dz   t           j        ¬¦  «        }| j                             ¦   «         D ]
\  }}|||<   Œ|S )Nr    ro   )r,   ÚzerosÚmaxr¤  r§  r�   r…  )r>   Úmappingr–   rJ  s       r1   Úimg2bpe_mapping_tensorz6ChameleonImageVocabularyMapping.img2bpe_mapping_tensorü  sd   € å”+�c $¤,×"3Ò"3Ñ"5Ô"5Ñ6Ô6¸Ñ:Å%Ä)ÐLÑLÔLˆØ”L×&Ò&Ñ(Ô(ð 	ð 	‰DˆAˆqØˆG�A‰JˆJØˆr0   Ú	img_batchr6   c                 óz   — |j         }| j        |                     d¦  «                 }|                     |¦  «        S )Nry   )ri   r®  rG   )r>   r¯  ri   Ú
img_tokenss       r1   Úconvert_img2bpez/ChameleonImageVocabularyMapping.convert_img2bpe  s5   € ØÔ!ˆØÔ0°·²¸eÑ1DÔ1DÔEˆ
Ø�}Š}˜VÑ$Ô$Ð$r0   N)r(   r)   r*   r+   r9   r   r†  r&   r¡  r¤  r©  r®  r,   rU   r²  r/   r0   r1   r{  r{  Ú  sþ   € € € € € ðð ð7ð 7ð 7ð ð9ð 9ñ „_ð9ð ðbð bñ „_ðbð ðRð Rñ „_ðRð ð7ð 7ñ „_ð7ð ðfð fñ „_ðfð ðð ñ „_ðð%¨¬ð %¸%¼,ð %ð %ð %ð %ð %ð %r0   r{  c                   óX   — e Zd ZU eed<   dZdZdZddgZddgZ	dZ
dZdZdZdZeeged	œZd
S )ÚChameleonPreTrainedModelr[   Úmodel)ÚimageÚtextTrù   r  ræ   Úcausal_mask©rA   Ú
attentionsN)r(   r)   r*   r!   r.   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphÚ_supports_flex_attnÚ_supports_attention_backendrù   r  rÓ   Ú_can_record_outputsr/   r0   r1   r´  r´  	  s}   € € € € € € àÐÐÑØÐØ(ÐØ&*Ð#Ø0Ð2MÐNÐØ#4°mÐ"DÐØÐØ€Nà!ÐØÐØ"&Ðà/Ð1JÐKØ(ðð ÐÐÐr0   r´  aW  
    The VQ-VAE model used in Chameleon 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<   g d¢ZeedœZdefˆ fd„Z	e
edej        dee         defd„¦   «         ¦   «         Zˆ xZS )	ÚChameleonVQVAEr[   )r  rG  r3  r¹  c                 óª  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        t          j                             |j	        |j
        d¦  «        | _        t          j                             |j
        |j	        d¦  «        | _        |                      ¦   «          |                      ¦   «          d S )Nr    )r8   r9   rS  Úencoderr  Úquantizer,   r   r*  r^  r  Ú
quant_convÚpost_quant_convÚevalÚ	post_initr¨   s     €r1   r9   zChameleonVQVAE.__init__1  s�   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å,¨VÑ4Ô4ˆŒÝ5°fÑ=Ô=ˆŒÝœ(Ÿ/š/¨&Ô*@À&ÔBRÐTUÑVÔVˆŒÝ$œxŸš¨vÔ/?ÀÔAWÐYZÑ[Ô[ˆÔØ�	Š	‰ŒˆØ�ŠÑÔÐÐÐr0   rw  r°   r6   c                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        \  }}}t          ||||¬¦  «        S )N)ry  r%   r&   r'   )rË  rÍ  rÌ  r$   )r>   rw  r°   rA   Úconv_hidden_statesr%   Úemb_lossÚindicess           r1   ÚencodezChameleonVQVAE.encode;  sd   € ð
 Ÿš \Ñ2Ô2ˆØ!Ÿ_š_¨]Ñ;Ô;ÐØ9=¿ºÐGYÑ9ZÔ9ZÑ6Ð# X¨wÝ(Ø+Ø(CØ Ø#ð	
ñ 
ô 
ð 	
r0   )r(   r)   r*   r"   r.   r¾  r3  rG  rÅ  r9   r   r   r,   rö   r   r   r$   rÕ  rV   rW   s   @r1   rÉ  rÉ    sÈ   ø€ € € € € € ð !Ð Ð Ñ ðð ð Ðð :Ø4ðð Ðð
Ð3ð ð ð ð ð ð ð  Øð
Ø!Ô,ð
Ø8>Ð?QÔ8Rð
à	"ð
ð 
ð 
ñ „_ñ  Ôð
ð 
ð 
ð 
ð 
r0   rÉ  c                   óª  ‡ — e Zd Zdefˆ fd„Zdej        fd„Ze e	d¬¦  «        dej        de
e         deez  fd	„¦   «         ¦   «         Zd
ej        dej        dej        fd„Ze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dz  dej        dz  dedz  de
e         deez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚChameleonModelr[   c                 ó�  •‡‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        t          j        ‰j        ‰j        | j        ¦  «        | _        t          ‰j
        ¦  «        | _        | j        j        st          nt          Št          j        ˆˆfd„t#          ‰j        ¦  «        D ¦   «         ¦  «        | _        t)          ‰j        ‰j        ¬¦  «        | _        t.                               ‰j        ¦  «        | _        t7          ‰¬¦  «        | _        d| _        |                      ¦   «          d S )Nc                 ó(   •— g | ]} ‰‰|¦  «        ‘ŒS r/   r/   )rƒ  rÔ   r[   Údecoder_layers     €€r1   r�  z+ChameleonModel.__init__.<locals>.<listcomp>V  s%   ø€ Ð_Ð_Ð_°)ˆ]ˆ]˜6 9Ñ-Ô-Ð_Ð_Ð_r0   r²   ©r[   F)r8   r9   Úpad_token_idÚpadding_idxÚ
vocab_sizer   r  r?   Úembed_tokensr{  Úvocabulary_mapÚvocabulary_mappingr[   Ú	swin_normrù   r  ra  rc  Únum_hidden_layersÚlayersr3   rÿ   rI  rÉ  Ú_from_configÚ	vq_configÚvqmodelrY   Ú
rotary_embÚgradient_checkpointingrÐ  )r>   r[   rÚ  r@   s    `@€r1   r9   zChameleonModel.__init__M  s  øøø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø!Ô.ˆÔØ Ô+ˆŒåœL¨Ô):¸FÔ<NÐPTÔP`ÑaÔaˆÔÝ"AÀ&ÔBWÑ"XÔ"XˆÔØ59´[Ô5JÐiÕ-Ð-ÕPiˆÝ”mØ_Ð_Ð_Ð_Ð_½uÀVÔE]Ñ?^Ô?^Ð_Ñ_Ô_ñ
ô 
ˆŒõ % VÔ%7¸VÔ=PÐQÑQÔQˆŒ	Ý%×2Ò2°6Ô3CÑDÔDˆŒÝ2¸&ÐAÑAÔAˆŒØ&+ˆÔ#ð 	�ŠÑÔÐÐÐr0   rw  c                 óÂ   — |j         d         }| j                             |d¬¦  «        }| j                             |j        ¦  «        }|                     |d¦  «        }|S )as  
        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.
        r   T©Úreturn_dictrD   )rQ   rç  rÕ  rá  r²  r&   rì   )r>   rw  rN  Úvqmodel_outputsÚbpe_tokss        r1   Úget_image_tokenszChameleonModel.get_image_tokens`  s]   € ð "Ô'¨Ô*ˆ
Ø59´\×5HÒ5HÈÐcgÐ5HÑ5hÔ5hˆØÔ*×:Ò:¸?Ô;WÑXÔXˆØ—=’= ¨RÑ0Ô0ˆØˆr0   zcTokenizes images into discrete tokens with VQGAN module and embeds them with text embeddings layer.rÆ  r°   r6   c                 óô   — |j         d         } | j        j        |fddi|¤Ž}| j                             |j        ¦  «                             |d¦  «        } |                      ¦   «         |¦  «        |_        |S )z®
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
            The tensors corresponding to the input images.
        r   rì  TrD   )	rQ   rç  rÕ  rá  r²  r&   rì   Úget_input_embeddingsÚpooler_output)r>   rw  r°   rN  rí  Ú
bpe_tokenss         r1   Úget_image_featuresz!ChameleonModel.get_image_featuresp  sƒ   € ð "Ô'¨Ô*ˆ
Ø5H°T´\Ô5HÈÐ5rÐ5rÐcgÐ5rÐkqÐ5rÐ5rˆØÔ,×<Ò<¸_Ô=YÑZÔZ×_Ò_Ð`jÐlnÑoÔoˆ
Ø(C¨×(AÒ(AÑ(CÔ(CÀJÑ(OÔ(OˆÔ%ØÐr0   Ú	input_idsÚinputs_embedsÚimage_featuresc                 ó   — |€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)rF   ri   rD   r   r    z6Image features and image tokens do not match, tokens: z, features: )rñ  r,   r¦  rá  r  Úlongri   Úallr  rQ   r”   rG   r   Únumel)r>   rõ  rö  r÷  Úspecial_image_maskÚn_image_tokensÚn_image_featuress          r1   Úget_placeholder_maskz#ChameleonModel.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ñ	
ô 	
ð 	
ð "Ð!r0   NrÂ   r†   ræ   rè   c           
      ó  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        }|�J|                      |d¬¦  «        j        }	|                      |||	¬¦  «        }
|                     |
|	¦  «        }|r5|€3t          j                             ¦   «         st          | j
        ¬¦  «        }|€V|�|                     ¦   «         nd}t          j        |j        d         |j        ¬¦  «        |z   }|                     d¦  «        }t!          | j
        ||||¬	¦  «        }|}|                      ||¬
¦  «        }| j        D ]} ||f|||||dœ|¤Ž}|d         }Œ|                      |¦  «        }t)          ||¬¦  «        S )Nz:You must specify exactly one of input_ids or inputs_embedsTrë  )rö  r÷  rÛ  r   r    )ri   )r[   rö  rÂ   ræ   r†   )r†   )rÂ   r†   ræ   rè   ré   )ry  ræ   )rÝ   rß  rô  rò  rÿ  Úmasked_scatterr,   ÚjitÚ
is_tracingr   r[   Úget_seq_lengthrr   rQ   ri   r”   r   rè  rä  rI  r   )r>   rõ  rw  rÂ   r†   ræ   rö  rè   r°   r÷  rü  Úpast_seen_tokensr¸  rA   ré   rÚ  Úlayer_outputss                    r1   rN   zChameleonModel.forward™  sö  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ×-Ò-¨iÑ8Ô8ˆMàÐ#Ø!×4Ò4°\ÈtÐ4ÑTÔTÔbˆNØ!%×!:Ò!:Ø¨À~ð ";ñ "ô "Ðð *×8Ò8Ð9KÈ^Ñ\Ô\ˆMð ð 	?˜Ð0½¼×9MÒ9MÑ9OÔ9OÐ0Ý*°$´+Ð>Ñ>Ô>ˆOàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4ˆLå(Ø”;Ø'Ø)Ø+Ø%ð
ñ 
ô 
ˆð &ˆØ"Ÿošo¨mÈ,˜oÑWÔWÐð "œ[ð 	-ð 	-ˆMØ)˜MØðà*Ø)Ø /Ø#Ø$7ðð ð ðð ˆMð *¨!Ô,ˆMˆMàŸ	š	 -Ñ0Ô0ˆå&Ø+Ø+ð
ñ 
ô 
ð 	
r0   )NNNNNNN)r(   r)   r*   r!   r9   r,   r-   rï  r   r   r   r   rP   r   rô  rö   rÿ  r   r   rU   r
   r÷   r   r   rN   rV   rW   s   @r1   r×  r×  K  sö  ø€ € € € € ð˜ð ð ð ð ð ð ð&¨UÔ->ð ð ð ð ð  Ø€^Øzðñ ô ðØ!Ô-ðØ9?Ð@RÔ9Sðà	Ð+Ñ	+ðð ð ñô ñ Ôðð"ØÔ)ð"Ø:?Ô:Kð"Ø]bÔ]nð"ð "ð "ð "ð0  ØØð .2Ø15Ø.2Ø04Ø(,Ø26Ø!%ð@
ð @
àÔ# dÑ*ð@
ð Ô'¨$Ñ.ð@
ð œ tÑ+ð	@
ð
 Ô&¨Ñ-ð@
ð  ™ð@
ð Ô(¨4Ñ/ð@
ð ˜$‘;ð@
ð Ð-Ô.ð@
ð 
Ð(Ñ	(ð@
ð @
ð @
ñ „^ñ „_ñ  Ôð@
ð @
ð @
ð @
ð @
r0   r×  zb
    Chameleon Model with a head on top used for outputting logits for next token prediction.
    c                   ó|  ‡ — e Zd ZddiZˆ fd„Zd„ Zedej        de	e
         deez  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d	z  dej        d	z  dej        d	z  ded	z  deej        z  de	e
         deez  fd„¦   «         ¦   «         Z	 	 	 	 	 	 	 dˆ fd„	Zˆ xZS )Ú!ChameleonForConditionalGenerationzlm_head.weightzmodel.embed_tokens.weightc                 óþ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        t          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S )NFrž   )
r8   r9   r×  rµ  rÞ  r   r¡   r?   Úlm_headrÐ  r¨   s     €r1   r9   z*ChameleonForConditionalGeneration.__init__ç  sj   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý# FÑ+Ô+ˆŒ
Ø Ô+ˆŒÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr0   c                 ó6   — | j                              |¦  «        S r‹   )rµ  rï  )r>   rw  s     r1   rï  z2ChameleonForConditionalGeneration.get_image_tokensð  s   € ØŒz×*Ò*¨<Ñ8Ô8Ð8r0   rw  r°   r6   c                 ó(   —  | j         j        |fi |¤ŽS r‹   )rµ  rô  )r>   rw  r°   s      r1   rô  z4ChameleonForConditionalGeneration.get_image_featuresó  s!   € ð -ˆtŒzÔ,¨\ÐDÐD¸VÐDÐDÐDr0   Nr   rõ  rÂ   r†   ræ   rö  Úlabelsrè   Úlogits_to_keepc
                 óÆ  —  | j         d|||||||dœ|
¤Ž}|d         }t          |	t          ¦  «        rt          |	 d¦  «        n|	}|                      |dd…|dd…f         ¦  «        }| j         j        j        }t          j        |j	        ¦  «        j
        |dd…dd…|f<   d}|� | j        d||| j        j        dœ|
¤Ž}t          |||j        |j        |j        ¬¦  «        S )a†  
        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 ChameleonProcessor, ChameleonForConditionalGeneration
        >>> import torch
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image

        >>> model = ChameleonForConditionalGeneration.from_pretrained("facebook/chameleon-7b", dtype=torch.bfloat16)
        >>> processor = ChameleonProcessor.from_pretrained("facebook/chameleon-7b")

        >>> prompt = "I used to know a lot about constellations when I was younger, but as I grew older, I forgot most of what I knew. These are the only two constellations that I really remember now.<image><image>I would like for you to tell me about 3 more constellations and give me a little bit of history about the constellation."
        >>> url = "https://nineplanets.org/wp-content/uploads/2020/12/the-big-dipper-1.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image1 = Image.open(BytesIO(response.read()))

        >>> url = "https://www.kxan.com/wp-content/uploads/sites/40/2020/10/ORION.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image2 = Image.open(BytesIO(response.read()))

        >>> inputs = processor(images=[image1, image2], 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õ  rw  rÂ   r†   ræ   rö  rè   r   N)Úlogitsr  rÞ  )r"  r  ræ   rA   rº  r/   )rµ  r~   r�   Úslicer
  rá  r&   r,   ÚfinforF   ÚminÚloss_functionr[   rÞ  r   ræ   rA   rº  )r>   rõ  rw  rÂ   r†   ræ   rö  r  rè   r  r°   r  rA   Úslice_indicesr  r&   r"  s                    r1   rN   z)ChameleonForConditionalGeneration.forwardù  s0  € ð^ ,6¨4¬:ð 	,
ØØ%Ø)Ø%Ø+Ø'Øð	,
ð 	,
ð ð	,
ð 	,
ˆð   œ
ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆð ”zÔ4ÔAˆÝ%*¤[°´Ñ%>Ô%>Ô%Bˆˆqˆqˆq�!�!�!�\Ð!Ñ"àˆØÐØ%�4Ô%Ðp¨V¸FÈtÌ{ÔOeÐpÐpÐioÐpÐpˆDå%ØØØ#Ô3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r0   TFc	                 ó^   •—  t          ¦   «         j        |f|||||||dœ|	¤Ž}
|s|rd |
d<   |
S )N)rw  ræ   rÂ   rö  r†   rè   Úis_first_iterationrw  )r8   Úprepare_inputs_for_generation)r>   rõ  rw  ræ   rÂ   rö  r†   rè   r  r°   Úmodel_inputsr@   s              €r1   r  z?ChameleonForConditionalGeneration.prepare_inputs_for_generationH  sl   ø€ ð =•u‘w”wÔ<Øð

à%Ø+Ø)Ø'Ø%ØØ1ð

ð 

ð ð

ð 

ˆð "ð 	0 ið 	0ð
 ,0ˆL˜Ñ(àÐr0   )	NNNNNNNNr   )NNNNNTF)r(   r)   r*   Ú_tied_weights_keysr9   rï  r   r,   r-   r   r   rP   r   rô  r   rö   rU   r
   r÷   r�   r   rN   r  rV   rW   s   @r1   r  r  ß  sì  ø€ € € € € ð +Ð,GÐHÐðð ð ð ð ð9ð 9ð 9ð ðEØ!Ô-ðEØ9?Ð@RÔ9SðEà	Ð+Ñ	+ðEð Eð Eñ „^ðEð
 Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ðK
ð K
àÔ# dÑ*ðK
ð Ô'¨$Ñ.ðK
ð œ tÑ+ð	K
ð
 Ô&¨Ñ-ðK
ð  ™ðK
ð Ô(¨4Ñ/ðK
ð Ô  4Ñ'ðK
ð ˜$‘;ðK
ð ˜eœlÑ*ðK
ð Ð+Ô,ðK
ð 
Ð'Ñ	'ðK
ð K
ð K
ñ „^ñ ÔðK
ð` ØØØØØØ ð!ð !ð !ð !ð !ð !ð !ð !ð !ð !r0   r  )r  r×  r´  rÉ  rU  )r½   )Tr+   Úcollections.abcr   Údataclassesr   Ú	functoolsr   Útypingr   r,   Útorch.nn.functionalr   rÊ   r³   Úactivationsr	   Úcache_utilsr
   r   Ú
generationr   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_chameleonr!   r"   Ú
get_loggerr(   r×   r$   rg  r3   rY   r’   rš   rœ   Ú	LayerNormr¬   rU   r�   r¼   rT   rÑ   rÓ   rù   r  r  r$  r3  rG  rS  r{  r´  rÉ  r×  r  Ú__all__r/   r0   r1   ú<module>r1     s®  ðð Ð à $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø BÐ BÐ BÐ BÐ BÐ BØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kØ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð HÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jð 
ˆÔ	˜HÑ	%Ô	%€ð Ø
ð4ð 4ð 4ð 4ð 4Ð :ñ 4ô 4ñ „ñ „ð4ð Jð Jð Jð Jð J�r”yñ Jô Jð Jð*><ð ><ð ><ð ><ð ><˜rœyñ ><ô ><ð ><ðD(ð (ð (ðð ð ð ð4ð ð ð ð �2”9ñ ô ð ð"ð ð ð ð ˜œñ ô ð ð&	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð( ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð2Z)ð Z)ð Z)ð Z)ð Z)˜œñ Z)ô Z)ð Z)ð|Cð Cð Cð Cð CÐ6ñ Cô Cð CðLAð Að Að Að AÐ :ñ Aô Að AðH,>ð ,>ð ,>ð ,>ð ,> B¤Iñ ,>ô ,>ð ,>ð^	ð 	ð 	ð 	ð 	¨"¬)ñ 	ô 	ð 	ð)(ð )(ð )(ð )(ð )( r¤yñ )(ô )(ð )(ðX &ð  &ð  &ð  &ð  & R¤Yñ  &ô  &ð  &ðF^!ð ^!ð ^!ð ^!ð ^!˜BœIñ ^!ô ^!ð ^!ðB,%ð ,%ð ,%ð ,%ð ,%ñ ,%ô ,%ð ,%ð^ ðð ð ð ð ˜ñ ô ñ „ðð& €ððñ ô ð#
ð #
ð #
ð #
ð #
Ð-ñ #
ô #
ñô ð#
ðL ðP
ð P
ð P
ð P
ð P
Ð-ñ P
ô P
ñ „ðP
ðf €ððñ ô ð
Eð Eð Eð Eð EÐ(@À/ñ Eô Eñô ð
EðP pÐ
oÐ
o€€€r0   