Ë
    ÛÓ^j˜ä  ã                   ó4  — 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 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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'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2  e&jf                  e4«      Z5e$ G d„ de«      «       Z6 e$d¬«      e G d„ de«      «       «       Z7 e$d¬«      e G d„ de«      «       «       Z8 e$d¬«      e G d „ d!e«      «       «       Z9 G d"„ d#ejt                  «      Z;d$ejx                  d%e=d&ejx                  fd'„Z>	 d\d(ejt                  d)ejx                  d*ejx                  d+ejx                  d,ejx                  dz  d-e?d.e?d/e!e#   fd0„Z@ G d1„ d2ejt                  «      ZA G d3„ d4ejt                  «      ZB G d5„ d6e«      ZC G d7„ d8ejt                  «      ZDe$ G d9„ d:e6«      «       ZE G d;„ d<ejt                  «      ZF G d=„ d>ejt                  «      ZG G d?„ d@ejt                  «      ZH G dA„ dBejt                  «      ZI G dC„ dDejt                  «      ZJ G dE„ dFejt                  «      ZK G dG„ dHejt                  «      ZL G dI„ dJejt                  «      ZM G dK„ dLejt                  «      ZNe$e G dM„ dNe«      «       «       ZO e$dO¬«       G dP„ dQe6«      «       ZP G dR„ dSejt                  «      ZQ G dT„ dUejt                  «      ZR e$dV¬«       G dW„ dXe6«      «       ZS G dY„ dZe6e«      ZTg d[¢ZUy)]é    )ÚCallable)Ú	dataclassN)Únné   )Úinitialization)ÚACT2FN)ÚCache)Ú%ClassifierFreeGuidanceLogitsProcessorÚGenerationMixinÚGenerationModeÚLogitsProcessorList)ÚGenerateDecoderOnlyOutput)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚtorch_compilable_checkÚ	torch_int)Úmerge_with_config_defaults)Úcapture_outputsé   )Ú	AutoModelé   )ÚJanusConfigÚJanusVisionConfigÚJanusVQVAEConfigc                   óR   ‡ — 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ˆ fd	„Zˆ xZS )
ÚJanusPreTrainedModelÚconfigÚmodel©ÚimageÚtextTÚLlamaDecoderLayerÚJanusVisionEncoderLayerÚpast_key_valuesÚcausal_maskc                 óø   •— t         ‰| �  |«       t        |t        «      rZt	        j
                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       y y )Néÿÿÿÿ©r    r0   )ÚsuperÚ_init_weightsÚ
isinstanceÚJanusVisionEmbeddingsÚinitÚcopy_Úposition_idsÚtorchÚarangeÚshapeÚexpand)ÚselfÚmoduleÚ	__class__s     €ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/janus/modeling_janus.pyr3   z"JanusPreTrainedModel._init_weights<   s[   ø€ Ü‰Ñ˜fÔ%Ü�fÔ3Ô4Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð 5ó    )Ú__name__Ú
__module__Ú__qualname__r!   Ú__annotations__Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphr3   Ú__classcell__©r?   s   @r@   r%   r%   /   sO   ø… àÓØÐØ(ÐØ&*Ð#Ø,Ð.GÐHÐØ#4°mÐ"DÐØÐØ€Nà!Ð÷ið irA   r%   z9
    Base class for Janus VQ-VAE mode model outputs.
    )Úcustom_introc                   ób   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   y)ÚJanusVQVAEOutputzÿ
    decoded_pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
        Reconstructed pixel values after encoding and decoding the input.
    embedding_loss (`torch.FloatTensor`):
        Embedding loss.
    NÚdecoded_pixel_valuesÚembedding_loss)	rB   rC   rD   Ú__doc__rS   r9   ÚFloatTensorrE   rT   © rA   r@   rR   rR   B   s4   … ñð 6:Ð˜%×+Ñ+¨dÑ2Ó9Ø/3€N�E×%Ñ%¨Ñ,Ô3rA   rR   zy
    Base class for Janus model's outputs that may also contain a past key/values (to speed up sequential decoding).
    c                   óØ   — e Zd ZU dZdZej                  dz  ed<   dZe	dz  ed<   dZ
eej                     dz  ed<   dZeej                     dz  ed<   dZeej                     dz  ed<   y)ÚJanusBaseModelOutputWithPasta…  
    last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
        Sequence of hidden-states at the output of the last layer of the model.

        If `past_key_values` is used only the last hidden-state of the sequences of shape `(batch_size, 1,
        hidden_size)` is output.
    image_hidden_states (`tuple(torch.FloatTensor)`, *optional*):
        Tuple of `torch.FloatTensor` (one for the output of the image embeddings, `(batch_size, num_images,
        sequence_length, hidden_size)`.

        image_hidden_states of the model produced by the vision encoder, and optionally by the perceiver
    NÚlast_hidden_stater-   Úhidden_statesÚ
attentionsÚimage_hidden_states)rB   rC   rD   rU   rZ   r9   rV   rE   r-   r	   r[   Útupler\   r]   rW   rA   r@   rY   rY   T   s|   … ñð 37Ð�u×(Ñ(¨4Ñ/Ó6Ø$(€O�U˜T‘\Ó(Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6Ø;?Ð˜˜u×0Ñ0Ñ1°DÑ8Ô?rA   rY   zQ
    Base class for Janus causal language model (or autoregressive) outputs.
    c                   ó   — 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
dz  ed<   dZeej                     dz  ed<   dZeej                     dz  ed<   dZeej                     dz  ed<   y)	ÚJanusCausalLMOutputWithPastae  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).

        Contains pre-computed hidden-states (key and values in the self-attention blocks) that can be used (see
        `past_key_values` input) to speed up sequential decoding.
    image_hidden_states (`tuple(torch.FloatTensor)`, *optional*):
        Tuple of `torch.FloatTensor` (one for the output of the image embeddings, `(batch_size, num_images,
        sequence_length, hidden_size)`.

        image_hidden_states of the model produced by the vision encoder, and optionally by the perceiver
    NÚlossÚlogitsr-   r[   r\   r]   )rB   rC   rD   rU   ra   r9   rV   rE   rb   r-   r	   r[   r^   r\   r]   rW   rA   r@   r`   r`   o   s�   … ñð" &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø$(€O�U˜T‘\Ó(Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6Ø;?Ð˜˜u×0Ñ0Ñ1°DÑ8Ô?rA   r`   c                   ó¢   ‡ — e Zd Zdefˆ fd„Zdej                  dededej                  fd„Zddej                  d	e	dej                  fd
„Z
ˆ xZS )r5   r&   c                 óf  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |j                  | _        t        j                  |j                  | j                  | j                  | j                  d¬«      | _
        | j
                  | j                  z  dz  | _        | j                  | _        t        j                  | j                  | j                  «      | _        | j                  dt!        j"                  | j                  «      j%                  d«      d¬«       y )NÚvalid)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingr   r8   r1   F)Ú
persistent)r2   Ú__init__r&   Úhidden_sizeÚ	embed_dimÚ
image_sizeÚ
patch_sizer   ÚConv2dÚnum_channelsÚpatch_embeddingÚnum_patchesÚnum_positionsÚ	EmbeddingÚposition_embeddingÚregister_bufferr9   r:   r<   ©r=   r&   r?   s     €r@   rl   zJanusVisionEmbeddings.__init__�   sæ   ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒä!Ÿy™yØ×+Ñ+ØŸ™ØŸ™Ø—?‘?Øô 
ˆÔð !ŸO™O¨t¯©Ñ>À1ÑDˆÔØ!×-Ñ-ˆÔÜ"$§,¡,¨t×/AÑ/AÀ4Ç>Á>Ó"RˆÔØ×Ñ˜^¬U¯\©\¸$×:LÑ:LÓ-M×-TÑ-TÐU\Ó-]ÐjoÐÕprA   Ú
embeddingsÚheightÚwidthÚreturnc                 ó”  — |j                   d   }| j                  j                  j                   d   }t        j                  j                  «       s%||k(  r ||k(  r| j                  | j                  «      S | j                  j                  j                  d«      }|j                   d   }|| j                  z  }|| j                  z  }	t        |dz  «      }
|j                  d|
|
|«      }|j                  dddd«      }t        j                  j                  |||	fdd¬	«      }|j                  dddd«      j                  dd|«      }|S )
a  
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing and no class embeddings.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r    r   r0   g      à?r   r   ÚbicubicF)ÚsizeÚmodeÚalign_corners)r;   rw   Úweightr9   ÚjitÚ
is_tracingr8   Ú	unsqueezerp   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolateÚview)r=   rz   r{   r|   rt   ru   Úpatch_pos_embedÚdimÚ
new_heightÚ	new_widthÚsqrt_num_positionss              r@   Úinterpolate_pos_encodingz.JanusVisionEmbeddings.interpolate_pos_encoding¤   sE  € ð !×&Ñ& qÑ)ˆØ×/Ñ/×6Ñ6×<Ñ<¸QÑ?ˆô �y‰y×#Ñ#Ô%¨+¸Ò*FÈ6ÐUZÊ?Ø×*Ñ*¨4×+<Ñ+<Ó=Ð=à×1Ñ1×8Ñ8×BÑBÀ1ÓEˆà×Ñ˜rÑ"ˆà˜tŸ™Ñ.ˆ
Ø˜TŸ_™_Ñ,ˆ	ä& }°cÑ'9Ó:ÐØ)×1Ñ1°!Ð5GÐI[Ð]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØ˜iÐ(ØØð	 4ó 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆØÐrA   Úpixel_valuesr‘   c                 óX  — |j                   \  }}}}| j                  j                  j                  }| j                  |j	                  |¬«      «      }|j                  d«      j                  dd«      }|r| j                  |||«      }	n| j                  | j                  «      }	||	z   }|S )N)Údtyper   r    )
r;   rs   rƒ   r”   ÚtoÚflattenÚ	transposer‘   rw   r8   )
r=   r’   r‘   Ú_r{   r|   Útarget_dtypeÚpatch_embedsrz   Ú
pos_embedss
             r@   ÚforwardzJanusVisionEmbeddings.forwardÊ   s¢   € Ø*×0Ñ0Ñˆˆ1ˆf�eØ×+Ñ+×2Ñ2×8Ñ8ˆØ×+Ñ+¨L¯O©OÀ,¨OÓ,OÓPˆØ!×)Ñ)¨!Ó,×6Ñ6°q¸!Ó<ˆ
