§
    ‚Štjš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j0        e1¦  «        Z2 e.d¬¦  «        e G d„ de-¦  «        ¦   «         ¦   «         Z3dNd„Z4dOd„Z5	 	 	 	 	 dPd„Z6 G d„ d ej7        ¦  «        Z8e. G d!„ d"e+¦  «        ¦   «         Z9 G d#„ d$ej7        ¦  «        Z: G d%„ d&ej7        ¦  «        Z; G d'„ d(ej7        ¦  «        Z< G d)„ d*ej7        ¦  «        Z= G d+„ d,ej7        ¦  «        Z> G d-„ d.ej7        ¦  «        Z? G d/„ d0ej7        ¦  «        Z@ G d1„ d2e)¦  «        ZA G d3„ d4ej7        ¦  «        ZBe>jC        ZDd5ZE G d6„ d7ej7        e¦  «        ZF G d8„ d9eF¦  «        ZG G d:„ d;eF¦  «        ZH G d<„ d=eF¦  «        ZI G d>„ d?ej7        ¦  «        ZJeGeHeId@œZKdAedBe	eF         fdC„ZL G dD„ dEe9¦  «        ZMe. G dF„ dGe9¦  «        ¦   «         ZN e.dH¬¦  «         G dI„ dJe9e$¦  «        ¦   «         ZOe. G dK„ dLe9¦  «        ¦   «         ZPg dM¢ZQdS )Qz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<   dS )	Ú 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%   © ó    úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/udop/modeling_udop.pyr   r   5   s»   € € € € € € ðð ð: 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø/3€N�EÔ%¨Ñ,Ð3Ð3Ñ3Ø$(€O�U˜T‘\Ð(Ð(Ñ(Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ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…                              |d         d¦  «        |d d…                              |d         d¦  «                             dd¦  «        |dd …                              |d         d¦  «        |dd …                              |d         d¦  «                             dd¦  «        gd¬¦  «        }|                     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_bboxrE   b   sg  € Ø *¨jÑ 8¸*È
Ñ:RÐSÐÝ”L  CÐ+CÀAÔ+FÈÑ+JÑ$KÈSÑQÔQ€MØÐ-¨aÔ0Ñ0€Må”L  CÐ+CÀAÔ+FÈÑ+JÑ$KÈSÑQÔQ€MØÐ-¨aÔ0Ñ0€Måœà˜#˜2˜#Ô×%Ò%Ð&>¸qÔ&AÀ1ÑEÔEØ˜#˜2˜#Ô×%Ò%Ð&>¸qÔ&AÀ1ÑEÔE×OÒOÐPQÐSTÑUÔUØ˜!˜"˜"Ô×$Ò$Ð%=¸aÔ%@À!ÑDÔDØ˜!˜"˜"Ô×$Ò$Ð%=¸aÔ%@À!ÑDÔD×NÒNÈqÐRSÑTÔTð		
ð ðñ ô Ðð *×.Ò.¨r°1Ñ5Ô5ÐàÐr/   c                 óH  — t          | t          j        ¦  «        r| j        d         }n#t	          | ¦  «        }t          j        | ¦  «        } ||z
  }|dk    rCt          j        |g|z  ¦  «                             | ¦  «        }t          j        | |gd¬¦  «        } | d |…         S )Nr   r7   )	Ú
isinstancer*   r	   ÚshapeÚlenÚtensorr;   ÚtoÚcat)ÚseqÚ
target_lenÚ	pad_valueÚnÚmÚrets         r0   Úpad_sequencerS   y   s™   € Ý�#•u”|Ñ$Ô$ð  ØŒI�aŒLˆˆå�‰HŒHˆÝŒl˜3ÑÔˆØ�Q‰€AØˆ1‚u€uÝŒk˜9˜+¨™/Ñ*Ô*×-Ò-¨cÑ2Ô2ˆÝŒi˜˜c˜
¨Ð*Ñ*Ô*ˆØˆ{�
ˆ{ÔÐr/   é   c	                 óB  ‡ ‡‡‡‡‡— |}	t          j        t          j        ‰dd…dd…df         ‰dd…dd…df         z   dz  |	z  ¦  «                             ¦   «         d|	dz
  ¦  «        }
t          j        t          j        ‰dd…dd…df         ‰dd…dd…df         z   dz  |	z  ¦  «                             ¦   «         d|	dz
  ¦  «        |	z  }|
|z   }‰                     t           j        ¦  «        Š‰                     d¦  «        dk    ‰                     d¦  «        d	k    z  }t          j        ‰ d|                     d¦  «         	                    dd‰  
                    d¦  «        ¦  «        ¦  «        }d||<   ||z  }t          j        ‰ dd…dd…df         d
¦  «                             ¦   «         Št          j        t          j        t          |¦  «        ¦  «        dd…df          	                    d| 
                    d¦  «        ¦  «        dd…dd…df                              |¦  «        |dd…dd…df         gd¬¦  «        }|                     dd¦  «        }t#          |Ž \  }}d‰||f<   ˆ ˆfd„t%          t          ‰¦  «        ¦  «        D ¦   «         }‰€ht'          ||¬¦  «        Š‰                     d¦  «         	                    ‰  
                    d¦  «        dd¦  «        Š‰                     ‰ j        ¦  «        Šˆˆfd„t%          t          ‰¦  «        ¦  «        D ¦   «         Š‰�ˆfd„‰D ¦   «         }‰dk    r‰  
                    d¦  «        Šn‰| 
                    d¦  «        z
  Št          j        ˆ ˆfd„|D ¦   «         ¦  «        }t          j        ˆˆfd„‰D ¦   «         ¦  «        Š‰�!t          j        ˆˆfd„|D ¦   «         ¦  «        }t          j        ||gd¦  «        }t          j        ‰‰gd¦  «        Š‰�t          j        ‰|gd¦  «        Š|‰‰fS )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       @r5   r   r6   ç        r4   Tr7   Fc                 ó8   •— g | ]}‰|         ‰|                  ‘ŒS r.   r.   )Ú.0ÚiÚimage_embeddingsÚ
patch_indss     €€r0   ú
<listcomp>z1combine_image_text_embeddings.<locals>.<listcomp>·   s(   ø€ Ð_Ð_Ð_À1Ð,¨QÔ/°
¸1´Ô>Ð_Ð_Ð_r/   )r?   r@   c                 ó8   •— g | ]}‰|         ‰|                  ‘ŒS r.   r.   )rY   rZ   r\   Úvisual_bboxs     €€r0   r]   z1combine_image_text_embeddings.<locals>.<listcomp>¾   s&   ø€ ÐQÐQÐQ°Q�;˜q”> *¨Q¤-Ô0ÐQÐQÐQr/   c                 óx   •— g | ]6}t          j        |                     d ¦  «        ‰j        ‰j        ¬¦  «        ‘Œ7S )r   ©ÚdtypeÚdevice)r*   ÚonesÚsizerb   rc   )rY   Úitemr!   s     €r0   r]   z1combine_image_text_embeddings.<locals>.<listcomp>Á   sG   ø€ ð !
ð !
ð !
Øcg�EŒJ�t—y’y ‘|”|¨>Ô+?ÈÔH]Ð^Ñ^Ô^ð!
ð !
ð !
r/   c           
      ób   •— g | ]+}t          |‰t          j        ‰d          ¦  «        ¦  «        ‘Œ,S ©)r   r   ©rS   r*   Ú
zeros_like)rY   rf   r[   Úmax_lens     €€r0   r]   z1combine_image_text_embeddings.<locals>.<listcomp>Ê   s7   ø€ ÐpÐpÐpÐSW��d˜G¥UÔ%5Ð6FÀtÔ6LÑ%MÔ%MÑ	NÔ	NÐpÐpÐpr/   c           
      ób   •— g | ]+}t          |‰t          j        ‰d          ¦  «        ¦  «        ‘Œ,S rh   ri   )rY   rf   Úbboxrk   s     €€r0   r]   z1combine_image_text_embeddings.<locals>.<listcomp>Ì   s6   ø€ ÐqÐqÐqÐ]a�|¨D°'½5Ô;KÈDÐQUÌJÑ;WÔ;WÑXÔXÐqÐqÐqr/   c           
      ób   •— g | ]+}t          |‰t          j        ‰d          ¦  «        ¦  «        ‘Œ,S rh   ri   )rY   rf   r!   rk   s     €€r0   r]   z1combine_image_text_embeddings.<locals>.<listcomp>Ï   s6   ø€ ÐsÐsÐsÐUY�\˜$ ­Ô)9¸.ÈÔ:NÑ)OÔ)OÑPÔPÐsÐsÐsr/   )r*   ÚclipÚfloorÚlongrK   Úfloat64ÚmeanÚgatherÚ	unsqueezer<   re   Ú	full_likeÚboolrL   r:   rI   ÚflattenÚzipÚrangerE   rc   r;   )r[   Úinputs_embedsrm   r_   r!   Únum_patchesrk   r?   r@   Úsequence_lengthÚocr_points_xÚocr_points_yÚ
ocr_pointsÚ
target_segÚrepeated_vision_embedsÚindÚrowsÚcolsÚinput_vision_patchesÚvisual_attention_maskÚinputs_vision_patchesr\   s   ` ``` `              @r0   Úcombine_image_text_embeddingsr‰   †   s‘  øøøøøø€ ð& "€OÝ”:ÝŒ�T˜!˜!˜!˜Q˜Q˜Q ˜'”] T¨!¨!¨!¨Q¨Q¨Q°¨'¤]Ñ2°cÑ9¸OÑKÑLÔL×QÒQÑSÔSÐUVÐXgÐjkÑXkñô €Lõ 	Œ
•5”;  Q Q Q¨¨¨¨1 W¤°°Q°Q°Q¸¸¸¸1°W´Ñ =ÀÑDÀÑVÑWÔW×\Ò\Ñ^Ô^Ð`aÐcrÐuvÑcvÑwÔwØ
ñ	ð ð  Ñ,€Jà�7Š7•5”=Ñ!Ô!€DØ—)’)˜B‘-”- 3Ò&¨4¯9ª9°R©=¬=¸CÒ+?Ñ@€JÝ"œ\Ø˜!˜Z×1Ò1°"Ñ5Ô5×<Ò<¸QÀÐCS×CXÒCXÐY[ÑC\ÔC\Ñ]Ô]ñô Ðð *-Ð˜:Ñ&ØÐ+Ñ+€Må”Ð!1°!°!°!°Q°Q°Q¸°'Ô!:¸DÑAÔA×FÒFÑHÔH€JÝ
Œ)åŒL�˜Z™œÑ)Ô)¨!¨!¨!¨T¨'Ô2×9Ò9¸!¸Z¿_º_ÈRÑ=PÔ=PÑQÔQÐRSÐRSÐRSÐUVÐUVÐUVÐX\ÐR\Ô]×`Ò`ÐakÑlÔlØ�q�q�q˜!˜!˜!˜T�zÔ"ð	
ð ðñ ô €Cð �+Š+�a˜Ñ
Ô
€CÝ�c��J€Dˆ$Ø"€Jˆt�TˆzÑà_Ð_Ð_Ð_Ð_ÍÍcÐR\ÉoÌoÑH^ÔH^Ð_Ñ_Ô_ÐàÐÝ%°È
ÐSÑSÔSˆØ!×+Ò+¨AÑ.Ô.×5Ò5Ð6F×6KÒ6KÈAÑ6NÔ6NÐPQÐSTÑUÔUˆØ!—n’nÐ%5Ô%<Ñ=Ô=ˆàQÐQÐQÐQÐQ½%ÅÀJÁÄÑ:PÔ:PÐQÑQÔQ€KàÐ!ð!
ð !
ð !
ð !
Økvð!
ñ !
ô !
Ðð �!‚|€|Ø"×'Ò'¨Ñ*Ô*ˆˆà˜M×.Ò.¨qÑ1Ô1Ñ1ˆÝ!œKØpÐpÐpÐpÐpÐ[oÐpÑpÔpñô Ðõ ”+ÐqÐqÐqÐqÐqÐepÐqÑqÔqÑrÔr€KØÐ!Ý %¤ØsÐsÐsÐsÐsÐ]rÐsÑsÔsñ!
ô !
Ðõ ”I˜}Ð.CÐDÀaÑHÔH€MÝŒ9�d˜KÐ(¨!Ñ,Ô,€DØÐ!Ýœ NÐ4IÐ#JÈAÑNÔNˆØ˜$ Ð.Ð.r/   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        ||||¬¦  «        | _        d S )Nr5   r   )Úkernel_sizeÚstride)ÚsuperÚ__init__r?   r@   Únum_channelsÚhidden_sizerG   ÚcollectionsÚabcÚIterabler|   r
   ÚConv2dÚproj)ÚselfÚconfigr?   r@   r‘   r’   r|   Ú	__class__s          €r0   r�   zUdopPatchEmbeddings.__init__Ü   sá   ø€ Ý‰Œ×ÒÑÔÐØ!'Ô!2°FÔ4E�Jˆ
