+
    œ°³j>¥  ã                   óÀ  € R t ^ RIt^ RIt^ RIHt ^ RIt^ RIHt ^RIH	t
 ^RIHt ^RIHt ^RIHt ^RIHtHtHtHt ^R	IHt ]P0                  ! ]4      t]! R
R7      ] ! R R]4      4       4       t]! RR7      ] ! R R]4      4       4       t]! RR7      ] ! R R]4      4       4       tR tR t ! R R]P@                  4      t! ! R R]P@                  4      t" ! R R]P@                  4      t# ! R R]P@                  4      t$ ! R R]P@                  4      t% ! R  R!]P@                  4      t& ! R" R#]P@                  4      t' ! R$ R%]P@                  4      t( ! R& R']P@                  4      t) ! R( R)]P@                  4      t* ! R* R+]4      t+ ! R, R-]P@                  4      t,] ! R. R/]4      4       t-] ! R0 R1]-4      4       t.]! R2R7       ! R3 R4]-4      4       t/. R5Ot0R# )6z¢PyTorch Donut Swin Transformer model.

This implementation is identical to a regular Swin Transformer, without final layer norm on top of the final hidden
states.N)Ú	dataclass)Únn)Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚloggingÚ	torch_int©ÚDonutSwinConfigzS
    DonutSwin encoder's outputs, with potential hidden states and attentions.
    )Úcustom_introc                   ó@   a € ] tR t^%t o RtRtRtRtRtV 3R lt	Rt
V tR# )ÚDonutSwinEncoderOutputaÕ  
reshaped_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 + one for the output of each stage) of
    shape `(batch_size, hidden_size, height, width)`.

    Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
    include the spatial dimensions.
Nc                ó  <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   # )é   NÚlast_hidden_state.Úhidden_statesÚ
attentionsÚreshaped_hidden_states©ÚtorchÚFloatTensorÚtuple)ÚformatÚ__classdict__s   "€Ún/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/donut/modeling_donut_swin.pyÚ__annotate__Ú#DonutSwinEncoderOutput.__annotate__%   sƒ   ø‡ ‚ ñ" ×(Ñ(¨4Õ/Ñ6ñ# ñ$ ™×*Ñ*¨CÐ/Õ0°4Õ7Ñ>ñ% ñ& ‘e×'Ñ'¨Ð,Õ-°Õ4Ñ;ñ' ñ( "¡%×"3Ñ"3°SÐ"8Õ9¸DÕ@ÑGò) ó    © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r   %   s)   ø‡ € ñð 37ÐØ:>€MØ7;€JØCGÐ÷) ƒ r    r   z[
    DonutSwin model's outputs that also contains a pooling of the last hidden states.
    c                   óD   a € ] tR t^<t o RtRtRtRtRtRt	V 3R lt
RtV tR# )ÚDonutSwinModelOutputa‘  
pooler_output (`torch.FloatTensor` of shape `(batch_size, hidden_size)`, *optional*, returned when `add_pooling_layer=True` is passed):
    Average pooling of the last layer hidden-state.
reshaped_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 + one for the output of each stage) of
    shape `(batch_size, hidden_size, height, width)`.

    Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
    include the spatial dimensions.
Nc                ó<  <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[ P                  R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   # )r   Nr   Úpooler_output.r   r   r   r   )r   r   s   "€r   r   Ú!DonutSwinModelOutput.__annotate__<   s›   ø‡ ‚ ñ& ×(Ñ(¨4Õ/Ñ6ñ' ñ( ×$Ñ$ tÕ+Ñ2ñ) ñ* ™×*Ñ*¨CÐ/Õ0°4Õ7Ñ>ñ+ ñ, ‘e×'Ñ'¨Ð,Õ-°Õ4Ñ;ñ- ñ. "¡%×"3Ñ"3°SÐ"8Õ9¸DÕ@ÑGò/ r    r!   )r"   r#   r$   r%   r&   r   r.   r   r   r   r'   r(   r)   r*   s   @r   r,   r,   <   s.   ø‡ € ñ	ð 37ÐØ.2€MØ:>€MØ7;€JØCGÐ÷/ ƒ r    r,   z5
    DonutSwin outputs for image classification.
    c                   óD   a € ] tR t^Vt o RtRtRtRtRtRt	V 3R lt
RtV tR# )ÚDonutSwinImageClassifierOutputa  
loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
    Classification (or regression if config.num_labels==1) loss.
logits (`torch.FloatTensor` of shape `(batch_size, config.num_labels)`):
    Classification (or regression if config.num_labels==1) scores (before SoftMax).
reshaped_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 + one for the output of each stage) of
    shape `(batch_size, hidden_size, height, width)`.

    Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
    include the spatial dimensions.