á#Ø×6Ñ6°zÀ6È5ÓQ‰Jà×0Ñ0°×1BÑ1BÓCˆJà *Ñ,ˆ
àÐrA   )F)rB   rC   rD   r"   rl   r9   ÚTensorÚintr‘   Úboolrœ   rN   rO   s   @r@   r5   r5   �   se   ø„ ðqÐ0õ qð($°5·<±<ð $Èð $ÐUXð $Ð]b×]iÑ]ió $ñL E§L¡Lð ÈDð Ð]b×]iÑ]i÷ rA   r5   r[   Ún_repr}   c                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||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)r;   r<   r‡   )r[   r    ÚbatchÚnum_key_value_headsÚslenÚhead_dims         r@   Ú	repeat_kvr¦   Ú   so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTrA   r>   ÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t        || j                  «      }t        || j                  «      }	t        j                  ||j	                  dd«      «      |z  }
|�|
|z   }
t
        j                  j                  |
dt        j                  ¬«      j                  |j                  «      }
t
        j                  j                  |
|| j                  ¬«      }
t        j                  |
|	«      }|j	                  dd«      j                  «       }||
fS )Nr   r   r0   )r�   r”   )ÚpÚtrainingr    )r¦   Únum_key_value_groupsr9   Úmatmulr—   r   r‰   ÚsoftmaxÚfloat32r•   r”   r¬   r°   Ú
contiguous)r>   r§   r¨   r©   rª   r«   r¬   r­   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r@   Úeager_attention_forwardrº   æ   sà   € ô ˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$rA   c                   ót   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej                  dej                  dz  dee	   fd„Z
ˆ xZS )
ÚJanusVisionAttentionz(Attention Class for Janus Vision Encoderr&   c                 óF  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        | j                  | j                  z  | j                  k7  r&t        d| j                  › d| j                  › d�«      ‚| j                  dz  | _	        |j                  | _
        |j                  }|j                  }d| _        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                  «      | _        |dkD  rt        j,                  |«      nt        j.                  «       | _        |rt        j0                  | j                  «      nt        j.                  «       | _        |r%t        j0                  | j                  «      | _        y t        j.                  «       | _        y )	Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).ç      à¿Fr    ©Úbiasr   )r2   rl   r&   rm   rn   Únum_attention_headsÚ	num_headsr¥   Ú
ValueErrorÚscaleÚattention_dropoutÚprojection_dropoutÚuse_qk_normÚ	is_causalr±   r   ÚLinearÚattention_biasÚq_projÚk_projÚv_projÚprojection_layerÚDropoutÚIdentityÚ	LayerNormÚq_normÚk_norm)r=   r&   Úproj_dropoutÚqk_normr?   s       €r@   rl   zJanusVisionAttention.__init__  sÖ  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ�=‰=˜4Ÿ>™>Ñ)¨T¯^©^Ò;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÑ(ˆŒ
Ø!'×!9Ñ!9ˆÔØ×0Ñ0ˆØ×$Ñ$ˆØˆŒð %&ˆÔ!ä—i‘i §¡°·±ÀÇÁÑ0NÐU[×UjÑUjÔkˆŒÜ—i‘i §¡°·±ÀÇÁÑ0NÐU[×UjÑUjÔkˆŒÜ—i‘i §¡°·±ÀÇÁÑ0NÐU[×UjÑUjÔkˆŒÜ "§	¡	¨$¯.©.¸$¿.¹.Ó IˆÔØ>JÈQÒ>N¤"§*¡*¨\Ô":ÔTV×T_ÑT_ÓTaˆÔá6=”b—l‘l 4§>¡>Ô2Ä2Ç;Á;Ã=ˆŒÙ6=”b—l‘l 4§>¡>Ó2ˆ�Ä2Ç;Á;Ã=ˆ�rA   Nr[   rª   r­   c                 ó"  — |j                  «       \  }}}| j                  |«      }| j                  |«      }| j                  |«      }	|j	                  d| j
                  | j                  «      }| j                  |«      }|j	                  d| j
                  | j                  «      }| j                  |«      }|j	                  ||| j
                  | j                  «      j                  dd«      }|j	                  ||| j
                  | j                  «      j                  dd«      }|	j                  ||| j
                  | j                  «      j                  dd«      }	t        j                  | j                  j                  t        «      }
 |
| |||	|f| j                   sdn| j"                  | j$                  | j&                  dœ|¤Ž\  }}|j	                  ||| j(                  «      }| j+                  |«      }| j-                  |«      }||fS )Nr0   r    r   ç        )r¬   r«   rÈ   )r€   rË   rÌ   rÍ   r‡   rÂ   r¥   rÒ   rÓ   r—   r‹   r   Úget_interfacer&   Ú_attn_implementationrº   r°   rÅ   rÄ   rÈ   rn   rÎ   rÆ   )r=   r[   rª   r­   Ú
batch_sizeÚseq_lenr˜   Úquery_statesr¶   r·   Úattention_interfacer¹   r¸   Úoutputs                 r@   rœ   zJanusVisionAttention.forward  s×  € ð "/×!3Ñ!3Ó!5Ñˆ
�G˜Qà—{‘{ =Ó1ˆØ—[‘[ Ó/ˆ
Ø—{‘{ =Ó1ˆà#×+Ñ+¨B°·±ÀÇÁÓNˆØ—{‘{ <Ó0ˆà×'Ñ'¨¨D¯N©N¸D¿M¹MÓJˆ
Ø—[‘[ Ó,ˆ
à#×+Ñ+¨J¸ÀÇÁÐQU×Q^ÑQ^Ó_×iÑiÐjkÐmnÓoˆØ×'Ñ'¨
°G¸T¿^¹^ÈTÏ]É]Ó[×eÑeÐfgÐijÓkˆ
Ø#×(Ñ(¨°W¸d¿n¹nÈdÏmÉmÓ\×fÑfÐghÐjkÓlˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð
%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—J‘JØ—n‘nñ
%
ð ñ
%
Ñ!ˆ�\ð "×)Ñ)¨*°g¸t¿~¹~ÓNˆà×&Ñ& {Ó3ˆØ×(Ñ(¨Ó0ˆØ�|Ð#Ð#rA   ©N)rB   rC   rD   rU   r"   rl   r9   r�   r   r   rœ   rN   rO   s   @r@   r¼   r¼   ÿ   sO   ø„ Ù2ðQÐ0õ Qð@ /3ñ)$à—|‘|ð)$ð Ÿ™ tÑ+ð)$ð Ð+Ñ,÷	)$rA   r¼   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚJanusVisionMLPr&   c                 óú  •— t         ‰| �  «        || _        t        |j                  |j
                  z  «      | _        t        |j                     | _	        t        j                  |j                  | j                  «      | _        t        j                  | j                  |j                  «      | _        t        j                  |j                  «      | _        t        j                  |j                  «      | _        y rß   )r2   rl   r&   rž   rm   Ú	mlp_ratioÚintermediate_sizer   Ú
hidden_actÚactivation_fnr   rÉ   Úfc1Úfc2rÏ   Úhidden_dropout_rateÚdropout1Údropout2ry   s     €r@   rl   zJanusVisionMLP.__init__L  s®   ø€ Ü‰ÑÔØˆŒÜ!$ V×%7Ñ%7¸&×:JÑ:JÑ%JÓ!KˆÔÜ# F×$5Ñ$5Ñ6ˆÔÜ—9‘9˜V×/Ñ/°×1GÑ1GÓHˆŒÜ—9‘9˜T×3Ñ3°V×5GÑ5GÓHˆŒÜŸ
™
 6×#=Ñ#=Ó>ˆŒÜŸ
™
 6×#=Ñ#=Ó>ˆ�rA   r[   r}   c                 ó°   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S rß   )rç   ræ   rê   rè   rë   ©r=   r[   s     r@   rœ   zJanusVisionMLP.forwardV  sP   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ mÓ4ˆØŸ™ Ó/ˆØŸ™ mÓ4ˆØÐrA   )	rB   rC   rD   r"   rl   r9   r�   rœ   rN   rO   s   @r@   rá   rá   K  s+   ø„ ð?Ð0õ ?ð U§\¡\ð °e·l±l÷ rA   rá   c            	       óˆ   ‡ — e Zd Zdefˆ fd„Zedej                  dej                  dee	   dej                  fd„«       Zˆ xZS )r,   r&   c                 óR  •— t         ‰| �  «        |j                  | _        t	        j
                  | j                  |j                  ¬«      | _        t        |«      | _	        t	        j
                  | j                  |j                  ¬«      | _
        t        |«      | _        || _        y ©N)Úeps)r2   rl   rm   rn   r   rÑ   Úlayer_norm_epsÚlayer_norm1r¼   Ú	self_attnÚlayer_norm2rá   Úmlpr&   ry   s     €r@   rl   z JanusVisionEncoderLayer.__init__`  st   ø€ Ü‰ÑÔØ×+Ñ+ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÔÜ-¨fÓ5ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÔÜ! &Ó)ˆŒØˆ�rA   r[   rª   r­   r}   c                 ó¸   — |}| j                  |«      } | j                  d||dœ|¤Ž\  }}||z   }|}| j                  |«      }| j                  |«      }||z   }|S )N)r[   rª   rW   )ró   rô   rõ   rö   )r=   r[   rª   r­   Úresidualr˜   s         r@   rœ   zJanusVisionEncoderLayer.forwardi  s‚   € ð !ˆà×(Ñ(¨Ó7ˆØ)˜4Ÿ>™>ð 
Ø'Ø)ñ
ð ñ
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ñ(¨Ó7ˆØŸ™ Ó/ˆØ  =Ñ0ˆàÐrA   )rB   rC   rD   r"   rl   r   r9   r�   r   r   rV   rœ   rN   rO   s   @r@   r,   r,   _  s^   ø„ ðÐ0õ ð ðà—|‘|ðð Ÿ™ðð Ð+Ñ,ð	ð
 
×	Ñ	òó ôrA   r,   c                   ój   ‡ — e Zd ZdZdefˆ fd„Ze	 d	dej                  dz  de	e
   defd„«       Zˆ xZS )
ÚJanusVisionEncoderz»
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`JanusVisionEncoderLayer`].

    Args:
        config: JanusVisionConfig
    r&   c                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w ©NF)
r2   rl   r&   r   Ú
ModuleListÚrangeÚnum_hidden_layersr,   ÚlayersÚgradient_checkpointing©r=   r&   r˜   r?   s      €r@   rl   zJanusVisionEncoder.__init__‹  sP   ø€ Ü‰ÑÔØˆŒÜ—m‘mÌeÐTZ×TlÑTlÓNmÖ$nÈÔ%<¸VÕ%DÒ$nÓoˆŒØ&+ˆÕ#ùò %os   ½A#Nrª   r­   r}   c                 óT   — |}| j                   D ]  } |||fi |¤Ž}Œ t        |¬«      S )N)rZ   )r   r   )r=   Úinputs_embedsrª   r­   r[   Úencoder_layers         r@   rœ   zJanusVisionEncoder.forward’  sC   € ð &ˆØ!Ÿ[™[ò 	ˆMÙ)ØØñð ñ‰Mð	ô °Ô?Ð?rA   rß   )rB   rC   rD   rU   r"   rl   r   r9   r�   r   r   r   rœ   rN   rO   s   @r@   rú   rú   ‚  s`   ø„ ñð,Ð0õ ,ð ð /3ñ@ð Ÿ™ tÑ+ð@ð Ð+Ñ,ð	@ð
 