Ø$*Ô$7¸Ô9K�kˆå#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ø! !”}¨
°1¬Ñ5¸*ÀQ¼-È:ÐVWÌ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔå”I˜l¨KÀZÐXbÐcÑcÔcˆŒ	ˆ	ˆ	r/   c                 óB  — |j         \  }}}}|| j        d         k    s|| j        d         k    r2t          d|› d|› d| j        d         › d| j        d         › d�	¦  «        ‚|                      |¦  «        }|                     d¦  «                             dd¦  «        }|S )Nr   r5   zInput image size (Ú*z) doesn't match model (z).rV   )rH   r?   Ú
ValueErrorr—   rx   r=   )r˜   Úpixel_valuesÚ
batch_sizer‘   ÚheightÚwidthÚ
embeddingss          r0   ÚforwardzUdopPatchEmbeddings.forwardë   s¼   € Ø2>Ô2DÑ/ˆ
�L &¨%Ø�T”_ QÔ'Ò'Ð'¨5°D´OÀAÔ4FÒ+FÐ+FÝØw VÐwÐw¨eÐwÐwÈDÌOÐ\]ÔL^ÐwÐwÐaeÔapÐqrÔasÐwÐwÐwñô ð ð —Y’Y˜|Ñ,Ô,ˆ
Ø×'Ò'¨Ñ*Ô*×4Ò4°Q¸Ñ:Ô:ˆ
ØÐr/   )r&   r'   r(   r)   r�   r£   Ú__classcell__©rš   s   @r0   r‹   r‹   Ù   sR   ø€ € € € € Ø&Ð&ðdð dð dð dð dðð ð ð ð ð ð r/   r‹   c                   óp   ‡ — 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  ¦  «         dS t	          |t          j
        ¦  «        r@t          j        |j        d|¬¦  «         |j        �t          j        |j        ¦  «         dS dS t	          |t          ¦  «        rA| j        j        }| j        j        }t          j        |j        j        d||dz  z  ¬¦  «         dS t	          |t$          ¦  «        r&t          j        |j        j        d|dz  ¬¦  «         dS t	          |t(          ¦  «        rFt+          |d¦  «        r2| j        j        s(t          j        |j        j        d|dz  ¬¦  «         dS dS dS t	          |t0          ¦  «        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        ¦  «         dS dS dS t	          |t8          ¦  «        �rVt          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        |j        j        d|| j        j        dz  z  ¬¦  «         t+          |j        d¦  «        r,|j        j        �"t          j        |j        j        ¦  «         dS dS dS t	          |t>          ¦  «        rö| j        j        }| j        j         }| j        j!        }t          j        |j"        j        d|||z  dz  z  ¬¦  «         t          j        |j#        j        d||dz  z  ¬¦  «         t          j        |j$        j        d||dz  z  ¬¦  «         t          j        |j%        j        d|||z  dz  z  ¬¦  «         |j&        r+t          j        |j        j        d||dz  z  ¬¦  «         dS dS dS )zInitialize the weightsr4   rW   )rs   ÚstdNç      à¿Úlm_headÚbias)'r�   Ú_init_weightsr™   Úinitializer_factorrG   Ú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   s   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ø”Ô/ˆÝ�f�mÑ,Ô,ð )	pÝŒN˜6œ=¨&°3©,Ñ7Ô7Ð7Ð7Ð7Ý˜¥¤	Ñ*Ô*ð '	pÝÔ˜vœ}°3¸FÐCÑCÔCÐCØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ð(Ð(ð 'Ð&å˜Õ 8Ñ9Ô9ð #	pØ”[Ô3ˆFØ”kÔ)ˆGÝŒL˜Ô7Ô>ÀSÈfÐY`ÐeiÑXiÑNjÐkÑkÔkÐkÐkÐkÝ˜¥	Ñ*Ô*ð 	pÝŒL˜œÔ-°C¸VÀc¹\ÐJÑJÔJÐJÐJÐJÝ˜Õ <Ñ=Ô=ð 	pÝ�v˜yÑ)Ô)ð P°$´+Ô2Qð PÝ”˜Vœ^Ô2¸À&È3Á,ÐOÑOÔOÐOÐOÐOðPð Pð Pð På˜Õ 1Ñ2Ô2ð 	pÝŒL˜œÔ)°¸ÀDÄKÔDWÐ\`ÑC`Ñ9aÐbÑbÔbÐbÝ�v”y &Ñ)Ô)ð ,¨f¬i¬nÐ.HÝ”˜FœIœNÑ+Ô+Ð+ÝŒL˜œÔ)°¸ÀDÄKÔDTÐY]ÑC]Ñ9^Ð_Ñ_Ô_Ð_Ý�v”y &Ñ)Ô)ð ,¨f¬i¬nÐ.HÝ”˜FœIœNÑ+Ô+Ð+Ð+Ð+ð,ð ,Ð.HÐ.Hå˜Õ 6Ñ7Ô7ñ 	pÝŒL˜œÔ+°#¸6ÀdÄkÔFYÐ^bÑEbÑ;cÐdÑdÔdÐdÝ�v”{ FÑ+Ô+ð .°´Ô0@Ð0LÝ”˜FœKÔ,Ñ-Ô-Ð-ÝŒL˜œÔ+°#¸6ÀdÄkÔFYÐ^bÑEbÑ;cÐdÑdÔdÐdÝ�v”{ FÑ+Ô+ð .°´Ô0@Ð0LÝ”˜FœKÔ,Ñ-Ô-Ð-ÝŒL˜œÔ)°¸ÀDÄKÔDTÐY]ÑC]Ñ9^Ð_Ñ_Ô_Ð_Ý�v”y &Ñ)Ô)ð ,¨f¬i¬nÐ.HÝ”˜FœIœNÑ+Ô+Ð+Ð+Ð+ð,ð ,Ð.HÐ.Hå˜¥Ñ.Ô.ð 		pØ”kÔ)ˆGØ!%¤Ô!1ÐØ”kÔ+ˆGÝŒL˜œœ¨s¸À7ÐM_ÑC_ÐdhÑBhÑ8iÐjÑjÔjÐjÝŒL˜œœ¨s¸À'È4Á-Ñ8PÐQÑQÔQÐQÝŒL˜œœ¨s¸À'È4Á-Ñ8PÐQÑQÔQÐQÝŒL˜œœ¨s¸À7ÐM_ÑC_ÐdhÑBhÑ8iÐjÑjÔjÐjØÔ1ð pÝ”˜VÔ;ÔBÈÐRXÐ]dÐimÑ\mÑRnÐoÑoÔoÐoÐoÐoð		pð 		pðpð pr/   c                 óŠ  — | j         j        }| j         j        }|€
J d¦   «         ‚|                     |j        ¦  «        }|dd d…f                              ¦   «         |ddd …f<   ||d<   |€
J d¦   «         ‚|                     |dk    |¦  «         t          j        |dk    ¦  «         	                    ¦   «         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.r6   r5   ).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_zerosrH   ÚcloneÚmasked_fill_r*   Úallrf   )r˜   Ú	input_idsrÖ   r×   Úshifted_input_idss        r0   Ú_shift_rightz UdopPreTrainedModel._shift_right1  sè   € Ø!%¤Ô!CÐØ”{Ô/ˆà%Ð1Ð1ð@ñ 2Ô1Ð1ð &×/Ò/°	´Ñ@Ô@ÐØ%.¨s°C°R°C¨xÔ%8×%>Ò%>Ñ%@Ô%@Ð˜#˜q˜r˜r˜'Ñ"Ø$:Ð˜&Ñ!àÐ'Ð'Ð)\Ñ'Ô'Ð'à×&Ò&Ð'8¸DÒ'@À,ÑOÔOÐOåŒyÐ*¨aÒ/Ñ0Ô0×5Ò5Ñ7Ô7ÐsÐsÐ9sÑsÔ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§   ö   s�   ø€ € € € € € àÐÐÑØ%ÐØ(ÐØ&*Ð#à"ÐØ!˜FÐà€U„]�_„_ð-pð -pð -pð -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        |¦  «        ¦  «        | _        || _        dS )ze
        Construct a layernorm module in the Udop style. No bias and no subtraction of mean.
        N)r�   r�   r
   Ú	Parameterr*   rd   r¶   Úvariance_epsilon)r˜   r’   Úepsrš   s      €r0   r�   zUdopLayerNorm.__init__J  sD   ø€ õ 	‰Œ×ÒÑÔÐÝ”l¥5¤:¨kÑ#:Ô#:Ñ;Ô;ˆŒØ #ˆÔÐÐr/   c                 óh  — |                      t          j        ¦  «                             d¦  «                             dd¬¦  «        }|t          j        || j        z   ¦  «        z  }| j        j        t          j	        t          j
        fv r|                      | j        j        ¦  «        }| j        |z  S )NrV   r6   T)Úkeepdim)rK   r*   Úfloat32Úpowrs   Úrsqrtré   r¶   rb   Úfloat16Úbfloat16)r˜   r#   Úvariances      r0   r£   zUdopLayerNorm.forwardR  s–   € ð !×#Ò#¥E¤MÑ2Ô2×6Ò6°qÑ9Ô9×>Ò>¸rÈ4Ð>ÑPÔPˆØ%­¬°H¸tÔ?TÑ4TÑ(UÔ(UÑUˆð Œ;Ô¥¤µ´Ð ?Ð?Ð?Ø)×,Ò,¨T¬[Ô->Ñ?Ô?ˆMàŒ{˜]Ñ*Ð*r/   )ræ   ©r&   r'   r(   r�   r£   r¤   r¥   s   @r0   r³   r³   I  sL   ø€ € € € € ð$ð $ð $ð $ð $ð $ð+ð +ð +ð +ð +ð +ð +r/   r³   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )rÂ   r™   c                 óJ  •— t          ¦   «                              ¦   «          t          j        |j        |j        d¬¦  «        | _        t          j        |j        |j        d¬¦  «        | _        t          j        |j	        ¦  «        | _
        t          |j                 | _        d S ©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  sx   ø€ Ý‰Œ×ÒÑÔÐÝ”)˜FœN¨F¬K¸eÐDÑDÔDˆŒÝ”)˜FœK¨¬¸eÐDÑDÔDˆŒÝ”z &Ô"5Ñ6Ô6ˆŒÝ˜&Ô-Ô.ˆŒˆˆr/   c                 ó°  — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }t          | j        j        t          j        ¦  «        r]|j        | j        j        j        k    rC| j        j        j        t          j	        k    r$| 
                    | j        j        j        ¦  «        }|                      |¦  «        }|S ©N)rÃ   rý   rû   rG   r«   r¶   r*   r	   rb   Úint8rK   )r˜   r#   s     r0   r£   zUdopDenseActDense.forwardk  s¨   € ØŸš Ñ.Ô.ˆØŸš Ñ/Ô/ˆØŸš ]Ñ3Ô3ˆå�t”w”~¥u¤|Ñ4Ô4ð	CàÔ# t¤w¤~Ô';Ò;Ð;Ø””Ô$­¬