Nc                ó<  <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[ P                  R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   # )r   NÚlossÚlogits.r   r   r   r   )r   r   s   "€r   r   Ú+DonutSwinImageClassifierOutput.__annotate__V   s›   ø‡ ‚ ñ* ×
Ñ
˜dÕ
"Ñ)ñ+ ñ, ×Ñ Õ$Ñ+ñ- ñ. ™×*Ñ*¨CÐ/Õ0°4Õ7Ñ>ñ/ ñ0 ‘e×'Ñ'¨Ð,Õ-°Õ4Ñ;ñ1 ñ2 "¡%×"3Ñ"3°SÐ"8Õ9¸DÕ@ÑGò3 r    r!   )r"   r#   r$   r%   r&   r3   r4   r   r   r   r'   r(   r)   r*   s   @r   r1   r1   V   s-   ø‡ € ñð &*€DØ'+€FØ:>€MØ7;€JØCGÐ÷3 ƒ r    r1   c                óÈ   € V P                   w  r#rEV P                  W#V,          WV,          W4      p V P                  ^^4      P                  4       P                  RWV4      pV# )z*
Partitions the given input into windows.
éÿÿÿÿ©ÚshapeÚviewÚ	transposeÚ
contiguous)Úinput_featureÚwindow_sizeÚ
batch_sizeÚheightÚwidthÚnum_channelsÚwindowss   &&     r   Úwindow_partitionrD   s   sg   € ð /<×.AÑ.AÑ+€J˜Ø!×&Ñ&Ø˜kÕ)¨;ÀÕ8LÈkó€Mð ×%Ñ% a¨Ó+×6Ñ6Ó8×=Ñ=¸bÀ+Ð\hÓi€GØ€Nr    c                óÐ   € V P                   R,          pV P                  RW!,          W1,          WV4      p V P                  ^^4      P                  4       P                  RW#V4      p V # )z7
Merges windows to produce higher resolution features.
r7   r8   )rC   r>   r@   rA   rB   s   &&&& r   Úwindow_reverserF   €   s^   € ð —=‘= Õ$€LØ�l‰l˜2˜vÕ4°eÕ6JÈKÐfrÓs€GØ×Ñ  1Ó%×0Ñ0Ó2×7Ñ7¸¸FÈ<ÓX€GØ€Nr    c                   ób   a a€ ] tR t^‹t oRtRV 3R lltV3R lR ltR	V3R lR lltRtVt	V ;t
# )
ÚDonutSwinEmbeddingszO
Construct the patch and position embeddings. Optionally, also the mask token.
c                óª  <€ \         SV `  4        \        V4      V n        V P                  P                  pV P                  P
                  V n        V'       d7   \        P                  ! \        P                  ! ^^VP                  4      4      MRV n        VP                  '       dD   \        P                  ! \        P                  ! ^V^,           VP                  4      4      V n        MRV n        \        P                  ! VP                  4      V n        \        P"                  ! VP$                  4      V n        VP(                  V n        Wn        R# )é   N)ÚsuperÚ__init__ÚDonutSwinPatchEmbeddingsÚpatch_embeddingsÚnum_patchesÚ	grid_sizeÚ
patch_gridr   Ú	Parameterr   ÚzerosÚ	embed_dimÚ
mask_tokenÚuse_absolute_embeddingsÚposition_embeddingsÚ	LayerNormÚnormÚDropoutÚhidden_dropout_probÚdropoutÚ
patch_sizeÚconfig)Úselfr^   Úuse_mask_tokenrO   Ú	__class__s   &&& €r   rL   ÚDonutSwinEmbeddings.__init__�   sã   ø€ Ü‰ÑÔä 8¸Ó @ˆÔØ×+Ñ+×7Ñ7ˆØ×/Ñ/×9Ñ9ˆŒßO]œ"Ÿ,š,¤u§{¢{°1°a¸×9IÑ9IÓ'JÔKÐcgˆŒà×)×)Ð)Ü')§|¢|´E·K²KÀÀ;ÐQRÅ?ÐTZ×TdÑTdÓ4eÓ'fˆDÕ$à'+ˆDÔ$ä—L’L ×!1Ñ!1Ó2ˆŒ	Ü—z’z &×"<Ñ"<Ó=ˆŒØ ×+Ñ+ˆŒØŽr    c                óZ   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[ P                  /# )r   Ú
embeddingsr@   rA   Úreturn©r   ÚTensorÚint)r   r   s   "€r   r   Ú DonutSwinEmbeddings.__annotate__£   s;   ø€ ÷ &Dñ &D±5·<±<ð &DÉð &DÑUXð &DÑ]b×]iÑ]iñ &Dr    c                óæ  € VP                   ^,          ^,
          pV P                  P                   ^,          ^,
          p\        P                  P	                  4       '       g   WE8X  d   W#8X  d   V P                  # V P                  R,          pV P                  R,          pVP                   R,          pW P
                  ,          p	W0P
                  ,          p
\        VR,          4      pVP                  ^W»V4      pVP                  ^ ^^^4      p\        P                  P                  VWš3RRR7      pVP                  ^ ^^^4      P                  ^RV4      p\        P                  ! Wg3^R7      # )	aÐ  
This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
images. This method is also adapted to support torch.jit tracing.

Adapted from:
- https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
- https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
g      à?ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údim)ºNNN:NrJ   N)rq   ºrJ   NNr7   )r9   rW   r   ÚjitÚ
is_tracingr]   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolater:   Úcat)r_   rd   r@   rA   rO   Únum_positionsÚclass_pos_embedÚpatch_pos_embedrp   Ú
new_heightÚ	new_widthÚsqrt_num_positionss   &&&&        r   Úinterpolate_pos_encodingÚ,DonutSwinEmbeddings.interpolate_pos_encoding£   sE  € ð !×&Ñ& qÕ)¨AÕ-ˆØ×0Ñ0×6Ñ6°qÕ9¸AÕ=ˆô �y‰y×#Ñ#×%Ò%¨+Ô*FÈ6Ì?Ø×+Ñ+Ð+à×2Ñ2°5Õ9ˆØ×2Ñ2°5Õ9ˆà×Ñ˜rÕ"ˆàŸ™Õ.ˆ
ØŸ_™_Õ,ˆ	ä& }°cÕ'9Ó:ÐØ)×1Ñ1°!Ð5GÐ]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØÐ(ØØð	 4ó 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆä�yŠy˜/Ð;ÀÔCÐCr    c          	      óš   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[RS[S[ P
                  ,          /# )r   Úpixel_valuesNÚbool_masked_posr€   re   )r   r   Ú
BoolTensorÚboolr   rg   )r   r   s   "€r   r   ri   Ë   sR   ø€ ÷ -ñ -á×'Ñ'¨$Õ.ð-ñ ×)Ñ)¨DÕ0ð-ñ #'ð	-ñ
 
‰u�|‰|Õ	ñ-r    c                óò  € VP                   w  rErgV P                  V4      w  r‰V P                  V4      pVP                  4       w  r«pVeZ   V P                  P                  W«R4      pVP                  R4      P                  V4      pVRV,
          ,          WÍ,          ,           pV P                  e4   V'       d   W€P                  W†V4      ,           pMW€P                  ,           pV P                  V4      pW‰3# )Ng      ð?r7   )r9   rN   rY   rl   rU   ÚexpandÚ	unsqueezeÚtype_asrW   r€   r\   )r_   rƒ   r„   r€   Ú_rB   r@   rA   rd   Úoutput_dimensionsr?   Úseq_lenÚmask_tokensÚmasks   &&&&          r   ÚforwardÚDonutSwinEmbeddings.forwardË   sÝ   € ð *6×);Ñ);Ñ&ˆ˜Ø(,×(=Ñ(=¸lÓ(KÑ%ˆ
Ø—Y‘Y˜zÓ*ˆ
Ø!+§¡Ó!2Ñˆ
˜QàÒ&ØŸ/™/×0Ñ0°ÀbÓIˆKà"×,Ñ,¨RÓ0×8Ñ8¸ÓEˆDØ# s¨T¥zÕ2°[Õ5GÕGˆJà×#Ñ#Ò/ß'Ø'×*GÑ*GÈ
Ð\aÓ*bÕb‘
à'×*BÑ*BÕB�
à—\‘\ *Ó-ˆ
àÐ,Ð,r    )r^   r\   rU   rY   rN   rQ   r]   rW   )F©NF)r"   r#   r$   r%   r&   rL   r€   r�   r(   r)   Ú__classcell__©ra   r   s   @@r   rH   rH   ‹   s+   ù‡ € ñ÷÷&&Dð &D÷P-÷ -ò -r    rH   c                   óN   a a€ ] tR t^èt oRtV 3R ltR tV3R lR ltRtVt	V ;t
# )rM   zÜ
This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
`hidden_states` (patch embeddings) of shape `(batch_size, seq_length, hidden_size)` to be consumed by a
Transformer.
c                óZ  <€ \         SV `  4        VP                  VP                  r2VP                  VP
                  rT\        V\        P                  P                  4      '       d   TMW"3p\        V\        P                  P                  4      '       d   TMW33pV^,          V^,          ,          V^ ,          V^ ,          ,          ,          pW0n        W`n
        V^ ,          V^ ,          ,          V^,          V^,          ,          3V n        \        P                  ! WEW3R7      V n        R# )rJ   )Úkernel_sizeÚstrideN)rK   rL   Ú
image_sizer]   rB   rT   Ú
isinstanceÚcollectionsÚabcÚIterablerO   rP   r   ÚConv2dÚ
projection)r_   r^   r™   r]   rB   Úhidden_sizerO   ra   s   &&     €r   rL   Ú!DonutSwinPatchEmbeddings.__init__ï   sß   ø€ Ü‰ÑÔØ!'×!2Ñ!2°F×4EÑ4E�JØ$*×$7Ñ$7¸×9IÑ9I�kÜ#-¨j¼+¿/¹/×:RÑ:R×#SÒ#S‘ZÐZdÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:R×#SÒ#S‘ZÐZdÐYqˆ
Ø! !•}¨
°1­Õ5¸*ÀQ½-È:ÐVWÍ=Õ:XÕYˆØ$ŒØ&ÔØ$ Q�-¨:°a­=Õ8¸*ÀQ½-È:ÐVWÍ=Õ:XÐYˆŒäŸ)š) LÈ:ÔiˆŽr    c                óÊ  € W0P                   ^,          ,          ^ 8w  dS   ^ V P                   ^,          W0P                   ^,          ,          ,
          3p\        P                  P                  W4      pW P                   ^ ,          ,          ^ 8w  dU   ^ ^ ^ V P                   ^ ,          W P                   ^ ,          ,          ,
          3p\        P                  P                  W4      pV# )z9Pad pixel_values to be divisible by patch_size if needed.)r]   r   rw   Úpad)r_   rƒ   r@   rA   Ú
pad_valuess   &&&& r   Ú	maybe_padÚ"DonutSwinPatchEmbeddings.maybe_padü   s¥   € à—?‘? 1Õ%Õ%¨Ô*Ø˜TŸ_™_¨QÕ/°%¿/¹/È!Õ:LÕ2LÕLÐMˆJÜŸ=™=×,Ñ,¨\ÓFˆLØ—O‘O AÕ&Õ&¨!Ô+Ø˜Q  4§?¡?°1Õ#5¸ÇÁÐQRÕASÕ8SÕ#SÐTˆJÜŸ=™=×,Ñ,¨\ÓFˆLØÐr    c                ó‚   <€ V ^8„  d   QhRS[ P                  R,          RS[S[ P                  S[S[,          3,          /# )r   rƒ   Nre   )r   r   r   rg   rh   )r   r   s   "€r   r   Ú%DonutSwinPatchEmbeddings.__annotate__  s;   ø€ ÷ 	-ñ 	-¡E×$5Ñ$5¸Õ$<ð 	-ÁÁuÇ|Á|ÑUZÑ[^ÕU_ÐG_ÕA`ñ 	-r    c                óÔ   € VP                   w  r#rEV P                  WV4      pV P                  V4      pVP                   w   r$pWE3pVP                  ^4      P	                  ^^4      pWg3# )r   )r9   r¥   rŸ   Úflattenr;   )r_   rƒ   r‹   rB   r@   rA   rd   rŒ   s   &&      r   r�   Ú DonutSwinPatchEmbeddings.forward  sp   € Ø)5×);Ñ);Ñ&ˆ˜à—~‘~ l¸EÓBˆØ—_‘_ \Ó2ˆ
Ø(×.Ñ.Ñˆˆ1�eØ#˜OÐØ×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆ
àÐ,Ð,r    )rP   rO   r]   rŸ   ©r"   r#   r$   r%   r&   rL   r¥   r�   r(   r)   r“   r”   s   @@r   rM   rM   è   s$   ù‡ € ñõjò÷	-÷ 	-ð 	-r    rM   c                   óf   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltV3R lR ltR	tVt	V ;t
# )
ÚDonutSwinPatchMergingi  zP
Patch Merging Layer.