ò@ó ô@rA   rú   c                   ó¸   ‡ — e Zd ZU dZdZeed<   eedœZ	defˆ fd„Z
e ed¬«      e	 	 ddej                  dz  d	ed
ee   deez  fd„«       «       «       Zd„ Zˆ xZS )ÚJanusVisionModelr’   )r)   r&   ©r[   r\   c                 óö   •— t         ‰| �  |«       || _        |j                  }t	        |«      | _        t        |«      | _        t        j                  ||j                  ¬«      | _        | j                  «        y rð   )r2   rl   r&   rm   r5   rz   rú   Úencoderr   rÑ   rò   Úpost_layernormÚ	post_init)r=   r&   rn   r?   s      €r@   rl   zJanusVisionModel.__init__®  s]   ø€ Ü‰Ñ˜Ô ØˆŒØ×&Ñ&ˆ	ä/°Ó7ˆŒÜ)¨&Ó1ˆŒÜ Ÿl™l¨9¸&×:OÑ:OÔPˆÔà�‰ÕrA   F)Útie_last_hidden_statesNr‘   r­   r}   c                 óø   — |€t        d«      ‚| j                  ||¬«      } | j                  dd|i|¤Ž}|j                  }| j	                  |«      }|d d …dd d …f   }| j	                  |«      }t        ||¬«      S )Nz You have to specify pixel_values)r‘   r  r   )rZ   Úpooler_outputrW   )rÃ   rz   r
  rZ   r  r   )r=   r’   r‘   r­   r[   Úencoder_outputsrZ   Úpooled_outputs           r@   rœ   zJanusVisionModel.forward¹  sœ   € ð ÐÜÐ?Ó@Ð@àŸ™¨ÐOg˜Óhˆà+7¨4¯<©<ñ ,
Ø'ð,
àñ,
ˆð
 ,×=Ñ=ÐØ ×/Ñ/Ð0AÓBÐà)ª!¨Q²¨'Ñ2ˆØ×+Ñ+¨MÓ:ˆä)Ø/Ø'ô
ð 	
rA   c                 ó   — | j                   S rß   )rz   )r=   s    r@   Úget_input_embeddingsz%JanusVisionModel.get_input_embeddings×  s   € Ø�‰ÐrA   rü   )rB   rC   rD   Úmain_input_namerG   r"   rE   r,   r¼   Ú_can_record_outputsrl   r   r   r   r9   rV   rŸ   r   r   r^   r   rœ   r  rN   rO   s   @r@   r  r  ¤  s¢   ø… à$€OØ!ÐØÓà0Ø*ñÐð
	Ð0õ 	ð  Ù¨EÔ2Øð 26Ø).ñ
à×'Ñ'¨$Ñ.ð
ð #'ð
ð Ð+Ñ,ð	
ð
 
Ð+Ñ	+ò
ó ó 3ó  ð
ö6rA   r  c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚJanusVisionAlignerMLPr&   c           	      ó‚  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  t        d|j                  «      D �cg c],  }t        j                  |j
                  |j
                  «      ‘Œ. c}«      | _
        t        |j                     | _        y c c}w ©Nr    )r2   rl   r   rÉ   rm   Úprojection_dimrç   rý   rþ   ÚdepthÚhidden_layersr   rå   ræ   r  s      €r@   rl   zJanusVisionAlignerMLP.__init__Ü  sŒ   ø€ Ü‰ÑÔä—9‘9˜V×/Ñ/°×1FÑ1FÓGˆŒÜŸ]™]ÜNSÐTUÐW]×WcÑWcÓNdÖeÈŒR�Y‰Y�v×,Ñ,¨f×.CÑ.CÕDÒeó
ˆÔô $ F×$5Ñ$5Ñ6ˆÕùò fó   Á&1B<c                 ó|   — | j                  |«      }| j                  D ]  }| j                  |«      } ||«      }Œ |S rß   ©rç   r  ræ   ©r=   r[   Úlayers      r@   rœ   zJanusVisionAlignerMLP.forwardå  óG   € ØŸ™ Ó/ˆØ×'Ñ'ò 	1ˆEØ ×.Ñ.¨}Ó=ˆMÙ! -Ó0‰Mð	1ð ÐrA   )rB   rC   rD   r"   rl   rœ   rN   rO   s   @r@   r  r  Û  s   ø„ ð7Ð0õ 7örA   r  c                   ó€   ‡ — e Zd ZdZdefˆ fd„Zdej                  fd„Zdej                  dej                  fd„Zˆ xZS )	ÚJanusVQVAEVectorQuantizeraâ  
    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.
    r&   c                 ó  •— t         ‰| �  «        |j                  | _        |j                  | _        t        |dd«      | _        t        j                  | j                  | j                  «      | _	        |j                  gdz  | _        y )NÚbetag      Ð?r   )r2   rl   Únum_embeddingsrn   Úembedding_dimÚgetattrr&  r   rv   Ú	embeddingrt   Úquant_state_dimsry   s     €r@   rl   z"JanusVQVAEVectorQuantizer.__init__ø  sn   ø€ Ü‰ÑÔØ$×3Ñ3ˆÔØ#×-Ñ-ˆÔÜ˜F F¨DÓ1ˆŒ	äŸ™ d×&9Ñ&9¸4×;MÑ;MÓNˆŒØ!'×!3Ñ!3Ð 4°qÑ 8ˆÕrA   Úhidden_statec           
      óL  — |j                  dddd«      j                  «       }|j                  d| j                  «      }t	        j
                  |dz  dd¬«      t	        j
                  | j                  j                  dz  d¬«      z   dt	        j                  d	|| j                  j                  j                  dd«      «      z  z
  }t	        j                  |d¬«      }| j                  |«      j                  |j                  «      }t	        j                  |j                  «       |z
  dz  «      | j                  t	        j                  ||j                  «       z
  dz  «      z  z   }|||z
  j                  «       z   }|j                  dddd«      j                  «       }|||fS )
Nr   r   r   r    r0   T)r�   Úkeepdim©r�   z	bd,dn->bn)rˆ   rµ   r‹   r(  r9   Úsumr*  rƒ   Úeinsumr—   Úargminr;   ÚmeanÚdetachr&  )r=   r,  Úhidden_state_flattenedÚ	distancesÚmin_encoding_indicesÚhidden_state_quantra   s          r@   rœ   z!JanusVQVAEVectorQuantizer.forward  sˆ  € Ø#×+Ñ+¨A¨q°!°QÓ7×BÑBÓDˆØ!-×!2Ñ!2°2°t×7IÑ7IÓ!JÐô �I‰IÐ,¨aÑ/°QÀÔEÜ�i‰i˜Ÿ™×-Ñ-¨qÑ0°aÔ8ñ9à”%—,‘,˜{Ð,BÀDÇNÁN×DYÑDY×DcÑDcÐdeÐghÓDiÓjÑjñkð 	ô  %Ÿ|™|¨I¸1Ô=ÐØ!Ÿ^™^Ð,@ÓA×FÑFÀ|×GYÑGYÓZÐô �z‰zÐ-×4Ñ4Ó6¸ÑEÈ!ÑKÓLÈtÏyÉyÔ[`×[eÑ[eØ ,×"5Ñ"5Ó"7Ñ7¸AÑ=ó\
ñ P
ñ 
ˆð
 *Ð-?À,Ñ-N×,VÑ,VÓ,XÑXÐð 0×7Ñ7¸¸1¸aÀÓC×NÑNÓPÐà! 4Ð)=Ð=Ð=rA   Úimage_tokensr}   c                 óB  — |j                   d   }| j                  j                  j                   d   }| j                  |«      }t        j                  |dd¬«      }|j                  |g| j                  ¢|‘­«      }|j                  dddd«      j                  «       }|S )Nr   r0   r   )r¯   r�   r   r    )	r;   r*  rƒ   ÚFÚ	normalizer‹   r+  rˆ   rµ   )r=   r9  rÚ   Úemb_dimr8  s        r@   Úget_codebook_entryz,JanusVQVAEVectorQuantizer.get_codebook_entry  sž   € Ø!×'Ñ'¨Ñ*ˆ
