Ë
    ÜÓ^jš1 ã                   ó®  — d Z ddlZddlZddlZddl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ZddlmZmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/  ej`                  e1«      Z2 e.d¬«      e G d„ de-«      «       «       Z3dKd„Z4dLd„Z5	 	 	 	 	 dMd„Z6 G d„ dejn                  «      Z8e. G d„ de+«      «       Z9 G d „ d!ejn                  «      Z: G d"„ d#ejn                  «      Z; G d$„ d%ejn                  «      Z< G d&„ d'ejn                  «      Z= G d(„ d)ejn                  «      Z> G d*„ d+ejn                  «      Z? G d,„ d-ejn                  «      Z@ G d.„ d/e)«      ZA G d0„ d1ejn                  «      ZBe>j†                  ZDd2ZE G d3„ d4ejn                  e«      ZF G d5„ d6eF«      ZG G d7„ d8eF«      ZH G d9„ d:eF«      ZI G d;„ d<ejn                  «      ZJeGeHeId=œZKd>ed?e	eF   fd@„ZL G dA„ dBe9«      ZMe. G dC„ dDe9«      «       ZN e.dE¬«       G dF„ dGe9e$«      «       ZOe. G dH„ dIe9«      «       ZPg dJ¢ZQy)NzPyTorch UDOP model.é    N)ÚABCÚabstractmethod)ÚSequence)Údeepcopy)Ú	dataclass)ÚAny)ÚTensorÚnn)ÚCrossEntropyLoss)Ú
UdopConfig)ÚSeq2SeqLMOutputÚSeq2SeqModelOutputé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚGradientCheckpointingLayer)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚis_torchdynamo_compilingz�
    Class for the model's outputs that may also contain a past key/values (to speed up sequential decoding). Includes
    an additional attention mask.
    )Úcustom_introc                   ó   — 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)	Ú BaseModelOutputWithAttentionMaska 
  
    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.
    attention_mask (`torch.FloatTensor` of shape `(batch_size, sequence_length)`, *optional*):
        Attention mask used in the model's forward pass to avoid performing attention on padding token indices.
        Mask values selected in `[0, 1]`:
        - 1 for tokens that are **not masked**,
        - 0 for tokens that are **masked**.
    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 and optionally if `config.is_encoder_decoder=True` in the cross-attention blocks)
        that can be used (see `past_key_values` input) to speed up sequential decoding.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
        one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`. Hidden-states of
        the model at the output of each layer plus the optional initial embedding outputs.
    attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`. Attentions weights after the attention softmax, used to compute the weighted average in
        the self-attention heads.
    cross_attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` and `config.add_cross_attention=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`. Attentions weights of the decoder's cross-attention layer, after the attention softmax,
        used to compute the weighted average in the cross-attention heads.
    NÚlast_hidden_stateÚattention_maskÚpast_key_valuesÚhidden_statesÚ
attentionsÚcross_attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    ÚtorchÚFloatTensorÚ__annotations__r!   r"   r   r#   Útupler$   r%   © ó    úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/udop/modeling_udop.pyr   r   5   s‘   … ñð: 37Ð�u×(Ñ(¨4Ñ/Ó6Ø/3€N�E×%Ñ%¨Ñ,Ó3Ø$(€O�U˜T‘\Ó(Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6Ø8<Ð�e˜E×-Ñ-Ñ.°Ñ5Ô<r/   r   c           	      ó  — | |z  | |z  g}t        j                  dd|d   dz   z  d«      }||d   z  }t        j                  dd|d   dz   z  d«      }||d   z  }t        j                  |d d j                  |d   d«      |d d j                  |d   d«      j	                  dd«      |dd  j                  |d   d«      |dd  j                  |d   d«      j	                  dd«      gd¬«      }|j                  dd«      }|S )Nr   ç      ð?é   éÿÿÿÿ©Údimé   )r*   ÚarangeÚstackÚrepeatÚ	transposeÚview)Ú
image_sizeÚ
patch_sizeÚimage_feature_pool_shapeÚvisual_bbox_xÚvisual_bbox_yÚvisual_bbox_inputs         r0   Úget_visual_bboxrC   b   s@  € Ø *¨jÑ 8¸*È
Ñ:RÐSÐÜ—L‘L  CÐ+CÀAÑ+FÈÑ+JÑ$KÈSÓQ€MØÐ-¨aÑ0Ñ0€Mä—L‘L  CÐ+CÀAÑ+FÈÑ+JÑ$KÈSÓQ€MØÐ-¨aÑ0Ñ0€MäŸ™à˜#˜2Ð×%Ñ%Ð&>¸qÑ&AÀ1ÓEØ˜#˜2Ð×%Ñ%Ð&>¸qÑ&AÀ1ÓE×OÑOÐPQÐSTÓUØ˜!˜"Ð×$Ñ$Ð%=¸aÑ%@À!ÓDØ˜!˜"Ð×$Ñ$Ð%=¸aÑ%@À!ÓD×NÑNÈqÐRSÓTð		
ð ôÐð *×.Ñ.¨r°1Ó5ÐàÐr/   c                 ó6  — t        | t        j                  «      r| j                  d   }n t	        | «      }t        j
                  | «      } ||z
  }|dkD  rAt        j                  |g|z  «      j                  | «      }t        j                  | |gd¬«      } | d | S )Nr   r5   )	Ú
isinstancer*   r	   ÚshapeÚlenÚtensorr9   ÚtoÚcat)ÚseqÚ
target_lenÚ	pad_valueÚnÚmÚrets         r0   Úpad_sequencerQ   y   s„   € Ü�#”u—|‘|Ô$Ø�I‰I�a‰L‰ä�‹HˆÜ�l‰l˜3ÓˆØ�Q‰€AØˆ1‚uÜ�k‰k˜9˜+¨™/Ó*×-Ñ-¨cÓ2ˆÜ�i‰i˜˜c˜
¨Ô*ˆØˆ{�
ÐÐr/   c	                 ó	  — |}	t        j                  t        j                  |dd…dd…df   |dd…dd…df   z   dz  |	z  «      j                  «       d|	dz
  «      }
t        j                  t        j                  |dd…dd…df   |dd…dd…df   z   dz  |	z  «      j                  «       d|	dz
  «      |	z  }|
|z   }|j	                  t         j
                  «      }|j                  d«      dk(  |j                  d«      d	k(  z  }t        j                  | d|j                  d«      j                  dd| j                  d«      «      «      }d||<   ||z  }t        j                  | dd…dd…df   d
«      j                  «       }t        j                  t        j                  t        |«      «      dd…df   j                  d|j                  d«      «      dd…dd…df   j	                  |«      |dd…dd…df   gd¬«      }|j!                  dd«      }t#        |Ž \  }}d|||f<   t%        t        |«      «      D �cg c]  }| |   ||      ‘Œ }}|€Yt'        ||¬«      }|j                  d«      j                  | j                  d«      dd«      }|j	                  | j(                  «      }t%        t        |«      «      D �cg c]  }||   ||      ‘Œ }}|�H|D �cg c]=  }t        j*                  |j                  d«      |j,                  |j(                  ¬«      ‘Œ? }}|dk(  r| j                  d«      }n||j                  d«      z
  }t        j.                  |D �cg c]%  }t1        ||t        j2                  | d   «      «      ‘Œ' c}«      }t        j.                  |D �cg c]%  }t1        ||t        j2                  |d   «      «      ‘Œ' c}«      }|�Dt        j.                  D �cg c]%  }t1        ||t        j2                  |d   «      «      ‘Œ' c}«      }t        j                  ||gd«      }t        j                  ||gd«      }|�t        j                  |gd«      }|||fS c c}w c c}w c c}w c c}w c c}w c c}w )a»  
    Combine the image and text embeddings for the input to the encoder/decoder of UDOP.

    First, the image embeddings are created by checking for each visual patch if it is inside the bounding box of a
    token. If it is, the visual patch is combined with the token embedding. Then, the visual bounding boxes are combined
    with the text bounding boxes. Finally, the visual bounding boxes are combined with the text attention mask.
    Nr   é   g       @r3   r   r4   ç        r2   Tr5   F)r=   r>   ©ÚdtypeÚdevice)r   r   )r*   ÚclipÚfloorÚlongrI   Úfloat64ÚmeanÚgatherÚ	unsqueezer:   ÚsizeÚ	full_likeÚboolrJ   r8   rG   ÚflattenÚzipÚrangerC   rW   ÚonesrV   r9   rQ   Ú
zeros_like)Úimage_embeddingsÚinputs_embedsÚbboxÚvisual_bboxr!   Únum_patchesÚmax_lenr=   r>   Úsequence_lengthÚocr_points_xÚocr_points_yÚ
ocr_pointsÚ
target_segÚrepeated_vision_embedsÚ
patch_indsÚindÚrowsÚcolsÚiÚinput_vision_patchesÚitemÚvisual_attention_maskÚinputs_vision_patchess                           r0   Úcombine_image_text_embeddingsr|   †   sK  € ð& "€OÜ—:‘:Ü�‰�Tš!šQ ˜'‘] Tª!ªQ°¨'¡]Ñ2°cÑ9¸OÑKÓL×QÑQÓSÐUVÐXgÐjkÑXkó€Lô 	�
‰
”5—;‘; ¢Qª¨1 W¡°²Qº¸1°W±Ñ =ÀÑDÀÑVÓW×\Ñ\Ó^Ð`aÐcrÐuvÑcvÓwØ
ñ	ð ð  Ñ,€Jà�7‰7”5—=‘=Ó!€DØ—)‘)˜B“- 3Ñ&¨4¯9©9°R«=¸CÑ+?Ñ@€JÜ"Ÿ\™\Ø˜!˜Z×1Ñ1°"Ó5×<Ñ<¸QÀÐCS×CXÑCXÐY[ÓC\Ó]óÐð *-Ð˜:Ñ&ØÐ+Ñ+€Mä—‘Ð!1²!²Q¸°'Ñ!:¸DÓA×FÑFÓH€JÜ
�)‰)ä�L‰Lœ˜Z›Ó)ª!¨T¨'Ñ2×9Ñ9¸!¸Z¿_¹_ÈRÓ=PÓQÒRSÒUVÐX\ÐR\Ñ]×`Ñ`ÐakÓlØ’qš!˜T�zÑ"ð	
ð ô€Cð �+‰+�a˜Ó
€CÜ�c��J€Dˆ$Ø"€Jˆt�TˆzÑäHMÌcÐR\ËoÓH^Ö_À1Ð,¨QÑ/°
¸1±Ó>Ð_ÐÐ_àÐÜ%°È
ÔSˆØ!×+Ñ+¨AÓ.×5Ñ5Ð6F×6KÑ6KÈAÓ6NÐPQÐSTÓUˆØ!—n‘nÐ%5×%<Ñ%<Ó=ˆä:?ÄÀJÃÓ:PÖQ°Q�;˜q‘> *¨Q¡-Ó0ÐQ€KÐQàÐ!àkvö!
ØcgŒE�J‰J�t—y‘y “|¨>×+?Ñ+?È×H]ÑH]Ö^ð!
Ðð !
ð �!‚|Ø"×'Ñ'¨Ó*‰à˜M×.Ñ.¨qÓ1Ñ1ˆÜ!ŸK™KØ[oÖpÐSWŒ�d˜G¤U×%5Ñ%5Ð6FÀtÑ6LÓ%MÕ	NÒpóÐô —+‘+ÐepÖqÐ]aœ|¨D°'¼5×;KÑ;KÈDÐQUÉJÓ;WÕXÒqÓr€KØÐ!Ü %§¡Ø]rÖsÐUYŒ\˜$ ¬×)9Ñ)9¸.ÈÑ:NÓ)OÕPÒsó!
Ðô —I‘I˜}Ð.CÐDÀaÓH€MÜ�9‰9�d˜KÐ(¨!Ó,€DØÐ!ÜŸ™ NÐ4IÐ#JÈAÓNˆØ˜$ Ð.Ð.ùò? `ùò Rùò!
ùò 	qùâqùò ts%   È9Q$Ê>Q)ËAQ.Í*Q3Î*Q8Ï$*Q=c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚUdopPatchEmbeddingsz2D Image to Patch Embeddingsc                 óÌ  •— t         ‰| �  «        |j                  |j                  }}|j                  |j
                  }}t        |t        j                  j                  «      r|n||f}t        |t        j                  j                  «      r|n||f}|d   |d   z  |d   |d   z  z  }|| _        || _        || _        || _
        t        j                  ||||¬«      | _        y )Nr3   r   )Úkernel_sizeÚstride)ÚsuperÚ__init__r=   r>   Únum_channelsÚhidden_sizerE   ÚcollectionsÚabcÚIterablerk   r
   ÚConv2dÚproj)ÚselfÚconfigr=   r>   r„   r…   rk   Ú	__class__s          €r0   rƒ   zUdopPatchEmbeddings.__init__Ü   sÔ   ø€ Ü‰ÑÔØ!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ø$*×$7Ñ$7¸×9KÑ9K�kˆä#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔä—I‘I˜l¨KÀZÐXbÔcˆ�	r/   c                 ó8  — |j                   \  }}}}|| j                  d   k7  s|| j                  d   k7  r2t        d|› d|› d| j                  d   › d| j                  d   › d�	«      ‚| j                  |«      }|j	                  d«      j                  dd«      }|S )Nr   r3   zInput image size (Ú*z) doesn't match model (z).rS   )rF   r=   Ú