Args:
    dim (`int`):
        Number of input channels.
c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   rp   re   N)rh   )r   r   s   "€r   r   Ú"DonutSwinPatchMerging.__annotate__  s   ø€ ÷ *ñ *™Cð * Dñ *r    c                óÀ   <€ \         SV `  4        \        P                  ! ^V,          ^V,          RR7      V n        \        P
                  ! ^V,          4      V n        R# )é   F©ÚbiasN)rK   rL   r   ÚLinearÚ	reductionrX   rY   )r_   rp   ra   s   &&€r   rL   ÚDonutSwinPatchMerging.__init__  s>   ø€ Ü‰ÑÔÜŸš 1 s¥7¨A°­G¸%Ô@ˆŒÜ—L’L  S¥Ó)ˆŽ	r    c                óZ   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[ P                  /# )r   r=   r@   rA   re   rf   )r   r   s   "€r   r   r°   !  s4   ø€ ÷ ñ ¡u§|¡|ð ¹Sð Éð ÑQV×Q]ÑQ]ñ r    c           
     ó¦   € V^,          ^8X  g   V^,          ^8X  d5   \         P                  P                  V^ ^ ^ V^,          ^ V^,          34      pV# )zPPad input feature map to be divisible by 2 in both spatial dimensions if needed.)r   rw   r£   )r_   r=   r@   rA   s   &&&&r   r¥   ÚDonutSwinPatchMerging.maybe_pad!  sL   € à�Q�J˜!ŒO ¨¥¨a¤ÜŸM™M×-Ñ-¨m¸aÀÀAÀuÈqÅyÐRSÐU[Ð^_ÕU_Ð=`ÓaˆMØÐr    c                ój   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          RS[ P                  /# )r   r=   Úinput_dimensionsre   )r   rg   r   rh   )r   r   s   "€r   r   r°   '  s6   ø€ ÷ ñ ¡U§\¡\ð ÁUÉ3ÑPSÈ8Å_ð ÑY^×YeÑYeñ r    c                ó¢  € Vw  r4VP                   w  rVpVP                  WSWG4      pV P                  WV4      p\        P                  ! \        ^4       UU	u. uF'  p\        ^4       F  q‘RV	R^1VR^1R3,          NK  	  K)  	  up	pRR7      pVP                  VR^V,          4      pV P                  V4      pV P                  V4      pV# u up	pi )r   rq   Nro   r7   )r9   r:   r¥   r   ry   ÚrangerY   r¶   )
r_   r=   r¼   r@   rA   r?   rp   rB   ÚcolÚrows
   &&&       r   r�   ÚDonutSwinPatchMerging.forward'  sÑ   € Ø(‰ˆà(5×(;Ñ(;Ñ%ˆ
˜à%×*Ñ*¨:¸uÓSˆàŸ™ }¸eÓDˆäŸ	š	Ü<AÀ!¼HÔY¹H°SÔPUÐVWÖPXÈ˜1˜c˜f 1˜f c f¨1 f¨aÐ/×0Ð0ÑPXÑ0¹HÒYÐ_aô
ˆð &×*Ñ*¨:°r¸1¸|Õ;KÓLˆàŸ	™	 -Ó0ˆØŸ™ }Ó5ˆàÐùó Zs   Á-C
)rY   r¶   r¬   r”   s   @@r   r®   r®     s-   ù‡ € ñ÷*ó *÷
ð ÷÷ ð r    r®   c                   óN   a a€ ] tR tRt oV 3R ltRV3R lR lltR tRtVtV ;t	# )ÚDonutSwinSelfAttentioni<  c                ó4  <€ \         SV `  4        W#,          ^ 8w  d   \        RV RV R24      hW0n        \	        W#,          4      V n        V P                  V P
                  ,          V n        \        V\        P                  P                  4      '       d   TMWD3V n        \        P                  ! \        P                  ! ^V P                  ^ ,          ,          ^,
          ^V P                  ^,          ,          ^,
          ,          V4      4      V n        \        P"                  ! V P%                  4       4      V n        \        P(                  ! V P                  V P                  VP*                  R7      V n        \        P(                  ! V P                  V P                  VP*                  R7      V n        \        P(                  ! V P                  V P                  VP*                  R7      V n        \        P2                  ! VP4                  4      V n        R# )é    zThe hidden size (z6) is not a multiple of the number of attention heads (Ú)r³   N)rK   rL   Ú