Ò2Ð2à)×,Ò,¨T¬W¬^Ô-AÑBÔBˆMØŸš Ñ.Ô.ˆØÐr/   ©r&   r'   r(   r   r�   r£   r¤   r¥   s   @r0   rÂ   rÂ   c  sS   ø€ € € € € ð/˜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                 | _        d S 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˜fœn¨f¬kÀÐFÑFÔFˆŒ	Ý”I˜fœn¨f¬kÀÐFÑFÔFˆŒ	Ý”)˜FœK¨¬¸eÐDÑDÔDˆŒÝ”z &Ô"5Ñ6Ô6ˆŒÝ˜&Ô-Ô.ˆŒˆˆr/   c                 óà  — |                       |                      |¦  «        ¦  «        }|                      |¦  «        }||z  }|                      |¦  «        }t	          | j        j        t          j        ¦  «        r]|j	        | j        j        j	        k    rC| j        j        j	        t          j
        k    r$|                     | j        j        j	        ¦  «        }|                      |¦  «        }|S r   )rý   rÆ   rÇ   rû   rG   r«   r¶   r*   r	   rb   r  rK   )r˜   r#   Úhidden_geluÚhidden_linears       r0   r£   zUdopDenseGatedActDense.forwardƒ  sÀ   € Ø—h’h˜tŸyšy¨Ñ7Ô7Ñ8Ô8ˆØŸ	š	 -Ñ0Ô0ˆØ# mÑ3ˆØŸš ]Ñ3Ô3ˆõ �t”w”~¥u¤|Ñ4Ô4ð	CàÔ# t¤w¤~Ô';Ò;Ð;Ø””Ô$­¬
Ò2Ð2à)×,Ò,¨T¬W¬^Ô-AÑBÔBˆMàŸš Ñ.Ô.ˆØÐr/   r  r¥   s   @r0   rÅ   rÅ   z  sS   ø€ € € € € ð/˜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        ¦  «        | _        d S )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__™  sx   ø€ Ý‰Œ×ÒÑÔÐØÔð 	<Ý"8¸Ñ"@Ô"@ˆDÔÐå"3°FÑ";Ô";ˆDÔå'¨¬¸FÔ<UÐVÑVÔVˆŒÝ”z &Ô"5Ñ6Ô6ˆŒˆˆr/   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }||                      |¦  «        z   }|S r   )r  r  rû   )r˜   r#   Úforwarded_statess      r0   r£   zUdopLayerFF.forward£  sF   € ØŸ?š?¨=Ñ9Ô9ÐØ×.Ò.Ð/?Ñ@Ô@ÐØ%¨¯ªÐ5EÑ(FÔ(FÑFˆØÐr/   r  r¥   s   @r0   r	  r	  ˜  sS   ø€ € € € € ð7˜zð 7ð 7ð 7ð 7ð 7ð 7ðð ð ð ð ð ð r/   r	  c                   óf   ‡ — 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È   FNr™   Ú	layer_idxc                 ó*  •— t          ¦   «                              ¦   «          |j        | _        || _        |j        | _        |j        | _        |j        | _        |j        | _        |j	        | _
        |j        | _        | j
        | j        z  | _        || _        |€/| j        r(t                               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'          j        | j        | j
        ¦  «        | _        d| _        d S )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ˆÔ+Ø/5Ô/UˆÔ,Ø”~ˆŒØ"(¤+ˆÔØÔ'ˆŒØÔ*ˆŒØœ¨Ô(?Ñ?ˆŒØ"ˆŒØÐ ¤ÐÝ×Òð,¨4¬>Ô+Bð ,ð ,ð ,ñô ð õ ”˜4œ<¨¬¸eÐDÑDÔDˆŒÝ”˜4œ<¨¬¸eÐDÑDÔDˆŒÝ”˜4œ<¨¬¸eÐDÑDÔDˆŒÝ”˜4œ>¨4¬<¸eÐDÑDÔDˆŒàÔ+ð 	kÝ+-¬<¸Ô8[Ð]aÔ]iÑ+jÔ+jˆDÔ(à&+ˆÔ#Ð#Ð#r/   Té    é€   c                 óP  — d}|rC|dz  }|| dk                          t          j        ¦  «        |z  z  }t          j        | ¦  «        } n(t          j        | t          j        | ¦  «        ¦  «         } |dz  }| |k     }|t          j        |                      ¦   «         |z  ¦  «        t          j        ||z  ¦  «        z  ||z
  z                        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   rV   r5   )rK   r*   rq   ÚabsÚminrj   ÚlogÚfloatÚmathrv   Ú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>  € ð, ÐØð 	cØ˜AÑˆKØÐ!2°QÒ!6× :Ò :½5¼:Ñ FÔ FÈÑ TÑTÐÝ %¤	Ð*;Ñ <Ô <ÐÐå!&¤Ð+<½eÔ>NÐO`Ñ>aÔ>aÑ!bÔ!bÐ bÐð   1Ñ$ˆ	Ø$ yÒ0ˆð &/ÝŒIÐ'×-Ò-Ñ/Ô/°)Ñ;Ñ<Ô<ÝŒh�| iÑ/Ñ0Ô0ñ1à˜YÑ&ñ(÷ Š"�UŒZ‰.Œ.ñ	&Ð"õ
 &+¤YØ&­¬Ð8RÐT_ÐbcÑTcÑ(dÔ(dñ&
ô &
Ð"ð 	�EœK¨Ð2CÐE_Ñ`Ô`Ñ`ÐØÐr/   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	        ¬¦  «        }|                       |¦  «        }	|	 
                    g d¢¦  «                             d¦  «        }	|	S )z%Compute binned relative position biasNra   ©r(  r)  r*  )rV   r   r5   r   )r¼   r¶   rc   r*   r:   rq   r/  r  r  r  Úpermuteru   )
r˜   Úquery_lengthÚ
key_lengthrc   Úpast_seen_tokensÚcontext_positionÚmemory_positionr'  Úrelative_position_bucketÚvaluess
             r0   Úcompute_biaszUdopAttention.compute_biasþ  sí   € àˆ>ØÔ1Ô8Ô?ˆFÝ œ<¨½E¼JÈvÐVÑVÔVÐWXÐWXÐWXÐZ^ÐW^Ô_ÐbrÑrÐÝœ, z½¼ÈFÐSÑSÔSÐTXÐZ[ÐZ[ÐZ[ÐT[Ô\ˆØ+Ð.>Ñ>ÐØ#'×#AÒ#AØØ#œÐ.ØÔ;ØÔ=ð	 $Bñ $
ô $
Ð ð ×-Ò-Ð.FÑGÔGˆØ—’ 	 	 	Ñ*Ô*×4Ò4°QÑ7Ô7ˆØˆr/   c                 ó�  — |j         dd…         }g |¢d‘| j        ‘R }	|�|                     | j        ¦  «        nd}
t	          |
t
          j        ¦  «        r|
                     ¦   «         n|
}
|du}|                      |¦  «         	                    |	¦  «         
                    dd¦  «        }d}t	          |t          ¦  «        r1|j                             | j        ¦  «        }|r|j        }n
|j        }n|}|r|n|}|r3|�1|r/|j        | j                 j        }|j        | j                 j        }nÚg |j         dd…         ¢d‘| j        ‘R }|                      |¦  «         	                    |¦  «         
                    dd¦  «        }|                      |¦  «         	                    |¦  «         
                    dd¦  «        }|�E|                     ||| j        ¦  «        \  }}|r$t	          |t          ¦  «        rd|j        | j        <   t          j        || 
                    dd¦  «        ¦  «        }|€ª|j         d	         }| j        sLt          j        d|j         d         |d         |f|j        |j        ¬