Ø—~‘~×,Ñ,×2Ñ2°2Ñ6ˆð "Ÿ^™^¨LÓ9ÐäŸ[™[Ð);¸qÀbÔIÐð 0×4Ñ4°jÐ5bÀ4×CXÑCXÐ5bÐZaÑ5bÓcÐØ/×7Ñ7¸¸1¸aÀÓC×NÑNÓPÐà!Ð!rA   )rB   rC   rD   rU   r#   rl   r9   r�   rœ   Ú
LongTensorrV   r>  rN   rO   s   @r@   r$  r$  í  sD   ø„ ñð9Ð/õ 9ð> E§L¡Ló >ð6"¨u×/?Ñ/?ð "ÀE×DUÑDU÷ "rA   r$  c                   ó*   ‡ — e Zd Z	 	 dˆ fd„	Zd„ Zˆ xZS )ÚJanusVQVAEResnetBlockc                 óæ  •— t         ‰| �  «        || _        |€|n|| _        || _        t
        j                  j                  d|dd¬«      | _        t
        j                  j                  ||ddd¬«      | _
        t
        j                  j                  d|dd¬«      | _        t
        j                  j                  |j                  «      | _        t
        j                  j                  ||ddd¬«      | _        | j                  | j                  k7  r`| j                  r*t
        j                  j                  ||ddd¬«      | _        y t
        j                  j                  ||ddd¬«      | _        y y )	Né    ç�íµ ÷Æ°>T©Ú
num_groupsrr   rñ   Úaffiner   r    ©rh   ri   rj   r   )r2   rl   rf   rg   Úuse_conv_shortcutr9   r   Ú	GroupNormÚnorm1rq   Úconv1Únorm2rÏ   r¬   Úconv2Úconv_shortcutÚnin_shortcut)r=   r&   rf   rg   rO  r?   s        €r@   rl   zJanusVQVAEResnetBlock.__init__-  s1  ø€ ô 	‰ÑÔØ&ˆÔØ+7Ð+?™KÀ\ˆÔØ!.ˆÔä—X‘X×'Ñ'°2ÀKÐUYÐbfÐ'ÓgˆŒ
Ü—X‘X—_‘_ [°,ÈAÐVWÐab�_ÓcˆŒ
Ü—X‘X×'Ñ'°2ÀLÐVZÐcgÐ'ÓhˆŒ
Ü—x‘x×'Ñ'¨¯©Ó7ˆŒÜ—X‘X—_‘_ \°<ÈQÐWXÐbc�_ÓdˆŒ
Ø×Ñ˜t×0Ñ0Ò0Ø×%Ò%Ü%*§X¡X§_¡_°[À,Ð\]ÐfgÐqr _Ó%s�Õ"ä$)§H¡H§O¡O°KÀÐ[\ÐefÐpq OÓ$r�Õ!ð	 1rA   c                 ó²  — |}| j                  |«      }|t        j                  |«      z  }| j                  |«      }| j	                  |«      }|t        j                  |«      z  }| j                  |«      }| j                  |«      }| j                  | j                  k7  r3| j                  r| j                  |«      }||z   S | j                  |«      }||z   S rß   )rK  r9   ÚsigmoidrL  rM  r¬   rN  rf   rg   rI  rO  rP  )r=   r[   rø   s      r@   rœ   zJanusVQVAEResnetBlock.forwardD  sÊ   € Ø ˆØŸ
™
 =Ó1ˆØœŸ™ }Ó5Ñ5ˆØŸ
™
 =Ó1ˆàŸ
™
 =Ó1ˆØœŸ™ }Ó5Ñ5ˆØŸ™ ]Ó3ˆØŸ
™
 =Ó1ˆà×Ñ˜t×0Ñ0Ò0Ø×%Ò%Ø×-Ñ-¨hÓ7�ð ˜-Ñ'Ð'ð  ×,Ñ,¨XÓ6�à˜-Ñ'Ð'rA   rü   ©rB   rC   rD   rl   rœ   rN   rO   s   @r@   rA  rA  ,  s   ø„ ð
 Øõsö.(rA   rA  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚJanusVQVAEAttnBlockc                 óÈ  •— t         ‰| �  «        || _        t        j                  j                  d|dd¬«      | _        t        j                  j                  ||ddd¬«      | _        t        j                  j                  ||ddd¬«      | _	        t        j                  j                  ||ddd¬«      | _
        t        j                  j                  ||ddd¬«      | _        y )NrC  rD  TrE  r    r   rH  )r2   rl   rf   r9   r   rJ  Únormrq   ÚqÚkÚvÚproj_out©r=   rf   r?   s     €r@   rl   zJanusVQVAEAttnBlock.__init__Y  s·   ø€ Ü‰ÑÔØ&ˆÔä—H‘H×&Ñ&°"À;ÐTXÐaeÐ&ÓfˆŒ	Ü—‘—‘ ¨kÀqÐQRÐ\]�Ó^ˆŒÜ—‘—‘ ¨kÀqÐQRÐ\]�Ó^ˆŒÜ—‘—‘ ¨kÀqÐQRÐ\]�Ó^ˆŒÜŸ™Ÿ™¨°[ÈaÐXYÐcd˜Óeˆ�rA   c                 ót  — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|j                  \  }}}}	|j                  ||||	z  «      j                  ddd«      }|j                  ||||	z  «      }t        j                  ||«      }
|
t        |«      dz  z  }
t        j                  |
d¬«      }
|j                  ||||	z  «      }|
j                  ddd«      }
t        j                  ||
«      j                  ||||	«      }| j                  |«      }||z   S )Nr   r   r    r¾   r/  )rW  rX  rY  rZ  r;   r‡   rˆ   r9   Úbmmrž   r;  r³   r[  )r=   r[   rø   rÜ   r¶   r·   rÚ   Úchannelsr{   r|   r¸   r¹   s               r@   rœ   zJanusVQVAEAttnBlock.forwardc  s5  € Ø ˆØŸ	™	 -Ó0ˆØ—v‘v˜mÓ,ˆØ—V‘V˜MÓ*ˆ
Ø—v‘v˜mÓ,ˆð /;×.@Ñ.@Ñ+ˆ
�H˜f eØ#×+Ñ+¨J¸À&È5Á.ÓQ×YÑYÐZ[Ð]^Ð`aÓbˆØ×'Ñ'¨
°H¸fÀu¹nÓMˆ
Ü—y‘y ¨zÓ:ˆØ#¤s¨8£}¸Ñ'>Ñ?ˆÜ—y‘y °1Ô5ˆð $×+Ñ+¨J¸À&È5Á.ÓQˆØ#×+Ñ+¨A¨q°!Ó4ˆÜ—i‘i ¨lÓ;×CÑCÀJÐPXÐZ`ÐbgÓhˆà—m‘m KÓ0ˆØ˜+Ñ%Ð%rA   rS  rO   s   @r@   rU  rU  X  s   ø„ ôfö&rA   rU  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚJanusVQVAEConvDownsamplec                 ó`   •— t         ‰| �  «        t        j                  ||ddd¬«      | _        y )Nr   r   r   rH  )r2   rl   r   rq   Úconvr\  s     €r@   rl   z!JanusVQVAEConvDownsample.__init__|  s'   ø€ Ü‰ÑÔÜ—I‘I˜k¨;ÀAÈaÐYZÔ[ˆ�	rA   c                 óZ   — t        j                  |ddd¬«      }| j                  |«      }|S )N)r   r    r   r    Úconstantr   )Úpadr�   r©   )r;  rf  rc  rí   s     r@   rœ   z JanusVQVAEConvDownsample.forward€  s+   € äŸ™˜m°ÀJÐVWÔXˆØŸ	™	 -Ó0ˆØÐrA   rS  rO   s   @r@   ra  ra  {  s   ø„ ô\örA   ra  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚJanusVQVAEConvUpsamplec                 ót   •— t         ‰| �  «        t        j                  j	                  ||ddd¬«      | _        y )Nr   r    rH  )r2   rl   r9   r   rq   rc  r\  s     €r@   rl   zJanusVQVAEConvUpsample.__init__ˆ  s.   ø€ Ü‰ÑÔÜ—H‘H—O‘O K°È!ÐTUÐ_`�OÓaˆ�	rA   c                 óX   — t        j                  |dd¬«      }| j                  |«      }|S )Ng       @Únearest)Úscale_factorr�   )r;  rŠ   rc  rí   s     r@   rœ   zJanusVQVAEConvUpsample.forwardŒ  s(   € ÜŸ™ mÀ#ÈIÔVˆØŸ	™	 -Ó0ˆØÐrA   rS  rO   s   @r@   rh  rh  ‡  s   ø„ ôbörA   rh  c                   ó`   ‡ — e Zd Zdedefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚJanusVQVAEMidBlockr&   r_  c                 óŽ   •— t         ‰| �  «        t        |||¬«      | _        t	        |«      | _        t        |||¬«      | _        y )N©r&   rf   rg   )r2   rl   rA  Úblock_1rU  Úattn_1Úblock_2)r=   r&   r_  r?   s      €r@   rl   zJanusVQVAEMidBlock.__init__“  sF   ø€ Ü‰ÑÔÜ,ØØ Ø!ô
ˆŒô
 *¨(Ó3ˆŒÜ,ØØ Ø!ô
ˆ�rA   r[   r}   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rß   )rq  rr  rs  rí   s     r@   rœ   zJanusVQVAEMidBlock.forward¡  s2   € ØŸ™ ]Ó3ˆØŸ™ MÓ2ˆØŸ™ ]Ó3ˆØÐrA   )
rB   rC   rD   r#   rž   rl   r9   r�   rœ   rN   rO   s   @r@   rn  rn  ’  s2   ø„ ð
Ð/ð 
¸3õ 
ð U§\¡\ð °e·l±l÷ rA   rn  c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚJanusVQVAEEncoderc           	      ó¢  •— t         ‰| �  «        t        |j                  «      | _        |j
                  | _        |j                  }|j                  }|j                  }|j                  }|j                  }t        j                  j                  ||ddd¬«      | _        dt        |«      z   }|| _        t        j                   «       | _        t%        | j                  «      D �]   }t        j                   «       }	t        j                   «       }