ValueErrorÚnum_attention_headsrh   Úattention_head_sizeÚall_head_sizerš   r›   rœ   r�   r>   r   rR   r   rS   Úrelative_position_bias_tableÚBufferÚcreate_relative_position_indexÚrelative_position_indexrµ   Úqkv_biasÚqueryÚkeyÚvaluerZ   Úattention_probs_dropout_probr\   ©r_   r^   rp   Ú	num_headsr>   ra   s   &&&&&€r   rL   ÚDonutSwinSelfAttention.__init__=  s‚  ø€ Ü‰ÑÔØ�?˜aÔÜØ# C 5Ð(^Ð_hÐ^iÐijÐkóð ð $-Ô Ü#& s¥Ó#7ˆÔ Ø!×5Ñ5¸×8PÑ8PÕPˆÔä% k´;·?±?×3KÑ3K×LÒL‰KÐS^ÐRlð 	Ôô -/¯LªLÜ�KŠK˜˜T×-Ñ-¨aÕ0Õ0°1Õ4¸¸T×=MÑ=MÈaÕ=PÕ9PÐSTÕ9TÕUÐW`Óaó-
ˆÔ)ô (*§y¢y°×1TÑ1TÓ1VÓ'WˆÔ$ä—Y’Y˜t×1Ñ1°4×3EÑ3EÈFÏOÉOÔ\ˆŒ
Ü—9’9˜T×/Ñ/°×1CÑ1CÈ&Ï/É/ÔZˆŒÜ—Y’Y˜t×1Ñ1°4×3EÑ3EÈFÏOÉOÔ\ˆŒ
ä—z’z &×"EÑ"EÓFˆŽr    c          	      óš   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[R,          RS[S[ P                  ,          /# ©r   r   Úattention_maskNÚoutput_attentionsre   ©r   rg   r   r†   r   )r   r   s   "€r   r   Ú#DonutSwinSelfAttention.__annotate__W  sO   ø€ ÷ 1ñ 1á—|‘|ð1ñ ×)Ñ)¨DÕ0ð1ñ   $�;ð	1ñ
 
‰u�|‰|Õ	ñ1r    c                óè  € VP                   w  rEpWERV P                  3pV P                  V4      P                  V4      P	                  ^^4      pV P                  V4      P                  V4      P	                  ^^4      p	V P                  V4      P                  V4      P	                  ^^4      p
\        P                  ! W‰P	                  RR4      4      pV\        P                  ! V P                  4      ,          pV P                  V P                  P                  R4      ,          pVP                  V P                  ^ ,          V P                  ^,          ,          V P                  ^ ,          V P                  ^,          ,          R4      pVP                  ^^ ^4      P                  4       pW¼P!                  ^ 4      ,           pVez   VP                   ^ ,          pVP                  WM,          WÐP"                  WU4      pW²P!                  ^4      P!                  ^ 4      ,           pVP                  RV P"                  WU4      p\$        P&                  P)                  VRR7      pV P+                  V4      p\        P                  ! Wê4      pVP                  ^ ^^^4      P                  4       pVP-                  4       RR V P.                  3,           pVP                  V4      pV'       d   Wþ3pV# V3pV# )rJ   Nro   r7   éþÿÿÿ)r9   rÉ   rÐ   r:   r;   rÑ   rÒ   r   ÚmatmulÚmathÚsqrtrË   rÎ   r>   rv   r<   r‰   rÈ   r   rw   Úsoftmaxr\   rl   rÊ   )r_   r   rÙ   rÚ   r?   rp   rB   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚrelative_position_biasÚ
mask_shapeÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss   &&&&              r   r�   ÚDonutSwinSelfAttention.forwardW  s�  € ð )6×(;Ñ(;Ñ%ˆ
˜Ø"¨¨T×-EÑ-EÐFˆà—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆØ—H‘H˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆ	Ø—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆô !Ÿ<š<¨×5HÑ5HÈÈRÓ5PÓQÐà+¬d¯iªi¸×8PÑ8PÓ.QÕQÐà!%×!BÑ!BÀ4×C_ÑC_×CdÑCdÐegÓChÕ!iÐØ!7×!<Ñ!<Ø×Ñ˜QÕ $×"2Ñ"2°1Õ"5Õ5°t×7GÑ7GÈÕ7JÈT×M]ÑM]Ð^_ÕM`Õ7`Ðbdó"
Ðð "8×!?Ñ!?ÀÀ1ÀaÓ!H×!SÑ!SÓ!UÐØ+×.NÑ.NÈqÓ.QÕQÐàÒ%à'×-Ñ-¨aÕ0ˆJØ/×4Ñ4ØÕ(¨*×6NÑ6NÐPSó Ðð  0×2JÑ2JÈ1Ó2M×2WÑ2WÐXYÓ2ZÕZÐØ/×4Ñ4°R¸×9QÑ9QÐSVÓ\Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆäŸš _ÓBˆØ%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÕ"SÐØ%×*Ñ*Ð+BÓCˆç6G�=Ð2ˆàˆð O\ÐM]ˆàˆr    c                óØ  € \         P                  ! V P                  ^ ,          4      p\         P                  ! V P                  ^,          4      p\         P                  ! \         P                  ! W.RR7      4      p\         P
                  ! V^4      pVR,          VR,          ,
          pVP                  ^^^ 4      P                  4       pVR;;,          V P                  ^ ,          ^,
          ,          uu&   VR;;,          V P                  ^,          ^,
          ,          uu&   VR;;,          ^V P                  ^,          ,          ^,
          ,          uu&   VP                  R4      pV# )rÅ   Úij)Úindexing)rq   rq   N)rq   Nrq   )rq   rq   rÅ   )rq   rq   rJ   r7   )	r   Úaranger>   ÚstackÚmeshgridrª   rv   r<   Úsum)r_   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordsrÎ   s   &      r   rÍ   Ú5DonutSwinSelfAttention.create_relative_position_indexŠ  s  € ä—<’< × 0Ñ 0°Õ 3Ó4ˆÜ—<’< × 0Ñ 0°Õ 3Ó4ˆÜ—’œUŸ^š^¨XÐ,@È4ÔPÓQˆÜŸš v¨qÓ1ˆØ(¨Õ4°~ÀjÕ7QÕQˆØ)×1Ñ1°!°Q¸Ó:×EÑEÓGˆØ˜×  D×$4Ñ$4°QÕ$7¸!Õ$;Õ;Ó Ø˜×  D×$4Ñ$4°QÕ$7¸!Õ$;Õ;Ó Ø˜×  A¨×(8Ñ(8¸Õ(;Õ$;¸aÕ$?Õ?Ó Ø"1×"5Ñ"5°bÓ"9ÐØ&Ð&r    )
rÊ   rÉ   r\   rÑ   rÈ   rÐ   rË   rÎ   rÒ   r>   r’   )
r"   r#   r$   r%   rL   r�   rÍ   r(   r)   r“   r”   s   @@r   rÃ   rÃ   <  s    ù‡ € õG÷41ò 1÷f'ò 'r    rÃ   c                   óD   a a€ ] tR tRt oV 3R ltV3R lR ltRtVtV ;t# )ÚDonutSwinSelfOutputiš  c                ó¤   <€ \         SV `  4        \        P                  ! W"4      V n        \        P
                  ! VP                  4      V n        R # ©N)rK   rL   r   rµ   ÚdenserZ   rÓ   r\   ©r_   r^   rp   ra   s   &&&€r   rL   ÚDonutSwinSelfOutput.__init__›  s4   ø€ Ü‰ÑÔÜ—Y’Y˜sÓ(ˆŒ
Ü—z’z &×"EÑ"EÓFˆŽr    c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r   r   Úinput_tensorre   ©r   rg   )r   r   s   "€r   r   Ú DonutSwinSelfOutput.__annotate__   s1   ø€ ÷ ñ ¡U§\¡\ð ÁÇÁð ÑRW×R^ÑR^ñ r    c                óJ   € V P                  V4      pV P                  V4      pV# rÿ   ©r   r\   )r_   r   r  s   &&&r   r�   ÚDonutSwinSelfOutput.forward   s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆàÐr    r  ©	r"   r#   r$   r%   rL   r�   r(   r)   r“   r”   s   @@r   rý   rý   š  s   ù‡ € õG÷
÷ ð r    rý   c                   óH   a a€ ] tR tRt oV 3R ltRV3R lR lltRtVtV ;t# )ÚDonutSwinAttentioni¨  c                óf   <€ \         SV `  4        \        WW44      V n        \	        W4      V n        R # rÿ   )rK   rL   rÃ   r_   rý   ÚoutputrÔ   s   &&&&&€r   rL   ÚDonutSwinAttention.__init__©  s(   ø€ Ü‰ÑÔÜ*¨6¸	ÓOˆŒ	Ü)¨&Ó6ˆŽr    c          	      óš   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[R,          RS[S[ P                  ,          /# rØ   rÛ   )r   r   s   "€r   r   ÚDonutSwinAttention.__annotate__®  sO   ø€ ÷ 	ñ 	á—|‘|ð	ñ ×)Ñ)¨DÕ0ð	ñ   $�;ð		ñ
 
‰u�|‰|Õ	ñ	r    c                ó~   € V P                  WV4      pV P                  V^ ,          V4      pV3VR,          ,           pV# ©rÅ   rr   )r_   r  )r_   r   rÙ   rÚ   Úself_outputsÚattention_outputrí   s   &&&&   r   r�   ÚDonutSwinAttention.forward®  sA   € ð —y‘y Ð@QÓRˆØŸ;™; |°A¥¸ÓFÐØ#Ð%¨°RÕ(8Õ8ˆØˆr    )r  r_   r’   r
  r”   s   @@r   r  r  ¨  s   ù‡ € õ7÷
	÷ 	ò 	r    r  c                   óD   a a€ ] tR tRt oV 3R ltV3R lR ltRtVtV ;t# )ÚDonutSwinIntermediatei»  c                ó.  <€ \         SV `  4        \        P                  ! V\	        VP
                  V,          4      4      V n        \        VP                  \        4      '       d   \        VP                  ,          V n        R # VP                  V n        R # rÿ   )rK   rL   r   rµ   rh   Ú	mlp_ratior   rš   Ú