¦  «        }| j        r| j        rd|_        n$|                      |d         ||j        |
¬¦  «        }|�$|dd…dd…dd…d|j         d	         …f         }||z   }|}||z  }t>          j          !                    | "                    ¦   «         d¬¦  «         #                    |¦  «        }t>          j          $                    || j$        | j        ¬¦  «        }t          j        ||¦  «        }| 
                    dd¦  «         %                    ¦   «         } |j&        g |¢d‘R Ž }|  '                    |¦  «        }||f}|r||fz   }|S )z€
        Self-attention (if key_value_states is None) or attention over source sentence (provided by key_value_states).
        Nr6   r   r5   rV   FTr   éþÿÿÿ©rc   rb   )rc   r5  r7   )ÚpÚtraining)(rH   rÒ   Úget_seq_lengthr  rG   r*   r	   rÙ   rË   r>   r=   r   Ú
is_updatedÚgetÚcross_attention_cacheÚself_attention_cacheÚlayersÚkeysr9  rÌ   rÍ   ÚupdateÚmatmulrÏ   Úzerosrc   rb   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_shaper5  Úis_cross_attentionÚquery_statesrA  Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚkv_shapeÚscoresr4  Úcausal_maskÚposition_bias_maskedÚattn_weightsÚattn_outputÚoutputss                             r0   r£   zUdopAttention.forward  s  € ð $Ô)¨#¨2¨#Ô.ˆØB˜ÐB bÐB¨$Ô*AÐBÐBˆØM\ÐMh˜?×9Ò9¸$¼.ÑIÔIÐIÐnoÐå7AÐBRÕTYÔT`Ñ7aÔ7aÐwÐ+×1Ò1Ñ3Ô3Ð3ÐgwÐð .°TÐ9Ðà—v’v˜mÑ,Ô,×1Ò1°,Ñ?Ô?×IÒIÈ!ÈQÑOÔOˆð ˆ
Ý�oÕ':Ñ;Ô;ð 	3Ø(Ô3×7Ò7¸¼ÑGÔGˆJØ!ð Là'6Ô'LÐ$Ð$à'6Ô'KÐ$Ð$à#2Ð à-?ÐRÐ)Ð)À]ˆØð 	F /Ð"=À*Ð"=à-Ô4°T´^ÔDÔIˆJØ/Ô6°t´~ÔFÔMˆLˆLàP˜Ô-¨c¨r¨cÔ2ÐP°BÐP¸Ô8OÐPÐPˆHØŸš Ñ/Ô/×4Ò4°XÑ>Ô>×HÒHÈÈAÑNÔNˆJØŸ6š6 .Ñ1Ô1×6Ò6°xÑ@Ô@×JÒJÈ1ÈaÑPÔPˆLàÐ*Ø+?×+FÒ+FÀzÐS_ÐaeÔaoÑ+pÔ+pÑ(�
˜Là%ð F­*°_ÕFYÑ*ZÔ*Zð FØAE�OÔ.¨t¬~Ñ>õ ”˜l¨J×,@Ò,@ÀÀAÑ,FÔ,FÑGÔGˆàÐ Ø#Ô)¨"Ô-ˆJØÔ3ð 	Ý %¤Ø˜Ô*¨1Ô-¨{¸1¬~¸zÐJÐSYÔS`ÐhnÔhtð!ñ !ô !�ð Ô.ð 7°4´=ð 7Ø26�MÔ/øà $× 1Ò 1Ø ”N J°v´}ÐWgð !2ñ !ô !�ð ÐØ" 1 1 1 a a a¨¨¨Ð,B¨jÔ.>¸rÔ.BÐ,BÐ#BÔC�Ø -°Ñ ;�à,ÐØÐ&Ñ&ˆõ ”}×,Ò,¨V¯\ª\©^¬^ÀÐ,ÑDÔD×LÒLÈVÑTÔTˆÝ”}×,Ò,¨\¸T¼\ÐTXÔTaÐ,ÑbÔbˆå”l <°Ñ>Ô>ˆà!×+Ò+¨A¨qÑ1Ô1×<Ò<Ñ>Ô>ˆØ)�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;ˆØ—f’f˜[Ñ)Ô)ˆà Ð.ˆàð 	0Ø  Ñ/ˆGØˆr/   ©FN)Tr  r  )Nr   )NNNNF)r&   r'   r(   r   Úintr�   Ústaticmethodr/  r:  r£   r¤   r¥   s   @r0   rÈ   rÈ   «  sÃ   ø€ € € € € ð %*Ø $ð	 ,ð  ,àð ,ð ˜‘:ð	 ,ð  ,ð  ,ð  ,ð  ,ð  ,ðD ð- ð - ð - ñ „\ð- ð^ð ð ð ð( ØØØØð[ð [ð [ð [ð [ð [ð [ð [r/   rÈ   c                   ó>   ‡ — e Zd Zddedz  fˆ fd„Z	 	 	 	 	 dd„Zˆ xZS )ÚUdopLayerSelfAttentionFNr  c                 óò   •— t          ¦   «                              ¦   «          t          |||¬¦  «        | _        t	          |j        |j        ¬¦  «        | _        t          j	        |j
        ¦  «        | _        d S )N©rÏ   r  r  )r�   r�   rÈ   ÚSelfAttentionr³   rº   r  r  r
   rù   rú   rû   r  s       €r0   r�   zUdopLayerSelfAttention.__init__o  sl   ø€ Ý‰Œ×ÒÑÔÐÝ*ØÐ0KÐW`ð
ñ 
ô 
ˆÔõ (¨¬¸FÔ<UÐVÑVÔVˆŒÝ”z &Ô"5Ñ6Ô6ˆŒˆˆr/   c                 ó¾   — |                       |¦  «        }|                      ||||||¬¦  «        }	||                      |	d         ¦  «        z   }|f|	dd …         z   }
|
S )N)rP  rR  r"   Ú	use_cacherS  r   r5   )r  rk  rû   )r˜   r#   r!   rR  r"   rm  rS  rT  Únormed_hidden_statesÚattention_outputrc  s              r0   r£   zUdopLayerSelfAttention.forwardw  s}   € ð  $Ÿš¨}Ñ=Ô=ÐØ×-Ò-Ø ØØ'Ø+ØØ/ð .ñ 
ô 
Ðð &¨¯ªÐ5EÀaÔ5HÑ(IÔ(IÑIˆØ Ð"Ð%5°a°b°bÔ%9Ñ9ˆØˆr/   rd  )NNNFF©r&   r'   r(   re  r�   r£   r¤   r¥   s   @r0   rh  rh  n  ss   ø€ € € € € ð7ð 7ÈSÐSWÉZð 7ð 7ð 7ð 7ð 7ð 7ð ØØØØðð ð ð ð ð ð ð r/   rh  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
        ¦  «        | _        d S )NFrj  r  )r�   r�   rÈ   ÚEncDecAttentionr³   rº   r  r  r
   rù   rú   rû   )r˜   r™   r  rš   s      €r0   r�   z UdopLayerCrossAttention.__init__‘  sc   ø€ Ý‰Œ×ÒÑÔÐÝ,¨VÐQVÐbkÐlÑlÔlˆÔÝ'¨¬¸FÔ<UÐVÑVÔVˆŒÝ”z &Ô"5Ñ6Ô6ˆŒˆˆr/   Fc                 ó¾   — |                       |¦  «        }|                      ||||||¬¦  «        }	||                      |	d         ¦  «        z   }
|
f|	dd …         z   }|S )N)rP  rQ  rR  r"   rS  r   r5   )r  rt  rû   )r˜   r#   rQ  r!   rR  r"   rS  rT  rn  ro  Úlayer_outputrc  s               r0   r£   zUdopLayerCrossAttention.forward—  s|   € ð  $Ÿš¨}Ñ=Ô=ÐØ×/Ò/Ø ØØ-Ø'Ø+Ø/ð 0ñ 
ô 
Ðð % t§|¢|Ð4DÀQÔ4GÑ'HÔ'HÑHˆØ�/Ð$4°Q°R°RÔ$8Ñ8ˆØˆr/   r   )NNNFrp  r¥   s   @r0   rr  rr  �  so   ø€ € € € € ð7ð 7¨#°©*ð 7ð 7ð 7ð 7ð 7ð 7ð ØØØðð ð ð ð ð ð ð r/   rr  c                   óF   ‡ — e Zd Zddedz  fˆ fd„Z	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )	Ú	UdopBlockFNr  c                 ó’  •— t          ¦   «                              ¦   «          |j        | _        t          j        ¦   «         | _        | j                             t          |||¬¦  «        ¦  «         | j        r)| j                             t          ||¬¦  «        ¦  «         | j                             t          |¦  «        ¦  «         d S )Nrj  )r  )
r�   r�   r  r
   Ú
ModuleListÚlayerÚappendrh  rr  r	  r  s       €r0   r�   zUdopBlock.__init__±  sº   ø€ Ý‰Œ×ÒÑÔÐØ Ô+ˆŒÝ”]‘_”_ˆŒ
ØŒ
×ÒÝ"ØÐ4OÐ[dðñ ô ñ	
ô 	
ð 	
ð
 Œ?ð 	TØŒJ×ÒÕ5°fÈ	ÐRÑRÔRÑSÔSÐSàŒ
×Ò�+ fÑ-Ô-Ñ.Ô.Ð.Ð.Ð.r/   Tc                 óâ  —  | j         d         ||||||	¬¦  «        }|d         }|dd …         }|j        t          j        k    r�t          j        t          j        |¦  «                             ¦   «         t          j        |j        ¦  «        j        dz
  t          j        |j        ¦  «        j        ¦  «        }t          j	        || |¬¦  «        }| j
        o|d u}|rÓ | j         d         ||||||	¬¦  «        }|d         }|j        t          j        k    r�t          j        t          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        |¦  «                             ¦   «         t          j        |j        ¦  «        j        dz
  t          j        |j        ¦  «        j        ¦  «        }t          j	        || |¬¦  «        }|f}||z   S )Nr   )r!   rR  r"   rm  rS  r5   iè  )r"  Úmax)rQ  r!   rR  r"   rS  r6   )r{  rb   r*   rð   r&  ÚisinfÚanyÚfinfor~  Úclampr  )r˜   r#   r!   rR  Úencoder_hidden_statesÚencoder_attention_maskÚencoder_decoder_position_biasr"   rm  rS  Úreturn_dictrT  Úself_attention_outputsÚattention_outputsÚclamp_valueÚdo_cross_attentionÚcross_attention_outputsrc  s                     r0   r£   zUdopBlock.forward¿  so  € ð "/ ¤¨A¤ØØ)Ø'Ø+ØØ/ð"
ñ "
ô "
Ðð /¨qÔ1ˆØ2°1°2°2Ô6Ðð Ô¥%¤-Ò/Ð/Ýœ+Ý”˜MÑ*Ô*×.Ò.Ñ0Ô0Ý”˜MÔ/Ñ0Ô0Ô4°tÑ;Ý”˜MÔ/Ñ0Ô0Ô4ñô ˆKõ
 "œK¨¸K¸<È[ÐYÑYÔYˆMà!œ_ÐRÐ1FÈdÐ1RÐØð 	PØ&3 d¤j°¤mØØ!6Ø5Ø;Ø /Ø"3ð'ñ 'ô 'Ð#ð 4°AÔ6ˆMð Ô"¥e¤mÒ3Ð3Ý#œkÝ”K Ñ.Ô.×2Ò2Ñ4Ô4Ý”K Ô 3Ñ4Ô4Ô8¸4Ñ?Ý”K Ô 3Ñ4Ô4Ô8ñô �õ
 !&¤¨MÀ¸|ÐQ\Ð ]Ñ ]Ô ]�ð !2Ð4KÈAÈBÈBÔ4OÑ OÐð '˜œ
 2œ }Ñ5Ô5ˆð Ô¥%¤-Ò/Ð/Ýœ+Ý”˜MÑ*Ô*×.Ò.Ñ0Ô0Ý”˜MÔ/Ñ0Ô0Ô4°tÑ;Ý”˜MÔ/Ñ0Ô0Ô4ñô ˆKõ
 "œK¨¸K¸<È[ÐYÑYÔYˆMà Ð"ˆð Ð'Ñ'ð	
r/   rd  )	NNNNNNFFTrp  r¥   s   @r0   rx  rx  °  s‡   ø€ € € € € ð/ð /ÈSÐSWÉZð /ð /ð /ð /ð /ð /ð" ØØ"Ø#Ø&*ØØØØðJ
ð J
ð J
ð J
ð J
ð J
ð J
ð J
r/   rx  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚUdopCellEmbeddingséõ  é   c                 ó¾   •— t          ¦   «                              ¦   «          || _        t          j        ||¦  «        | _        t          j        ||¦  «        | _        d S r   )r�   r�   Úmax_2d_position_embeddingsr
   r  Úx_position_embeddingsÚy_position_embeddings)r˜   r‘  r’   rš   s      €r0   r�   zUdopCellEmbeddings.__init__  sQ   ø€ Ý‰Œ×ÒÑÔÐØ*DˆÔ'å%'¤\Ð2LÈkÑ%ZÔ%ZˆÔ"Ý%'¤\Ð2LÈkÑ%ZÔ%ZˆÔ"Ð"Ð"r/   c                 ó–  — t          j        |dd¦  «        }|| j        dz
  z                       ¦   «         }|                      |d d …d d …df         ¦  «        }|                      |d d …d d …df         ¦  «        }|                      |d d …d d …df         ¦  «        }|                      |d d …d d …df         ¦  «        }||z   |z   |z   }|S )NrW   r4   r5   r   rV   r   )r*   ro   r‘  rq   r’  r“  )r˜   rm   Úleft_position_embeddingsÚupper_position_embeddingsÚright_position_embeddingsÚlower_position_embeddingsr¢   s          r0   r£   zUdopCellEmbeddings.forward  s÷   € ÝŒz˜$  SÑ)Ô)ˆØ˜Ô7¸!Ñ;Ñ<×BÒBÑDÔDˆØ#'×#=Ò#=¸dÀ1À1À1ÀaÀaÀaÈÀ7¼mÑ#LÔ#LÐ Ø$(×$>Ò$>¸tÀAÀAÀAÀqÀqÀqÈ!ÀG¼}Ñ$MÔ$MÐ!Ø$(×$>Ò$>¸tÀAÀAÀAÀqÀqÀqÈ!ÀG¼}Ñ$MÔ$MÐ!Ø$(×$>Ò$>¸tÀAÀAÀAÀqÀqÀqÈ!ÀG¼}Ñ$MÔ$MÐ!ð %Ø'ñ(à'ñ(ð (ñ(ð 	ð Ðr/   )rŽ  r�  ró   r¥   s   @r0   r�  r�    sR   ø€ € € € € ð[ð [ð [ð [ð [ð [ðð ð ð ð ð ð 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.
    Nr  Tr5   r  ÚtokensFc
                 ó.  •— t          ¦   «                              ¦   «          || _        || _        || _        || _        || _        || _        || _        |	| _	        || _
        |r	| j	        sdnd}
t          j        | j
        |
z   | j        ¦  «        | _        d S )NrV   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ˆÔ+Ø'ÐB°´ÐB�Q�QÀˆ
Ý')¤|°DÔ4WÐZdÑ4dÐfjÔftÑ'uÔ'uˆÔ$Ð$Ð$r/   r!   rm   Úreturnc                 ó   — d S r   r.   )r˜   r!   rm   s      r0   Úprepare_inputz&RelativePositionBiasBase.prepare_input[  s	   € ð 	ˆr/   c                 óv   — |                       ||¦  «        }t          || j        | j        | j        ¬¦  «        }|S )Nr1  )r¤  Úget_relative_position_bucketr(  r  r*  )r˜   r!   rm   r'  Ú	rp_buckets        r0   Ú
get_bucketz#RelativePositionBiasBase.get_bucketc  sI   € Ø ×.Ò.¨~¸tÑDÔ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  }|                     t          j        ¦  «        S r   )	r�  r?  ÚrandomÚuniformÚAUGMENTATION_RANGErŸ  rK   r*   rq   )r˜   Ú	positionsr6  r7  r'  s        r0   Úget_relative_positionz.RelativePositionBiasBase.get_relative_positionm  sŒ   € Ø$ Q Q Q¨¨¨¨4 ZÔ0ÐØ# A A A t¨Q¨Q¨Q JÔ/ˆØ+Ð.>Ñ>ÐØÔð 	E ¤ð 	EØ¥¤Õ1CÐ!DÑDÐØ˜TÔ0Ñ0Ðà ×#Ò#¥E¤JÑ/Ô/Ð/r/   c                 óœ  — | j         rr| j        rkt          j        | j        dz   | j        ¦  «        }| j        j        j        |j        j        d | j        …<   d|j        j        | j        d …<   || _        d| _         |  	                    ||¦  «        }| j        râ| 
                    d¦  «        dk    rC| 
                    d¦  «        dk    r*|                     | 
                    d¦  «        dd¦  «        }|d d …d d …df         dk     }|                     d¦  «        }t          |                     ¦   «                              ¦   «         ¦  «        D ]*\  }}| j        ||d |…|d …f<   | j        dz   |||d …d |…f<   Œ+|                      |¦  «        }	|	                     ¦   «         dk    rt#          d¦  «        ‚|	                     g d	¢¦  «        }	|	S )
NrV   gš™™™™™¹?Fr   r5   r6   r9   z Wrong dimension of values tensor)r   r   r5   rV   )r   rœ  r
   r  r  rÊ   r¼   r¶   Údatar¨  re   r<   ÚsumÚ	enumerateÚcpuÚnumpyr8   r�   r2  )
r˜   r!   rm   Únew_biasr§  Ú	is_prefixÚ
num_prefixÚidxÚnum_prefix_rowr9  s
             r0   r£   z RelativePositionBiasBase.forwardw  sÝ  € àŒ;ð 	 ˜4Ô-ð 	 Ý”| DÔ$GÈ!Ñ$KÈTÌ^Ñ\Ô\ˆHØJNÔJfÔJmÔJrˆHŒOÔ Ð!F 4Ô#FÐ!FÑGØJMˆHŒOÔ  Ô!DÐ!FÐ!FÑGØ+3ˆDÔ(ØˆDŒKà—O’O N°DÑ9Ô9ˆ	àÔð 	kØ�~Š~˜aÑ Ô  AÒ%Ð%¨.×*=Ò*=¸aÑ*@Ô*@À1Ò*DÐ*DØ%×,Ò,¨^×-@Ò-@ÀÑ-CÔ-CÀQÈÑJÔJ�	à˜Q˜Q˜Q    1˜Wœ¨Ò)ˆIØ"Ÿš rÑ*Ô*ˆJÝ'0°·²Ñ1AÔ1A×1GÒ1GÑ1IÔ1IÑ'JÔ'Jð kð kÑ#��^ØCGÔCf�	˜#˜ ˜°°°Ð?Ñ@ØCGÔCfÐijÑCj�	˜#˜~˜˜°°°Ð?Ñ@Ð@à×5Ò5°iÑ@Ô@ˆØ�:Š:‰<Œ<˜1ÒÐÝÐ?Ñ@Ô@Ð@Ø—’   Ñ-Ô-ˆàˆr/   )	Nr  Tr5   r  rš  FFF©NN)r&   r'   r(   r)   r�   r   r	   ÚdictÚstrr   r¤  r¨  r®  r£   r¤   r¥   s   @r0   r¹   r¹   ,  sU  ø€ € € € € ðð ð. Ø')ØØØØØØØðvð vð vð vð vð vð2 ð )-Ø&*ðð à ™ðð �3˜�8Œn˜tÑ#ðð 
ð	ð ð ñ „^ððð ¨°$©ð ÀTÈ#ÈsÈ(Ä^ÐVZÑEZð Ðflð ð ð ð ð0ð 0ð 0ðð  f¨t¡mð À$ÀsÈCÀxÄ.ÐSWÑBWð Ðcið ð ð ð ð ð ð ð r/   r¹   c                   óR   ‡ — 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 )ÚRelativePositionBias1Dr5   r  c                 ó@   •—  t          ¦   «         j        d||dœ|¤Ž dS )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*  rT  rš   s       €r0   r�   zRelativePositionBias1D.__init__•  ó0   ø€ ð
 	�‰ŒÔÐ\¨À\Ð\Ð\ÐU[Ð\Ð\Ð\Ð\Ð\r/   Nr!   rm   r¢  c                 óæ   — | j         dk    rt          d¦  «        ‚|                      t          j        |                     d¦  «        t          j        |j        ¬¦  «        d d d …f         ¦  «        }|S )Nr5   zNo need to scale 1d featuresra   )rŸ  r�   r®  r*   r:   re   rq   rc   )r˜   r!   rm   r'  s       r0   r¤  z$RelativePositionBias1D.prepare_inputœ  sv   € ØÔ !Ò#Ð#ÝÐ;Ñ<Ô<Ð<Ø ×6Ò6ÝŒL˜×,Ò,¨QÑ/Ô/µu´zÈ.ÔJ_Ð`Ñ`Ô`ÐaeÐghÐghÐghÐahÔiñ