ValueErrorrŠ   rb   r;   )r‹   Úpixel_valuesÚ
batch_sizer„   ÚheightÚwidthÚ
embeddingss          r0   ÚforwardzUdopPatchEmbeddings.forwardë   s±   € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ø�T—_‘_ QÑ'Ò'¨5°D·O±OÀAÑ4FÒ+FÜØ$ V H¨A¨e¨WÐ4KÈDÏOÉOÐ\]ÑL^ÐK_Ð_`Ðae×apÑapÐqrÑasÐ`tÐtvÐwóð ð —Y‘Y˜|Ó,ˆ
Ø×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆ
ØÐr/   )r&   r'   r(   r)   rƒ   r–   Ú__classcell__©r�   s   @r0   r~   r~   Ù   s   ø„ Ù&ôdör/   r~   c                   ón   ‡ — e Zd ZU eed<   dZdZdZdZdgZ	 e
j                  «       ˆ fd„«       Zd„ Zˆ xZS )	ÚUdopPreTrainedModelrŒ   Útransformer)ÚimageÚtextTFÚwoc                 óÐ  •— t         ‰| �  |«       | j                  j                  }t	        |t
        «      r$t        j                  |j                  |dz  «       yt	        |t        j                  «      rOt        j                  |j                  d|¬«       |j                  � t        j                  |j                  «       yyt	        |t        «      r_| j                  j                  }| j                  j                  }t        j                   |j"                  j                  d||dz  z  ¬«       yt	        |t$        «      r0t        j                   |j&                  j                  d|dz  ¬«       yt	        |t(        «      rTt+        |d«      rG| j                  j,                  s0t        j                   |j.                  j                  d|dz  ¬«       yyyt	        |t0        «      �r9t        j                   |j2                  j                  d|| j                  j                  dz  z  ¬«       t+        |j2                  d«      r?|j2                  j                  �)t        j                  |j2                  j                  «       t        j                   |j4                  j                  d|| j                  j6                  dz  z  ¬«       t+        |j4                  d«      rA|j4                  j                  �*t        j                  |j4                  j                  «       yyyt	        |t8        «      �rÔt        j                   |j:                  j                  d|| j                  j                  dz  z  ¬«       t+        |j:                  d«      r?|j:                  j                  �)t        j                  |j:                  j                  «       t        j                   |j<                  j                  d|| j                  j                  dz  z  ¬«       t+        |j<                  d«      r?|j<                  j                  �)t        j                  |j<                  j                  «       t        j                   |j4                  j                  d|| j                  j6                  dz  z  ¬«       t+        |j4                  d«      rA|j4                  j                  �*t        j                  |j4                  j                  «       yyyt	        |t>        «      �rP| j                  j                  }| j                  j@                  }| j                  jB                  }t        j                   |jD                  j                  d|||z  dz  z  ¬«       t        j                   |jF                  j                  d||dz  z  ¬«       t        j                   |jH                  j                  d||dz  z  ¬«       t        j                   |jJ                  j                  d|||z  dz  z  ¬«       |jL                  r3t        j                   |j"                  j                  d||dz  z  ¬«       yyy)zInitialize the weightsr2   rT   )r\   ÚstdNç      à¿Úlm_headÚbias)'r‚   Ú_init_weightsrŒ   Úinitializer_factorrE   ÚUdopLayerNormÚinitÚ	constant_Úweightr
   r‰   Útrunc_normal_r£   Úzeros_ÚRelativePositionBiasBaseÚd_modelÚnormal_Úrelative_attention_biasÚ	UdopModelÚsharedÚUdopForConditionalGenerationÚhasattrÚtie_word_embeddingsr¢   ÚUdopDenseActDenseÚwirž   Úd_ffÚUdopDenseGatedActDenseÚwi_0Úwi_1ÚUdopAttentionÚd_kvÚ	num_headsÚqÚkÚvÚoÚhas_relative_attention_bias)r‹   ÚmoduleÚfactorr­   Úkey_value_proj_dimÚn_headsr�   s         €r0   r¤   z!UdopPreTrainedModel._init_weights   sS  ø€ ô 	‰Ñ˜fÔ%Ø—‘×/Ñ/ˆÜ�fœmÔ,Ü�N‰N˜6Ÿ=™=¨&°3©,Õ7Ü˜¤§	¡	Ô*Ü×Ñ˜vŸ}™}°3¸FÕCØ�{‰{Ð&Ü—‘˜FŸK™KÕ(ð 'ä˜Ô 8Ô9Ø—[‘[×3Ñ3ˆFØ—k‘k×)Ñ)ˆGÜ�L‰L˜×7Ñ7×>Ñ>ÀSÈfÐY`ÐeiÑXiÑNjÖkÜ˜¤	Ô*Ü�L‰L˜Ÿ™×-Ñ-°C¸VÀc¹\ÖJÜ˜Ô <Ô=Ü�v˜yÔ)°$·+±+×2QÒ2QÜ—‘˜VŸ^™^×2Ñ2¸À&È3Á,ÖOð 3RÐ)ä˜Ô 1Õ2Ü�L‰L˜Ÿ™×)Ñ)°¸ÀDÇKÁK×DWÑDWÐ\`ÑC`Ñ9aÕbÜ�v—y‘y &Ô)¨f¯i©i¯n©nÐ.HÜ—‘˜FŸI™IŸN™NÔ+Ü�L‰L˜Ÿ™×)Ñ)°¸ÀDÇKÁK×DTÑDTÐY]ÑC]Ñ9^Õ_Ü�v—y‘y &Ô)¨f¯i©i¯n©nÐ.HÜ—‘˜FŸI™IŸN™NÕ+ð /IÐ)ä˜Ô 6Õ7Ü�L‰L˜Ÿ™×+Ñ+°#¸6ÀdÇkÁk×FYÑFYÐ^bÑEbÑ;cÕdÜ�v—{‘{ FÔ+°·±×0@Ñ0@Ð0LÜ—‘˜FŸK™K×,Ñ,Ô-Ü�L‰L˜Ÿ™×+Ñ+°#¸6ÀdÇkÁk×FYÑFYÐ^bÑEbÑ;cÕdÜ�v—{‘{ FÔ+°·±×0@Ñ0@Ð0LÜ—‘˜FŸK™K×,Ñ,Ô-Ü�L‰L˜Ÿ™×)Ñ)°¸ÀDÇKÁK×DTÑDTÐY]ÑC]Ñ9^Õ_Ü�v—y‘y &Ô)¨f¯i©i¯n©nÐ.HÜ—‘˜FŸI™IŸN™NÕ+ð /IÐ)ä˜¤Õ.Ø—k‘k×)Ñ)ˆGØ!%§¡×!1Ñ!1ÐØ—k‘k×+Ñ+ˆGÜ�L‰L˜Ÿ™Ÿ™¨s¸À7ÐM_ÑC_ÐdhÑBhÑ8iÕjÜ�L‰L˜Ÿ™Ÿ™¨s¸À'È4Á-Ñ8PÕQÜ�L‰L˜Ÿ™Ÿ™¨s¸À'È4Á-Ñ8PÕQÜ�L‰L˜Ÿ™Ÿ™¨s¸À7ÐM_ÑC_ÐdhÑBhÑ8iÕjØ×1Ò1Ü—‘˜V×;Ñ;×BÑBÈÐRXÐ]dÐimÑ\mÑRnÖoð 2ð /r/   c                 ó‚  — | j                   j                  }| j                   j                  }|€J d«       ‚|j                  |j                  «      }|dd d…f   j                  «       |ddd …f<   ||d<   |€J d«       ‚|j                  |dk(  |«       t        j                  |dk\  «      j                  «       sJ d	«       ‚|S )
Nz�self.model.config.decoder_start_token_id has to be defined. In Udop it is usually set to the pad_token_id. See Udop docs for more information.r4   r3   ).r   z1self.model.config.pad_token_id has to be defined.éœÿÿÿr   z8Verify that `shifted_input_ids` has only positive values)
rŒ   Údecoder_start_token_idÚpad_token_idÚ	new_zerosrF   ÚcloneÚmasked_fill_r*   Úallry   )r‹   Ú	input_idsrÉ   rÊ   Úshifted_input_idss        r0   Ú_shift_rightz UdopPreTrainedModel._shift_right1  sØ   € Ø!%§¡×!CÑ!CÐØ—{‘{×/Ñ/ˆà%Ð1ð 	
ð@ó	
Ð1ð &×/Ñ/°	·±Ó@ÐØ%.¨s°C°R°C¨xÑ%8×%>Ñ%>Ó%@Ð˜#˜q™r˜'Ñ"Ø$:Ð˜&Ñ!àÐ'Ð\Ð)\Ó\Ð'à×&Ñ&Ð'8¸DÑ'@À,ÔOä�y‰yÐ*¨aÑ/Ó0×5Ñ5Ô7ÐsÐ9sÓsÐ7à Ð r/   )r&   r'   r(   r   r,   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_can_compile_fullgraphÚ_keep_in_fp32_modulesr*   Úno_gradr¤   rÑ   r—   r˜   s   @r0   rš   rš   ö   sK   ø… àÓØ%ÐØ(ÐØ&*Ð#à"ÐØ!˜FÐà€U‡]�]ƒ_ó-pó ð-pö`!r/   rš   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )r¦   c                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)ze
        Construct a layernorm module in the Udop style. No bias and no subtraction of mean.
        N)r‚   rƒ   r
   Ú	Parameterr*   re   r©   Úvariance_epsilon)r‹   r…   Úepsr�   s      €r0   rƒ   zUdopLayerNorm.__init__J  s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr/   c                 óž  — |j                  t        j                  «      j                  d«      j	                  dd¬«      }|t        j
                  || j                  z   «      z  }| j                  j                  t        j                  t        j                  fv r%|j                  | j                  j                  «      }| j                  |z  S )NrS   r4   T)Úkeepdim)rI   r*   Úfloat32Úpowr\   ÚrsqrtrÛ   r©   rV   Úfloat16Úbfloat16)r‹   r#   Úvariances      r0   r–   zUdopLayerNorm.forwardR  s›   € ð !×#Ñ#¤E§M¡MÓ2×6Ñ6°qÓ9×>Ñ>¸rÈ4Ð>ÓPˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆð �;‰;×Ñ¤§¡´·±Ð ?Ñ?Ø)×,Ñ,¨T¯[©[×->Ñ->Ó?ˆMà�{‰{˜]Ñ*Ð*r/   )g�íµ ÷Æ°>©r&   r'   r(   rƒ   r–   r—   r˜   s   @r0   r¦   r¦   I  s   ø„ õ$ö+r/   r¦   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )rµ   rŒ   c                 ó^  •— t         ‰| �  «        t        j                  |j                  |j
                  d¬«      | _        t        j                  |j
                  |j                  d¬«      | _        t        j                  |j                  «      | _
        t        |j                     | _        y ©NF©r£   )r‚   rƒ   r
   ÚLinearr­   r·   r¶   rž   ÚDropoutÚdropout_rateÚdropoutr   Údense_act_fnÚact©r‹   rŒ   r�   s     €r0   rƒ   zUdopDenseActDense.__init__d  sn   ø€ Ü‰ÑÔÜ—)‘)˜FŸN™N¨F¯K©K¸eÔDˆŒÜ—)‘)˜FŸK™K¨¯©¸eÔDˆŒÜ—z‘z &×"5Ñ"5Ó6ˆŒÜ˜&×-Ñ-Ñ.ˆ�r/   c                 ó  — | j                  |«      }| j                  |«      }| j                  |«      }t        | j                  j
                  t        j                  «      r�|j                  | j                  j
                  j                  k7  r`| j                  j
                  j                  t        j                  k7  r/|j                  | j                  j
                  j                  «      }| j	                  |«      }|S ©N)r¶   rï   rí   rE   rž   r©   r*   r	   rV   Úint8rI   )r‹   r#   s     r0   r–   zUdopDenseActDense.forwardk  sª   € ØŸ™ Ó.ˆØŸ™ Ó/ˆØŸ™ ]Ó3ˆä�t—w‘w—~‘~¤u§|¡|Ô4Ø×#Ñ# t§w¡w§~¡~×';Ñ';Ò;Ø—‘—‘×$Ñ$¬¯
©
Ò2à)×,Ñ,¨T¯W©W¯^©^×-AÑ-AÓBˆMØŸ™ Ó.ˆØÐr/   ©r&   r'   r(   r   rƒ   r–   r—   r˜   s   @r0   rµ   rµ   c  s   ø„ ð/˜zõ /ör/   rµ   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )r¸   rŒ   c                 óÀ  •— t         ‰| �  «        t        j                  |j                  |j
                  d¬«      | _        t        j                  |j                  |j
                  d¬«      | _        t        j                  |j
                  |j                  d¬«      | _        t        j                  |j                  «      | _        t        |j                     | _        y rè   )r‚   rƒ   r
   rê   r­   r·   r¹   rº   rž   rë   rì   rí   r   rî   rï   rð   s     €r0   rƒ   zUdopDenseGatedActDense.__init__{  sŠ   ø€ Ü‰ÑÔÜ—I‘I˜fŸn™n¨f¯k©kÀÔFˆŒ	Ü—I‘I˜fŸn™n¨f¯k©kÀÔFˆŒ	Ü—)‘)˜FŸK™K¨¯©¸eÔDˆŒÜ—z‘z &×"5Ñ"5Ó6ˆŒÜ˜&×-Ñ-Ñ.ˆ�r/   c                 ó,  — | j                  | j                  |«      «      }| j                  |«      }||z  }| j                  |«      }t	        | j
                  j                  t        j                  «      r�|j                  | j
                  j                  j                  k7  r`| j
                  j                  j                  t        j                  k7  r/|j                  | j
                  j                  j                  «      }| j                  |«      }|S rò   )rï   r¹   rº   rí   rE   rž   r©   r*   r	   rV   ró   rI   )r‹   r#   Úhidden_geluÚhidden_linears       r0   r–   zUdopDenseGatedActDense.forwardƒ  s¿   € Ø—h‘h˜tŸy™y¨Ó7Ó8ˆØŸ	™	 -Ó0ˆØ# mÑ3ˆØŸ™ ]Ó3ˆô �t—w‘w—~‘~¤u§|¡|Ô4Ø×#Ñ# t§w¡w§~¡~×';Ñ';Ò;Ø—‘—‘×$Ñ$¬¯