hidden_actÚstrr   Úintermediate_act_fnr  s   &&&€r   rL   ÚDonutSwinIntermediate.__init__¼  sd   ø€ Ü‰ÑÔÜ—Y’Y˜s¤C¨×(8Ñ(8¸3Õ(>Ó$?Ó@ˆŒ
Ü�f×'Ñ'¬×-Ò-Ü'-¨f×.?Ñ.?Õ'@ˆDÖ$à'-×'8Ñ'8ˆDÖ$r    c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   r   re   r  )r   r   s   "€r   r   Ú"DonutSwinIntermediate.__annotate__Ä  ó#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r    c                óJ   € V P                  V4      pV P                  V4      pV# rÿ   ©r   r  ©r_   r   s   &&r   r�   ÚDonutSwinIntermediate.forwardÄ  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr    r$  r
  r”   s   @@r   r  r  »  s   ù‡ € õ9÷÷ ð r    r  c                   óD   a a€ ] tR tRt oV 3R ltV3R lR ltRtVtV ;t# )ÚDonutSwinOutputiË  c                óÚ   <€ \         SV `  4        \        P                  ! \	        VP
                  V,          4      V4      V n        \        P                  ! VP                  4      V n	        R # rÿ   )
rK   rL   r   rµ   rh   r  r   rZ   r[   r\   r  s   &&&€r   rL   ÚDonutSwinOutput.__init__Ì  sF   ø€ Ü‰ÑÔÜ—Y’Yœs 6×#3Ñ#3°cÕ#9Ó:¸CÓ@ˆŒ
Ü—z’z &×"<Ñ"<Ó=ˆŽr    c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# r   r  )r   r   s   "€r   r   ÚDonutSwinOutput.__annotate__Ñ  r"  r    c                óJ   € V P                  V4      pV P                  V4      pV# rÿ   r  r%  s   &&r   r�   ÚDonutSwinOutput.forwardÑ  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr    r  r
  r”   s   @@r   r(  r(  Ë  s   ù‡ € õ>÷
÷ ð r    r(  c                   ój   a a€ ] tR tRt oRtR
V3R lV 3R llltV3R lR ltV3R lR ltR	tVt	V ;t
# )ÚDonutDropPathiØ  zÃStochastic depth (DropPath) per sample, for residual blocks.

Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
<https://arxiv.org/abs/1603.09382>`_.
c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Ú	drop_probre   N)Úfloat)r   r   s   "€r   r   ÚDonutDropPath.__annotate__ß  s   ø€ ÷ #ñ #¡%ð #°$ñ #r    c                ó0   <€ \         SV `  4        Wn        R # rÿ   )rK   rL   r2  )r_   r2  ra   s   &&€r   rL   ÚDonutDropPath.__init__ß  s   ø€ Ü‰ÑÔØ"Žr    c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# r   r  )r   r   s   "€r   r   r4  ã  s#   ø€ ÷ <ñ <¡U§\¡\ð <±e·l±lñ <r    c                ó˜  € V P                   R 8X  g   V P                  '       g   V# ^V P                   ,
          pVP                  ^ ,          3RVP                  ^,
          ,          ,           p\        P
                  ! W1P                  VP                  R7      p\        P                  ! WB,           4      pVP                  V4      V,          # )ç        ©ÚdtypeÚdevice)rJ   )
r2  Útrainingr9   Úndimr   Úrandr;  r<  ÚfloorÚdiv)r_   r   Ú	keep_probr9   Úrandom_tensors   &&   r   r�   ÚDonutDropPath.forwardã  s•   € Ø�>‰>˜SÔ ¨¯¯¨Ø Ð Ø˜Ÿ™Õ&ˆ	Ø×$Ñ$ QÕ'Ð)¨D°M×4FÑ4FÈÕ4JÕ,KÕKˆÜŸ
š
 5×0CÑ0CÈM×L`ÑL`ÔaˆÜŸš MÕ$=Ó>ˆØ× Ñ  Ó+¨mÕ;Ð;r    c                ó    <€ V ^8„  d   QhRS[ /# )r   re   )r  )r   r   s   "€r   r   r4  ì  s   ø€ ÷ %ñ %™Cñ %r    c                ó    € R V P                    2# )zp=©r2  ©r_   s   &r   Ú
extra_reprÚDonutDropPath.extra_reprì  s   € Ø�D—N‘NÐ#Ð$Ð$r    rG  )r9  )r"   r#   r$   r%   r&   rL   r�   rI  r(   r)   r“   r”   s   @@r   r0  r0  Ø  s-   ù‡ € ñ÷#õ #÷<ð <÷%÷ %ð %r    r0  c                   ój   a a€ ] tR tRt oR
V 3R lltR tV3R lR ltR tRV3R lR lltR	t	Vt
V ;t# )ÚDonutSwinLayeriñ  c                óè  <€ \         SV `  4        VP                  V n        W`n        VP                  V n        W0n        \        P                  ! W!P                  R 7      V n	        \        WW@P                  R7      V n        VR8”  d   \        V4      M\        P                  ! 4       V n        \        P                  ! W!P                  R 7      V n        \!        W4      V n        \%        W4      V n        R# ))Úeps)r>   r9  N)rK   rL   Úchunk_size_feed_forwardÚ
shift_sizer>   Úinput_resolutionr   rX   Úlayer_norm_epsÚlayernorm_beforer  Ú	attentionr0  ÚIdentityÚ	drop_pathÚlayernorm_afterr  Úintermediater(  r  )r_   r^   rp   rQ  rÕ   Údrop_path_raterP  ra   s   &&&&&&&€r   rL   ÚDonutSwinLayer.__init__ò  s¯   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$Ø$ŒØ!×-Ñ-ˆÔØ 0ÔÜ "§¢¨S×6KÑ6KÔ LˆÔÜ+¨F¸×P`ÑP`ÔaˆŒØ:HÈ3Ô:Nœ ~Ô6ÔTV×T_ÒT_ÓTaˆŒÜ!Ÿ|š|¨C×5JÑ5JÔKˆÔÜ1°&Ó>ˆÔÜ% fÓ2ˆŽr    c                ó  € \        V4      V P                  8:  dq   \        ^ 4      V n        \        P
                  P                  4       '       d+   \        P                   ! \        P                  ! V4      4      M
\        V4      V n        R# R# ©rÅ   N)Úminr>   r   rP  r   rs   rt   Útensor)r_   rQ  s   &&r   Úset_shift_and_window_sizeÚ(DonutSwinLayer.set_shift_and_window_sizeÿ  s_   € ÜÐÓ  D×$4Ñ$4Ô4ä'¨›lˆDŒOä=B¿Y¹Y×=QÑ=Q×=SÒ=S”—	’	œ%Ÿ,š,Ð'7Ó8Ô9ÔY\Ð]mÓYnð Öñ 5r    c                ó‚   <€ V ^8„  d   QhRS[ RS[ RS[P                  RS[P                  RS[P                  R,          /# )r   r@   rA   r;  r<  re   N)rh   r   r;  r<  rg   )r   r   s   "€r   r   ÚDonutSwinLayer.__annotate__  sH   ø€ ÷ ñ ¡Cð ±ð ¹E¿K¹Kð ÑQV×Q]ÑQ]ð Ñbg×bnÑbnÐquÕbuñ r    c                ó0  € V P                   ^ 8:  d   R# \        P                  ! WR7      p\        P                  ! W$R7      pWQV P                  ,
          8¬  P	                  4       WQV P                   ,
          8¬  P	                  4       ,           pWbV P                  ,
          8¬  P	                  4       WbV P                   ,
          8¬  P	                  4       ,           pVR,          ^,          VR,          ,           P                  V4      p	\        W�P                  4      p
V
P                  RV P                  V P                  ,          4      p
V
P                  ^4      V
P                  ^4      ,
          pVP                  V^ 8g  R4      P                  V^ 8H  R4      pV# )um  Build the cyclic-shift attention mask for shifted-window MSA; returns None when shift_size is 0.

Each (h, w) position belongs to one of 9 cyclic-shift regions (3 along each axis), encoded
as ``h_region * 3 + w_region``. Regions per axis:
- 0: indices ``[0, axis - window_size)``
- 1: indices ``[axis - window_size, axis - shift_size)``
- 2: indices ``[axis - shift_size, axis)``
Implementation note: a single arithmetic pass on `torch.arange` (two comparisons +
broadcast add) replaces the original 9-iteration nested-Python-loop slice-assignment â€”
fully vectorised, no per-cell host-side scatter, no GPUâ†”host sync.
N©r<  r9  )Nrq   NN)NNrq   Nr7   g      YÀ)
rP  r   rò   r>   ÚlongÚtorD   r:   r‰   Úmasked_fill)r_   r@   rA   r;  r<  Úh_idxÚw_idxÚh_regionÚw_regionÚimg_maskÚmask_windowsÚ	attn_masks   &&&&&       r   Úget_attn_maskÚDonutSwinLayer.get_attn_mask  sJ  € ð �?‰?˜aÔÙÜ—’˜VÔ3ˆÜ—’˜UÔ2ˆØ d×&6Ñ&6Õ6Ñ6×<Ñ<Ó>À%ÐTX×TcÑTcÕKcÑBc×AiÑAiÓAkÕkˆØ T×%5Ñ%5Õ5Ñ5×;Ñ;Ó=ÀÐRV×RaÑRaÕJaÑAa×@gÑ@gÓ@iÕiˆØÐ0Õ1°AÕ5¸ÐATÕ8UÕU×YÑYÐZ_Ó`ˆÜ'¨×2BÑ2BÓCˆØ#×(Ñ(¨¨T×-=Ñ-=À×@PÑ@PÕ-PÓQˆØ ×*Ñ*¨1Ó-°×0FÑ0FÀqÓ0IÕIˆ	Ø×)Ñ)¨)°q©.¸&ÓA×MÑMÈiÐ[\ÉnÐ^aÓbˆ	ØÐr    c                ó&  € V P                   W0P                   ,          ,
          V P                   ,          pV P                   W P                   ,          ,
          V P                   ,          p^ ^ ^ V^ V3p\        P                  P                  W4      pW3# )rÅ   )r>   r   rw   r£   )r_   r   r@   rA   Ú	pad_rightÚ
pad_bottomr¤   s   &&&&   r   r¥   ÚDonutSwinLayer.maybe_pad!  sy   € Ø×%Ñ%¨×0@Ñ0@Õ(@Õ@ÀD×DTÑDTÕTˆ	Ø×&Ñ&¨×2BÑ2BÕ)BÕBÀd×FVÑFVÕVˆ
Ø˜˜A˜y¨!¨ZÐ8ˆ
ÜŸ™×)Ñ)¨-ÓDˆØÐ(Ð(r    c                ó¼   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          RS[R,          RS[R,          RS[S[ P                  S[ P                  3,          /# ©r   r   r¼   rÚ   NÚalways_partitionre   ©r   rg   r   rh   r†   )r   r   s   "€r   r   rb  (  sc   ø€ ÷ >ñ >á—|‘|ð>ñ  ¡¡S �/ð>ñ   $�;ð	>ñ
  �+ð>ñ 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ>r    c                ó&  € V'       g   V P                  V4       M Vw  rVVP                  4       w  rxp	Tp
V P                  V4      pVP                  WuWi4      pV P	                  WV4      w  rVP
                  w  rŒrØV P                  ^ 8”  d2   \        P                  ! WP                  ) V P                  ) 3RR7      pMTp\        WàP                  4      pVP                  RV P                  V P                  ,          V	4      pV P                  WÍVP                  VP                  R7      pV P                  VVVR7      pV^ ,          pVP                  RV P                  V P                  V	4      p\        VV P                  WÍ4      pV P                  ^ 8”  d1   \        P                  ! VV P                  V P                  3RR7      pMTpV^,          ^ 8„  ;'       g    V^,          ^ 8„  pV'       d    VRRV1RV1R3,          P!                  4       pVP                  WuV,          V	4      pW P#                  V4      ,           pV P%                  V4      pV P'                  V4      pWP)                  V4      ,           pV'       d   VV^,          3pV# V3pV# )rÅ   )ÚshiftsÚdimsr:  )rÚ   rq   N)rJ   r   r7   )r_  rl   rS  r:   r¥   r9   rP  r   ÚrollrD   r>   ro  r;  r<  rT  rF   r<   rV  rW  rX  r  )r_   r   r¼   rÚ   rw  r@   rA   r?   r‹   ÚchannelsÚshortcutr¤   Ú
height_padÚ	width_padÚshifted_hidden_statesÚhidden_states_windowsrn  Úattention_outputsr  Úattention_windowsÚshifted_windowsÚ
was_paddedÚlayer_outputÚlayer_outputss   &&&&&                   r   r�   ÚDonutSwinLayer.forward(  s~  € ÷  Ø×*Ñ*Ð+;Õ<àØ(‰ˆØ"/×"4Ñ"4Ó"6Ñˆ
�xØ ˆà×-Ñ-¨mÓ<ˆà%×*Ñ*¨:¸uÓOˆð %)§N¡N°=È%Ó$PÑ!ˆà&3×&9Ñ&9Ñ#ˆ�yà�?‰?˜QÔÜ$)§J¢J¨}ÇÁÐFVÐY]×YhÑYhÐXhÐEiÐpvÔ$wÑ!à$1Ð!ô !1Ð1F×HXÑHXÓ YÐØ 5× :Ñ :¸2¸t×?OÑ?OÐRV×RbÑRbÕ?bÐdlÓ mÐØ×&Ñ&Ø¨×)<Ñ)<ÐEZ×EaÑEað 'ó 
ˆ	ð !ŸN™NÐ+@À)Ð_p˜NÓqÐà,¨QÕ/Ðà,×1Ñ1°"°d×6FÑ6FÈ×HXÑHXÐZbÓcÐÜ(Ð):¸D×<LÑ<LÈjÓdˆð �?‰?˜QÔÜ %§
¢
¨?ÀDÇOÁOÐUY×UdÑUdÐCeÐlrÔ sÑà /Ðà •] QÑ&×;Ð;¨*°Q­-¸!Ñ*;ˆ
ßØ 1°!°W°f°W¸f¸u¸fÀaÐ2GÕ H× SÑ SÓ UÐà-×2Ñ2°:È½~ÈxÓXÐà §>¡>Ð2CÓ#DÕDˆà×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆØ$§{¡{°<Ó'@Õ@ˆç@Q˜Ð'8¸Õ';Ð<ˆØÐð YeÐWfˆØÐr    )
rT  rO  rV  rQ  rX  rW  rS  r  rP  r>   )r9  rÅ   ©FF)r"   r#   r$   r%   rL   r_  ro  r¥   r�   r(   r)   r“   r”   s   @@r   rL  rL  ñ  s-   ù‡ € ÷3ò÷ð ò2)÷>÷ >ò >r    rL  c                   óH   a a€ ] tR tRt oV 3R ltRV3R lR lltRtVtV ;t# )ÚDonutSwinStageij  c                ó\  <€ \         S	V `  4        Wn        W n        \        P
                  ! \        V4       Uu. uF;  p\        TTTTWh,          V^,          ^ 8X  d   ^ MVP                  ^,          R7      NK=  	  up4      V n	        Ve   V! VR7      V n
        MRV n
        RV n        R# u upi )r   )r^   rp   rQ  rÕ   rY  rP  Nro   F)rK   rL   r^   rp   r   Ú