ô 
Ðð !Ð r/   )r5   r  rº  ©
r&   r'   r(   r�   r	   r»  r¼  r   r¤  r¤   r¥   s   @r0   r¾  r¾  ”  s…   ø€ € € € € ð]ð ]ð ]ð ]ð ]ð ]ð!ð !¨F°T©Mð !ÈÈSÐRUÈXÌÐY]ÑH]ð !Ðioð !ð !ð !ð !ð !ð !ð !ð !r/   r¾  c                   óR   ‡ — 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 )
ÚRelativePositionBiasHorizontaléd   c                 ó@   •—  t          ¦   «         j        d||dœ|¤Ž dS )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!   rm   r¢  c                 óÌ   — | j         dk    st          d¦  «        ‚|€t          d¦  «        ‚|d d …d d …ddgf                              d¬¦  «        }|                      |¦  «        S )Nr4   úENeed to scale the values of bboxes, as there are in small (0,1) rangez6Bbox is required for horizontal relative position biasr   rV   r6   r7   ©rŸ  r�   rs   r®  )r˜   r!   rm   Úhorizontal_positions       r0   r¤  z,RelativePositionBiasHorizontal.prepare_input®  sv   € ØÔ" SÒ(Ð(ÝÐdÑeÔeÐeØˆ<ÝÐUÑVÔVÐVà&*¨1¨1¨1¨a¨a¨a°!°Q°¨<Ô&8×&=Ò&=À"Ð&=Ñ&EÔ&EÐà×)Ò)Ð*=Ñ>Ô>Ð>r/   ©rÈ  rÈ  rº  rÅ  r¥   s   @r0   rÇ  rÇ  ¦  s…   ø€ € € € € ð]ð ]ð ]ð ]ð ]ð ]ð?ð ?¨F°T©Mð ?ÈÈSÐRUÈXÌÐY]ÑH]ð ?Ðioð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?r/   rÇ  c                   óR   ‡ — 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 )
ÚRelativePositionBiasVerticalrÈ  c                 ó@   •—  t          ¦   «         j        d||dœ|¤Ž dS )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!   rm   r¢  c                 óÌ   — | j         dk    st          d¦  «        ‚|€t          d¦  «        ‚|d d …d d …ddgf                              d¬¦  «        }|                      |¦  «        S )Nr4   rË  z4Bbox is required for vertical relative position biasr5   r   r6   r7   rÌ  )r˜   r!   rm   Úvertical_positions       r0   r¤  z*RelativePositionBiasVertical.prepare_inputÁ  sv   € ØÔ" SÒ(Ð(ÝÐdÑeÔeÐeØˆ<ÝÐSÑTÔTÐTà$(¨¨¨¨A¨A¨A°°1¨v¨Ô$6×$;Ò$;ÀÐ$;Ñ$CÔ$CÐà×)Ò)Ð*;Ñ<Ô<Ð<r/   rÎ  rº  rÅ  r¥   s   @r0   rÐ  rÐ  ¹  s…   ø€ € € € € ð]ð ]ð ]ð ]ð ]ð ]ð=ð =¨F°T©Mð =ÈÈSÐRUÈXÌÐY]ÑH]ð =Ðioð =ð =ð =ð =ð =ð =ð =ð =r/   rÐ  c                   óh   ‡ — 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                 óz   •— t          ¦   «                              ¦   «          t          j        |¦  «        | _        dS )z¶
        Class which sums up various computed biases.

        Args:
            modules (Sequence[RelativePositionBiasBase]):
                List of relative bias modules.
        N)r�   r�   r
   rz  Úbiases)r˜   rÖ  rš   s     €r0   r�   z'RelativePositionBiasAggregated.__init__Í  s0   ø€ õ 	‰Œ×ÒÑÔÐÝ”m GÑ,Ô,ˆŒˆˆr/   Nr!   rm   r¢  c                 ó<   — d}| j         D ]} |||¦  «        |z   }Œ|S )NrW   )rØ  )r˜   r!   rm   Úoutputr°   s        r0   r£   z&RelativePositionBiasAggregated.forwardØ  s5   € ØˆØ”Kð 	9ð 	9ˆDØ�T˜.¨$Ñ/Ô/°&Ñ8ˆFˆFàˆr/   rº  )r&   r'   r(   r   r¹   r�   r	   r»  r¼  r   r$  r£   r¤   r¥   s   @r0   rÕ  rÕ  Ì  s‘   ø€ € € € € ð	- Ð)AÔ Bð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ðð  f¨t¡mð À$ÀsÈCÀxÄ.ÐSWÑBWð ÐchÐkqÑcqð ð ð ð ð ð ð ð r/   rÕ  )Ú1dÚ