|||   z  }|||   z  }t%        | j
                  «      D ]N  }|	j'                  t)        |||¬«      «       |}|| j                  dz
  k(  sŒ5|
j'                  t+        |«      «       ŒP t        j,                  «       }|	|_        |
|_        || j                  dz
  k7  rt3        |«      |_        | j"                  j'                  |«       �Œ t7        |«      | _        t        j                  j;                  d|dd¬	«      | _        t        j                  j                  ||rd
|z  n|ddd¬«      | _        y )Nr   r    rH  )r    rp  rC  rD  TrE  r   ) r2   rl   ÚlenÚchannel_multiplierÚnum_resolutionsÚnum_res_blocksÚbase_channelsrf   Údouble_latentÚlatent_channelsr9   r   rq   Úconv_inr^   Úin_channel_multiplierrý   Údownrþ   ÚappendrA  rU  ÚModuleÚblockÚattnra  Ú
downsamplern  ÚmidrJ  Únorm_outÚconv_out)r=   r&   r|  rf   r}  r~  ry  r€  Úi_levelr„  r…  Úblock_inÚ	block_outÚi_blockr�  r?   s                  €r@   rl   zJanusVQVAEEncoder.__init__©  s  ø€ Ü‰ÑÔä" 6×#<Ñ#<Ó=ˆÔØ$×3Ñ3ˆÔØ×,Ñ,ˆØ×(Ñ(ˆØ×,Ñ,ˆØ ×0Ñ0ˆØ#×6Ñ6Ðä—x‘x—‘ {°MÈqÐYZÐde�ÓfˆŒà $¤uÐ-?Ó'@Ñ @ÐØ%:ˆÔ"Ü—M‘M“OˆŒ	Ü˜T×1Ñ1Ó2ó 	#ˆGÜ—M‘M“OˆEÜ—=‘=“?ˆDØ$Ð'<¸WÑ'EÑEˆHØ%Ð(:¸7Ñ(CÑCˆIÜ  ×!4Ñ!4Ó5ò 
?�Ø—‘Ü)Ø%Ø$,Ø%.ôôð %�Ø˜d×2Ñ2°QÑ6Ó6Ø—K‘KÔ 3°HÓ =Õ>ð
?ô —9‘9“;ˆDØˆDŒJØˆDŒIØ˜$×.Ñ.°Ñ2Ò2Ü":¸8Ó"D�”Ø�I‰I×Ñ˜TÖ"ð-	#ô0 & f¨hÓ7ˆŒäŸ™×*Ñ*°bÀxÐUYÐbfÐ*ÓgˆŒÜŸ™Ÿ™ØÙ#0ˆA�Ò°oØØØð (ó 
ˆ�rA   r’   c                 ó²  — | j                  |«      g}t        | j                  «      D ]Ü  }t        | j                  «      D ]  } | j                  |   j
                  |   |d   «      }t        | j                  |   j                  «      dkD  r" | j                  |   j                  |   |«      }|j                  |«       Œ� || j                  dz
  k7  sŒ­|j                  | j                  |   j                  |d   «      «       ŒÞ |d   }| j                  |«      }| j                  |«      }|t        j                  |«      z  }| j                  |«      }|S )Nr0   r   r    )r  rþ   rz  r{  r�  r„  rx  r…  r‚  r†  r‡  rˆ  r9   rR  r‰  )r=   r’   r[   rŠ  r�  r,  rZ   s          r@   rœ   zJanusVQVAEEncoder.forwardÜ  sT  € àŸ™ lÓ3Ð4ˆÜ˜T×1Ñ1Ó2ò 		WˆGÜ  ×!4Ñ!4Ó5ò 3�Ø@˜tŸy™y¨Ñ1×7Ñ7¸Ñ@Ø! "Ñ%ó �ô �t—y‘y Ñ)×.Ñ.Ó/°!Ò3Ø#C 4§9¡9¨WÑ#5×#:Ñ#:¸7Ñ#CÀLÓ#Q�LØ×$Ñ$ \Õ2ð3ð ˜$×.Ñ.°Ñ2Ó2Ø×$Ñ$ T§Y¡Y¨wÑ%7×%BÑ%BÀ=ÐQSÑCTÓ%UÕVð		Wð *¨"Ñ-ÐØ ŸH™HÐ%6Ó7Ðð !ŸM™MÐ*;Ó<ÐØœUŸ]™]Ð+<Ó=Ñ=ÐØ ŸM™MÐ*;Ó<ÐØ Ð rA   )rB   rC   rD   rl   r9   r?  rœ   rN   rO   s   @r@   rv  rv  ¨  s   ø„ ô1
ðf! E×$4Ñ$4÷ !rA   rv  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚJanusVQVAEDecoderc           	      óv  •— t         ‰| �  «        t        |j                  «      | _        |j
                  | _        |j                  }|j                  }|j                  }||j                  | j                  dz
     z  }t        j                  j                  ||ddd¬«      | _        t        ||«      | _        t        j                  «       | _        t#        t%        | j                  «      «      D ]÷  }t        j                  «       }t        j                  «       }||j                  |   z  }	t%        | j
                  dz   «      D ]N  }
|j'                  t)        |||	¬«      «       |	}|| j                  dz
  k(  sŒ5|j'                  t+        |«      «       ŒP t        j,                  «       }||_        ||_        |dk7  rt3        |«      |_        | j                   j'                  |«       Œù t        j                  j7                  d|dd¬	«      | _        t        j                  j                  ||ddd¬«      | _        y )
Nr    r   rH  rp  r   rC  rD  TrE  )r2   rl   rx  ry  rz  r{  r|  r~  rg   r9   r   rq   r  rn  r‡  rý   ÚupÚreversedrþ   r‚  rA  rU  rƒ  r„  r…  rh  ÚupsamplerJ  rˆ  r‰  )r=   r&   r|  r~  rg   r‹  rŠ  r„  r…  rŒ  r�  r’  r?   s               €r@   rl   zJanusVQVAEDecoder.__init__ö  sç  ø€ Ü‰ÑÔä" 6×#<Ñ#<Ó=ˆÔØ$×3Ñ3ˆÔØ×,Ñ,ˆØ ×0Ñ0ˆØ×*Ñ*ˆð ! 6×#<Ñ#<¸T×=QÑ=QÐTUÑ=UÑ#VÑVˆô —x‘x—‘ ¸ÈaÐXYÐcd�ÓeˆŒô & f¨hÓ7ˆŒô —-‘-“/ˆŒÜ¤ d×&:Ñ&:Ó ;Ó<ò 	ˆGÜ—M‘M“OˆEÜ—=‘=“?ˆDØ%¨×(AÑ(AÀ'Ñ(JÑJˆIÜ  ×!4Ñ!4°qÑ!8Ó9ò 
?�Ø—‘Ü)Ø%Ø$,Ø%.ôôð %�Ø˜d×2Ñ2°QÑ6Ó6Ø—K‘KÔ 3°HÓ =Õ>ð
?ô —‘“ˆBØˆBŒHØˆBŒGØ˜!Š|Ü4°XÓ>�”Ø�G‰G�N‰N˜2Õð)	ô. Ÿ™×*Ñ*°bÀxÐUYÐbfÐ*ÓgˆŒÜŸ™Ÿ™¨°,ÈAÐVWÐab˜Ócˆ�rA   r,  r}   c                 ób  — | j                  |«      }| j                  |«      }t        | j                  «      D ]º  }t        | j                  dz   «      D ]l  } | j
                  |   j                  |   |«      }t        | j
                  |   j                  «      dkD  sŒK | j
                  |   j                  |   |«      }Œn || j                  dz
  k7  sŒ�| j
                  |   j                  |«      }Œ¼ | j                  |«      }|t        j                  |«      z  }| j                  |«      }|S )Nr    r   )r  r‡  rþ   rz  r{  r’  r„  rx  r…  r”  rˆ  r9   rR  r‰  )r=   r,  rŠ  r�  s       r@   rœ   zJanusVQVAEDecoder.forward$  s   € Ø—|‘| LÓ1ˆð —x‘x Ó-ˆô ˜T×1Ñ1Ó2ò 	GˆGÜ  ×!4Ñ!4°qÑ!8Ó9ò P�Ø>˜tŸw™w wÑ/×5Ñ5°gÑ>¸|ÓL�Ü�t—w‘w˜wÑ'×,Ñ,Ó-°Ó1Ø#A 4§7¡7¨7Ñ#3×#8Ñ#8¸Ñ#AÀ,Ó#O‘LðPð ˜$×.Ñ.°Ñ2Ó2Ø#Ÿw™w wÑ/×8Ñ8¸ÓF‘ð	Gð —}‘} \Ó2ˆØœŸ™ lÓ3Ñ3ˆØ—}‘} \Ó2ˆØÐrA   )rB   rC   rD   rl   r9   rV   rœ   rN   rO   s   @r@   r�  r�  õ  s)   ø„ ô,dð\ E×$5Ñ$5ð ¸%×:KÑ:K÷ rA   r�  c                   óŠ   — 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<   y)ÚJanusVQVAEModelOutputa­  
    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_stater9  rT   )
rB   rC   rD   rU   r˜  r9   rV   rE   r9  rT   rW   rA   r@   r—  r—  9  sJ   … ñð =AÐ ×!2Ñ!2°TÑ!9Ó@Ø-1€L�%×#Ñ# dÑ*Ó1Ø/3€N�E×%Ñ%¨Ñ,Ô3rA   r—  aS  
    The VQ-VAE model used in Janus 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).
    c                   ó*  ‡ — e Zd ZU eed<   g d¢ZeedœZdZ	defˆ fd„Z
eedej                  dee   defd„«       «       Zd	ej                  dej&                  fd
„Zeedej&                  deej&                  ej&                  f   fd„«       «       Zˆ xZS )Ú
JanusVQVAEr&   )rU  rA  r$  r  r’   c                 óº  •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        t        j                  j                  |j                  |j                  d«      | _        t        j                  j                  |j                  |j                  d«      | _        | j                  «        t        |«      | _        d| _        | j#                  «        y )Nr    F)r2   rl   rv  r
  r$  Úquantizer9   r   rq   r~  rn   Ú