ModuleListr¾   rL  r>   ÚblocksÚ
downsampleÚpointing)
r_   r^   rp   rQ  ÚdepthrÕ   rV  r�  Úira   s
   &&&&&&&& €r   rL   ÚDonutSwinStage.__init__k  s¤   ø€ Ü‰ÑÔØŒØŒÜ—m’mô ˜uœó
ñ &�Aô Ø!ØØ%5Ø'Ø#,¥<Ø%&¨¥U¨a¤Z™q°f×6HÑ6HÈAÕ6M÷ñ &ñ
ó
ˆŒð Ò!Ù(¨SÔ1ˆD�Oà"ˆDŒOàˆŽùò'
s   ¹AB)c                ó¢   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          RS[R,          RS[R,          RS[S[ P                  ,          /# rv  rx  )r   r   s   "€r   r   ÚDonutSwinStage.__annotate__…  sZ   ø€ ÷ ñ á—|‘|ðñ  ¡¡S �/ðñ   $�;ð	ñ
  �+ðñ 
‰u�|‰|Õ	ñr    c                ó8  € Vw  rV\        V P                  4       F  w  rxV! WW44      p	V	^ ,          pK  	  Tp
V P                  e6   V^,           ^,          V^,           ^,          rËWVW¼3pV P                  W¢4      pMWVWV3pWV3pV'       d   VX	R,          ,          pV# r  )Ú	enumerater�  r�  )r_   r   r¼   rÚ   rw  r@   rA   r“  Úlayer_modulerˆ  Ú!hidden_states_before_downsamplingÚheight_downsampledÚwidth_downsampledrŒ   Ústage_outputss   &&&&&          r   r�   ÚDonutSwinStage.forward…  s®   € ð )‰ˆÜ(¨¯©Ö5‰OˆAÙ(¨ÐJ[ÓnˆMà)¨!Õ,ŠMñ  6ð
 -:Ð)Ø�?‰?Ò&Ø5;¸aµZÀAÕ4EÈÐPQÍ	ÐVWÕGWÐ 1Ø!'Ð0BÐ VÐØ ŸO™OÐ,MÓ`‰Mà!'°Ð >Ðà&ÐK\Ð]ˆçØ˜]¨2Õ.Õ.ˆMØÐr    )r�  r^   rp   r�  r‘  rŠ  r
  r”   s   @@r   rŒ  rŒ  j  s   ù‡ € õ÷4÷ ò r    rŒ  c                   óH   a a€ ] tR tRt oV 3R ltRV3R lR lltRtVtV ;t# )ÚDonutSwinEncoderi¢  c                óL  <€ \         SV `  4        \        VP                  4      V n        Wn        \        P                  ! ^ VP                  \        VP                  4      RR7       Uu. uF  q3P                  4       NK  	  pp\        P                  ! \        V P                  4       Uu. uF×  p\        T\        VP                   ^V,          ,          4      V^ ,          ^V,          ,          V^,          ^V,          ,          3VP                  V,          VP"                  V,          V\        VP                  RV 4      \        VP                  RV^,            4       WPP                  ^,
          8  d   \$        MRR7      NKÙ  	  up4      V n        RV n        R# u upi u upi )rÅ   Úcpurd  N)r^   rp   rQ  r’  rÕ   rV  r�  F)rK   rL   ÚlenÚdepthsÚ