horizontalÚverticalr™   r¢  c                 óV  — g }t          | d¦  «        r–| j        D ]Ž}t          |¦  «        }|                     d¦  «        }t          | d¦  «        r| j        n| j        }d|v r|d         |k    rt          d¦  «        ‚n||d<   |                     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�   r|  ÚBIAS_CLASSES)r™   Ú	bias_listÚbias_kwargs_orgÚbias_kwargsÚ	bias_typeÚmodel_num_headss         r0   Úcreate_relative_biasré  ç  sÚ   € ð €IÝˆvÐ+Ñ,Ô,ð 
EØ%Ô8ð 		Eð 		EˆOÝ" ?Ñ3Ô3ˆKØ#Ÿš¨Ñ/Ô/ˆIÝ29¸&À+Ñ2NÔ2NÐn˜fÔ.Ð.ÐTZÔTnˆOØ˜kÐ)Ð)Ø˜{Ô+¨Ò>Ð>Ý$Ð%[Ñ\Ô\Ð\ð ?ð ,;�˜KÑ(Ø×Ò�\¨)Ô4ÐCÐC°{ÐCÐCÑDÔDÐDÐDàÐr/   c                   ó€   ‡ — 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        ˆfd„t          | j
        ¦  «        D ¦   «         ¦  «        | _        t          ‰j        ‰j        ¬¦  «        | _        t          j        ‰j        ¦  «        | _        | j	        st)          ‰j        ‰j        ¦  «        | _        |                      ‰¦  «        | _        |                      ¦   «          d S )Nc           	      óV   •— g | ]%}t          ‰t          |d k    ¦  «        |¬¦  «        ‘Œ&S )r   rj  )rx  rw   )rY   rZ   r™   s     €r0   r]   z&UdopStack.__init__.<locals>.<listcomp>  s4   ø€ ÐvÐvÐvÐZ[�Y�v½4ÀÀQÂ¹<¼<ÐSTÐUÑUÔUÐvÐvÐvr/   r  )r�   r�   r
   r  Ú
vocab_sizerº   Úembed_tokensr‹   Úembed_patchesr  Ú
num_layersrz  rz   Úblockr³   r  Úfinal_layer_normrù   rú   rû   r�  r‘  r’   Úcell_2d_embeddingÚ_get_relative_biasÚrelative_biasÚ	post_initrþ   s    `€r0   r�   zUdopStack.__init__  s  øø€ Ý‰Œ×Ò˜Ñ Ô Ð åœL¨Ô):¸F¼NÑKÔKˆÔÝ0°Ñ8Ô8ˆÔØ Ô+ˆŒØ Ô+ˆŒå”]ØvÐvÐvÐvÕ_dÐeiÔetÑ_uÔ_uÐvÑvÔvñ
ô 
ˆŒ
õ !.¨f¬nÀ&ÔB[Ð \Ñ \Ô \ˆÔå”z &Ô"5Ñ6Ô6ˆŒàŒð 	oÝ%7¸Ô8YÐ[aÔ[mÑ%nÔ%nˆDÔ"ð "×4Ò4°VÑ<Ô<ˆÔØ�ŠÑÔÐÐÐr/   r™   r¢  c                 ó>   — t          | ¦  «        }t          |¦  «        S r   )ré  rÕ  )r™   Úrelative_bias_lists     r0   rõ  zUdopStack._get_relative_bias  s   € å1°&Ñ9Ô9ÐÝ-Ð.@ÑAÔAÐAr/   c                 ó   — | j         S r   ©rï  ©r˜   s    r0   Úget_output_embeddingszUdopStack.get_output_embeddings  s   € ØÔ Ð r/   c                 ó   — || _         d S r   rû  ©r˜   Únew_embeddingss     r0   Úset_input_embeddingszUdopStack.set_input_embeddings!  s   € Ø*ˆÔÐÐr/   Nc                 ó°
  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|�#|�!| j        rdnd}t          d|› d|› d�¦  «        ‚|�Jt          j        |¦  «        dk    r2| 	                    ¦   «         }| 
                    d|d         ¦  «        }�n3|€ñ|�ït          j        |¦  «        dk    r×t          j        d| j         j        |j        |j        ¬	¦  «        }t          j        d|j        |j        ¬	¦  «        }t          j        d
|j        |j        ¬	¦  «        }| 	                    ¦   «         }t          j        |d d …d d d d …f         ¦  «                             | j        ¦  «        }
t$                               d¦  «         n@|�| 	                    ¦   «         d d…         }n!| j        rdnd}t          d|› d|› d�¦  «        ‚|€+| j        €t          d¦  «        ‚|                      |¦  «        }|�|                      |¦  «        }	|	�d| j         j        | j         j        z  }t1          |	|||||d| j         j        | j         j        ¦	  «	        \  }}}| 	                    ¦   «         d d…         }| j        s|�||                      |¦  «        z  }|\  }}|du r| j        sJ d| › d�¦   «         ‚| j        r]|rZ|€X| j         j        r7t7          t9          | j         ¬¦  «        t9          | j         ¬¦  «        ¦  «        }nt9          | j         ¬¦  «        }n	| j        sd }|�|                     ¦   «         nd}|€/t=          ¦   «         s!||z   }t          j        |||j        ¬¦  «        }| j         j        rtA          | j         |||¬¦  «        }nO|d d …d d d d …f         }|                     |j        ¬¦  «        }d|z
  t          j!        |j        ¦  «        j"        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|  $                    ||¬¦  «        }
|
|z   }
d }|}|  %                    |¦  «        }tM          | j'        ¦  «        D ]g\  }} |r||fz   } | |||
||||||¬¦	  «	        }!|!d         }|!d         }
| j        r|�|!|rdnd         }|r||!d         fz   }| j        r||!d         fz   }Œh|  (                    |¦  «        }|  %                    |¦  «        }|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   r6   )r9   r�  r=  )r9   r�  r9   zEmpty batchzYou have to specify either z
inputs or r{   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™   )rc   )r™   r{   r!   r"   )rb   r4   )r™   r{   r!   rƒ  r.   )r!   rm   )r"   rm  rS  r5   r   rV   r9   c              3   ó   K  — | ]}|®|V — Œ	d S r   r.   )rY   rÍ   s     r0   ú	<genexpr>z$UdopStack.forward.<locals>.<genexpr>Ô  s4   è è € ð ð àð �=ð ð !�=�=�=ðð r/   )r    r!   r"   r#   r$   r%   )+r™   rm  rS  Úoutput_hidden_statesr†  r  r�   r*   Únumelre   r>   Úfullr×   rc   rb   rI  rj   rK   r  Úwarningrï  rð  r?   r@   r‰   rô  Úis_encoder_decoderr   r   r@  r   rd   r   r�  r"  r   rö  rû   r²  rò  ró  r-   r   )"r˜   rÜ   r!   rm   rƒ  r„  r{   rž   r_   r[   rR  r"   rm  rS  r  r†  rT  Úerr_msg_prefixrU  r|   rŸ   Ú
seq_lengthÚpast_key_values_lengthÚmask_seq_lengthr_  Úencoder_extended_attention_maskÚall_hidden_statesÚall_attentionsÚall_cross_attentionsr…  r#   rZ   Úlayer_moduleÚlayer_outputss"                                     r0   r£   zUdopStack.forward$  sÕ  € ð& "+Ð!6�I�I¸D¼KÔ<Qˆ	Ø1BÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆð Ð  ]Ð%>Ø+/¬?ÐB˜Z˜ZÀˆNÝØt¨>ÐtÐtÀnÐtÐtÐtñô ð ð Ð"¥u¤{°9Ñ'=Ô'=ÀÒ'AÐ'AØ#Ÿ.š.Ñ*Ô*ˆKØ!Ÿš r¨;°r¬?Ñ;Ô;ˆI‰IØÐ" yÐ'<ÅÄÈYÑAWÔAWÐ[\ÒA\ÐA\Ýœ
 9¨d¬kÔ.FÈyÔO_ÐgpÔgvÐwÑwÔwˆIÝ"œ[¨¸9Ô;KÐS\ÔSbÐcÑcÔcˆNÝ”;˜|°IÔ4DÈIÌOÐ\Ñ\Ô\ˆDØ#Ÿ.š.Ñ*Ô*ˆKÝ!Ô,¨^¸A¸A¸A¸tÀTÈ1È1È1Ð<LÔ-MÑNÔN×QÒQÐRVÔR\Ñ]Ô]ˆMÝ�NŠN˜=Ñ)Ô)Ð)Ð)ØÐ&Ø'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKˆKà+/¬?ÐB˜Z˜ZÀˆNÝÐr¸>ÐrÐrÐUcÐrÐrÐrÑsÔsÐsàÐ ØÔ Ð(Ý Ð!_Ñ`Ô`Ð`Ø ×-Ò-¨iÑ8Ô8ˆMàÐ#Ø#×1Ò1°,Ñ?Ô?ÐàÐ'àœ+Ô0°D´KÔ4JÑJˆKÝ2OØ ØØØØØØØ”Ô&Ø”Ô&ñ