quant_convÚpost_quant_convÚevalr�  Údecoderr  r  ry   s     €r@   rl   zJanusVQVAE.__init___  sš   ø€ Ü‰Ñ˜Ô ä(¨Ó0ˆŒÜ1°&Ó9ˆŒÜŸ(™(Ÿ/™/¨&×*@Ñ*@À&×BRÑBRÐTUÓVˆŒÜ$Ÿx™xŸ™¨v×/?Ñ/?À×AWÑAWÐYZÓ[ˆÔØ�	‰	ŒÜ(¨Ó0ˆŒØ&+ˆÔ#Ø�‰ÕrA   r­   r}   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      \  }}}t        ||||¬«      S )N)rZ   r˜  r9  rT   )r
  r�  rœ  r—  )r=   r’   r­   r[   Úconv_hidden_statesr˜  Úemb_lossÚindicess           r@   ÚencodezJanusVQVAE.encodek  sQ   € ð Ÿ™ \Ó2ˆØ!Ÿ_™_¨]Ó;ÐØ9=¿¹ÐGYÓ9ZÑ6Ð# X¨wÜ$Ø+Ø(CØ Ø#ô	
ð 	
rA   r9  c                 ó   — |j                   d   | j                  j                  d   | j                  j                  d   z  k7  rMt        d| j                  j                  d   | j                  j                  d   z  › d|j                   › d�«      ‚| j                  j	                  |«      }| j                  |«      }| j                  |«      }|S )aG  
        Decodes quantized token IDs into pixel values.
        Args:
            image_tokens (torch.LongTensor): Batch of token IDs.
        Returns:
            pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
                Pixel values decoded from the token IDs.
        r    r   z4Expected `image_tokens` to have shape `(batch_size, z)`, but got shape `z`.)r;   rœ  r+  rÃ   r>  rž  r   )r=   r9  Úcodebook_entryr[   r’   s        r@   ÚdecodezJanusVQVAE.decodex  sã   € ð ×Ñ˜aÑ  D§M¡M×$BÑ$BÀ1Ñ$EÈÏÉ×HfÑHfÐghÑHiÑ$iÒiÜØFÀtÇ}Á}×GeÑGeÐfgÑGhÐko×kxÑkx÷  lJñ  lJð  KLñ  lMñ  HMð  GNð N"Ø".×"4Ñ"4Ð!5°Rð9óð ð Ÿ™×9Ñ9¸,ÓGˆØ×,Ñ,¨^Ó<ˆØ—|‘| MÓ2ˆØÐrA   c                 óÌ   — |j                   d   } | j                  |fddi|¤Ž}| j                  |j                  j	                  |d«      «      }t        ||j                  «      S )Nr   Úreturn_dictTr0   )r;   r¥  r¨  r9  r‹   rR   rT   )r=   r’   r­   rÚ   Úencode_outputsrS   s         r@   rœ   zJanusVQVAE.forward‹  se   € ð "×'Ñ'¨Ñ*ˆ
Ø$˜Ÿ™ \ÑN¸tÐNÀvÑNˆØ#Ÿ{™{¨>×+FÑ+F×+KÑ+KÈJÐXZÓ+[Ó\ÐäÐ 4°n×6SÑ6SÓTÐTrA   )rB   rC   rD   r#   rE   rI   rA  rU  r  r  rl   r   r   r9   r?  r   r   r—  r¥  rV   r¨  r   r   r^   rœ   rN   rO   s   @r@   rš  rš  J  sâ   ø… ð ÓòÐð /Ø)ñÐð %€Oð
Ð/õ 
ð  Øð	
 5×#3Ñ#3ð 	
¸vÐFXÑ?Yð 	
Ð^sò 	
ó ó  ð	
ð 5×#3Ñ#3ð ¸×8IÑ8Ió ð& Øð	Uà×'Ñ'ð	Uð 
ˆu× Ñ  %×"3Ñ"3Ð3Ñ	4ò		Uó ó ô	UrA   rš  c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚJanusVQVAEAlignerMLPr&   c           	      ó‚  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  t        d|j                  «      D �cg c],  }t        j                  |j
                  |j
                  «      ‘Œ. c}«      | _
        t        |j                     | _        y c c}w r  )r2   rl   r   rÉ   rn   r  rç   rý   rþ   rÿ   r  r   rå   ræ   r  s      €r@   rl   zJanusVQVAEAlignerMLP.__init__š  sŒ   ø€ Ü‰ÑÔä—9‘9˜V×-Ñ-¨v×/DÑ/DÓEˆŒÜŸ]™]ÜNSÐTUÐW]×WoÑWoÓNpÖqÈŒR�Y‰Y�v×,Ñ,¨f×.CÑ.CÕDÒqó
ˆÔô $ F×$5Ñ$5Ñ6ˆÕùò rr  c                 ó|   — | j                  |«      }| j                  D ]  }| j                  |«      } ||«      }Œ |S rß   r  r   s      r@   rœ   zJanusVQVAEAlignerMLP.forward£  r"  rA   )rB   rC   rD   r#   rl   rœ   rN   rO   s   @r@   r­  r­  ™  s   ø„ ð7Ð/õ 7örA   r­  c                   ó`   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  fd„Z	ˆ xZ
S )ÚJanusVQVAEHeadzOHead used for sampling tokens in image generation, replacing the usual lm head.r&   c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                     | _	        t        j                  |j
                  |j                  «      | _        y rß   )r2   rl   r   rÉ   Úimage_token_embed_dimr  r[  r   rå   ræ   r'  Úvision_headry   s     €r@   rl   zJanusVQVAEHead.__init__®  s^   ø€ Ü‰ÑÔÜŸ	™	 &×">Ñ">À×@UÑ@UÓVˆŒÜ# F×$5Ñ$5Ñ6ˆÔÜŸ9™9 V×%:Ñ%:¸F×<QÑ<QÓRˆÕrA   r[   r}   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rß   )r[  ræ   r´  rí   s     r@   rœ   zJanusVQVAEHead.forward´  s6   € ØŸ™ mÓ4ˆØ×*Ñ*¨=Ó9ˆØ×(Ñ(¨Ó7ˆØÐrA   )rB   rC   rD   rU   r#   rl   r9   r�   Útensorrœ   rN   rO   s   @r@   r±  r±  «  s0   ø„ ÙYðSÐ/õ Sð U§\¡\ð °e·l±l÷ rA   r±  zl
    The Janus model which consists of a siglip vision backbone, a Llama language model and a VQ model.
    c                   ó¶  ‡ — e Zd Zdefˆ fd„Zee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	 	 	 	 	 	 	 	 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j                   z  defd„«       «       Zˆ xZS )Ú
JanusModelr&   c                 óÀ  •— t         ‰| �  |«       || _        t        j	                  |j
                  «      | _        t        | j                  j                  «      | _        t        j	                  |j                  «      | _        t        j                  | j                  j                  j                  | j                  j                  j                  «      | _        t#        | j                  j                  «      | _        t'        | j                  j                  «      | _        t+        j,                  |j.                  ¬«      | _        d| _        | j5                  «        y )N)r&   F)r2   rl   r&   r  Ú_from_configÚvision_configÚvision_modelr  Úalignerrš  Ú	vq_configÚvqmodelr   rv   r'  rn   Úgeneration_embeddingsr­  Úgeneration_alignerr±  Úgeneration_headr   Úfrom_configÚtext_configÚlanguage_modelr  r  ry   s     €r@   rl   zJanusModel.__init__Á  sñ   ø€ Ü‰Ñ˜Ô ØˆŒä,×9Ñ9¸&×:NÑ:NÓOˆÔÜ,¨T×->Ñ->×-EÑ-EÓFˆŒä!×.Ñ.¨v×/?Ñ/?Ó@ˆŒô &(§\¡\°$·,±,×2EÑ2E×2TÑ2TÐVZ×VbÑVb×ViÑVi×VsÑVsÓ%tˆÔ"Ü"6°t·|±|×7JÑ7JÓ"KˆÔÜ-¨d¯l©l×.AÑ.AÓBˆÔä'×3Ñ3¸6×;MÑ;MÔNˆÔà&+ˆÔ#à�‰ÕrA   r’   r­   r}   c                 óp   —  | j                   |fddi|¤Ž}| j                  |j                  «      |_        |S )Nrª  T)r¼  r½  rZ   r  )r=   r’   r­   Úvision_outputss       r@   Úget_image_featureszJanusModel.get_image_featuresÖ  s=   € ð
 +˜×*Ñ*¨<ÑTÀTÐTÈVÑTˆØ'+§|¡|°N×4TÑ4TÓ'UˆÔ$àÐrA   Ú	input_idsr  Úimage_featuresc                 ó.  — |€m| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  }|j                  d«      }n|| j                  j                  k(  }|j                  «       }|j                  d   |j                  d   z  }|j                  d«      j                  |j                  «      }t        ||j                  d   z  |j                  «       k(  d|› d|› �«       |S )zï
        Obtains multimodal placeholder mask from `input_ids` or `inputs_embeds`, and checks that the placeholder token count is
        equal to the length of multimodal features. If the lengths are different, an error is raised.
        ©r”   Údevicer0   r   r    z6Image features and image tokens do not match, tokens: z, features: )r  r9   r¶  r&   Úimage_token_idÚlongrÍ  Úallr0  r;   r†   r•   r   Únumel)r=   rÉ  r  rÊ  Úspecial_image_maskÚn_image_tokensÚn_image_featuress          r@   Úget_placeholder_maskzJanusModel.get_placeholder_maskà  s  € ð ÐØ!.Ð2M°$×2KÑ2KÓ2MÜ—‘˜TŸ[™[×7Ñ7¼u¿z¹zÐR_×RfÑRfÔgó3ñ "Ðð "4×!7Ñ!7¸Ó!;Ñà!*¨d¯k©k×.HÑ.HÑ!HÐà+×/Ñ/Ó1ˆØ)×/Ñ/°Ñ2°^×5IÑ5IÈ!Ñ5LÑLÐØ/×9Ñ9¸"Ó=×@Ñ@À×AUÑAUÓVÐÜØ˜]×0Ñ0°Ñ4Ñ4¸×8LÑ8LÓ8NÑNØDÀ^ÐDTÐT`ÐaqÐ`rÐsô	
ð "Ð!rA   Nrª   r8   r-   Ú	use_cacheÚlogits_to_keepc	           
      ó"  — |d u |d uz  rt        d«      ‚|€ | j                  «       |«      }|�ˆ| j                  |d¬«      j                  }
|
j	                  d|j
                  d   «      }|j                  |j                  |j                  «      }| j                  |||¬«      }|j                  ||«      } | j                  d||||||dœ|	¤Ž}t        |j                  |j                  |j                  |j                   |�
¬«      S d ¬«      S )	NzaYou cannot specify both input_ids and inputs_embeds at the same time, and must specify either oneT)rª  r0   )r  rÊ  )r  rª   r8   r-   rÖ  r×  )rZ   r-   r[   r\   r]   rW   )rÃ   r  rÈ  r  r‡   r;   r•   rÍ  r”   rÕ  Úmasked_scatterrÅ  rY   rZ   r-   r[   r\   )r=   rÉ  r’   rª   r8   r-   r  rÖ  r×  r­   Úimage_embedsrÊ  Úimage_attention_maskÚ	lm_outputs                 r@   rœ   zJanusModel.forwardø  sP  € ð ˜Ð -°tÐ";Ò<ÜØsóð ð Ð Ø7˜D×5Ñ5Ó7¸	ÓBˆMàÐ#Ø×2Ñ2°<ÈTÐ2ÓR×`Ñ`ˆLØ)×1Ñ1°"°m×6IÑ6IÈ"Ñ6MÓNˆNØ+×.Ñ.¨}×/CÑ/CÀ]×EXÑEXÓYˆNØ#'×#<Ñ#<Ø¨À~ð $=ó $Ð ð *×8Ñ8Ð9MÈ~Ó^ˆMà'�D×'Ñ'ð 
Ø'Ø)Ø%Ø+ØØ)ñ
ð ñ
ˆ	ô ,Ø'×9Ñ9Ø%×5Ñ5Ø#×1Ñ1Ø ×+Ñ+Ø0<Ð0H ô
ð 	
ð
 OSô
ð 	
rA   )NNNNNNNr   )rB   rC   rD   r!   rl   r   r   r9   rV   r   r   r^   r   rÈ  r?  rÕ  r�   r	   rŸ   rž   rY   rœ   rN   rO   s   @r@   r¸  r¸  »  sX  ø„ ð˜{õ ð* ØðØ!×-Ñ-ðØ9?Ð@RÑ9Sðà	Ð+Ñ	+òó ó ðð"Ø×)Ñ)ð"Ø:?×:KÑ:Kð"Ø]b×]nÑ]nó"ð0 Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø!%Ø-.ñ,
à×#Ñ# dÑ*ð,
ð ×'Ñ'¨$Ñ.ð,
ð Ÿ™ tÑ+ð	,
ð
 ×&Ñ&¨Ñ-ð,
ð  ™ð,
ð ×(Ñ(¨4Ñ/ð,
ð ˜$‘;ð,
ð ˜eŸl™lÑ*ð,
ð 
&ò,
ó ó ô,
rA   r¸  c                   óJ  ‡ — e Zd ZddiZdZdZdefˆ fd„Z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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fd„«       «       Z	 	 	 	 	 	 dˆ fd„	Zdej                  fd„Z ej0                  «       	 	 	 ddej                  d
z  dej                  d
z  ded
z  fˆ fd„«       Zˆ xZS )ÚJanusForConditionalGenerationzlm_head.weightz(model.language_model.embed_tokens.weightr(   Tr&   c                 óü   •— t         ‰| �  |«       || _        t        |«      | _        t        j                  |j                  j                  |j                  j                  d¬«      | _
        | j                  «        y )NFr¿   )r2   rl   r&   r¸  r'   r   rÉ   rÄ  rm   Ú
vocab_sizeÚlm_headr  ry   s     €r@   rl   z&JanusForConditionalGeneration.__init__.  s\   ø€ Ü‰Ñ˜Ô ØˆŒÜ Ó'ˆŒ
Ü—y‘y ×!3Ñ!3×!?Ñ!?À×ASÑAS×A^ÑA^ÐejÔkˆŒð 	�‰ÕrA   Úinputsr}   c                 ór   — | j                   j                  |«      }| j                   j                  |«      }|S rß   )r'   rÀ  rÁ  )r=   râ  r,  s      r@   Ú'prepare_embeddings_for_image_generationzEJanusForConditionalGeneration.prepare_embeddings_for_image_generation7  s0   € Ø—z‘z×7Ñ7¸Ó?ˆØ—z‘z×4Ñ4°\ÓBˆØÐrA   NrÉ  r’   rª   r8   r-   r  ÚlabelsrÖ  r×  r­   c
                 ó¤  —  | j                   d|||||||dœ|
¤Ž}|j                  }t        |	t        «      rt	        |	 d«      n|	}| j                  |dd…|dd…f   «      }d}|�4 | j                  d||| j                  j                  j                  dœ|
¤Ž}t        |||j                  |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]`.
        )rÉ  r’   rª   r8   r-   r  rÖ  N)rb   rå  rà  )ra   rb   r-   r[   r\   r]   rW   )r'   rZ   r4   rž   Úslicerá  Úloss_functionr&   rÄ  rà  r`   r-   r[   r\   r]   )r=   rÉ  r’   rª   r8   r-   r  rå  rÖ  r×  r­   Úoutputsr[   Úslice_indicesrb   ra   s                   r@   rœ   z%JanusForConditionalGeneration.forward<  sô   € ð* �$—*‘*ð 	
ØØ%Ø)Ø%Ø+Ø'Øñ	
ð ñ	
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ð Ø f¸¿¹×9PÑ9P×9[Ñ9[ñØ_eñˆDô +ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø '× ;Ñ ;ô
ð 	
rA   c           	      óf   •— t        ‰
| �  |f|||||dœ|¤Ž}	|s|j                  dd«      s||	d<   |	S )N)r-   r  rª   r×  Úis_first_iterationrÖ  Tr’   )r2   Úprepare_inputs_for_generationÚget)r=   rÉ  r’   r-   rª   r  r×  rì  r­   Úmodel_inputsr?   s             €r@   rí  z;JanusForConditionalGeneration.prepare_inputs_for_generationo  sW   ø€ ô ‘wÑ<Øð
à+Ø'Ø)Ø)Ø1ñ
ð ñ
ˆñ  V§Z¡Z°¸TÔ%BØ+7ˆL˜Ñ(àÐrA   r9  c                 óx   — | j                   j                  j                  |«      }|j                  dddd«      }|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.
        r   r   r   r    )r'   r¿  r¨  rˆ   )r=   r9  Údecoded_images      r@   Údecode_image_tokensz1JanusForConditionalGeneration.decode_image_tokens�  s:   € ð Ÿ
™
×*Ñ*×1Ñ1°,Ó?ˆØ%×-Ñ-¨a°°A°qÓ9ˆØÐrA   Úlogits_processorc           	      ó.  •— |j                  dd«      } | j                  |j                  dd «      fi |¤Ž\  }}|dk(  rt        ‰%| �  d|||d dœ|¤ŽS |j	                  «       t
        j                  t
        j                  fvrt        d«      ‚|j                  «        | j                  |j                  «       «       |�|n	t        «       }d|d<   |j                  €t        j                  d«       d	|_        |j                  |d