num_layersr^   r   ÚlinspacerY  rõ   Úitemr   rŽ  r¾   rŒ  rh   rT   rÕ   r®   ÚlayersÚgradient_checkpointing)r_   r^   rP   ÚxÚdprÚi_layerra   s   &&&   €r   rL   ÚDonutSwinEncoder.__init__£  sQ  ø€ Ü‰ÑÔÜ˜fŸm™mÓ,ˆŒØŒÜ!&§¢°°6×3HÑ3HÌ#ÈfÏmÉmÓJ\ÐejÕ!kÓlÑ!k˜A�v‰vŽxÑ!kˆÐlÜ—m’mô  % T§_¡_Ô5óñ  6�Gô Ø!Ü˜F×,Ñ,¨q°'­zÕ9Ó:Ø&/°¥l°q¸'µzÕ&BÀIÈaÅLÐUVÐX_ÕU_ÕD`Ð%aØ Ÿ-™-¨Õ0Ø$×.Ñ.¨wÕ7Ø!¤# f§m¡m°H°WÐ&=Ó">ÄÀVÇ]Á]ÐS`ÐU\Ð_`ÕU`ÐEaÓAbÐcØ9@Ç?Á?ÐUVÕCVÔ9VÕ4Ð]a÷ñ  6ñó
ˆŒð ',ˆÖ#ùò! mùòs   Á)FÂ*CF!c                óÊ   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          RS[R,          RS[R,          RS[R,          RS[R,          RS[R,          R	S[S[,          /# )
r   r   r¼   rÚ   NÚoutput_hidden_statesÚ(output_hidden_states_before_downsamplingrw  Úreturn_dictre   )r   rg   r   rh   r†   r   )r   r   s   "€r   r   ÚDonutSwinEncoder.__annotate__¹  s�   ø€ ÷ <
ñ <
á—|‘|ð<
ñ  ¡¡S �/ð<
ñ   $�;ð	<
ñ
 # T�kð<