©
Ò2à)×,Ñ,¨T¯W©W¯^©^×-AÑ-AÓBˆMàŸ™ Ó.ˆØÐr/   rô   r˜   s   @r0   r¸   r¸   z  s   ø„ ð/˜zõ /ör/   r¸   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚUdopLayerFFrŒ   c                 ó  •— t         ‰| �  «        |j                  rt        |«      | _        nt        |«      | _        t        |j                  |j                  ¬«      | _	        t        j                  |j                  «      | _        y )N©rÜ   )r‚   rƒ   Úis_gated_actr¸   ÚDenseReluDenserµ   r¦   r­   Úlayer_norm_epsilonÚ
layer_normr
   rë   rì   rí   rð   s     €r0   rƒ   zUdopLayerFF.__init__™  s_   ø€ Ü‰ÑÔØ×ÒÜ"8¸Ó"@ˆDÕä"3°FÓ";ˆDÔä'¨¯©¸F×<UÑ<UÔVˆŒÜ—z‘z &×"5Ñ"5Ó6ˆ�r/   c                 ór   — | j                  |«      }| j                  |«      }|| j                  |«      z   }|S rò   )r  rÿ   rí   )r‹   r#   Úforwarded_statess      r0   r–   zUdopLayerFF.forward£  s=   € ØŸ?™?¨=Ó9ÐØ×.Ñ.Ð/?Ó@ÐØ%¨¯©Ð5EÓ(FÑFˆØÐr/   rô   r˜   s   @r0   rû   rû   ˜  s   ø„ ð7˜zõ 7ör/   rû   c                   ó`   ‡ — e Zd Z	 	 ddededz  fˆ fd„Zed	d„«       Zd
d„Z	 	 	 	 	 dd„Z	ˆ xZ
S )r»   NrŒ   Ú	layer_idxc                 óê  •— t         ‰| �  «        |j                  | _        || _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _
        |j                  | _        | j                  | j                  z  | _        || _        |€9| j                  r-t        j!                  d| j"                  j$                  › d�«       t'        j(                  | j                  | j                  d¬«      | _        t'        j(                  | j                  | j                  d¬«      | _        t'        j(                  | j                  | j                  d¬«      | _        t'        j(                  | j                  | j                  d¬«      | _        | j                  r/t'        j2                  | j                  | j                  «      | _        d| _        y )NzInstantiating a decoder z³ without passing `layer_idx` is not recommended and will to errors during the forward call, if caching is used. Please make sure to provide a `layer_idx` when creating this class.Fré   )r‚   rƒ   Ú
is_decoderrÂ   Úrelative_attention_num_bucketsÚrelative_attention_max_distancer­   r¼   rÅ   r½   rÆ   rì   rí   Ú	inner_dimr  ÚloggerÚwarning_oncer�   r&   r
   rê   r¾   r¿   rÀ   rÁ   Ú	Embeddingr¯   Úgradient_checkpointing©r‹   rŒ   rÂ   r  r�   s       €r0   rƒ   zUdopAttention.__init__¬  si  ø€ ô 	‰ÑÔØ ×+Ñ+ˆŒØ+FˆÔ(Ø.4×.SÑ.SˆÔ+Ø/5×/UÑ/UˆÔ,Ø—~‘~ˆŒØ"(§+¡+ˆÔØ×'Ñ'ˆŒØ×*Ñ*ˆŒØŸ™¨×(?Ñ(?Ñ?ˆŒØ"ˆŒØÐ §¢Ü×ÑØ*¨4¯>©>×+BÑ+BÐ*Cð D,ð ,ôô —‘˜4Ÿ<™<¨¯©¸eÔDˆŒÜ—‘˜4Ÿ<™<¨¯©¸eÔDˆŒÜ—‘˜4Ÿ<™<¨¯©¸eÔDˆŒÜ—‘˜4Ÿ>™>¨4¯<©<¸eÔDˆŒà×+Ò+Ü+-¯<©<¸×8[Ñ8[Ð]a×]iÑ]iÓ+jˆDÔ(à&+ˆÕ#r/   c                 óT  — d}|rC|dz  }|| dkD  j                  t        j                  «      |z  z  }t        j                  | «      } n*t        j                  | t        j
                  | «      «       } |dz  }| |k  }|t        j                  | j                  «       |z  «      t        j                  ||z  «      z  ||z
  z  j                  t        j                  «      z   }t        j                  |t        j                  ||dz
  «      «      }|t        j                  || |«      z  }|S )aÒ  
        Adapted from Mesh Tensorflow:
        https://github.com/tensorflow/mesh/blob/0cb87fe07da627bf0b7e60475d59f95ed6b5be3d/mesh_tensorflow/transformer/transformer_layers.py#L593

        Translate relative position to a bucket number for relative attention. The relative position is defined as
        memory_position - query_position, i.e. the distance in tokens from the attending position to the attended-to
        position. If bidirectional=False, then positive relative positions are invalid. We use smaller buckets for
        small absolute relative_position and larger buckets for larger absolute relative_positions. All relative
        positions >=max_distance map to the same bucket. All relative positions <=-max_distance map to the same bucket.
        This should allow for more graceful generalization to longer sequences than the model has been trained on

        Args:
            relative_position: an int32 Tensor
            bidirectional: a boolean - whether the attention is bidirectional
            num_buckets: an integer
            max_distance: an integer

        Returns:
            a Tensor with the same shape as relative_position, containing int32 values in the range [0, num_buckets)
        r   rS   r3   )rI   r*   rZ   ÚabsÚminrf   ÚlogÚfloatÚmathr`   Úwhere)Úrelative_positionÚbidirectionalÚnum_bucketsÚmax_distanceÚrelative_bucketsÚ	max_exactÚis_smallÚrelative_position_if_larges           r0   Ú_relative_position_bucketz'UdopAttention._relative_position_bucketÎ  s(  € ð, ÐÙØ˜AÑˆKØÐ!2°QÑ!6× :Ñ :¼5¿:¹:Ó FÈÑ TÑTÐÜ %§	¡	Ð*;Ó <Ñä!&§¡Ð+<¼e×>NÑ>NÐO`Ó>aÓ!bÐ bÐð   1Ñ$ˆ	Ø$ yÑ0ˆð &/Ü�I‰IÐ'×-Ñ-Ó/°)Ñ;Ó<Ü�h‰h�| iÑ/Ó0ñ1à˜YÑ&ñ(÷ ‰"ŒU�Z‰Z‹.ñ	&Ð"ô
 &+§Y¡YØ&¬¯©Ð8RÐT_ÐbcÑTcÓ(dó&
Ð"ð 	œEŸK™K¨Ð2CÐE_Ó`Ñ`ÐØÐr/   c                 óÜ  — |€ | j                   j                  j                  }t        j                  |t        j
                  |¬«      dd…df   |z   }t        j                  |t        j
                  |¬«      ddd…f   }||z
  }| j                  || j                   | j                  | j                  ¬«      }| j                  |«      }	|	j                  g d¢«      j                  d«      }	|	S )z%Compute binned relative position biasNrU   ©r  r  r  )rS   r   r3   r   )r¯   r©   rW   r*   r8   rZ   r  r  r  r	  Úpermuter^   )
r‹   Úquery_lengthÚ
key_lengthrW   Úpast_seen_tokensÚcontext_positionÚmemory_positionr  Úrelative_position_bucketÚvaluess
             r0   Úcompute_biaszUdopAttention.compute_biasþ  sÜ   € àˆ>Ø×1Ñ1×8Ñ8×?Ñ?ˆFÜ Ÿ<™<¨¼E¿J¹JÈvÔVÒWXÐZ^ÐW^Ñ_ÐbrÑrÐÜŸ,™, z¼¿¹ÈFÔSÐTXÒZ[ÐT[Ñ\ˆØ+Ð.>Ñ>ÐØ#'×#AÑ#AØØ#Ÿ™Ð.Ø×;Ñ;Ø×=Ñ=ð	 $Bó $
Ð ð ×-Ñ-Ð.FÓGˆØ—‘¢	Ó*×4Ñ4°QÓ7ˆØˆr/   c                 óÊ  — |j                   dd }g |¢d‘| j                  ‘­}	|�|j                  | j                  «      nd}
t	        |
t
        j                  «      r|