3ô 
3Ñ/ˆM˜4 ð (×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKàŒð 	: 4Ð#3Ø˜T×3Ò3°DÑ9Ô9Ñ9ˆMà!,Ñˆ
�Jà˜ÐÐØ”?ÐkÐkÐ$kÐPTÐ$kÐ$kÐ$kÑkÔk�?àŒ?ð 	#Øð G˜_Ð4Ø”;Ô1ð GÝ&9Ý$¨D¬KÐ8Ñ8Ô8½,ÈdÌkÐ:ZÑ:ZÔ:Zñ'ô '�O�Oõ '3¸$¼+Ð&FÑ&FÔ&F�OøØ”ð 	#ð #ˆOàETÐE` ×!?Ò!?Ñ!AÔ!AÐ!AÐfgÐØÐ!Õ*BÑ*DÔ*DÐ!à4°zÑAˆOÝ"œZ¨
°OÈMÔL`ÐaÑaÔaˆNàŒ;Ô!ð 
	UÝ,Ø”{Ø+Ø-Ø /ð	ñ ô ˆKˆKð )¨¨¨¨D°$¸¸¸Ð)9Ô:ˆKØ%Ÿ.š.¨}Ô/B˜.ÑCÔCˆKØ Ñ,µ´¸MÔ<OÑ0PÔ0PÔ0TÑTˆKàŒ?ð 	3Ð5ÐAÝ.GØ”{Ø+Ø5Ø&;ð	/ñ /ô /Ð+Ð+ð /3Ð+à"6Ð@˜B˜B¸DÐØ0Ð:˜˜°dˆØ&7ÐV¸D¼OÐV˜r˜rÐRVÐàŒ?ð 	8Ø ˆMˆMà ×.Ò.¸nÐSWÐ.ÑXÔXˆMØ)¨KÑ7ˆMØ(,Ð%à%ˆàŸš ]Ñ3Ô3ˆå(¨¬Ñ4Ô4ð 	Vð 	V‰OˆAˆ|Ø#ð IØ$5¸Ð8HÑ$HÐ!à(˜LØØØØ%Ø/Ø-Ø /Ø#Ø"3ð
ñ 
ô 
ˆMð *¨!Ô,ˆMð *¨!Ô,ˆMØŒð ]Ð#8Ð#DØ0=ÐCTÐ>[¸a¸aÐZ[Ô0\Ð-à ð VØ!/°=ÀÔ3CÐ2EÑ!E�Ø”?ð VØ+?À=ÐQRÔCSÐBUÑ+UÐ(øà×-Ò-¨mÑ<Ô<ˆØŸš ]Ñ3Ô3ˆð  ð 	EØ 1°]Ð4DÑ DÐàð 	Ýð ð ð "Ø"Ø#Ø%Ø"Ø(ððñ ô ñ ô ð õ 0Ø+Ø)Ø+Ø+Ø%Ø1ð
ñ 
ô 
ð 	
r/   ©NNNNNNNNNNNNNNN)r&   r'   r(   r)   r�   rf  r   rÕ  rõ  rý  r  r-   r   r£   r¤   r¥   s   @r0   rë  rë  ý  s÷   ø€ € € € € ðð ð
ð ð ð ð ð, ðB :ð BÐ2Pð Bð Bð Bñ „\ðBð!ð !ð !ð+ð +ð +ð
 ØØØ"Ø#ØØØØØØØØØ!Øð!D
ð D
ð$ 
Ð1Ñ	1ð%D
ð D
ð D
ð D
ð D
ð D
ð D
ð D
r/   rë  c            #       ó0  ‡ — 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                 ó°  •— t          ¦   «                              |¦  «         t          j        |j        |j        ¦  «        | _        t          |¦  «        | _        t          |¦  «        }d|_
        d|_        t          |¦  «        | _        t          |¦  «        }d|_
        |j        |_        t          |¦  «        | _        |                      ¦   «          d S )NFT)r�   r�   r
   r  rî  rº   r¾   r‹   Úpatch_embedr   r  rm  rë  ÚencoderÚnum_decoder_layersrñ  Údecoderr÷  ©r˜   r™   Úencoder_configÚdecoder_configrš   s       €r0   r�   zUdopModel.__init__ô  s¸   ø€ Ý‰Œ×Ò˜Ñ Ô Ð õ ”l 6Ô#4°f´nÑEÔEˆŒÝ.¨vÑ6Ô6ˆÔå! &Ñ)Ô)ˆØ$)ˆÔ!Ø#(ˆÔ Ý  Ñ0Ô0ˆŒå! &Ñ)Ô)ˆØ$(ˆÔ!Ø$*Ô$=ˆÔ!Ý  Ñ0Ô0ˆŒð 	�ŠÑÔÐÐÐr/   c                 ó   — | j         S r   ©r¾   rü  s    r0   Úget_input_embeddingszUdopModel.get_input_embeddings  ó
   € ØŒ{Ðr/   c                 ó|   — || _         | j                             |¦  «         | j                             |¦  «         d S r   ©r¾   r!  r  r#  rÿ  s     r0   r  zUdopModel.set_input_embeddings  ó;   € Ø$ˆŒØŒ×)Ò)¨.Ñ9Ô9Ð9ØŒ×)Ò)¨.Ñ9Ô9Ð9Ð9Ð9r/   NrÜ   r!   rm   rž   r_   Údecoder_input_idsÚdecoder_attention_maskr{   Úencoder_outputsr"   Údecoder_inputs_embedsrm  rS  r  r†  r¢  c                 ó  — |�|n| j         j        }|�|n| j         j        }|	€|                      |||||||||¬¦	  «	        }	|	d         }|r|	j        n|	d         }|                      ||||
||||||¬¦
  «
        }|sQt          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]
        ```N)	rÜ   r!   rm   rž   r_   r{   rS  r  r†  r   r5   ©
rÜ   r!   r{   r"   rƒ  r„  rm  rS  r  r†  c              3   ó,   K  — | ]\  }}|d k    ¯|V — ŒdS ©r5   Nr.   ©rY   r¸  Úvalues      r0   r  z$UdopModel.forward.<locals>.<genexpr>|  ó2   è è € Ð#cÐ#c©j¨c°5ÐZ]ÐabÒZbÐZb EÐZbÐZbÐZbÐZbÐ#cÐ#cr/   c              3   ó,   K  — | ]\  }}|d k    ¯|V — ŒdS r5  r.   r6  s      r0   r  z$UdopModel.forward.<locals>.<genexpr>}  r8  r/   )r    r"   Údecoder_hidden_statesÚdecoder_attentionsr%   Úencoder_last_hidden_staterƒ  Úencoder_attentions)r™   rm  r†  r!  r!   r#  r-   r²  r   r    r"   r#   r$   r%   )r˜   rÜ   r!   rm   rž   r_   r.  r/  r{   r0  r"   r1  rm  rS  r  r†  rT  r#   r„  Údecoder_outputss                       r0   r£   zUdopModel.forward  sh  € ðP "+Ð!6�I�I¸D¼KÔ<Qˆ	Ø%0Ð%<�k�kÀ$Ä+ÔBYˆð Ð"Ø"ŸlšlØ#Ø-ØØ)Ø'Ø+Ø"3Ø%9Ø'ð +ñ 
ô 
ˆOð (¨Ô*ˆØCNÐ!f Ô!?Ð!?ÐTcÐdeÔTfÐð Ÿ,š,Ø'Ø1Ø/Ø+Ø"/Ø#9ØØ/Ø!5Ø#ð 'ñ 
ô 
ˆð ð 	5å#Ð#cÐ#c½IÀoÑ<VÔ<VÐ#cÑ#cÔ#cÑcÔcˆOÝ#Ð#cÐ#c½IÀoÑ<VÔ<VÐ#cÑ#cÔ#cÑcÔcˆOØ" _Ñ4Ð4å!Ø-Ô?Ø+Ô;Ø"1Ô"?Ø.Ô9Ø,Ô=Ø&5Ô&GØ"1Ô"?Ø.Ô9ð	
ñ 	
ô 	
ð 		
r/   r  )r&   r'   r(   Ú_tied_weights_keysr�   r)  r  r   r	   r»  r¼  r   r   rw   r-   r   r£   r¤   r¥   s   @r0   r½   r½   ë  sÐ  ø€ € € € € ð (7Ø'6Ø-FØ+Bð	ð Ððð ð ð ð ð(ð ð ð:ð :ð :ð
 ð $(Ø(,Ø&*Ø&*Ø-1Ø+/Ø04Ø'+Ø)-Ø(,Ø/3Ø!%Ø)-Ø,0Ø#'ð!x
ð 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
ð x
ñ „^ðx
ð x
ð 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            %       óB  ‡ — 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¬¦  «        | _        |                      ¦   «          d S )NFTr÷   )r�   r�   r
   r  rî  rº   r¾   r‹   r   r   r  rm  rë  r!  r"  rñ  r#  rø   r¯   r÷  r$  s       €r0   r�   z%UdopForConditionalGeneration.__init__Ÿ  s×   ø€ Ý‰Œ×Ò˜Ñ Ô Ð õ ”l 6Ô#4°f´nÑEÔEˆŒÝ.¨vÑ6Ô6ˆÔå! &Ñ)Ô)ˆØ$)ˆÔ!Ø#(ˆÔ Ý  Ñ0Ô0ˆŒå! &Ñ)Ô)ˆØ$(ˆÔ!Ø$*Ô$=ˆÔ!Ý  Ñ0Ô0ˆŒõ ”y ¤°Ô1BÈÐOÑOÔOˆŒð 	�ŠÑÔÐÐÐr/   c                 ó   — | j         S r   r(  rü  s    r0   r)  z1UdopForConditionalGeneration.get_input_embeddings¶  r*  r/   c                 ó|   — || _         | j                             |¦  «         | j                             |¦  «         d S r   r,  rÿ  s     r0   r  z1UdopForConditionalGeneration.set_input_embeddings¹  r-  r/   NrÜ   r!   rm   rž   r_   r.  r/  r{   r0  r"   r1  rm  rS  r  r†  Úlabelsr¢  c                 ó"  — |�|n| j         j        }|�|n| j         j        }|€|�|                      |¦  «        }|	€|                      |||||||||¬¦	  «	        }	|	d         }|r|	j        n|	d         }|                      ||||
||||||¬¦
  «
        }|d         }| j         j        r|| j         j        dz  z  }|  	                    |¦  «        }d}|�Vt          d¬¦  «        } ||                     d	|                     d	¦  «        ¦  «        |                     d	¦  «        ¦  «        }|s-|f|d