ñ 37¸µ+ð<
ñ  �+ð<
ñ ˜D•[ð<
ñ 
Ñ'Õ	'ñ<
r    c                óò  € V'       d   RMR pV'       d   RMR p	V'       d   RMR p
V'       dL   VP                   w  r¼pVP                  ! V.VOVN5!  pVP                  ^ ^^^4      pW�3,          pWž3,          p	\        V P                  4       EF   w  ppV! WW64      pV^ ,          pV^,          pV^,          pVR,          VR,          3pV'       df   V'       d^   VP                   w  r¼pVP                  ! V.V^ ,          V^,          3OVN5!  pVP                  ^ ^^^4      pVV3,          pWž3,          p	M[V'       dT   V'       gL   VP                   w  r¼pVP                  ! V.VOVN5!  pVP                  ^ ^^^4      pW�3,          pWž3,          p	V'       g   EK  V
VR,          ,          p
EK#  	  V'       g1   \
        ;QJ d    . R WV
3 4       F  NK  	  5# ! R WV
3 4       4      # \        VVV
V	R7      # )N:é   NNc              3   ó0   "  € T F  qf   K  Vx € K  	  R # 5irÿ   r!   )Ú.0Úvs   & r   Ú	<genexpr>Ú+DonutSwinEncoder.forward.<locals>.<genexpr>î  s   é € ÐmÑ$[˜qŸšÓ$[ùs   ‚Œ
)r   r   r   r   r!   rÞ   r7   )r9   r:   rv   r˜  r¨  r   r   )r_   r   r¼   rÚ   r¯  r°  rw  r±  Úall_hidden_statesÚall_reshaped_hidden_statesÚall_self_attentionsr?   r‹   r    Úreshaped_hidden_stater“  r™  rˆ  rš  rŒ   s   &&&&&&&&            r   r�   ÚDonutSwinEncoder.forward¹  s   € ÷ #7™B¸DÐß+?¡RÀTÐ"ß$5™b¸4ÐçØ)6×)<Ñ)<Ñ&ˆJ˜;à$1×$6Ò$6°zÐ$bÐDTÐ$bÐVaÓ$bÐ!Ø$9×$AÑ$AÀ!ÀQÈÈ1Ó$MÐ!ØÐ!1Õ1ÐØ&Ð*BÕBÐ&ä(¨¯©×5‰OˆAˆ|Ù(¨ÐJ[ÓnˆMà)¨!Õ,ˆMØ0=¸aÕ0@Ð-Ø -¨aÕ 0Ðà 1°"Õ 5Ð7HÈÕ7LÐMÐç#×(PØ-N×-TÑ-TÑ*�
˜{ð )J×(NÒ(NØð)Ø"3°AÕ"6Ð8IÈ!Õ8LÐ!Mð)ØOZó)Ð%ð )>×(EÑ(EÀaÈÈAÈqÓ(QÐ%Ø!Ð&GÐ%IÕIÐ!Ø*Ð.FÕFÑ*ß%×.VØ-:×-@Ñ-@Ñ*�
˜{à(5×(:Ò(:¸:Ð(fÐHXÐ(fÐZeÓ(fÐ%Ø(=×(EÑ(EÀaÈÈAÈqÓ(QÐ%Ø!Ð%5Õ5Ð!Ø*Ð.FÕFÐ*ç Ò Ø# }°RÕ'8Õ8Ó#ñ9  6÷< ß”5Ñm ]ÐGZÑ$[Óm—5Ðm�5Ñm ]ÐGZÑ$[ÓmÓmÐmä%Ø+Ø+Ø*Ø#=ô	
ð 	
r    )r^   r©  r¨  r¥  )FFFFTr
  r”   s   @@r   r   r   ¢  s   ù‡ € õ,÷,<
÷ <
ò <
r    r   c                   ó|   a a€ ] tR tRt oRtRtR	tRtR.t]	P                  ! 4       V 3R l4       tV3R ltRtVtV ;t# )
ÚDonutSwinPreTrainedModeliø  Údonutrƒ   TrŒ  c                óà  <€ \         SV `  V4       \        V\        4      '       da   VP                  e!   \
        P                  ! VP                  4       VP                  e#   \
        P                  ! VP                  4       R# R# \        V\        4      '       dR   \
        P                  ! VP                  4       \
        P                  ! VP                  VP                  4       4       R# R# )zInitialize the weightsN)rK   Ú_init_weightsrš   rH   rU   ÚinitÚzeros_rW   rÃ   rË   Úcopy_rÎ   rÍ   )r_   Úmodulera   s   &&€r   rÃ  Ú&DonutSwinPreTrainedModel._init_weights  s£   ø€ ô 	‰Ñ˜fÔ%Ü�fÔ1×2Ò2Ø× Ñ Ò,Ü—’˜F×-Ñ-Ô.Ø×)Ñ)Ò5Ü—’˜F×6Ñ6Ö7ñ 6ä˜Ô 6×7Ò7Ü�KŠK˜×;Ñ;Ô<Ü�JŠJ�v×5Ñ5°v×7\Ñ7\Ó7^Ö_ñ 8r    c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )r   r^   r   )r   r   s   "€r   r   Ú%DonutSwinPreTrainedModel.__annotate__ø  s   ø‡ ‚ ñ Ñò r    r!   )Úimage)r"   r#   r$   r%   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesr   Úno_gradrÃ  r'   r(   r)   r“   r”   s   @@r   rÀ  rÀ  ø  sH   ù‡ € ð  ÐØ$€OØ!ÐØ&*Ð#Ø)Ð*Ðà
‡]‚]ƒ_ô
`ó ð
`÷ … r    rÀ  c                   ó\   a a€ ] tR tRt oRV 3R lltR t]RV3R lR ll4       tRtVt	V ;t
# )	ÚDonutSwinModeli  c                ó¬  <€ \         SV `  V4       Wn        \        VP                  4      V n        \        VP                  ^V P
                  ^,
          ,          ,          4      V n        \        WR7      V n
        \        WP                  P                  4      V n        V'       d   \        P                  ! ^4      MRV n        V P#                  4        R# )zÓ
add_pooling_layer (bool, *optional*, defaults to `True`):
    Whether to add a pooling layer
use_mask_token (`bool`, *optional*, defaults to `False`):
    Whether to use a mask token for masked image modeling.
)r`   N)rK   rL   r^   r£  r¤  r¥  rh   rT   Únum_featuresrH   rd   r   rQ   Úencoderr   ÚAdaptiveAvgPool1dÚpoolerÚ	post_init)r_   r^   Úadd_pooling_layerr`   ra   s   &&&&€r   rL   ÚDonutSwinModel.__init__  s‘   ø€ ô 	‰Ñ˜Ô ØŒÜ˜fŸm™mÓ,ˆŒÜ × 0Ñ 0°1¸¿¹È1Õ9LÕ3MÕ MÓNˆÔä-¨fÔTˆŒÜ'¨·±×0JÑ0JÓKˆŒç1B”b×*Ò*¨1Ô-ÈˆŒð 	�‰Ör    c                ó.   € V P                   P                  # rÿ   )rd   rN   rH  s   &r   Úget_input_embeddingsÚ#DonutSwinModel.get_input_embeddings&  s   € Ø�‰×/Ñ/Ð/r    c                óÂ   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          RS[RS[R,          RS[S[,          /# )	r   rƒ   Nr„   rÚ   r¯  r€   r±  re   )r   r   r…   r†   r   r,   )r   r   s   "€r   r   ÚDonutSwinModel.__annotate__*  sy   ø€ ÷ 5
ñ 5
á×'Ñ'¨$Õ.ð5
ñ ×)Ñ)¨DÕ0ð5
ñ   $�;ð	5
ñ
 # T�kð5
ñ #'ð5
ñ ˜D•[ð5
ñ 
Ñ%Õ	%ñ5
r    c                óR  € Ve   TMV P                   P                  pVe   TMV P                   P                  pVe   TMV P                   P                  pVf   \	        R4      hV P                  WVR7      w  r‰V P                  VV	VVVR7      p
V
^ ,          pRpV P                  e9   V P                  VP                  ^^4      4      p\        P                  ! V^4      pV'       g   W¼3V
R,          ,           pV# \        VVV
P                  V
P                  V
P                  R7      # )z§
bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, num_patches)`):
    Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).
Nz You have to specify pixel_values)r„   r€   )rÚ   r¯  r±  rr   )r   r.   r   r   r   )r^   rÚ   r¯  r±  rÇ   rd   rÖ  rØ  r;   r   rª   r,   r   r   r   )r_   rƒ   r„   rÚ   r¯  r€   r±  ÚkwargsÚembedding_outputr¼   Úencoder_outputsÚsequence_outputÚpooled_outputr  s   &&&&&&&,      r   r�   ÚDonutSwinModel.forward)  s3  € ð 2CÒ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ò$DÑ È$Ï+É+×JjÑJjð 	ð &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆàÒÜÐ?Ó@Ð@à-1¯_©_ØÐTlð .=ó .
Ñ*Ðð Ÿ,™,ØØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Õ,ˆàˆØ�;‰;Ò"Ø ŸK™K¨×(AÑ(AÀ!ÀQÓ(GÓHˆMÜ!ŸMšM¨-¸Ó;ˆMçØ%Ð5¸ÈÕ8KÕKˆFàˆMä#Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1Ø#2×#IÑ#Iô
ð 	
r    )r^   rd   rÖ  rÕ  r¥  rØ  )TF©NNNNFN)r"   r#   r$   r%   rL   rÝ  r	   r�   r(   r)   r“   r”   s   @@r   rÓ  rÓ    s-   ù‡ € ÷ò(0ð ÷5
ñ 5
ó ÷5
ð 5
r    rÓ  aì  
    DonutSwin Model transformer with an image classification head on top (a linear layer on top of the final hidden state of
    the [CLS] token) e.g. for ImageNet.

    <Tip>

        Note that it's possible to fine-tune DonutSwin on higher resolution images than the ones it has been trained on, by
        setting `interpolate_pos_encoding` to `True` in the forward of the model. This will interpolate the pre-trained
        position embeddings to the higher resolution.

    </Tip>
    c                   óR   a a€ ] tR tRt oV 3R lt]RV3R lR ll4       tRtVtV ;t	# )ÚDonutSwinForImageClassificationib  c                óH  <€ \         SV `  V4       VP                  V n        \        V4      V n        VP                  ^ 8”  d6   \
        P                  ! V P                  P                  VP                  4      M\
        P                  ! 4       V n	        V P                  4        R# r\  )rK   rL   Ú
num_labelsrÓ  rÁ  r   rµ   rÕ  rU  Ú
classifierrÙ  )r_   r^   ra   s   &&€r   rL   Ú(DonutSwinForImageClassification.__init__r  sx   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ# FÓ+ˆŒ
ð FL×EVÑEVÐYZÔEZŒB�IŠI�d—j‘j×-Ñ-¨v×/@Ñ/@ÔAÔ`b×`kÒ`kÓ`mð 	Œð
 	�‰Ör    c                óÂ   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          RS[RS[R,          RS[S[,          /# )	r   rƒ   NÚlabelsrÚ   r¯  r€   r±  re   )r   r   Ú
LongTensorr†   r   r1   )r   r   s   "€r   r   Ú,DonutSwinForImageClassification.__annotate__�  sy   ø€ ÷ ,
ñ ,
á×'Ñ'¨$Õ.ð,
ñ × Ñ  4Õ'ð,
ñ   $�;ð	,
ñ
 # T�kð,
ñ #'ð,
ñ ˜D•[ð,
ñ 
Ñ/Õ	/ñ,
r    c                óŒ  € Ve   TMV P                   P                  pV P                  VVVVVR7      pV^,          p	V P                  V	4      p
RpVe   V P	                  W*V P                   4      pV'       g"   V
3VR,          ,           pVe   V3V,           # T# \        VV
VP                  VP                  VP                  R7      # )ab  
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
    Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
    config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
    `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
N)rÚ   r¯  r€   r±  :r   NN)r3   r4   r   r   r   )	r^   r±  rÁ  rí  Úloss_functionr1   r   r   r   )r_   rƒ   rð  rÚ   r¯  r€   r±  râ  rí   ræ  r4   r3   r  s   &&&&&&&,     r   r�   Ú'DonutSwinForImageClassification.forward€  sÎ   € ð" &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà—*‘*ØØ/Ø!5Ø%=Ø#ð ó 
ˆð   �
ˆà—‘ Ó/ˆàˆØÒØ×%Ñ% f°d·k±kÓBˆDçØ�Y ¨¥Õ,ˆFØ)-Ò)9�T�G˜fÕ$ÐE¸vÐEä-ØØØ!×/Ñ/Ø×)Ñ)Ø#*×#AÑ#Aô
ð 	
r    )rí  rÁ  rì  rè  )
r"   r#   r$   r%   rL   r	   r�   r(   r)   r“   r”   s   @@r   rê  rê  b  s(   ù‡ € õ ð ÷,
ñ ,
ó ÷,
ð ,
r    rê  )rÓ  rÀ  rê  )1r&   Úcollections.abcr›   rà   Údataclassesr   r   r   Ú r   rÄ  Úactivationsr   Úmodeling_layersr   Úmodeling_utilsr   Úutilsr   r	   r
   r   Úconfiguration_donut_swinr   Ú
get_loggerr"   Úloggerr   r,   r1   rD   rF   ÚModulerH   rM   r®   rÃ   rý   r  r  r(  r0  rL  rŒ  r   rÀ  rÓ  rê  Ú__all__r!   r    r   Ú<module>r     s  ðñó
 Û Ý !ã Ý å &Ý !Ý 9Ý -ß DÓ DÝ 5ð 
×	Ò	˜HÓ	%€ñ ðôð
 ôH˜[ó Hó óðHñ  ðôð
 ôH˜;ó Hó óðHñ& ðôð
 ôH [ó Hó óðHò,	òôY-˜"Ÿ)™)ô Y-ôz'-˜rŸy™yô '-ôV%˜BŸI™Iô %ôRZ'˜RŸY™Yô Z'ô|
˜"Ÿ)™)ô 
ô˜Ÿ™ô ô&˜BŸI™Iô ô 	�b—i‘iô 	ô%�B—I‘Iô %ô2u�R—Y‘Yô uôr4Ð/ô 4ôpS
�r—y‘yô S
ðl ô`˜ó `ó ð`ð, ôN
Ð-ó N
ó ðN
ñb ðôô<
Ð&>ó <
óð<
ò~ \‚r    