j                  «       n|
}
|du}| j                  |«      j                  |	«      j                  dd«      }d}t	        |t        «      rA|j                  j                  | j                  «      }|r|j                  }n|j                  }n|}|r|n|}|rK|�I|rG|j                   | j                     j"                  }|j                   | j                     j$                  }nÍg |j                   dd ¢d‘| j                  ‘­}| j'                  |«      j                  |«      j                  dd«      }| j)                  |«      j                  |«      j                  dd«      }|�K|j+                  ||| j                  «      \  }}|r)t	        |t        «      rd|j                  | j                  <   t        j,                  ||j                  dd«      «      }|€Â|j                   d	   }| j.                  s`t        j0                  d|j                   d   |d   |f|j2                  |j4                  ¬
«      }| j6                  r6| j8                  r*d|_        n"| j=                  |d   ||j2                  |
¬«      }|�#|dd…dd…dd…d|j                   d	   …f   }||z   }|}||z  }t>        j@                  jC                  |jE                  «       d¬«      jG                  |«      }t>        j@                  jI                  || jH                  | j8                  ¬«      }t        j,                  ||«      }|j                  dd«      jK                  «       } |jL                  g |¢d‘­Ž }| jO                  |«      }||f}|r||fz   }|S )z€
        Self-attention (if key_value_states is None) or attention over source sentence (provided by key_value_states).
        Nr4   r   r3   rS   FTr   éþÿÿÿ©rW   rV   )rW   r%  r5   )ÚpÚtraining)(rF   rÅ   Úget_seq_lengthr  rE   r*   r	   rÌ   r¾   r<   r;   r   Ú
is_updatedÚgetÚcross_attention_cacheÚself_attention_cacheÚlayersÚkeysr)  r¿   rÀ   ÚupdateÚmatmulrÂ   ÚzerosrW   rV   r  r/  Úrequires_gradr*  r
   Ú
functionalÚsoftmaxr  Útype_asrí   Ú
contiguousÚreshaperÁ   )r‹   r#   ÚmaskÚkey_value_statesÚposition_biasr"   Úoutput_attentionsÚkwargsÚinput_shapeÚhidden_shaper%  Úis_cross_attentionÚquery_statesr1  Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚkv_shapeÚscoresr$  Úcausal_maskÚposition_bias_maskedÚattn_weightsÚattn_outputÚoutputss                             r0   r–   zUdopAttention.forward  s·  € ð $×)Ñ)¨#¨2Ð.ˆØB˜ÐB bÐB¨$×*AÑ*AÑBˆØM\ÐMh˜?×9Ñ9¸$¿.¹.ÔIÐnoÐä7AÐBRÔTY×T`ÑT`Ô7aÐ+×1Ñ1Ô3ÐgwÐð .°TÐ9Ðà—v‘v˜mÓ,×1Ñ1°,Ó?×IÑIÈ!ÈQÓOˆð ˆ
Ü�oÔ':Ô;Ø(×3Ñ3×7Ñ7¸¿¹ÓGˆJÙ!à'6×'LÑ'LÑ$à'6×'KÑ'KÑ$à#2Ð á-?Ñ)À]ˆÙ /Ð"=Á*à-×4Ñ4°T·^±^ÑD×IÑIˆJØ/×6Ñ6°t·~±~ÑF×MÑM‰LàP˜×-Ñ-¨c¨rÐ2ÐP°BÐP¸×8OÑ8OÑPˆHØŸ™ Ó/×4Ñ4°XÓ>×HÑHÈÈAÓNˆJØŸ6™6 .Ó1×6Ñ6°xÓ@×JÑJÈ1ÈaÓPˆLàÐ*Ø+?×+FÑ+FÀzÐS_Ðae×aoÑaoÓ+pÑ(�
˜Lá%¬*°_ÔFYÔ*ZØAE�O×.Ñ.¨t¯~©~Ñ>ô —‘˜l¨J×,@Ñ,@ÀÀAÓ,FÓGˆàÐ Ø#×)Ñ)¨"Ñ-ˆJØ×3Ò3Ü %§¡Ø˜×*Ñ*¨1Ñ-¨{¸1©~¸zÐJÐSY×S`ÑS`Ðhn×htÑhtô!�ð ×.Ò.°4·=²=Ø26�MÕ/à $× 1Ñ 1Ø ‘N J°v·}±}ÐWgð !2ó !�ð ÐØ"¢1¢aªÐ,B¨j×.>Ñ.>¸rÑ.BÐ,BÐ#BÑC�Ø -°Ñ ;�à,ÐØÐ&Ñ&ˆô —}‘}×,Ñ,¨V¯\©\«^ÀÐ,ÓD×LÑLÈVÓTˆÜ—}‘}×,Ñ,¨\¸T¿\¹\ÐTX×TaÑTaÐ,Óbˆä—l‘l <°Ó>ˆà!×+Ñ+¨A¨qÓ1×<Ñ<Ó>ˆØ)�k×)Ñ)Ð;¨;Ð;¸Ò;ˆØ—f‘f˜[Ó)ˆà Ð.ˆáØ  Ñ/ˆGØˆr/   ©FN)Té    é€   )Nr   )NNNNF)r&   r'   r(   r   Úintrƒ   Ústaticmethodr  r*  r–   r—   r˜   s   @r0   r»   r»   «  sX   ø„ ð %*Ø $ñ	 ,àð ,ð ˜‘:õ	 ,ðD ò- ó ð- ó^ð( ØØØØ÷[r/   r»   c                   ó>   ‡ — e Zd Zddedz  fˆ fd„Z	 	 	 	 	 dd„Zˆ xZS )ÚUdopLayerSelfAttentionNr  c                 óÜ   •— t         ‰| �  «        t        |||¬«      | _        t	        |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y )N©rÂ   r  rý   )r‚   rƒ   r»   ÚSelfAttentionr¦   r­   r   r  r
   rë   rì   rí   r  s       €r0   rƒ   zUdopLayerSelfAttention.__init__o  sT   ø€ Ü‰ÑÔÜ*ØÐ0KÐW`ô
ˆÔô (¨¯©¸F×<UÑ<UÔVˆŒÜ—z‘z &×"5Ñ"5Ó6ˆ�r/   c                 ó–   — | j                  |«      }| j                  ||||||¬«      }	|| j                  |	d   «      z   }|f|	dd  z   }
|
S )N)r@  rB  r"   Ú	use_cacherC  r   r3   )r  r]  rí   )r‹   r#   r!   rB  r"   r_  rC  rD  Únormed_hidden_statesÚattention_outputrS  s              r0   r–   zUdopLayerSelfAttention.forwardw  sp   € ð  $Ÿ™¨}Ó=ÐØ×-Ñ-Ø ØØ'Ø+ØØ/ð .ó 
Ðð &¨¯©Ð5EÀaÑ5HÓ(IÑIˆØ Ð"Ð%5°a°bÐ%9Ñ9ˆØˆr/   rT  )NNNFF©r&   r'   r(   rW  rƒ   r–   r—   r˜   s   @r0   rZ  rZ  n  s*   ø„ ñ7ÈSÐSWÉZõ 7ð ØØØØ÷r/   rZ  c                   ó<   ‡ — e Zd Zddedz  fˆ fd„Z	 	 	 	 dd„Zˆ xZS )ÚUdopLayerCrossAttentionNr  c                 óÜ   •— t         ‰| �  «        t        |d|¬«      | _        t	        |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y )NFr\  rý   )r‚   rƒ   r»   ÚEncDecAttentionr¦   r­   r   r  r
   rë   rì   rí   )r‹   rŒ   r  r�   s      €r0   rƒ   z UdopLayerCrossAttention.__init__‘  sO   ø€ Ü‰ÑÔÜ,¨VÐQVÐbkÔlˆÔÜ'¨¯©¸F×<UÑ<UÔVˆŒÜ—z‘z &×"5Ñ"5Ó6ˆ�r/   c                 ó–   — | j                  |«      }| j                  ||||||¬«      }	|| j                  |	d   «      z   }
|
f|	dd  z   }|S )N)r@  rA  rB  r"   rC  r   r3   )r  rf  rí   )r‹   r#   rA  r!   rB  r"   rC  rD  r`  ra  Úlayer_outputrS  s               r0   r–   zUdopLayerCrossAttention.forward—  so   € ð  $Ÿ™¨}Ó=ÐØ×/Ñ/Ø ØØ-Ø'Ø+Ø/ð 0ó 
Ðð % t§|¡|Ð4DÀQÑ4GÓ'HÑHˆØ�/Ð$4°Q°RÐ$8Ñ8ˆØˆr/   rò   )NNNFrb  r˜   s   @r0   rd  rd  �  s&   ø„ ñ7¨#°©*õ 7ð ØØØ÷r/   rd  c                   óF   ‡ — e Zd Zddedz  fˆ fd„Z	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )Ú	UdopBlockNr  c                 óp  •— t         ‰| �  «        |j                  | _        t        j                  «       | _        | j
                  j                  t        |||¬«      «       | j                  r&| j
                  j                  t        ||¬«      «       | j
                  j                  t        |«      «       y )Nr\  )r  )
r‚   rƒ   r  r
   Ú
ModuleListÚlayerÚappendrZ  rd  rû   r  s       €r0   rƒ   zUdopBlock.__init__±  s…   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒÜ—]‘]“_ˆŒ
Ø�
‰
×ÑÜ"ØÐ4OÐ[dôô	
ð
 �?Š?Ø�J‰J×ÑÔ5°fÈ	ÔRÔSà�
‰
×Ñœ+ fÓ-Õ.r/   c                 óx  —  | j                   d   ||||||	¬«      }|d   }|dd  }|j                  t        j                  k(  r¢t        j                  t        j
                  |«      j                  «       t        j                  |j                  «      j                  dz
  t        j                  |j                  «      j                  «      }t        j                  || |¬«      }| j                  xr |d u}|rç | j                   d   ||||||	¬«      }|d   }|j                  t        j                  k(  r¢t        j                  t        j
                  |«      j                  «       t        j                  |j                  «      j                  dz
  t        j                  |j                  «      j                  «      }t        j                  || |¬«      }||dd  z   } | j                   d   |«      }|j                  t        j                  k(  r¢t        j                  t        j
                  |«      j                  «       t        j                  |j                  «      j                  dz
  t        j                  |j                  «      j                  «      }t        j                  || |¬«      }|f}||z   S )Nr   )r!   rB  r"   r_  rC  r3   iè  )r  Úmax)rA  r!   rB  r"   rC  r4   )rm  rV   r*   râ   r  ÚisinfÚanyÚfinforp  Úclampr  )r‹   r#   r!   rB  Úencoder_hidden_statesÚencoder_attention_maskÚencoder_decoder_position_biasr"   r_  rC  Úreturn_dictrD  Úself_attention_outputsÚattention_outputsÚclamp_valueÚdo_cross_attentionÚcross_attention_outputsrS  s                     r0   r–   zUdopBlock.forward¿  sY  € ð "/ §¡¨A¡ØØ)Ø'Ø+ØØ/ô"
Ðð /¨qÑ1ˆØ2°1°2Ð6Ðð ×Ñ¤%§-¡-Ò/ÜŸ+™+Ü—‘˜MÓ*×.Ñ.Ó0Ü—‘˜M×/Ñ/Ó0×4Ñ4°tÑ;Ü—‘˜M×/Ñ/Ó0×4Ñ4óˆKô
 "ŸK™K¨¸K¸<È[ÔYˆMà!Ÿ_™_ÒRÐ1FÈdÐ1RÐÙØ&3 d§j¡j°¡mØØ!6Ø5Ø;Ø /Ø"3ô'Ð#ð 4°AÑ6ˆMð ×"Ñ"¤e§m¡mÒ3Ü#Ÿk™kÜ—K‘K Ó.×2Ñ2Ó4Ü—K‘K × 3Ñ 3Ó4×8Ñ8¸4Ñ?Ü—K‘K × 3Ñ 3Ó4×8Ñ8ó�ô
 !&§¡¨MÀ¸|ÐQ\Ô ]�ð !2Ð4KÈAÈBÐ4OÑ OÐð '˜Ÿ
™
 2™ }Ó5ˆð ×Ñ¤%§-¡-Ò/ÜŸ+™+Ü—‘˜MÓ*×.Ñ.Ó0Ü—‘˜M×/Ñ/Ó0×4Ñ4°tÑ;Ü—‘˜M×/Ñ/Ó0×4Ñ4óˆKô
 "ŸK™K¨¸K¸<È[ÔYˆMà Ð"ˆð Ð'Ñ'ð	