<   | j!                  ||j"                  |«      \  }}	}|j$                  |j&                  }}
t)        |j*                  «      dk7  rt        d|j*                  › d�«      ‚|d u}| j-                  |||j&                  ¬«       |j                  r:|j                  dkD  r+|j/                  t1        |j                  «      «       d |_        | j3                  ||j*                  d   |d ||¬«      } | j4                  d|||j6                  dœ|¤Ž\  }}| j8                  j:                  j<                  j>                  }|j*                  \  }}|jA                  dd«      }|j                  dd «      }|jA                  dd«      }||d<   ||d …d d …f   |j"                  k7  ||d …d d …f   |jB                  d   k7  z  }||d …d d …f   jE                  ||jF                  «        | jI                  «       |«      }|jK                  dd «      €@| jM                  |jN                  xs d|dz  tQ        |jR                  ||z   «      |¬«      |d<   tU        jV                  ||f|
|¬«      }|jX                  }|jZ                  }|j\                  }|j^                  }|j`                  }|r|rdnd }|r|rdnd }|r|rdnd }|r|rdnd }tc        |«      D �]\  } | jd                  d||ddœ|¤Ž}d|v r!|d   jg                  |j&                  «      |d<    | j8                  jh                  di |¤||dœ¤Ž}| jk                  ||«      }|jl                  d d …dd d …f   jo                  «       } | j8                  jq                  | «      }! |||!«      }"|jr                  r>tU        jt                  |"d¬«      }#tU        jv                  |#d¬«      jy                  d«      }$ntU        jz                  |"d¬«      }$|$|d d …|f<   tU        j|                  |$|$g«      }$|$j                  d«      }$| j�                  |$«      }�Œ_ |r@|r|!fz  }|r| jƒ                  «       fz  }|r|j„                  z  }|r|j†                  z  }|rt‰        |!|||jŠ                  ¬«      S |S )NÚgeneration_moder*   Úgeneration_config)râ  rª   rö  Úguidance_scalez’Got incompatible mode for Image Generation, should be one of greedy or sampling. Ensure that beam search is de-activated by setting `num_beams=1`.TrÖ  zU`guidance_scale` is required for CFG but not provided. Setting to default value of 5.é   r÷  r   z;Expected input ids of shape (batch_size, seq_len), but got z3Passing `inputs embeds` is not supported currently.)rÍ  r    )rö  Úinput_ids_seq_lengthÚencoder_input_idsÚprefix_allowed_tokens_fnró  rÍ  )rÉ  rª   Úexpand_sizerª   Úboi_token_idr-   Ústatic)Úcache_implementationrÚ   Úmax_cache_lenÚmodel_kwargsrÌ  rW   )r  rÉ  rì  )Úoutput_attentionsÚoutput_hidden_statesr0   r/  )Únum_samples)Ú	sequencesÚscoresrb   r\   r[   r-   )FÚpopÚ_prepare_generation_configr2   ÚgenerateÚget_generation_moder   ÚSAMPLEÚGREEDY_SEARCHrÃ   ÚvalidateÚ_validate_model_kwargsÚcopyr   r÷  ÚloggerÚwarningÚ_prepare_model_inputsÚbos_token_idr”   rÍ  rx  r;   Ú_prepare_special_tokensr‚  r
   Ú_get_logits_processorÚ_expand_inputs_for_generationÚnum_return_sequencesr'   r¼  r&   Únum_image_tokensÚrepeatÚgeneration_kwargsÚmasked_fill_Úpad_token_idr  rî  Ú_prepare_static_cacherÿ  ÚmaxÚ
max_lengthr9   Úzerosr  r  Úoutput_scoresÚoutput_logitsÚreturn_dict_in_generaterþ   rí  r•   rÅ  Ú#_update_model_kwargs_for_generationrZ   ÚclonerÂ  Ú	do_sampler³   ÚmultinomialÚsqueezeÚargmaxÚcatr†   rä  Úfloatr\   r[   r   r-   )&r=   râ  rª   ró  r­   rõ  rö  r  rÉ  Úmodel_input_namer”   rÍ  Úkwargs_has_attention_maskr  rÚ   rÛ   Úinput_tokensÚmaskr  Úgenerated_tokensr  r  r!  r"  r#  Ú
raw_scoresÚ
raw_logitsÚdecoder_hidden_statesÚdecoder_attentionsÚirï  ré  r,  r  Únext_token_scoresÚprobsÚ
next_tokenr?   s&                                        €r@   r	  z&JanusForConditionalGeneration.generate›  sF  ø€ ð !Ÿ*™*Ð%6¸Ó?ˆØ*I¨$×*IÑ*IØ�J‰JÐ*¨DÓ1ñ+
Ø5;ñ+
Ñ'Ð˜<ð
 ˜fÒ$ä‘7Ñ#ð ØØ-Ø"3Ø#ñ	ð
 ñð ð ×0Ñ0Ó2¼>×;PÑ;PÔR`×RnÑRnÐ:oÑoÜðTóð ð 	×"Ñ"Ô$Ø×#Ñ# L×$5Ñ$5Ó$7Ô8ð 0@Ð/KÑ+ÔQdÓQfÐð %)ˆ�[Ñ!à×+Ñ+Ð3Ü�N‰NÐrÔsØ/0ÐÔ,Ø):×)IÑ)IˆÐ%Ñ&ð 59×4NÑ4NØÐ%×2Ñ2°Ló5
Ñ1ˆ	Ð# \ð "Ÿ™¨×)9Ñ)9ˆvˆäˆy�‰Ó 1Ò$ÜØMÈiÏoÉoÐM^ØEðFóð ð %3¸$Ð$>Ð!Ø×$Ñ$Ð%6Ð8QÐZc×ZjÑZjÐ$Ôkð ×+Ò+Ð0A×0PÑ0PÐSTÒ0TØ×#Ñ#Ô$IÐJ[×JjÑJjÓ$kÔlØ/3ÐÔ,ð  ×5Ñ5Ø/Ø!*§¡°Ñ!3Ø'Ø%)Ø-Øð 6ó 
Ðð #E $×"DÑ"Dð #
ØØ)Ø)×>Ñ>ñ#
ð ñ	#
Ñˆ	�<ð  Ÿ:™:×2Ñ2×9Ñ9×JÑJÐØ'Ÿo™oÑˆ
�Gà ×'Ñ'¨¨1Ó-ˆØ%×)Ñ)Ð*:¸DÓAˆØ'×.Ñ.¨q°!Ó4ˆØ)7ˆÐ%Ñ&ð ˜Z™[ª!˜^Ñ,Ð0A×0NÑ0NÑNØ˜™¢a˜Ñ(Ð,=×,OÑ,OÐP^Ñ,_Ñ_ñ
ˆð 	�Z‘[¢!�^Ñ$×1Ñ1°$Ð8I×8VÑ8VÔWà3˜×1Ñ1Ó3°LÓAˆà×ÑÐ-¨tÓ4Ð<à.2×.HÑ.HØ%6×%KÑ%KÒ%WÈxà%¨™>ä!Ð"3×">Ñ">Ð@PÐSZÑ@ZÓ[Ø)ð /Ió /ˆLÐ*Ñ+ô !Ÿ;™;¨
Ð4DÐ'EÈUÐ[aÔbÐð .×?Ñ?ÐØ0×EÑEÐØ)×7Ñ7ˆØ)×7Ñ7ˆØ"3×"KÑ"KÐá3¹‘RÈDˆ
Ù3¹‘RÈDˆ
Ù'>ÑCW¡Ð^bÐÙ$;Ñ@Q™RÐX\ÐäÐ'Ó(ó (	UˆAð >˜4×=Ñ=ð Ø+°|ÐX\ñØ`lñˆLð   <Ñ/Ø1=Ð>NÑ1O×1RÑ1RÐS`×SgÑSgÓ1h�Ð-Ñ.à/�d—j‘j×/Ñ/ñ Øðà"3Ø%9óˆGð  ×CÑCÀGÈ\ÓZˆLØ"×4Ñ4²Q¸ºA°XÑ>×DÑDÓFˆLð —Z‘Z×/Ñ/°Ó=ˆFÙ 0°¸FÓ CÐð !×*Ò*ÜŸ™Ð&7¸RÔ@�Ü"×.Ñ.¨uÀ!ÔD×LÑLÈRÓP‘
ä"Ÿ\™\Ð*;ÀÔD�
à%/ÐšQ ˜TÑ"ô Ÿ™ J°
Ð#;Ó<ˆJØ#×-Ñ-¨bÓ1ˆJà ×HÑHÈÓTŠMðQ(	UñT #ÙØ˜v˜iÑ'�
ÙØ˜|×1Ñ1Ó3Ð5Ñ5�
Ù Ø" g×&8Ñ&8Ñ8Ð"Ù#Ø%¨×)>Ñ)>Ñ>Ð%á"Ü,Ø*ØØ!Ø-Ø3Ø '× 7Ñ 7ôð ð $Ð#rA   )	NNNNNNNNr   )NNNNNF)NNN)rB   rC   rD   Ú_tied_weights_keysÚoutput_modalitiesrM   r!   rl   r9   r�   rä  r   r   r?  rV   r	   rŸ   rž   r   r   r`   rœ   rí  rò  Úno_gradr   r	  rN   rO   s   @r@   rÞ  rÞ  )  sÊ  ø„ Ø*Ð,VÐWÐØ)ÐØ!Ðð˜{õ ð¸e¿l¹lð ÈuÏ|É|ó ð
 Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ/
à×#Ñ# dÑ*ð/
ð ×'Ñ'¨$Ñ.ð/
ð Ÿ™ tÑ+ð	/
ð
 ×&Ñ&¨Ñ-ð/
ð  ™ð/
ð ×(Ñ(¨4Ñ/ð/
ð × Ñ  4Ñ'ð/
ð ˜$‘;ð/
ð ˜eŸl™lÑ*ð/
ð Ð+Ñ,ð/
ð 
%ò/
ó ó ð/
ðh ØØØØØ õð@
°·±ó 
ð €U‡]�]ƒ_ð '+Ø26Ø7;ñ	$à—‘˜tÑ#ð$ð ×(Ñ(¨4Ñ/ð$ð .°Ñ4ô	$ó ô$rA   rÞ  )r%   rÞ  r¸  rš  r  )r×   )VÚcollections.abcr   Údataclassesr   r9   Útorch.nn.functionalr   r‰   r;  Ú r   r6   Úactivationsr   Úcache_utilsr	   Ú
generationr
   r   r   r   Úgeneration.utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úautor   Úconfiguration_janusr!   r"   r#   Ú
get_loggerrB   r  r%   rR   rY   r`   rƒ  r5   r�   rž   r¦   r+  rº   r¼   rá   r,   rú   r  r  r$  rA  rU  ra  rh  rn  rv  r�  r—  rš  r­  r±  r¸  rÞ  Ú__all__rW   rA   r@   ú<module>rO     sq  ðõ* %Ý !ã ß Ð Ý å &Ý !Ý  ß uÓ uÝ 9Ý 9ß XÑ Xß FÝ &ß u× uÝ 7Ý 5Ý ß QÑ Qð 
ˆ×	Ñ	˜HÓ	%€ð ôi˜?ó ió ðiñ$ ðôð
 ô	4�{ó 	4ó óð	4ñ ðôð
 ô@ ;ó @ó óð@ñ* ðôð
 ô@ +ó @ó óð@ô4H˜BŸI™Iô HðV	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(ó%ô2I$˜2Ÿ9™9ô I$ôX�R—Y‘Yô ô( Ð8ô  ôF@˜Ÿ™ô @ðD ô3Ð+ó 3ó ð3ôl˜BŸI™Iô ô$<" §	¡	ô <"ô~)(˜BŸI™Iô )(ôX &˜"Ÿ)™)ô  &ôF	˜rŸy™yô 	ô˜RŸY™Yô ô˜Ÿ™ô ô,J!˜Ÿ	™	ô J!ôZA˜Ÿ	™	ô AðH Ø
ô4Ð6ó 4ó ó ð4ñ ðôôDUÐ%ó DUóðDUôN˜2Ÿ9™9ô ô$�R—Y‘Yô ñ  ðôô
f
Ð%ó f
óð
f
ôRr$Ð$8¸/ô r$òj	 t�rA   