d…         z   |	d         fz   |	d
d…         z   }|�|f|z   n|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Ü   rm   r_   rž   r!   r{   rS  r  r†  r   r5   r3  r®   rÕ   )Úignore_indexr6   rV   )	ÚlossÚlogitsr"   r:  r;  r%   r<  rƒ  r=  )r™   rm  r†  rÞ   r!  r!   r#  rÁ   rº   r¯   r   r>   re   r   r"   r#   r$   r%   r    )r˜   rÜ   r!   rm   rž   r_   r.  r/  r{   r0  r"   r1  rm  rS  r  r†  rF  rT  r#   r„  r>  Úsequence_outputÚ	lm_logitsrJ  Úloss_fctrÚ  s                             r0   r£   z$UdopForConditionalGeneration.forward¾  s  € ð\ "+Ð!6�I�I¸D¼KÔ<Qˆ	Ø%0Ð%<�k�kÀ$Ä+ÔBYˆàÐ$¨Ð);Ø $× 1Ò 1°&Ñ 9Ô 9Ðð Ð"Ø"ŸlšlØ#ØØ'Ø)Ø-Ø+Ø"3Ø%9Ø'ð +ñ 
ô 
ˆOð (¨Ô*ˆØCNÐ!f Ô!?Ð!?ÐTcÐdeÔTfÐð Ÿ,š,Ø'Ø1Ø/Ø+Ø"/Ø#9ØØ/Ø!5Ø#ð 'ñ 
ô 
ˆð *¨!Ô,ˆàŒ;Ô*ð 	LØ-°´Ô1DÀdÑ1JÑKˆOà—L’L Ñ1Ô1ˆ	àˆØÐÝ'°TÐ:Ñ:Ô:ˆHØ�8˜IŸNšN¨2¨y¯~ª~¸bÑ/AÔ/AÑBÔBÀFÇKÂKÐPRÁOÄOÑTÔTˆDàð 	FØ�\ O°A°B°BÔ$7Ñ7¸?È1Ô;MÐ:OÑOÐRaÐbcÐbdÐbdÔReÑeˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEåØØØ+Ô;Ø"1Ô"?Ø.Ô9Ø,Ô=Ø&5Ô&GØ"1Ô"?Ø.Ô9ð

ñ 

ô 

ð 
	
r/   )NNNNNNNNNNNNNNNN)r&   r'   r(   r?  r�   r)  r  r   r	   r»  r¼  r   r   rw   r-   r   r£   r¤   r¥   s   @r0   r¿   r¿   Œ  sò  ø€ € € € € ð (7Ø'6Ø-FØ+Bð JPð JPØ)ðð Ððð ð ð ð ð.ð ð ð:ð :ð :ð
 ð $(Ø(,Ø&*Ø&*Ø-1Ø+/Ø04Ø'+Ø)-Ø(,Ø/3Ø!%Ø)-Ø,0Ø#'Ø $ð#L
ð 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
ð L
ñ „^ðL
ð 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  rA  )r  r  r  rB  r™   c                 óR  •— t          ¦   «                              |¦  «         t          j        |j        |j        ¦  «        | _        t          |¦  «        | _        t          |¦  «        }d|_
        d|_        d|_        t          |¦  «        | _        |                      ¦   «          d S )NF)r�   r�   r
   r  rî  rº   r¾   r‹   r   r   r  rm  r  rë  r!  r÷  )r˜   r™   r%  rš   s      €r0   r�   zUdopEncoderModel.__init__W  s‘   ø€ Ý‰Œ×Ò˜Ñ Ô Ð õ ”l 6Ô#4°f´nÑEÔEˆŒÝ.¨vÑ6Ô6ˆÔå! &Ñ)Ô)ˆØ$)ˆÔ!Ø#(ˆÔ Ø,1ˆÔ)Ý  Ñ0Ô0ˆŒð 	�ŠÑÔÐÐÐr/   c                 ó   — | j         S r   r(  rü  s    r0   r)  z%UdopEncoderModel.get_input_embeddingsg  r*  r/   c                 óH   — || _         | j                             |¦  «         d S r   )r¾   r!  r  rÿ  s     r0   r  z%UdopEncoderModel.set_input_embeddingsj  s%   € Ø$ˆŒØŒ×)Ò)¨.Ñ9Ô9Ð9Ð9Ð9r/   NrÜ   rm   r!   rž   r_   r{   rS  r  r†  r¢  c
                 ó¢   — |�|n| j         j        }|�|n| j         j        }|	�|	n| 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
        ```NrH  )r™   rS  r  r†  r!  )r˜   rÜ   rm   r!   rž   r_   r{   rS  r  r†  rT  r0  s               r0   r£   zUdopEncoderModel.forwardn  s†   € ðv 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàŸ,š,ØØØ#Ø%Ø)Ø'Ø/Ø!5Ø#ð 'ñ 

ô 

ˆð Ðr/   )	NNNNNNNNN)r&   r'   r(   r?  r   r�   r)  r  r   r	   r»  r¼  r   rw   r-   r*   r+   r   r£   r¤   r¥   s   @r0   rP  rP  N  s|  ø€ € € € € ð (7Ø-FØ+Bð JPð	ð Ðð˜zð ð ð ð ð ð ð ð ð ð:ð :ð :ð ð $(Ø&*Ø(,Ø&*Ø-1Ø'+Ø)-Ø,0Ø#'ðLð 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ð Lñ „^ðLð Lð Lð Lð Lr/   rP  )r¿   r§   r½   rP  )r1   r2   )r   )NrT   r   r1   r2   )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   rE   rS   r‰   ÚModuler‹   r§   r³   rÂ   rÅ   r	  rÈ   rh  rr  rx  r�  r/  r¦  r¬  r¹   r¾  rÇ  rÐ  rÕ  rã  ré  rë  r½   r¿   rP  Ú__all__r.   r/   r0   ú<module>rg     sæ  ðð Ð à Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à #Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð ð ð
 'Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ )Ð )Ð )Ð )Ð )Ð )Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ð €ððñ ô ð ð#=ð #=ð #=ð #=ð #= {ñ #=ô #=ñ „ñô ð#=ðLð ð ð ð.
ð 
ð 
ð 
ð$ ØØØØðP/ð P/ð P/ð P/ðfð ð ð ð ˜"œ)ñ ô ð ð: ðN!ð N!ð N!ð N!ð N!˜/ñ N!ô N!ñ „ðN!ðd+ð +ð +ð +ð +�B”Iñ +ô +ð +ð4ð ð ð ð ˜œ	ñ ô ð ð.ð ð ð ð ˜RœYñ ô ð ð<ð ð ð ð �"”)ñ ô ð ð&ð ð ð ð �B”Iñ ô ð ðFð ð ð ð ˜RœYñ ô ð ðDð ð ð ð ˜bœiñ ô ð ð@Y
ð Y
ð Y
ð Y
ð Y
Ð*ñ Y
ô Y
ð Y
ðxð ð ð ð ˜œñ ô ð ð8  -ÔFÐ Ø!Ð ðeð eð eð eð e˜rœy¨#ñ eô eð eðP!ð !ð !ð !ð !Ð5ñ !ô !ð !ð$?ð ?ð ?ð ?ð ?Ð%=ñ ?ô ?ð ?ð&=ð =ð =ð =ð =Ð#;ñ =ô =ð =ð&ð ð ð ð  R¤Yñ ô ð ð* !Ø0Ø,ðð €ð ð °Ð9QÔ0Rð ð ð ð ð,k
ð k
ð k
ð k
ð k
Ð#ñ k
ô k
ð k
ð\ ð]
ð ]
ð ]
ð ]
ð ]
Ð#ñ ]
ô ]
ñ „ð]
ð@ €ððñ ô ðw
ð w
ð w
ð w
ð w
Ð#6¸ñ w
ô w
ñô ðw
ðt ðlð lð lð lð lÐ*ñ lô lñ „ðlð^ cÐ
bÐ
b€€€r/   