r/   rT  )	NNNNNNFFTrb  r˜   s   @r0   rj  rj  °  s7   ø„ ñ/ÈSÐSWÉZõ /ð" ØØ"Ø#Ø&*ØØØØ÷J
r/   rj  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚUdopCellEmbeddingsc                 óœ   •— t         ‰| �  «        || _        t        j                  ||«      | _        t        j                  ||«      | _        y rò   )r‚   rƒ   Úmax_2d_position_embeddingsr
   r  Úx_position_embeddingsÚy_position_embeddings)r‹   r�  r…   r�   s      €r0   rƒ   zUdopCellEmbeddings.__init__  s>   ø€ Ü‰ÑÔØ*DˆÔ'ä%'§\¡\Ð2LÈkÓ%ZˆÔ"Ü%'§\¡\Ð2LÈkÓ%ZˆÕ"r/   c                 ób  — t        j                  |dd«      }|| j                  dz
  z  j                  «       }| j	                  |d d …d d …df   «      }| j                  |d d …d d …df   «      }| j	                  |d d …d d …df   «      }| j                  |d d …d d …df   «      }||z   |z   |z   }|S )NrT   r2   r3   r   rS   r   )r*   rX   r�  rZ   r‚  rƒ  )r‹   ri   Úleft_position_embeddingsÚupper_position_embeddingsÚright_position_embeddingsÚlower_position_embeddingsr•   s          r0   r–   zUdopCellEmbeddings.forward  sÊ   € Ü�z‰z˜$  SÓ)ˆØ˜×7Ñ7¸!Ñ;Ñ<×BÑBÓDˆØ#'×#=Ñ#=¸dÂ1ÂaÈÀ7¹mÓ#LÐ Ø$(×$>Ñ$>¸tÂAÂqÈ!ÀG¹}Ó$MÐ!Ø$(×$>Ñ$>¸tÂAÂqÈ!ÀG¹}Ó$MÐ!Ø$(×$>Ñ$>¸tÂAÂqÈ!ÀG¹}Ó$MÐ!ð %Ø'ñ(à'ñ(ð (ñ(ð 	ð Ðr/   )iõ  é   rå   r˜   s   @r0   r  r    s   ø„ õ[ör/   r  )gš™™™™™é?g      ô?c                   óÎ   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 dˆ fd„	Ze	 	 ddedz  deee	f   dz  defd„«       Z
ddedz  deee	f   dz  defd„Zd	„ Zddedz  deee	f   dz  defd
„Zˆ xZS )r¬   a×  
    Base class of relative biases.

    Args:
        num_heads (`int`):
            Number of attention heads in the model, it will create embeddings of size `num_heads`, which will be added to the scores of each token pair.
        relative_attention_num_buckets (`int`, *optional*, defaults to 32):
            Pair token metric (distance in the sequence, distance in pixels etc.) will be bucketed, parameter is defining number of such
            buckets.
        bidirectional (`bool`, *optional*, defaults to `True`):
            Whether the distance should be bidirectional for a pair of tokens. If `False`, then distance(tok1, tok2) == distance(tok2, tok1).
        scaling_factor (`int`, *optional*, defaults to 1):
            Defining factor which will be used to scale relative distance.
        max_distance (`int`, *optional*, defaults to 128):
            All distances above this value will end up in the one/same bucket.
        augmentation (`bool`, *optional*, defaults to `False`):
            Whether to multiply relative distances by a random scalar.
        expand (`bool`, *optional*, defaults to `False`):
            Whether to expand an existing pretrained model with subsequent additions of prefix_bucket.
    Nc
                 ó(  •— t         ‰| �  «        || _        || _        || _        || _        || _        || _        || _        |	| _	        || _
        |r| j                  sdnd}
t        j                  | j                  |
z   | j                  «      | _        y )NrS   r   )r‚   rƒ   Úprefix_bucketÚaugmentationÚlevelr  Úscaling_factorr  r½   Úexpandr  r
   r  r¯   )r‹   r½   r  r  r�  r  rŽ  r�  rŒ  r�  Ú
extra_headr�   s              €r0   rƒ   z!RelativePositionBiasBase.__init__B  sŠ   ø€ ô 	‰ÑÔØ*ˆÔØ(ˆÔØˆŒ
Ø(ˆÔØ,ˆÔØ*ˆÔØ"ˆŒØˆŒØ.LˆÔ+Ù'°·²‘QÀˆ
Ü')§|¡|°D×4WÑ4WÐZdÑ4dÐfj×ftÑftÓ'uˆÕ$r/   r!   ri   Úreturnc                  ó   — y rò   r.   )r‹   r!   ri   s      r0   Úprepare_inputz&RelativePositionBiasBase.prepare_input[  s   € ð 	r/   c                 ó„   — | j                  ||«      }t        || j                  | j                  | j                  ¬«      }|S )Nr!  )r”  Úget_relative_position_bucketr  r  r  )r‹   r!   ri   r  Ú	rp_buckets        r0   Ú
get_bucketz#RelativePositionBiasBase.get_bucketc  sE   € Ø ×.Ñ.¨~¸tÓDÐÜ8ØØ×,Ñ,Ø×;Ñ;Ø×*Ñ*ô	
ˆ	ð Ðr/   c                 óú   — |d d …d d …d f   }|d d …d d d …f   }||z
  }| j                   r%| j                  r|t        j                  t        Ž z  }|| j
                  z  }|j                  t        j                  «      S rò   )	r�  r/  ÚrandomÚuniformÚAUGMENTATION_RANGEr�  rI   r*   rZ   )r‹   Ú	positionsr&  r'  r  s        r0   Úget_relative_positionz.RelativePositionBiasBase.get_relative_positionm  sy   € Ø$¢Qª¨4 ZÑ0ÐØ#¢A tªQ JÑ/ˆØ+Ð.>Ñ>ÐØ×Ò §¢Ø¤§¡Ô1CÐ!DÑDÐØ˜T×0Ñ0Ñ0Ðà ×#Ñ#¤E§J¡JÓ/Ð/r/   c                 óÄ  — | j                   r«| j                  rŸt        j                  | j                  dz   | j
                  «      }| j                  j                  j                  |j                  j                  d | j                   d|j                  j                  | j                  d  || _        d| _         | j                  ||«      }| j                  rÈ|j                  d«      dk(  r6|j                  d«      dkD  r"|j                  |j                  d«      dd«      }|d d …d d …df   dk  }|j                  d«      }t        |j                  «       j                  «       «      D ]4  \  }}| j                  ||d |…|d …f<   | j                  dz   |||d …d |…f<   Œ6 | j                  |«      }	|	j!                  «       dk7  rt#        d«      ‚|	j%                  g d	¢«      }	|	S )
NrS   gš™™™™™¹?Fr   r3   r4   r7   z Wrong dimension of values tensor)r   r   r3   rS   )r�  rŒ  r
   r  r  r½   r¯   r©   Údatar˜  r_   r:   ÚsumÚ	enumerateÚcpuÚnumpyr6   r�   r"  )
r‹   r!   ri   Únew_biasr—  Ú	is_prefixÚ
num_prefixÚidxÚnum_prefix_rowr)  s
             r0   r–   z RelativePositionBiasBase.forwardw  s²  € à�;Š;˜4×-Ò-Ü—|‘| D×$GÑ$GÈ!Ñ$KÈTÏ^É^Ó\ˆHØJN×JfÑJf×JmÑJm×JrÑJrˆH�O‰O× Ñ Ð!F 4×#FÑ#FÐGØJMˆH�O‰O× Ñ  ×!DÑ!DÐ!FÐGØ+3ˆDÔ(ØˆDŒKà—O‘O N°DÓ9ˆ	à×ÒØ�~‰~˜aÓ  AÒ%¨.×*=Ñ*=¸aÓ*@À1Ò*DØ%×,Ñ,¨^×-@Ñ-@ÀÓ-CÀQÈÓJ�	àšQ¢ 1˜W™¨Ñ)ˆIØ"Ÿ™ rÓ*ˆJÜ'0°·±Ó1A×1GÑ1GÓ1IÓ'Jò kÑ#��^ØCG×CfÑCf�	˜#˜ ˜°±Ð?Ñ@ØCG×CfÑCfÐijÑCj�	˜#˜~™°°°Ð?Ò@ðkð ×5Ñ5°iÓ@ˆØ�:‰:‹<˜1ÒÜÐ?Ó@Ð@Ø—‘¢Ó-ˆàˆr/   )	NrU  Tr3   rV  ÚtokensFFF©NN)r&   r'   r(   r)   rƒ   r   r	   ÚdictÚstrr   r”  r˜  rž  r–   r—   r˜   s   @r0   r¬   r¬   ,  sÓ   ø„ ñð. Ø')ØØØØØØØõvð2 ð )-Ø&*ñà ™ðð �3˜�8‰n˜tÑ#ðð 
ò	ó ðñ¨°$©ð ÀTÈ#ÈsÈ(Á^ÐVZÑEZð Ðfló ò0ñ f¨t¡mð À$ÀsÈCÀxÁ.ÐSWÑBWð Ðci÷ r/   r¬   c                   óL   ‡ — e Zd Zdˆ fd„	Zddedz  deeef   dz  defd„Zˆ xZ	S )	ÚRelativePositionBias1Dc                 ó*   •— t        ‰| �  d||dœ|¤Ž y)z²
        Reimplementation of T5 relative position bias. Distance between given tokens is their distance in the sequence.
        Parameters are the same as in base class
        ©r�  r  Nr.   ©r‚   rƒ   ©r‹   r�  r  rD  r�   s       €r0   rƒ   zRelativePositionBias1D.__init__•  ó   ø€ ô
 	‰ÑÐ\¨À\Ñ\ÐU[Ó\r/   Nr!   ri   r’  c                 óä   — | j                   dk7  rt        d«      ‚| j                  t        j                  |j                  d«      t        j                  |j                  ¬«      d d d …f   «      }|S )Nr3   zNo need to scale 1d featuresrU   )r�  r�   rž  r*   r8   r_   rZ   rW   )r‹   r!   ri   r  s       r0   r”  z$RelativePositionBias1D.prepare_inputœ  sf   € Ø×Ñ !Ò#ÜÐ;Ó<Ð<Ø ×6Ñ6Ü�L‰L˜×,Ñ,¨QÓ/´u·z±zÈ.×J_ÑJ_Ô`ÐaeÒghÐahÑió
Ðð !Ð r/   )r3   rV  r«  ©
r&   r'   r(   rƒ   r	   r¬  r­  r   r”  r—   r˜   s   @r0   r¯  r¯  ”  s7   ø„ õ]ñ!¨F°T©Mð !ÈÈSÐRUÈXÉÐY]ÑH]ð !Ðio÷ !r/   r¯  c                   óL   ‡ — e Zd Zdˆ fd„	Zddedz  deeef   dz  defd„Zˆ xZ	S )	ÚRelativePositionBiasHorizontalc                 ó*   •— t        ‰| �  d||dœ|¤Ž y)zŽ
        Represents in the bucket embeddings horizontal distance between two tokens. Parameters are the same as in base
        class
        r±  Nr.   r²  r³  s       €r0   rƒ   z'RelativePositionBiasHorizontal.__init__§  r´  r/   Nr!   ri   r’  c                 ó®   — | j                   dkD  st        d«      ‚|€t        d«      ‚|d d …d d …ddgf   j                  d¬«      }| j                  |«      S )Nr2   úENeed to scale the values of bboxes, as there are in small (0,1) rangez6Bbox is required for horizontal relative position biasr   rS   r4   r5   ©r�  r�   r\   rž  )r‹   r!   ri   Úhorizontal_positions       r0   r”  z,RelativePositionBiasHorizontal.prepare_input®  sb   € Ø×"Ñ" SÒ(ÜÐdÓeÐeØˆ<ÜÐUÓVÐVà&*ª1ªa°!°Q°¨<Ñ&8×&=Ñ&=À"Ð&=Ó&EÐà×)Ñ)Ð*=Ó>Ð>r/   ©éd   r¿  r«  r¶  r˜   s   @r0   r¸  r¸  ¦  s7   ø„ õ]ñ?¨F°T©Mð ?ÈÈSÐRUÈXÉÐY]ÑH]ð ?Ðio÷ ?r/   r¸  c                   óL   ‡ — e Zd Zdˆ fd„	Zddedz  deeef   dz  defd„Zˆ xZ	S )	ÚRelativePositionBiasVerticalc                 ó*   •— t        ‰| �  d||dœ|¤Ž y)zŒ
        Represents in the bucket embeddings vertical distance between two tokens. Parameters are the same as in base
        class
        r±  Nr.   r²  r³  s       €r0   rƒ   z%RelativePositionBiasVertical.__init__º  r´  r/   Nr!   ri   r’  c                 ó®   — | j                   dkD  st        d«      ‚|€t        d«      ‚|d d …d d …ddgf   j                  d¬«      }| j                  |«      S )Nr2   r»  z4Bbox is required for vertical relative position biasr3   r   r4   r5   r¼  )r‹   r!   ri   Úvertical_positions       r0   r”  z*RelativePositionBiasVertical.prepare_inputÁ  sb   € Ø×"Ñ" SÒ(ÜÐdÓeÐeØˆ<ÜÐSÓTÐTà$(ªªA°°1¨v¨Ñ$6×$;Ñ$;ÀÐ$;Ó$CÐà×)Ñ)Ð*;Ó<Ð<r/   r¾  r«  r¶  r˜   s   @r0   rÁ  rÁ  ¹  s7   ø„ õ]ñ=¨F°T©Mð =ÈÈSÐRUÈXÉÐY]ÑH]ð =Ðio÷ =r/   rÁ  c                   ó\   ‡ — e Zd Zdee   fˆ fd„Zddedz  deee	f   dz  de
ez  fd„Zˆ xZS )	ÚRelativePositionBiasAggregatedÚmodulesc                 óV   •— t         ‰| �  «        t        j                  |«      | _        y)z¶
        Class which sums up various computed biases.

        Args:
            modules (Sequence[RelativePositionBiasBase]):
                List of relative bias modules.
        N)r‚   rƒ   r
   rl  Úbiases)r‹   rÇ  r�   s     €r0   rƒ   z'RelativePositionBiasAggregated.__init__Í  s    ø€ ô 	‰ÑÔÜ—m‘m GÓ,ˆ�r/   Nr!   ri   r’  c                 óD   — d}| j                   D ]  } |||«      |z   }Œ |S )NrT   )rÉ  )r‹   r!   ri   Úoutputr£   s        r0   r–   z&RelativePositionBiasAggregated.forwardØ  s2   € ØˆØ—K‘Kò 	9ˆDÙ˜.¨$Ó/°&Ñ8‰Fð	9ð ˆr/   r«  )r&   r'   r(   r   r¬   rƒ   r	   r¬  r­  r   r  r–   r—   r˜   s   @r0   rÆ  rÆ  Ì  sH   ø„ ð	- Ð)AÑ Bõ 	-ñ f¨t¡mð À$ÀsÈCÀxÁ.ÐSWÑBWð ÐchÐkqÑcq÷ r/   rÆ  )Ú1dÚ
horizontalÚverticalrŒ   r’  c                 ó6  — g }t        | d«      rŠ| j                  D ]{  }t        |«      }|j                  d«      }t        | d«      r| j                  n| j
                  }d|v r|d   |k7  rt        d«      ‚||d<   |j                  t        |   di |¤Ž«       Œ} |S )z”
    Creates empty list or one/multiple relative biases.

    :param config: Model's configuration :return: Sequence with created bias modules.
    Úrelative_bias_argsÚtyper½   z4Number of heads must match num of heads in the modelr.   )	r³   rÐ  r   Úpopr½   Únum_attention_headsr�   rn  ÚBIAS_CLASSES)rŒ   Ú	bias_listÚbias_kwargs_orgÚbias_kwargsÚ	bias_typeÚmodel_num_headss         r0   Úcreate_relative_biasrÚ  ç  s®   € ð €IÜˆvÐ+Ô,Ø%×8Ñ8ò 		EˆOÜ" ?Ó3ˆKØ#Ÿ™¨Ó/ˆIÜ29¸&À+Ô2N˜f×.Ò.ÐTZ×TnÑTnˆOØ˜kÑ)Ø˜{Ñ+¨Ò>Ü$Ð%[Ó\Ð\à+:�˜KÑ(Ø×Ñœ\¨)Ñ4ÑC°{ÑCÕDð		Eð Ðr/   c                   óz   ‡ — e Zd ZdZˆ fd„Zededefd„«       Zd„ Z	d„ Z
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	deez  fd„Zˆ xZS )
Ú	UdopStackz‡
    This class is based on `T5Stack`, but modified to take into account the image modality as well as 2D position
    embeddings.
    c                 óØ  •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        t        |«      | _        |j                  | _	        |j                  | _
        t        j                  t        | j                  «      D �cg c]  }t        |t        |dk(  «      |¬«      ‘Œ c}«      | _        t!        |j
                  |j"                  ¬«      | _        t        j&                  |j(                  «      | _        | j                  s%t-        |j.                  |j0                  «      | _        | j5                  |«      | _        | j9                  «        y c c}w )Nr   r\  rý   )r‚   rƒ   r
   r  Ú
vocab_sizer­   Úembed_tokensr~   Úembed_patchesr  Ú
num_layersrl  rd   rj  ra   Úblockr¦   r   Úfinal_layer_normrë   rì   rí   r  r�  r…   Úcell_2d_embeddingÚ_get_relative_biasÚrelative_biasÚ	post_init)r‹   rŒ   rw   r�   s      €r0   rƒ   zUdopStack.__init__  s
  ø€ Ü‰Ñ˜Ô äŸL™L¨×):Ñ):¸F¿N¹NÓKˆÔÜ0°Ó8ˆÔØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒä—]‘]Ü_dÐei×etÑetÓ_uÖvÐZ[ŒY�v¼4ÀÀQÁ»<ÐSTÖUÒvó
ˆŒ
ô !.¨f¯n©nÀ&×B[ÑB[Ô \ˆÔä—z‘z &×"5Ñ"5Ó6ˆŒà�ŠÜ%7¸×8YÑ8YÐ[a×[mÑ[mÓ%nˆDÔ"ð "×4Ñ4°VÓ<ˆÔØ�‰Õùò ws   Â!E'rŒ   r’  c                 ó.   — t        | «      }t        |«      S rò   )rÚ  rÆ  )rŒ   Úrelative_bias_lists     r0   rå  zUdopStack._get_relative_bias  s   € ä1°&Ó9ÐÜ-Ð.@ÓAÐAr/   c                 ó   — | j                   S rò   ©rß  ©r‹   s    r0   Úget_output_embeddingszUdopStack.get_output_embeddings  s   € Ø× Ñ Ð r/   c                 ó   — || _         y rò   rë  ©r‹   Únew_embeddingss     r0   Úset_input_embeddingszUdopStack.set_input_embeddings!  s
   € Ø*ˆÕr/   c                 ó~  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|�$|�"| j
                  rdnd}t        d|› d|› d�«      ‚|�?t        j                  |«      dkD  r'|j                  «       }|j                  d|d   «      }�nN|�€|��t        j                  |«      dk(  røt        j                  d| j                   j                  |j                  |j                  ¬	«      }t        j                  d|j                  |j                  ¬	«      }t        j                  d
|j                  |j                  ¬	«      }|j                  «       }t        j                   |d d …d d d d …f   «      j#                  | j                  «      }
t$        j'                  d«       n8|�|j                  «       d d }n"| j
                  rdnd}t        d|› d|› d�«      ‚|€(| j(                  €t        d«      ‚| j)                  |«      }|�| j+                  |«      }	|	�| j                   j,                  | j                   j.                  z  }t1        |	|||||d| j                   j,                  | j                   j.                  «	      \  }}}|j                  «       d d }| j
                  s|�|| j3                  |«      z  }|\  }}|du r| j
                  sJ d| › d�«       ‚| j
                  rf|rr|€p| j                   j4                  r5t7        t9        | j                   ¬«      t9        | j                   ¬«      «      }n%t9        | j                   ¬«      }n| j
                  sd }|�|j;                  «       nd}|€1t=        «       s'||z   }t        j>                  |||j                  ¬«      }| j                   j
                  rtA        | j                   |||¬«      }nX|d d …d d d d …f   }|j#                  |j                  ¬«      }d|z
  t        jB                  |j                  «      jD                  z  }| j
                  r|�tG        | j                   |||¬«      }nd }|rdnd }|rdnd }|r| j
                  rdnd }| j
                  rd }
n| jI                  ||¬«      }
|
|z   }
d }|}| jK                  |«      }tM        | jN                  «      D ]a  \  }} |r||fz   } | |||
||||||¬«	      }!|!d   }|!d   }
| j
                  r|�	|!|rdnd   }|sŒC||!d   fz   }| j
                  sŒY||!d   fz   }Œc | jQ                  |«      }| jK                  |«      }|r||fz   }|stS        d „ ||||||fD «       «      S tU        ||||||¬!«      S )"NÚdecoder_Ú zYou cannot specify both zinputs and zinputs_embeds at the same timer   r4   )r7   r‰  r-  )r7   r‰  r7   zEmpty batchzYou have to specify either z
inputs or rh   z<You have to initialize the model with valid token embeddingsTz)`use_cache` can only be set to `True` if z is used as a decoder)rŒ   )rW   )rŒ   rh   r!   r"   )rV   r2   )rŒ   rh   r!   ru  r.   )r!   ri   )r"   r_  rC  r3   r   rS   r7   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wrò   r.   )Ú.0rÀ   s     r0   ú	<genexpr>z$UdopStack.forward.<locals>.<genexpr>Ô  s   è ø€ ò àð �=ô ñùs   ‚)r    r!   r"   r#   r$   r%   )+rŒ   r_  rC  Úoutput_hidden_statesrx  r  r�   r*   Únumelr_   r<   ÚfullrÊ   rW   rV   r9  rf   rI   r  Úwarningrß  rà  r=   r>   r|   rä  Úis_encoder_decoderr   r   r0  r   re   r   rs  r  r   ræ  rí   r¢  râ  rã  r-   r   )"r‹   rÏ   r!   ri   ru  rv  rh   r‘   rj   rg   rB  r"   r_  rC  rø  rx  rD  Úerr_msg_prefixrE  rk   r’   Ú
seq_lengthÚpast_key_values_lengthÚmask_seq_lengthrO  Úencoder_extended_attention_maskÚall_hidden_statesÚall_attentionsÚall_cross_attentionsrw  r#   rw   Úlayer_moduleÚlayer_outputss"                                     r0   r–   zUdopStack.forward$  sì  € ð& "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø1BÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆð Ð  ]Ð%>Ø+/¯?ª?™ZÀˆNÜØ*¨>Ð*:¸+ÀnÐEUÐUsÐtóð ð Ð"¤u§{¡{°9Ó'=ÀÒ'AØ#Ÿ.™.Ó*ˆKØ!Ÿ™ r¨;°r©?Ó;ŠIØÑ" yÑ'<ÄÇÁÈYÓAWÐ[\ÒA\ÜŸ
™
 9¨d¯k©k×.FÑ.FÈy×O_ÑO_Ðgp×gvÑgvÔwˆIÜ"Ÿ[™[¨¸9×;KÑ;KÐS\×SbÑSbÔcˆNÜ—;‘;˜|°I×4DÑ4DÈIÏOÉOÔ\ˆDØ#Ÿ.™.Ó*ˆKÜ!×,Ñ,¨^ºA¸tÀTÊ1Ð<LÑ-MÓN×QÑQÐRV×R\ÑR\Ó]ˆMÜ�N‰N˜=Õ)ØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰Kà+/¯?ª?™ZÀˆNÜÐ:¸>Ð:JÈ*ÐUcÐTdÐdqÐrÓsÐsàÐ Ø× Ñ Ð(Ü Ð!_Ó`Ð`Ø ×-Ñ-¨iÓ8ˆMàÐ#Ø#×1Ñ1°,Ó?ÐàÐ'àŸ+™+×0Ñ0°D·K±K×4JÑ4JÑJˆKÜ2OØ ØØØØØØØ—‘×&Ñ&Ø—‘×&Ñ&ó
3Ñ/ˆM˜4 ð (×,Ñ,Ó.¨s°Ð3ˆKà�Š 4Ð#3Ø˜T×3Ñ3°DÓ9Ñ9ˆMà!,Ñˆ
�Jà˜ÑØ—?’?ÐkÐ&OÐPTÈvÐUjÐ$kÓk�?à�?Š?Ù˜_Ð4Ø—;‘;×1Ò1Ü&9Ü$¨D¯K©KÔ8¼,ÈdÏkÉkÔ:Zó'‘Oô '3¸$¿+¹+Ô&F‘OØ—’ð #ˆOàETÐE` ×!?Ñ!?Ô!AÐfgÐØÐ!Ô*BÔ*Dà4°zÑAˆOÜ"ŸZ™Z¨
°OÈM×L`ÑL`ÔaˆNà�;‰;×!Ò!Ü,Ø—{‘{Ø+Ø-Ø /ô	‰Kð )ª¨D°$ºÐ)9Ñ:ˆKØ%Ÿ.™.¨}×/BÑ/B˜.ÓCˆKØ Ñ,´·±¸M×<OÑ<OÓ0P×0TÑ0TÑTˆKà�?Š?Ð5ÐAÜ.GØ—{‘{Ø+Ø5Ø&;ô	/Ñ+ð /3Ð+á"6™B¸DÐÙ0™°dˆÙ&7¸D¿OºO™rÐRVÐà�?Š?Ø ‰Mà ×.Ñ.¸nÐSWÐ.ÓXˆMØ)¨KÑ7ˆMØ(,Ð%à%ˆàŸ™ ]Ó3ˆä(¨¯©Ó4ò 	V‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!á(ØØØØ%Ø/Ø-Ø /Ø#Ø"3ô
ˆMð *¨!Ñ,ˆMð *¨!Ñ,ˆMØ�ŠÐ#8Ð#DØ0=ÑCT¹aÐZ[Ñ0\Ð-â Ø!/°=ÀÑ3CÐ2EÑ!E�Ø—?“?Ø+?À=ÐQRÑCSÐBUÑ+UÑ(ð;	Vð> ×-Ñ-¨mÓ<ˆØŸ™ ]Ó3ˆñ  Ø 1°]Ð4DÑ DÐáÜñ ð "Ø"Ø#Ø%Ø"Ø(ðôó ð ô 0Ø+Ø)Ø+Ø+Ø%Ø1ô
ð 	
r/   ©NNNNNNNNNNNNNNN)r&   r'   r(   r)   rƒ   rX  r   rÆ  rå  rí  rñ  r-   r   r–   r—   r˜   s   @r0   rÜ  rÜ  ý  s„   ø„ ñô
ð, ðB :ð BÐ2Pò Bó ðBò!ò+ð
 ØØØ"Ø#ØØØØØØØØØ!Øñ!D
ð$ 
Ð1Ñ	1÷%D
r/   rÜ  c            #       ó  ‡ — e Zd ZdddddœZˆ fd„Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	edz  d
edz  de	e
ef   dz  dedz  de	e
ef   dz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  deez  f d„«       Zˆ xZS )r°   úshared.weightúpatch_embed.proj.weightúpatch_embed.proj.bias)úencoder.embed_tokens.weightúdecoder.embed_tokens.weightú!encoder.embed_patches.proj.weightúencoder.embed_patches.proj.biasc                 óz  •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        t        |«      | _        t        |«      }d|_
        d|_        t        |«      | _        t        |«      }d|_
        |j                  |_        t        |«      | _        | j#                  «        y )NFT)r‚   rƒ   r
   r  rÞ  r­   r±   r~   Úpatch_embedr   r  r_  rÜ  ÚencoderÚnum_decoder_layersrá  Údecoderrç  ©r‹   rŒ   Úencoder_configÚdecoder_configr�   s       €r0   rƒ   zUdopModel.__init__ô  s™   ø€ Ü‰Ñ˜Ô ô —l‘l 6×#4Ñ#4°f·n±nÓEˆŒÜ.¨vÓ6ˆÔä! &Ó)ˆØ$)ˆÔ!Ø#(ˆÔ Ü  Ó0ˆŒä! &Ó)ˆØ$(ˆÔ!Ø$*×$=Ñ$=ˆÔ!Ü  Ó0ˆŒð 	�‰Õr/   c                 ó   — | j                   S rò   ©r±   rì  s    r0   Úget_input_embeddingszUdopModel.get_input_embeddings  ó   € Ø�{‰{Ðr/   c                 ó~   — || _         | j                  j                  |«       | j                  j                  |«       y rò   ©r±   r  rñ  r  rï  s     r0   rñ  zUdopModel.set_input_embeddings  ó-   € Ø$ˆŒØ�‰×)Ñ)¨.Ô9Ø�‰×)Ñ)¨.Õ9r/   NrÏ   r!   ri   r‘   rj   Údecoder_input_idsÚdecoder_attention_maskrh   Úencoder_outputsr"   Údecoder_inputs_embedsr_  rC  rø  rx  r’  c                 óH  — |�|n| j                   j                  }|�|n| j                   j                  }|	€| j                  |||||||||¬«	      }	|	d   }|r|	j                  n|	d   }| j                  ||||
||||||¬«
      }|s;t        d„ t        |«      D «       «      }t        d„ t        |	«      D «       «      }	||	z   S t        |j                  |j                  |j                  |j                  |j                  |	j                  |	j                  |	j                  ¬«      S )aA  
        bbox (`torch.LongTensor` of shape `({0}, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner.

            Note that `sequence_length = token_sequence_length + patch_sequence_length + 1` where `1` is for [CLS]
            token. See `pixel_values` for `patch_sequence_length`.
        visual_bbox (`torch.LongTensor` of shape `(batch_size, patch_sequence_length, 4)`, *optional*):
            Bounding boxes of each patch in the image. If not provided, bounding boxes are created in the model.
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary. Indices can be obtained using
            [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.
            [What are decoder input IDs?](../glossary#decoder-input-ids) T5 uses the `pad_token_id` as the starting
            token for `decoder_input_ids` generation. If `past_key_values` is used, optionally only the last
            `decoder_input_ids` have to be input (see `past_key_values`). To know more on how to prepare
            `decoder_input_ids` for pretraining take a look at [T5 Training](./t5#training).
        decoder_attention_mask (`torch.BoolTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.

        Example:

        ```python
        >>> from transformers import AutoProcessor, AutoModel
        >>> from datasets import load_dataset
        >>> import torch

        >>> # load model and processor
        >>> # in this case, we already have performed OCR ourselves
        >>> # so we initialize the processor with `apply_ocr=False`
        >>> processor = AutoProcessor.from_pretrained("microsoft/udop-large", apply_ocr=False)
        >>> model = AutoModel.from_pretrained("microsoft/udop-large")

        >>> # load an example image, along with the words and coordinates
        >>> # which were extracted using an OCR engine
        >>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
        >>> example = dataset[0]
        >>> image = example["image"]
        >>> words = example["tokens"]
        >>> boxes = example["bboxes"]
        >>> inputs = processor(image, words, boxes=boxes, return_tensors="pt")

        >>> decoder_input_ids = torch.tensor([[model.config.decoder_start_token_id]])

        >>> # forward pass
        >>> outputs = model(**inputs, decoder_input_ids=decoder_input_ids)
        >>> last_hidden_states = outputs.last_hidden_state
        >>> list(last_hidden_states.shape)
        [1, 1, 1024]
        ```)	rÏ   r!   ri   r‘   rj   rh   rC  rø  rx  r   r3   ©
rÏ   r!   rh   r"   ru  rv  r_  rC  rø  rx  c              3   ó2   K  — | ]  \  }}|d k7  sŒ|–— Œ y­w©r3   Nr.   ©rö  r¨  Úvalues      r0   r÷  z$UdopModel.forward.<locals>.<genexpr>|  ó   è ø€ Ò#c©j¨c°5ÐZ]ÐabÓZb¤EÑ#cùó   ‚�c              3   ó2   K  — | ]  \  }}|d k7  sŒ|–— Œ y­wr&  r.   r'  s      r0   r÷  z$UdopModel.forward.<locals>.<genexpr>}  r)  r*  )r    r"   Údecoder_hidden_statesÚdecoder_attentionsr%   Úencoder_last_hidden_stateru  Úencoder_attentions)rŒ   r_  rx  r  r!   r  r-   r¢  r   r    r"   r#   r$   r%   )r‹   rÏ   r!   ri   r‘   rj   r  r   rh   r!  r"   r"  r_  rC  rø  rx  rD  r#   rv  Údecoder_outputss                       r0   r–   zUdopModel.forward  sL  € ðP "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆð Ð"Ø"Ÿl™lØ#Ø-ØØ)Ø'Ø+Ø"3Ø%9Ø'ð +ó 
ˆOð (¨Ñ*ˆÙCN ×!?Ò!?ÐTcÐdeÑTfÐð Ÿ,™,Ø'Ø1Ø/Ø+Ø"/Ø#9ØØ/Ø!5Ø#ð 'ó 
ˆñ ä#Ñ#c¼IÀoÓ<VÔ#cÓcˆOÜ#Ñ#c¼IÀoÓ<VÔ#cÓcˆOØ" _Ñ4Ð4ä!Ø-×?Ñ?Ø+×;Ñ;Ø"1×"?Ñ"?Ø.×9Ñ9Ø,×=Ñ=Ø&5×&GÑ&GØ"1×"?Ñ"?Ø.×9Ñ9ô	
ð 		
r/   r  )r&   r'   r(   Ú_tied_weights_keysrƒ   r  rñ  r   r	   r¬  r­  r   r   ra   r-   r   r–   r—   r˜   s   @r0   r°   r°   ë  so  ø„ ð (7Ø'6Ø-FØ+Bñ	Ðôò(ò:ð
 ð $(Ø(,Ø&*Ø&*Ø-1Ø+/Ø04Ø'+Ø)-Ø(,Ø/3Ø!%Ø)-Ø,0Ø#'ñ!x
à˜D‘=ðx
ð  ™ðx
ð �3˜�8‰n˜tÑ#ð	x
ð
 ˜t‘mðx
ð ˜#˜s˜(‘^ dÑ*ðx
ð " D™=ðx
ð !'¨¡ðx
ð  ‘}ðx
ð   $™ðx
ð  ™ðx
ð  &¨™}ðx
ð ˜$‘;ðx
ð   $™;ðx
ð # T™kðx
ð  ˜D‘[ð!x
ð$ 
Ð#Ñ	#ò%x
ó ôx
r/   r°   a  
    The UDOP encoder-decoder Transformer with a language modeling head on top, enabling to generate text given document
    images and an optional prompt.

    This class is based on [`T5ForConditionalGeneration`], extended to deal with images and layout (2D) data.
    c            %       ó0  ‡ — e Zd ZddddddddœZˆ fd„Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
ed	z  ded	z  de	e
ef   d	z  ded	z  de	e
ef   d	z  ded	z  ded	z  ded	z  ded	z  ded	z  ded	z  ded	z  ded	z  ded	z  ded	z  ded	z  deez  f"d„«       Zˆ xZS )r²   r	  r
  r  úDencoder.block.0.layer.0.SelfAttention.relative_attention_bias.weight)r  r  r  r  ú=encoder.relative_bias.biases.0.relative_attention_bias.weightz=decoder.relative_bias.biases.0.relative_attention_bias.weightzlm_head.weightc                 óÜ  •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        t        |«      | _        t        |«      }d|_
        d|_        t        |«      | _        t        |«      }d|_
        |j                  |_        t        |«      | _        t        j"                  |j
                  |j                  d¬«      | _        | j'                  «        y )NFTré   )r‚   rƒ   r
   r  rÞ  r­   r±   r~   r  r   r  r_  rÜ  r  r  rá  r  rê   r¢   rç  r  s       €r0   rƒ   z%UdopForConditionalGeneration.__init__Ÿ  s¹   ø€ Ü‰Ñ˜Ô ô —l‘l 6×#4Ñ#4°f·n±nÓEˆŒÜ.¨vÓ6ˆÔä! &Ó)ˆØ$)ˆÔ!Ø#(ˆÔ Ü  Ó0ˆŒä! &Ó)ˆØ$(ˆÔ!Ø$*×$=Ñ$=ˆÔ!Ü  Ó0ˆŒô —y‘y §¡°×1BÑ1BÈÔOˆŒð 	�‰Õr/   c                 ó   — | j                   S rò   r  rì  s    r0   r  z1UdopForConditionalGeneration.get_input_embeddings¶  r  r/   c                 ó~   — || _         | j                  j                  |«       | j                  j                  |«       y rò   r  rï  s     r0   rñ  z1UdopForConditionalGeneration.set_input_embeddings¹  r  r/   NrÏ   r!   ri   r‘   rj   r  r   rh   r!  r"   r"  r_  rC  rø  rx  Úlabelsr’  c                 óH  — |�|n| j                   j                  }|�|n| j                   j                  }|€|�| j                  |«      }|	€| j	                  |||||||||¬«	      }	|	d   }|r|	j
                  n|	d   }| j                  ||||
||||||¬«
      }|d   }| j                   j                  r|| j                   j                  dz  z  }| j                  |«      }d}|�Ct        d¬«      } ||j                  d	|j                  d	«      «      |j                  d	«      «      }|s |f|d
d z   |	d   fz   |	d
d z   }|�|f|z   S |S t        |||j                  |j                  |j                   |j"                  |	j$                  |	j                  |	j                   ¬«	      S )a0  
        bbox (`torch.LongTensor` of shape `({0}, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner.

            Note that `sequence_length = token_sequence_length + patch_sequence_length + 1` where `1` is for [CLS]
            token. See `pixel_values` for `patch_sequence_length`.
        visual_bbox (`torch.LongTensor` of shape `(batch_size, patch_sequence_length, 4)`, *optional*):
            Bounding boxes of each patch in the image. If not provided, bounding boxes are created in the model.
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary. Indices can be obtained using
            [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.
            [What are decoder input IDs?](../glossary#decoder-input-ids) T5 uses the `pad_token_id` as the starting
            token for `decoder_input_ids` generation. If `past_key_values` is used, optionally only the last
            `decoder_input_ids` have to be input (see `past_key_values`). To know more on how to prepare
            `decoder_input_ids` for pretraining take a look at [T5 Training](./t5#training).
        decoder_attention_mask (`torch.BoolTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the language modeling loss. Indices should be in `[-100, 0, ..., config.vocab_size -
            1]`. All labels set to `-100` are ignored (masked), the loss is only computed for labels in `[0, ...,
            config.vocab_size]`.

        Examples:

        ```python
        >>> from transformers import AutoProcessor, UdopForConditionalGeneration
        >>> from datasets import load_dataset

        >>> # load model and processor
        >>> # in this case, we already have performed OCR ourselves
        >>> # so we initialize the processor with `apply_ocr=False`
        >>> processor = AutoProcessor.from_pretrained("microsoft/udop-large", apply_ocr=False)
        >>> model = UdopForConditionalGeneration.from_pretrained("microsoft/udop-large")

        >>> # load an example image, along with the words and coordinates
        >>> # which were extracted using an OCR engine
        >>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
        >>> example = dataset[0]
        >>> image = example["image"]
        >>> words = example["tokens"]
        >>> boxes = example["bboxes"]

        >>> # one can use the various task prefixes (prompts) used during pre-training
        >>> # e.g. the task prefix for DocVQA is "Question answering. "
        >>> question = "Question answering. What is the date on the form?"
        >>> encoding = processor(image, question, text_pair=words, boxes=boxes, return_tensors="pt")

        >>> # autoregressive generation
        >>> predicted_ids = model.generate(**encoding)
        >>> print(processor.batch_decode(predicted_ids, skip_special_tokens=True)[0])
        9/30/92
        ```N©	rÏ   ri   rj   r‘   r!   rh   rC  rø  rx  r   r3   r$  r¡   rÈ   )Úignore_indexr4   rS   )	ÚlossÚlogitsr"   r,  r-  r%   r.  ru  r/  )rŒ   r_  rx  rÑ   r  r!   r  r´   r­   r¢   r   r<   r_   r   r"   r#   r$   r%   r    )r‹   rÏ   r!   ri   r‘   rj   r  r   rh   r!  r"   r"  r_  rC  rø  rx  r8  rD  r#   rv  r0  Úsequence_outputÚ	lm_logitsr<  Úloss_fctrË  s                             r0   r–   z$UdopForConditionalGeneration.forward¾  sò  € ð\ "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ$¨Ð);Ø $× 1Ñ 1°&Ó 9Ðð Ð"Ø"Ÿl™lØ#ØØ'Ø)Ø-Ø+Ø"3Ø%9Ø'ð +ó 
ˆOð (¨Ñ*ˆÙCN ×!?Ò!?ÐTcÐdeÑTfÐð Ÿ,™,Ø'Ø1Ø/Ø+Ø"/Ø#9ØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆà�;‰;×*Ò*Ø-°·±×1DÑ1DÀdÑ1JÑKˆOà—L‘L Ó1ˆ	àˆØÐÜ'°TÔ:ˆHÙ˜IŸN™N¨2¨y¯~©~¸bÓ/AÓBÀFÇKÁKÐPRÃOÓTˆDáØ�\ O°A°BÐ$7Ñ7¸?È1Ñ;MÐ:OÑOÐRaÐbcÐbdÐReÑeˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEäØØØ+×;Ñ;Ø"1×"?Ñ"?Ø.×9Ñ9Ø,×=Ñ=Ø&5×&GÑ&GØ"1×"?Ñ"?Ø.×9Ñ9ô

ð 
	
r/   )NNNNNNNNNNNNNNNN)r&   r'   r(   r1  rƒ   r  rñ  r   r	   r¬  r­  r   r   ra   r-   r   r–   r—   r˜   s   @r0   r²   r²   Œ  s‘  ø„ ð (7Ø'6Ø-FØ+Bð JPð JPØ)ñÐôò.ò:ð
 ð $(Ø(,Ø&*Ø&*Ø-1Ø+/Ø04Ø'+Ø)-Ø(,Ø/3Ø!%Ø)-Ø,0Ø#'Ø $ñ#L
à˜D‘=ðL
ð  ™ðL
ð �3˜�8‰n˜tÑ#ð	L
ð
 ˜t‘mðL
ð ˜#˜s˜(‘^ dÑ*ðL
ð " D™=ðL
ð !'¨¡ðL
ð  ‘}ðL
ð   $™ðL
ð  ™ðL
ð  &¨™}ðL
ð ˜$‘;ðL
ð   $™;ðL
ð # T™kðL
ð  ˜D‘[ð!L
ð" ˜‘ð#L
ð& 
�Ñ	 ò'L
ó ôL
r/   r²   c                   óö   ‡ — e Zd ZdddddœZdefˆ fd„Zd„ Zd	„ Ze	 	 	 	 	 	 	 	 	 dde	d
z  de
eef   d
z  de	d
z  de	d
z  de
eef   d
z  de	d
z  ded
z  ded
z  ded
z  deej                      ez  fd„«       Zˆ xZS )ÚUdopEncoderModelr	  r
  r  r3  )r  r  r  r4  rŒ   c                 ó"  •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        t        |«      | _        t        |«      }d|_
        d|_        d|_        t        |«      | _        | j                  «        y )NF)r‚   rƒ   r
   r  rÞ  r­   r±   r~   r  r   r  r_  rü  rÜ  r  rç  )r‹   rŒ   r  r�   s      €r0   rƒ   zUdopEncoderModel.__init__W  su   ø€ Ü‰Ñ˜Ô ô —l‘l 6×#4Ñ#4°f·n±nÓEˆŒÜ.¨vÓ6ˆÔä! &Ó)ˆØ$)ˆÔ!Ø#(ˆÔ Ø,1ˆÔ)Ü  Ó0ˆŒð 	�‰Õr/   c                 ó   — | j                   S rò   r  rì  s    r0   r  z%UdopEncoderModel.get_input_embeddingsg  r  r/   c                 óH   — || _         | j                  j                  |«       y rò   )r±   r  rñ  rï  s     r0   rñ  z%UdopEncoderModel.set_input_embeddingsj  s   € Ø$ˆŒØ�‰×)Ñ)¨.Õ9r/   NrÏ   ri   r!   r‘   rj   rh   rC  rø  rx  r’  c
                 óÖ   — |�|n| j                   j                  }|�|n| j                   j                  }|	�|	n| j                   j                  }	| j	                  |||||||||	¬«	      }|S )aÎ	  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. T5 is a model with relative position embeddings so you
            should be able to pad the inputs on both the right and the left.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for detail.

            To know more on how to prepare `input_ids` for pretraining take a look a [T5 Training](./t5#training).
        bbox (`torch.LongTensor` of shape `({0}, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner.

            Note that `sequence_length = token_sequence_length + patch_sequence_length + 1` where `1` is for [CLS]
            token. See `pixel_values` for `patch_sequence_length`.
        visual_bbox (`torch.LongTensor` of shape `(batch_size, patch_sequence_length, 4)`, *optional*):
            Bounding boxes of each patch in the image. If not provided, bounding boxes are created in the model.

        Example:

        ```python
        >>> from transformers import AutoProcessor, UdopEncoderModel
        >>> from huggingface_hub import hf_hub_download
        >>> from datasets import load_dataset

        >>> # load model and processor
        >>> # in this case, we already have performed OCR ourselves
        >>> # so we initialize the processor with `apply_ocr=False`
        >>> processor = AutoProcessor.from_pretrained("microsoft/udop-large", apply_ocr=False)
        >>> model = UdopEncoderModel.from_pretrained("microsoft/udop-large")

        >>> # load an example image, along with the words and coordinates
        >>> # which were extracted using an OCR engine
        >>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
        >>> example = dataset[0]
        >>> image = example["image"]
        >>> words = example["tokens"]
        >>> boxes = example["bboxes"]
        >>> encoding = processor(image, words, boxes=boxes, return_tensors="pt")

        >>> outputs = model(**encoding)
        >>> last_hidden_states = outputs.last_hidden_state
        ```r:  )rŒ   rC  rø  rx  r  )r‹   rÏ   ri   r!   r‘   rj   rh   rC  rø  rx  rD  r!  s               r0   r–   zUdopEncoderModel.forwardn  s‰   € ðv 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàŸ,™,ØØØ#Ø%Ø)Ø'Ø/Ø!5Ø#ð 'ó 

ˆð Ðr/   )	NNNNNNNNN)r&   r'   r(   r1  r   rƒ   r  rñ  r   r	   r¬  r­  r   ra   r-   r*   r+   r   r–   r—   r˜   s   @r0   rB  rB  N  s  ø„ ð (7Ø-FØ+Bð JPñ	Ðð˜zõ ò ò:ð ð $(Ø&*Ø(,Ø&*Ø-1Ø'+Ø)-Ø,0Ø#'ñLà˜D‘=ðLð �3˜�8‰n˜tÑ#ðLð  ™ð	Lð
 ˜t‘mðLð ˜#˜s˜(‘^ dÑ*ðLð  ‘}ðLð   $™;ðLð # T™kðLð ˜D‘[ðLð 
ˆu× Ñ Ñ	!Ð$DÑ	DòLó ôLr/   rB  )r²   rš   r°   rB  )éà   é   )r   )Né   r   rG  rH  )Rr)   r†   Úloggingr  rš  r‡   r   r   Úcollections.abcr   Úcopyr   Údataclassesr   Útypingr   r*   r	   r
   Útorch.nnr   Útransformersr   Útransformers.modeling_outputsr   r   rô  r   r§   Úactivationsr   Úcache_utilsr   r   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_utilsr   Úutilsr   r   r   Ú	getLoggerr&   r  r   rC   rQ   r|   ÚModuler~   rš   r¦   rµ   r¸   rû   r»   rZ  rd  rj  r  r  r–  rœ  r¬   r¯  r¸  rÁ  rÆ  rÔ  rÚ  rÜ  r°   r²   rB  Ú__all__r.   r/   r0   ú<module>r\     s“  ðñ ã Û Û Û ß #Ý $Ý Ý !Ý ã ß Ý %å #÷õ
 'Ý !ß CÑ CÝ )ß JÝ 9Ý -÷ñ ð 
ˆ×	Ñ	˜8Ó	$€ñ ðôð ô#= {ó #=ó óð#=óLó.
ð$ ØØØØóP/ôf˜"Ÿ)™)ô ð: ôN!˜/ó N!ó ðN!ôd+�B—I‘Iô +ô4˜Ÿ	™	ô ô.˜RŸY™Yô ô<�"—)‘)ô ô&�B—I‘Iô ôF˜RŸY™Yô ôD˜bŸi™iô ô@Y
Ð*ô Y
ôx˜Ÿ™ô ð8  -×FÑFÐ Ø!Ð ôe˜rŸy™y¨#ô eôP!Ð5ô !ô$?Ð%=ô ?ô&=Ð#;ô =ô& R§Y¡Yô ð* !Ø0Ø,ñ€ð ð °Ð9QÑ0Ró ô,k
Ð#ô k
ð\ ô]
Ð#ó ]
ó ð]
ñ@ ðôôw
Ð#6¸ó w
óðw
ðt ôlÐ*ó ló ðlò^ c�r/   