Ë
    S^(hµ  ã            	       óº  — d Z ddlZddlZddlmZ ddlmZmZm	Z	 ddl
Z
ddlZ
ddl
mZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZmZmZmZmZmZ ddlmZ  ej<                  e«      Z dZ!dZ"g d¢Z#e G d„ de«      «       Z$e G d„ de«      «       Z%d„ Z&d„ Z' G d„ dejP                  «      Z) G d„ dejP                  «      Z* G d„ dejP                  «      Z+d:de
jX                  de-de.de
jX                  fd „Z/ G d!„ d"ejP                  «      Z0 G d#„ d$ejP                  «      Z1 G d%„ d&ejP                  «      Z2 G d'„ d(ejP                  «      Z3 G d)„ d*ejP                  «      Z4 G d+„ d,ejP                  «      Z5 G d-„ d.ejP                  «      Z6 G d/„ d0ejP                  «      Z7 G d1„ d2ejP                  «      Z8 G d3„ d4e«      Z9d5Z:d6Z; ed7e:«       G d8„ d9e9«      «       Z<d9d4gZ=y);z¢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)ÚOptionalÚTupleÚUnion)Únné   )ÚACT2FN)ÚPreTrainedModel)Ú find_pruneable_heads_and_indicesÚmeshgridÚprune_linear_layer)ÚModelOutputÚadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚ	torch_inté   )ÚDonutSwinConfigr   z0https://huggingface.co/naver-clova-ix/donut-base)r   é1   i   c                   óÐ   — e Zd ZU dZdZeej                     ed<   dZ	ee
ej                  df      ed<   dZee
ej                  df      ed<   dZee
ej                  df      ed<   y)ÚDonutSwinEncoderOutputa…  
    DonutSwin encoder's outputs, with potential hidden states and attentions.

    Args:
        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.
        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, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the 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 stage) 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.
        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.
    NÚlast_hidden_state.Úhidden_statesÚ
attentionsÚreshaped_hidden_states)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚtorchÚFloatTensorÚ__annotations__r   r   r   r   © ó    úk/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/donut/modeling_donut_swin.pyr   r   5   s}   … ñð2 6:Ð�x × 1Ñ 1Ñ2Ó9Ø=A€M�8˜E %×"3Ñ"3°SÐ"8Ñ9Ñ:ÓAØ:>€J�˜˜u×0Ñ0°#Ð5Ñ6Ñ7Ó>ØFJÐ˜H U¨5×+<Ñ+<¸cÐ+AÑ%BÑCÔJr%   r   c                   óø   — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   dZ
eeej                  df      ed<   dZeeej                  df      ed<   dZeeej                  df      ed<   y)	ÚDonutSwinModelOutputaY  
    DonutSwin model's outputs that also contains a pooling of the last hidden states.

    Args:
        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.
        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.
        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, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the 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 stage) 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.
        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.
    Nr   Úpooler_output.r   r   r   )r   r   r   r    r   r   r!   r"   r#   r)   r   r   r   r   r$   r%   r&   r(   r(   W   s’   … ñð6 6:Ð�x × 1Ñ 1Ñ2Ó9Ø15€M�8˜E×-Ñ-Ñ.Ó5Ø=A€M�8˜E %×"3Ñ"3°SÐ"8Ñ9Ñ:ÓAØ:>€J�˜˜u×0Ñ0°#Ð5Ñ6Ñ7Ó>ØFJÐ˜H U¨5×+<Ñ+<¸cÐ+AÑ%BÑCÔJr%   r(   c                 óÌ   — | j                   \  }}}}| j                  |||z  |||z  ||«      } | j                  dddddd«      j                  «       j                  d|||«      }|S )z2
    Partitions the given input into windows.
    r   r   r   é   é   é   éÿÿÿÿ©ÚshapeÚviewÚpermuteÚ
contiguous)Úinput_featureÚwindow_sizeÚ
batch_sizeÚheightÚwidthÚnum_channelsÚwindowss          r&   Úwindow_partitionr;   }   s}   € ð /<×.AÑ.AÑ+€J�˜˜|Ø!×&Ñ&Ø�F˜kÑ)¨;¸ÀÑ8LÈkÐ[gó€Mð ×#Ñ# A q¨!¨Q°°1Ó5×@Ñ@ÓB×GÑGÈÈKÐYdÐfrÓs€GØ€Nr%   c                 óÈ   — | j                   d   }| j                  d||z  ||z  |||«      } | j                  dddddd«      j                  «       j                  d|||«      } | S )z?
    Merges windows to produce higher resolution features.
    r.   r   r   r   r+   r,   r-   r/   )r:   r5   r7   r8   r9   s        r&   Úwindow_reverser=   Š   sn   € ð —=‘= Ñ$€LØ�l‰l˜2˜v¨Ñ4°e¸{Ñ6JÈKÐYdÐfrÓs€GØ�o‰o˜a  A q¨!¨QÓ/×:Ñ:Ó<×AÑAÀ"ÀfÈeÐUaÓb€GØ€Nr%   c            
       óÐ   ‡ — e Zd ZdZdˆ fd„	Zdej                  dededej                  fd„Z	 	 dde	ej                     d	e	ej                     d
edeej                     fd„Zˆ xZS )ÚDonutSwinEmbeddingszW
    Construct the patch and position embeddings. Optionally, also the mask token.
    c                 ó~  •— t         ‰| �  «        t        |«      | _        | j                  j                  }| j                  j
                  | _        |r4t        j                  t        j                  dd|j                  «      «      nd | _        |j                  r=t        j                  t        j                  d|dz   |j                  «      «      | _        nd | _        t        j                  |j                  «      | _        t        j"                  |j$                  «      | _        |j(                  | _        || _        y )Nr   )Ú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)ÚselfrT   Úuse_mask_tokenrE   Ú	__class__s       €r&   rB   z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%   Ú
embeddingsr7   r8   Úreturnc                 ó¦  — |j                   d   dz
  }| j                  j                   d   dz
  }t        j                  j	                  «       s||k(  r||k(  r| j                  S | j                  dd…dd…f   }| j                  dd…dd…f   }|j                   d   }|| j
                  z  }	|| j
                  z  }
t        |dz  «      }|j                  d|||«      }|j                  dddd«      }t        j                  j                  ||	|
fdd	¬
«      }|j                  dddd«      j                  dd|«      }t        j                  ||fd¬«      S )a   
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r   Nr.   g      à?r   r   r+   ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údim)r0   rM   r!   ÚjitÚ
is_tracingrS   r   Úreshaper2   r   Ú
functionalÚinterpolater1   Úcat)rU   rX   r7   r8   rE   Únum_positionsÚclass_pos_embedÚpatch_pos_embedr`   Ú
new_heightÚ	new_widthÚsqrt_num_positionss               r&   Úinterpolate_pos_encodingz,DonutSwinEmbeddings.interpolate_pos_encoding­   s`  € ð !×&Ñ& qÑ)¨AÑ-ˆØ×0Ñ0×6Ñ6°qÑ9¸AÑ=ˆô �y‰y×#Ñ#Ô%¨+¸Ò*FÈ6ÐUZÊ?Ø×+Ñ+Ð+à×2Ñ2²1°b°q°b°5Ñ9ˆØ×2Ñ2²1°a±b°5Ñ9ˆà×Ñ˜rÑ"ˆà˜tŸ™Ñ.ˆ
Ø˜TŸ_™_Ñ,ˆ	ä& }°cÑ'9Ó:ÐØ)×1Ñ1°!Ð5GÐI[Ð]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØ˜iÐ(ØØð	 4ó 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆä�y‰y˜/¨?Ð;ÀÔCÐCr%   Úpixel_valuesÚbool_masked_posrm   c                 óÂ  — |j                   \  }}}}| j                  |«      \  }}	| j                  |«      }|j                  «       \  }
}}|�K| j                  j                  |
|d«      }|j                  d«      j                  |«      }|d|z
  z  ||z  z   }| j                  �(|r|| j                  |||«      z   }n|| j                  z   }| j                  |«      }||	fS )Nr.   ç      ð?)r0   rD   rO   r\   rK   ÚexpandÚ	unsqueezeÚtype_asrM   rm   rR   )rU   rn   ro   rm   Ú_r9   r7   r8   rX   Úoutput_dimensionsr6   Úseq_lenÚmask_tokensÚmasks                 r&   ÚforwardzDonutSwinEmbeddings.forwardÕ   sô   € ð *6×);Ñ);Ñ&ˆˆ<˜ Ø(,×(=Ñ(=¸lÓ(KÑ%ˆ
Ð%Ø—Y‘Y˜zÓ*ˆ
Ø!+§¡Ó!2Ñˆ
�G˜QàÐ&ØŸ/™/×0Ñ0°¸WÀbÓIˆKà"×,Ñ,¨RÓ0×8Ñ8¸ÓEˆDØ# s¨T¡zÑ2°[À4Ñ5GÑGˆJà×#Ñ#Ð/Ù'Ø'¨$×*GÑ*GÈ
ÐTZÐ\aÓ*bÑb‘
à'¨$×*BÑ*BÑB�
à—\‘\ *Ó-ˆ
àÐ,Ð,Ð,r%   )F)NF)r   r   r   r    rB   r!   ÚTensorÚintrm   r   r"   Ú
BoolTensorÚboolr   rz   Ú__classcell__©rW   s   @r&   r?   r?   •   s’   ø„ ñõð&&D°5·<±<ð &DÈð &DÐUXð &DÐ]b×]iÑ]ió &DðV 7;Ø).ñ	-à˜u×0Ñ0Ñ1ð-ð " %×"2Ñ"2Ñ3ð-ð #'ð	-ð
 
ˆu�|‰|Ñ	÷-r%   r?   c                   óv   ‡ — e Zd ZdZˆ fd„Zd„ Zdeej                     de	ej                  e	e   f   fd„Zˆ xZS )rC   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                 ó  •— 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  }|| _        || _        || _        || _
        |d   |d   z  |d   |d   z  f| _        t        j                  ||||¬«      | _        y )Nr   r   )Úkernel_sizeÚstride)rA   rB   Ú
image_sizerS   r9   rJ   Ú
isinstanceÚcollectionsÚabcÚIterablerE   rF   r   ÚConv2dÚ
projection)rU   rT   r…   rS   r9   Úhidden_sizerE   rW   s          €r&   rB   z!DonutSwinPatchEmbeddings.__init__ù   sû   ø€ Ü‰ÑÔØ!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ø$*×$7Ñ$7¸×9IÑ9I�kˆÜ#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔØ$ Q™-¨:°a©=Ñ8¸*ÀQ¹-È:ÐVWÉ=Ñ:XÐYˆŒäŸ)™) L°+È:Ð^hÔiˆ�r%   c                 ón  — || j                   d   z  dk7  rDd| j                   d   || j                   d   z  z
  f}t        j                  j                  ||«      }|| j                   d   z  dk7  rFddd| j                   d   || j                   d   z  z
  f}t        j                  j                  ||«      }|S )Nr   r   )rS   r   rd   Úpad)rU   rn   r7   r8   Ú
pad_valuess        r&   Ú	maybe_padz"DonutSwinPatchEmbeddings.maybe_pad  s±   € Ø�4—?‘? 1Ñ%Ñ%¨Ò*Ø˜TŸ_™_¨QÑ/°%¸$¿/¹/È!Ñ:LÑ2LÑLÐMˆJÜŸ=™=×,Ñ,¨\¸:ÓFˆLØ�D—O‘O AÑ&Ñ&¨!Ò+Ø˜Q  4§?¡?°1Ñ#5¸ÀÇÁÐQRÑASÑ8SÑ#SÐTˆJÜŸ=™=×,Ñ,¨\¸:ÓFˆLØÐr%   rn   rY   c                 óà   — |j                   \  }}}}| j                  |||«      }| j                  |«      }|j                   \  }}}}||f}|j                  d«      j	                  dd«      }||fS )Nr+   r   )r0   r�   r‹   ÚflattenÚ	transpose)rU   rn   ru   r9   r7   r8   rX   rv   s           r&   rz   z DonutSwinPatchEmbeddings.forward  s}   € Ø)5×);Ñ);Ñ&ˆˆ<˜ à—~‘~ l°F¸EÓBˆØ—_‘_ \Ó2ˆ
Ø(×.Ñ.Ñˆˆ1ˆf�eØ# U˜OÐØ×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆ
àÐ,Ð,Ð,r%   )r   r   r   r    rB   r�   r   r!   r"   r   r{   r|   rz   r   r€   s   @r&   rC   rC   ò   sF   ø„ ñôjòð	- H¨U×->Ñ->Ñ$?ð 	-ÀEÈ%Ï,É,ÐX]Ð^aÑXbÐJbÑDc÷ 	-r%   rC   c            	       ó²   ‡ — e Zd ZdZej
                  fdee   dedej                  ddfˆ fd„Z	d„ Z
d	ej                  d
eeef   dej                  fd„Zˆ xZS )ÚDonutSwinPatchMerginga'  
    Patch Merging Layer.

    Args:
        input_resolution (`Tuple[int]`):
            Resolution of input feature.
        dim (`int`):
            Number of input channels.
        norm_layer (`nn.Module`, *optional*, defaults to `nn.LayerNorm`):
            Normalization layer class.
    Úinput_resolutionr`   Ú
norm_layerrY   Nc                 ó¤   •— t         ‰| �  «        || _        || _        t	        j
                  d|z  d|z  d¬«      | _         |d|z  «      | _        y )Nr,   r+   F©Úbias)rA   rB   r–   r`   r   ÚLinearÚ	reductionrO   )rU   r–   r`   r—   rW   s       €r&   rB   zDonutSwinPatchMerging.__init__+  sI   ø€ Ü‰ÑÔØ 0ˆÔØˆŒÜŸ™ 1 s¡7¨A°©G¸%Ô@ˆŒÙ˜q 3™wÓ'ˆ�	r%   c                 óŠ   — |dz  dk(  xs |dz  dk(  }|r.ddd|dz  d|dz  f}t         j                  j                  ||«      }|S )Nr+   r   r   )r   rd   rŽ   )rU   r4   r7   r8   Ú
should_padr�   s         r&   r�   zDonutSwinPatchMerging.maybe_pad2  sU   € Ø˜q‘j A‘oÒ:¨5°1©9¸©>ˆ
ÙØ˜Q  5¨1¡9¨a°¸!±Ð<ˆJÜŸM™M×-Ñ-¨m¸ZÓHˆMàÐr%   r4   Úinput_dimensionsc                 óº  — |\  }}|j                   \  }}}|j                  ||||«      }| j                  |||«      }|d d …dd d…dd d…d d …f   }|d d …dd d…dd d…d d …f   }	|d d …dd d…dd d…d d …f   }
|d d …dd d…dd d…d d …f   }t        j                  ||	|
|gd«      }|j                  |dd|z  «      }| j                  |«      }| j                  |«      }|S )Nr   r+   r   r.   r,   )r0   r1   r�   r!   rf   rO   rœ   )rU   r4   rŸ   r7   r8   r6   r`   r9   Úinput_feature_0Úinput_feature_1Úinput_feature_2Úinput_feature_3s               r&   rz   zDonutSwinPatchMerging.forward:  s  € Ø(‰ˆ�à(5×(;Ñ(;Ñ%ˆ
�C˜à%×*Ñ*¨:°v¸uÀlÓSˆàŸ™ }°f¸eÓDˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆäŸ	™	 ?°OÀ_ÐVeÐ"fÐhjÓkˆØ%×*Ñ*¨:°r¸1¸|Ñ;KÓLˆàŸ	™	 -Ó0ˆØŸ™ }Ó5ˆàÐr%   )r   r   r   r    r   rN   r   r|   ÚModulerB   r�   r!   r{   rz   r   r€   s   @r&   r•   r•     sr   ø„ ñ
ð XZ×WcÑWcñ (¨¨s©ð (¸#ð (È2Ï9É9ð (Ðhlõ (òð U§\¡\ð ÀUÈ3ÐPSÈ8Á_ð ÐY^×YeÑYe÷ r%   r•   ÚinputÚ	drop_probÚtrainingrY   c                 ó  — |dk(  s|s| S d|z
  }| j                   d   fd| j                  dz
  z  z   }|t        j                  || j                  | j
                  ¬«      z   }|j                  «        | j                  |«      |z  }|S )aF  
    Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

    Comment by Ross Wightman: This is the same as the DropConnect impl I created for EfficientNet, etc networks,
    however, the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper...
    See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for changing the
    layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use 'survival rate' as the
    argument.
    ç        r   r   )r   ©ÚdtypeÚdevice)r0   Úndimr!   Úrandr¬   r­   Úfloor_Údiv)r¦   r§   r¨   Ú	keep_probr0   Úrandom_tensorÚoutputs          r&   Ú	drop_pathrµ   U  s�   € ð �CÒ™xØˆØ�I‘€IØ�[‰[˜‰^Ð ¨¯
©
°Q©Ñ 7Ñ7€EØ¤§
¡
¨5¸¿¹ÈEÏLÉLÔ YÑY€MØ×ÑÔØ�Y‰Y�yÓ! MÑ1€FØ€Mr%   c                   óx   ‡ — e Zd ZdZd	dee   ddfˆ fd„Zdej                  dej                  fd„Z	de
fd„Zˆ xZS )
ÚDonutSwinDropPathzXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nr§   rY   c                 ó0   •— t         ‰| �  «        || _        y ©N)rA   rB   r§   )rU   r§   rW   s     €r&   rB   zDonutSwinDropPath.__init__m  s   ø€ Ü‰ÑÔØ"ˆ�r%   r   c                 óD   — t        || j                  | j                  «      S r¹   )rµ   r§   r¨   ©rU   r   s     r&   rz   zDonutSwinDropPath.forwardq  s   € Ü˜¨¯©¸¿¹ÓFÐFr%   c                 ó8   — dj                  | j                  «      S )Nzp={})Úformatr§   ©rU   s    r&   Ú
extra_reprzDonutSwinDropPath.extra_reprt  s   € Ø�}‰}˜TŸ^™^Ó,Ð,r%   r¹   )r   r   r   r    r   ÚfloatrB   r!   r{   rz   Ústrr¿   r   r€   s   @r&   r·   r·   j  sG   ø„ Ùbñ# (¨5¡/ð #¸Tõ #ðG U§\¡\ð G°e·l±ló Gð-˜C÷ -r%   r·   c                   ó°   ‡ — e Zd Zˆ fd„Zd„ Z	 	 	 d	dej                  deej                     deej                     dee	   de
ej                     f
d„Zˆ xZS )
ÚDonutSwinSelfAttentionc                 ó  •— t         ‰| �  «        ||z  dk7  rt        d|› d|› d�«      ‚|| _        t	        ||z  «      | _        | j                  | j
                  z  | _        t        |t        j                  j                  «      r|n||f| _        t        j                  t        j                  d| j                  d   z  dz
  d| j                  d   z  dz
  z  |«      «      | _        t        j"                  | j                  d   «      }t        j"                  | j                  d   «      }t        j$                  t'        ||gd¬«      «      }t        j(                  |d«      }|d d …d d …d f   |d d …d d d …f   z
  }	|	j+                  ddd«      j-                  «       }	|	d d …d d …dfxx   | j                  d   dz
  z  cc<   |	d d …d d …dfxx   | j                  d   dz
  z  cc<   |	d d …d d …dfxx   d| j                  d   z  dz
  z  cc<   |	j/                  d	«      }
| j1                  d
|
«       t        j2                  | j                  | j                  |j4                  ¬«      | _        t        j2                  | j                  | j                  |j4                  ¬«      | _        t        j2                  | j                  | j                  |j4                  ¬«      | _        t        j<                  |j>                  «      | _         y )Nr   zThe hidden size (z6) is not a multiple of the number of attention heads (ú)r+   r   Úij)Úindexingr.   Úrelative_position_indexr™   )!rA   rB   Ú
ValueErrorÚnum_attention_headsr|   Úattention_head_sizeÚall_head_sizer†   r‡   rˆ   r‰   r5   r   rH   r!   rI   Úrelative_position_bias_tableÚarangeÚstackr   r’   r2   r3   ÚsumÚregister_bufferr›   Úqkv_biasÚqueryÚkeyÚvaluerP   Úattention_probs_dropout_probrR   )rU   rT   r`   Ú	num_headsr5   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordsrÈ   rW   s              €r&   rB   zDonutSwinSelfAttention.__init__z  s¡  ø€ Ü‰ÑÔØ�‰?˜aÒÜØ# C 5Ð(^Ð_hÐ^iÐijÐkóð ð $-ˆÔ Ü#& s¨Y¡Ó#7ˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä% k´;·?±?×3KÑ3KÔL‰KÐS^Ð`kÐRlð 	Ôô -/¯L©LÜ�K‰K˜˜T×-Ñ-¨aÑ0Ñ0°1Ñ4¸¸T×=MÑ=MÈaÑ=PÑ9PÐSTÑ9TÑUÐW`Óaó-
ˆÔ)ô
 —<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—‘œX x°Ð&:ÀTÔJÓKˆÜŸ™ v¨qÓ1ˆØ(ªªA¨t¨Ñ4°~ÂaÈÊqÀjÑ7QÑQˆØ)×1Ñ1°!°Q¸Ó:×EÑEÓGˆØšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó Øšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó Øšš1˜a˜Ó  A¨×(8Ñ(8¸Ñ(;Ñ$;¸aÑ$?Ñ?Ó Ø"1×"5Ñ"5°bÓ"9ÐØ×ÑÐ6Ð8OÔPä—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                 ó¤   — |j                  «       d d | j                  | j                  fz   }|j                  |«      }|j	                  dddd«      S )Nr.   r   r+   r   r   )r\   rÊ   rË   r1   r2   )rU   ÚxÚnew_x_shapes      r&   Útranspose_for_scoresz+DonutSwinSelfAttention.transpose_for_scoresŸ  sL   € Ø—f‘f“h˜s �m t×'?Ñ'?À×AYÑAYÐ&ZÑZˆØ�F‰F�;ÓˆØ�y‰y˜˜A˜q !Ó$Ð$r%   r   Úattention_maskÚ	head_maskÚoutput_attentionsrY   c                 ó  — |j                   \  }}}| j                  |«      }| j                  | j                  |«      «      }	| j                  | j	                  |«      «      }
| j                  |«      }t        j                  ||	j                  dd«      «      }|t        j                  | j                  «      z  }| j                  | j                  j                  d«         }|j                  | j                  d   | j                  d   z  | j                  d   | j                  d   z  d«      }|j                  ddd«      j!                  «       }||j#                  d«      z   }|�r|j                   d   }|j                  ||z  || j$                  ||«      }||j#                  d«      j#                  d«      z   }|j                  d| j$                  ||«      }t&        j(                  j+                  |d¬«      }| j-                  |«      }|�||z  }t        j                  ||
«      }|j                  dddd«      j!                  «       }|j/                  «       d d | j0                  fz   }|j                  |«      }|r||f}|S |f}|S )Nr.   éþÿÿÿr   r   r+   r_   r   )r0   rÓ   rà   rÔ   rÕ   r!   Úmatmulr“   ÚmathÚsqrtrË   rÍ   rÈ   r1   r5   r2   r3   rs   rÊ   r   rd   ÚsoftmaxrR   r\   rÌ   )rU   r   rá   râ   rã   r6   r`   r9   Úmixed_query_layerÚ	key_layerÚvalue_layerÚquery_layerÚattention_scoresÚrelative_position_biasÚ
mask_shapeÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                      r&   rz   zDonutSwinSelfAttention.forward¤  s’  € ð )6×(;Ñ(;Ñ%ˆ
�C˜Ø ŸJ™J }Ó5Ðà×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆØ×/Ñ/Ð0AÓBˆô !Ÿ<™<¨°Y×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ÐØ+Ð.D×.NÑ.NÈqÓ.QÑQÐàÐ%à'×-Ñ-¨aÑ0ˆJØ/×4Ñ4Ø˜jÑ(¨*°d×6NÑ6NÐPSÐUXó Ðð  0°.×2JÑ2JÈ1Ó2M×2WÑ2WÐXYÓ2ZÑZÐØ/×4Ñ4°R¸×9QÑ9QÐSVÐX[Ó\Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆð Ð Ø-°	Ñ9ˆOäŸ™ _°kÓBˆØ%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ%×*Ñ*Ð+BÓCˆá6G�= /Ð2ˆàˆð O\ÐM]ˆàˆr%   ©NNF)r   r   r   rB   rà   r!   r{   r   r"   r~   r   rz   r   r€   s   @r&   rÃ   rÃ   y  sv   ø„ ô#GòJ%ð 7;Ø15Ø,1ñ6à—|‘|ð6ð ! ×!2Ñ!2Ñ3ð6ð ˜E×-Ñ-Ñ.ð	6ð
 $ D™>ð6ð 
ˆu�|‰|Ñ	÷6r%   rÃ   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚDonutSwinSelfOutputc                 ó    •— t         ‰| �  «        t        j                  ||«      | _        t        j
                  |j                  «      | _        y r¹   )rA   rB   r   r›   ÚdenserP   rÖ   rR   ©rU   rT   r`   rW   s      €r&   rB   zDonutSwinSelfOutput.__init__ß  s6   ø€ Ü‰ÑÔÜ—Y‘Y˜s CÓ(ˆŒ
Ü—z‘z &×"EÑ"EÓFˆ�r%   r   Úinput_tensorrY   c                 óJ   — | j                  |«      }| j                  |«      }|S r¹   ©rù   rR   )rU   r   rû   s      r&   rz   zDonutSwinSelfOutput.forwardä  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆàÐr%   ©r   r   r   rB   r!   r{   rz   r   r€   s   @r&   r÷   r÷   Þ  s2   ø„ ôGð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r%   r÷   c                   ó°   ‡ — e Zd Zˆ fd„Zd„ Z	 	 	 d	dej                  deej                     deej                     dee	   de
ej                     f
d„Zˆ xZS )
ÚDonutSwinAttentionc                 óˆ   •— t         ‰| �  «        t        ||||«      | _        t	        ||«      | _        t        «       | _        y r¹   )rA   rB   rÃ   rU   r÷   r´   ÚsetÚpruned_heads)rU   rT   r`   r×   r5   rW   s        €r&   rB   zDonutSwinAttention.__init__í  s8   ø€ Ü‰ÑÔÜ*¨6°3¸	À;ÓOˆŒ	Ü)¨&°#Ó6ˆŒÜ›EˆÕr%   c                 ó>  — t        |«      dk(  ry t        || j                  j                  | j                  j                  | j
                  «      \  }}t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _	        t        | j                  j                  |d¬«      | j                  _        | j                  j                  t        |«      z
  | j                  _        | j                  j                  | j                  j                  z  | j                  _        | j
                  j                  |«      | _        y )Nr   r   r_   )Úlenr   rU   rÊ   rË   r  r   rÓ   rÔ   rÕ   r´   rù   rÌ   Úunion)rU   ÚheadsÚindexs      r&   Úprune_headszDonutSwinAttention.prune_headsó  s  € Üˆu‹:˜Š?ØÜ7Ø�4—9‘9×0Ñ0°$·)±)×2OÑ2OÐQU×QbÑQbó
‰ˆˆuô
 -¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ*¨4¯9©9¯=©=¸%Ó@ˆ�	‰	ŒÜ,¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ.¨t¯{©{×/@Ñ/@À%ÈQÔOˆ�‰Ôð )-¯	©	×(EÑ(EÌÈEË
Ñ(Rˆ�	‰	Ô%Ø"&§)¡)×"?Ñ"?À$Ç)Á)×B_ÑB_Ñ"_ˆ�	‰	ÔØ ×-Ñ-×3Ñ3°EÓ:ˆÕr%   r   rá   râ   rã   rY   c                 ój   — | j                  ||||«      }| j                  |d   |«      }|f|dd  z   }|S )Nr   r   )rU   r´   )rU   r   rá   râ   rã   Úself_outputsÚattention_outputrô   s           r&   rz   zDonutSwinAttention.forward  sG   € ð —y‘y °À	ÐK\Ó]ˆØŸ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr%   rõ   )r   r   r   rB   r	  r!   r{   r   r"   r~   r   rz   r   r€   s   @r&   r   r   ì  st   ø„ ô"ò;ð* 7;Ø15Ø,1ñ
à—|‘|ð
ð ! ×!2Ñ!2Ñ3ð
ð ˜E×-Ñ-Ñ.ð	
ð
 $ D™>ð
ð 
ˆu�|‰|Ñ	÷
r%   r   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚDonutSwinIntermediatec                 ó  •— t         ‰| �  «        t        j                  |t	        |j
                  |z  «      «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y r¹   )rA   rB   r   r›   r|   Ú	mlp_ratiorù   r†   Ú
hidden_actrÁ   r	   Úintermediate_act_fnrú   s      €r&   rB   zDonutSwinIntermediate.__init__  sa   ø€ Ü‰ÑÔÜ—Y‘Y˜s¤C¨×(8Ñ(8¸3Ñ(>Ó$?Ó@ˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r%   r   rY   c                 óJ   — | j                  |«      }| j                  |«      }|S r¹   )rù   r  r»   s     r&   rz   zDonutSwinIntermediate.forward  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr%   rþ   r€   s   @r&   r  r    s#   ø„ ô9ð U§\¡\ð °e·l±l÷ r%   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚDonutSwinOutputc                 óÌ   •— t         ‰| �  «        t        j                  t	        |j
                  |z  «      |«      | _        t        j                  |j                  «      | _	        y r¹   )
rA   rB   r   r›   r|   r  rù   rP   rQ   rR   rú   s      €r&   rB   zDonutSwinOutput.__init__$  sF   ø€ Ü‰ÑÔÜ—Y‘Yœs 6×#3Ñ#3°cÑ#9Ó:¸CÓ@ˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r%   r   rY   c                 óJ   — | j                  |«      }| j                  |«      }|S r¹   rý   r»   s     r&   rz   zDonutSwinOutput.forward)  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr%   rþ   r€   s   @r&   r  r  #  s#   ø„ ô>ð
 U§\¡\ð °e·l±l÷ r%   r  c                   óÐ   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zd„ Z	 	 	 ddej                  de	e
e
f   deej                     dee   d	ee   d
e	ej                  ej                  f   fd„Zˆ xZS )ÚDonutSwinLayerc                 óì  •— t         ‰| �  «        |j                  | _        || _        |j                  | _        || _        t        j                  ||j                  ¬«      | _	        t        |||| j                  ¬«      | _        |dkD  rt        |«      nt        j                  «       | _        t        j                  ||j                  ¬«      | _        t!        ||«      | _        t%        ||«      | _        y )N)Úeps)r5   rª   )rA   rB   Úchunk_size_feed_forwardÚ
shift_sizer5   r–   r   rN   Úlayer_norm_epsÚlayernorm_beforer   Ú	attentionr·   ÚIdentityrµ   Úlayernorm_afterr  Úintermediater  r´   )rU   rT   r`   r–   r×   Údrop_path_rater  rW   s          €r&   rB   zDonutSwinLayer.__init__1  sÁ   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$Ø$ˆŒØ!×-Ñ-ˆÔØ 0ˆÔÜ "§¡¨S°f×6KÑ6KÔ LˆÔÜ+¨F°C¸ÐPT×P`ÑP`ÔaˆŒØ>LÈsÒ>RÔ*¨>Ô:ÔXZ×XcÑXcÓXeˆŒÜ!Ÿ|™|¨C°V×5JÑ5JÔKˆÔÜ1°&¸#Ó>ˆÔÜ% f¨cÓ2ˆ�r%   c                 ó  — t        |«      | j                  k  rgt        d«      | _        t        j
                  j                  «       r(t	        j                   t	        j                  |«      «      n
t        |«      | _        y y ©Nr   )Úminr5   r   r  r!   ra   rb   Útensor)rU   r–   s     r&   Úset_shift_and_window_sizez(DonutSwinLayer.set_shift_and_window_size>  s\   € ÜÐÓ  D×$4Ñ$4Ò4ä'¨›lˆDŒOä=B¿Y¹Y×=QÑ=QÔ=S”—	‘	œ%Ÿ,™,Ð'7Ó8Ô9ÔY\Ð]mÓYnð Õð 5r%   c           	      ó  — | j                   dkD  �rzt        j                  d||df||¬«      }t        d| j                   «      t        | j                   | j                    «      t        | j                    d «      f}t        d| j                   «      t        | j                   | j                    «      t        | j                    d «      f}d}|D ]  }	|D ]  }
||d d …|	|
d d …f<   |dz  }Œ Œ t        || j                  «      }|j                  d| j                  | j                  z  «      }|j                  d«      |j                  d«      z
  }|j                  |dk7  t        d«      «      j                  |dk(  t        d«      «      }|S d }|S )Nr   r   r«   r.   r+   g      YÀrª   )
r  r!   rI   Úslicer5   r;   r1   rs   Úmasked_fillrÀ   )rU   r7   r8   r¬   r­   Úimg_maskÚheight_slicesÚwidth_slicesÚcountÚheight_sliceÚwidth_sliceÚmask_windowsÚ	attn_masks                r&   Úget_attn_maskzDonutSwinLayer.get_attn_maskF  s—  € Ø�?‰?˜QÓä—{‘{ A v¨u°aÐ#8ÀÈfÔUˆHä�a˜$×*Ñ*Ð*Ó+Ü�t×'Ñ'Ð'¨$¯/©/Ð)9Ó:Ü�t—‘Ð&¨Ó-ðˆMô �a˜$×*Ñ*Ð*Ó+Ü�t×'Ñ'Ð'¨$¯/©/Ð)9Ó:Ü�t—‘Ð&¨Ó-ðˆLð
 ˆEØ -ò �Ø#/ò �KØ@E�HšQ ¨kº1Ð<Ñ=Ø˜Q‘J‘Eñðô
 ,¨H°d×6FÑ6FÓGˆLØ'×,Ñ,¨R°×1AÑ1AÀD×DTÑDTÑ1TÓUˆLØ$×.Ñ.¨qÓ1°L×4JÑ4JÈ1Ó4MÑMˆIØ!×-Ñ-¨i¸1©n¼eÀF»mÓL×XÑXÐYbÐfgÑYgÔinÐorÓisÓtˆIð Ðð ˆIØÐr%   c                 óþ   — | j                   || j                   z  z
  | j                   z  }| j                   || j                   z  z
  | j                   z  }ddd|d|f}t        j                  j                  ||«      }||fS r&  )r5   r   rd   rŽ   )rU   r   r7   r8   Ú	pad_rightÚ
pad_bottomr�   s          r&   r�   zDonutSwinLayer.maybe_padb  s�   € Ø×%Ñ%¨°×0@Ñ0@Ñ(@Ñ@ÀD×DTÑDTÑTˆ	Ø×&Ñ&¨°$×2BÑ2BÑ)BÑBÀd×FVÑFVÑVˆ
Ø˜˜A˜y¨!¨ZÐ8ˆ
ÜŸ™×)Ñ)¨-¸ÓDˆØ˜jÐ(Ð(r%   r   rŸ   râ   rã   Úalways_partitionrY   c                 óÊ  — |s| j                  |«       n	 |\  }}|j                  «       \  }}	}
|}| j                  |«      }|j                  ||||
«      }| j	                  |||«      \  }}|j
                  \  }	}}}	| j                  dkD  r1t        j                  || j                   | j                   fd¬«      }n|}t        || j                  «      }|j                  d| j                  | j                  z  |
«      }| j                  |||j                  |j                  ¬«      }| j                  ||||¬«      }|d   }|j                  d| j                  | j                  |
«      }t        || j                  ||«      }| j                  dkD  r/t        j                  || j                  | j                  fd¬«      }n|}|d   dkD  xs |d   dkD  }|r|d d …d |…d |…d d …f   j!                  «       }|j                  |||z  |
«      }|| j#                  |«      z   }| j%                  |«      }| j'                  |«      }|| j)                  |«      z   }|r	||d	   f}|S |f}|S )
Nr   )r   r+   )ÚshiftsÚdimsr.   r«   )rã   r   r-   r   )r)  r\   r  r1   r�   r0   r  r!   Úrollr;   r5   r5  r¬   r­   r   r=   r3   rµ   r"  r#  r´   )rU   r   rŸ   râ   rã   r9  r7   r8   r6   ru   ÚchannelsÚshortcutr�   Ú
height_padÚ	width_padÚshifted_hidden_statesÚhidden_states_windowsr4  Úattention_outputsr  Úattention_windowsÚshifted_windowsÚ
was_paddedÚlayer_outputÚlayer_outputss                            r&   rz   zDonutSwinLayer.forwardi  s£  € ñ  Ø×*Ñ*Ð+;Õ<àØ(‰ˆ�Ø"/×"4Ñ"4Ó"6Ñˆ
�A�xØ ˆà×-Ñ-¨mÓ<ˆà%×*Ñ*¨:°v¸uÀhÓOˆð %)§N¡N°=À&È%Ó$PÑ!ˆ�zà&3×&9Ñ&9Ñ#ˆˆ:�y !à�?‰?˜QÒÜ$)§J¡J¨}ÀtÇÁÐ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Ø! 9¨iÐK\ð +ó 
Ðð -¨QÑ/Ðà,×1Ñ1°"°d×6FÑ6FÈ×HXÑHXÐZbÓcÐÜ(Ð):¸D×<LÑ<LÈjÐZcÓ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°:¸vÈ¹~ÈxÓXÐà  4§>¡>Ð2CÓ#DÑDˆà×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆØ$ t§{¡{°<Ó'@Ñ@ˆá@Q˜Ð'8¸Ñ';Ð<ˆØÐð YeÐWfˆØÐr%   )rª   r   ©NFF)r   r   r   rB   r)  r5  r�   r!   r{   r   r|   r   r"   r~   rz   r   r€   s   @r&   r  r  0  s™   ø„ õ3òòò8)ð 26Ø,1Ø+0ñAà—|‘|ðAð    S ™/ðAð ˜E×-Ñ-Ñ.ð	Að
 $ D™>ðAð # 4™.ðAð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷Ar%   r  c                   ó¤   ‡ — e Zd Zˆ fd„Z	 	 	 d	dej
                  deeef   deej                     dee
   dee
   deej
                     fd„Zˆ xZS )
ÚDonutSwinStagec                 óh  •— t         ‰	| �  «        || _        || _        t	        j
                  t        |«      D �cg c]-  }t        ||||||   |dz  dk(  rdn|j                  dz  ¬«      ‘Œ/ c}«      | _	        |�& |||t        j                  ¬«      | _        d| _        y d | _        d| _        y c c}w )Nr+   r   )rT   r`   r–   r×   r$  r  )r`   r—   F)rA   rB   rT   r`   r   Ú
ModuleListÚranger  r5   ÚblocksrN   Ú
downsampleÚpointing)
rU   rT   r`   r–   Údepthr×   rµ   rQ  ÚirW   s
            €r&   rB   zDonutSwinStage.__init__¯  s·   ø€ Ü‰ÑÔØˆŒØˆŒÜ—m‘mô ˜u›ö
ð ô Ø!ØØ%5Ø'Ø#,¨Q¡<Ø%&¨¡U¨a¢Z™q°f×6HÑ6HÈAÑ6Möò
ó
ˆŒð Ð!Ù(Ð)9¸sÌrÏ|É|Ô\ˆDŒOð ˆ�ð #ˆDŒOàˆ�ùò'
s   º2B/r   rŸ   râ   rã   r9  rY   c                 ó  — |\  }}t        | j                  «      D ]  \  }}	|�||   nd }
 |	|||
||«      }|d   }Œ! |}| j                  �)|dz   dz  |dz   dz  }}||||f}| j                  ||«      }n||||f}|||f}|r|dd  z  }|S )Nr   r   r+   )Ú	enumeraterP  rQ  )rU   r   rŸ   râ   rã   r9  r7   r8   rT  Úlayer_moduleÚlayer_head_maskrI  Ú!hidden_states_before_downsamplingÚheight_downsampledÚwidth_downsampledrv   Ústage_outputss                    r&   rz   zDonutSwinStage.forwardÉ  sè   € ð )‰ˆ�Ü(¨¯©Ó5ò 	-‰OˆAˆ|Ø.7Ð.C˜i¨šlÈˆOá(ØÐ/°ÐBSÐUeóˆMð *¨!Ñ,‰Mð	-ð -:Ð)Ø�?‰?Ð&Ø5;¸a±ZÀAÑ4EÈÐPQÉ	ÐVWÑGWÐ 1ÐØ!'¨Ð0BÐDUÐ VÐØ ŸO™OÐ,MÐO_Ó`‰Mà!'¨°¸Ð >Ðà&Ð(IÐK\Ð]ˆáØ˜]¨1¨2Ð.Ñ.ˆMØÐr%   rJ  )r   r   r   rB   r!   r{   r   r|   r   r"   r~   rz   r   r€   s   @r&   rL  rL  ®  sz   ø„ ôð< 26Ø,1Ø+0ñà—|‘|ðð    S ™/ðð ˜E×-Ñ-Ñ.ð	ð
 $ D™>ðð # 4™.ðð 
ˆu�|‰|Ñ	÷r%   rL  c                   ó¸   ‡ — e Zd Zˆ fd„Z	 	 	 	 	 	 ddej
                  deeef   deej                     dee
   dee
   dee
   dee
   d	ee
   d
eeef   fd„Zˆ xZS )ÚDonutSwinEncoderc                 óÜ  •— t         ‰| �  «        t        |j                  «      | _        || _        t        j                  d|j                  t        |j                  «      «      D �cg c]  }|j                  «       ‘Œ }}t        j                  t        | j                  «      D �cg c]¥  }t        |t        |j                   d|z  z  «      |d   d|z  z  |d   d|z  z  f|j                  |   |j"                  |   |t        |j                  d | «      t        |j                  d |dz    «       || j                  dz
  k  rt$        nd ¬«      ‘Œ§ c}«      | _        d| _        y c c}w c c}w )Nr   r+   r   )rT   r`   r–   rS  r×   rµ   rQ  F)rA   rB   r  ÚdepthsÚ
num_layersrT   r!   Úlinspacer$  rÐ   Úitemr   rN  rO  rL  r|   rJ   r×   r•   ÚlayersÚgradient_checkpointing)rU   rT   rF   rÞ   ÚdprÚi_layerrW   s         €r&   rB   zDonutSwinEncoder.__init__ì  sJ  ø€ Ü‰ÑÔÜ˜fŸm™mÓ,ˆŒØˆŒÜ!&§¡°°6×3HÑ3HÌ#ÈfÏmÉmÓJ\Ó!]Ö^˜Aˆq�v‰v�xÐ^ˆÐ^Ü—m‘mô  % T§_¡_Ó5öð ô Ø!Ü˜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@À4Ç?Á?ÐUVÑCVÒ9VÕ4Ð]aöòó
ˆŒð ',ˆÕ#ùò! _ùòs   Á'E$Â&B*E)r   rŸ   râ   rã   Úoutput_hidden_statesÚ(output_hidden_states_before_downsamplingr9  Úreturn_dictrY   c	           	      óZ  — |rdnd }	|rdnd }
|rdnd }|rE|j                   \  }}} |j                  |g|¢|‘­Ž }|j                  dddd«      }|	|fz  }	|
|fz  }
t        | j                  «      D �]  \  }}|�||   nd }| j
                  r-| j                  r!| j                  |j                  |||||«      }n ||||||«      }|d   }|d   }|d   }|d   |d   f}|rP|rN|j                   \  }}} |j                  |g|d   |d   f¢|‘­Ž }|j                  dddd«      }|	|fz  }	|
|fz  }
nI|rG|sE|j                   \  }}} |j                  |g|¢|‘­Ž }|j                  dddd«      }|	|fz  }	|
|fz  }
|s�Œ||dd  z  }�Œ |st        d„ ||	|fD «       «      S t        ||	||
¬	«      S )
Nr$   r   r   r   r+   rå   r.   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr¹   r$   )Ú.0Úvs     r&   ú	<genexpr>z+DonutSwinEncoder.forward.<locals>.<genexpr>F  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š)r   r   r   r   )r0   r1   r2   rV  rd  re  r¨   Ú_gradient_checkpointing_funcÚ__call__Útupler   )rU   r   rŸ   râ   rã   rh  ri  r9  rj  Úall_hidden_statesÚall_reshaped_hidden_statesÚall_self_attentionsr6   ru   rŒ   Úreshaped_hidden_staterT  rW  rX  rI  rY  rv   s                         r&   rz   zDonutSwinEncoder.forward  s‚  € ñ #7™B¸DÐÙ+?¡RÀTÐ"Ù$5™b¸4ÐáØ)6×)<Ñ)<Ñ&ˆJ˜˜;à$6 M×$6Ñ$6°zÐ$bÐDTÐ$bÐVaÒ$bÐ!Ø$9×$AÑ$AÀ!ÀQÈÈ1Ó$MÐ!Ø -Ð!1Ñ1ÐØ&Ð+@Ð*BÑBÐ&ä(¨¯©Ó5ó *	9‰OˆAˆ|Ø.7Ð.C˜i¨šlÈˆOà×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)Ø!Ø$Ø#Ø%Ø$ó!‘ñ !-Ø!Ð#3°_ÐFWÐYió!�ð *¨!Ñ,ˆMØ0=¸aÑ0@Ð-Ø -¨aÑ 0Ðà 1°"Ñ 5Ð7HÈÑ7LÐMÐá#Ñ(PØ-N×-TÑ-TÑ*�
˜A˜{ð )OÐ(I×(NÑ(NØð)Ø"3°AÑ"6Ð8IÈ!Ñ8LÐ!Mð)ØOZò)Ð%ð )>×(EÑ(EÀaÈÈAÈqÓ(QÐ%Ø!Ð&GÐ%IÑIÐ!Ø*Ð/DÐ.FÑFÑ*Ù%Ñ.VØ-:×-@Ñ-@Ñ*�
˜A˜{à(:¨×(:Ñ(:¸:Ð(fÐHXÐ(fÐZeÒ(fÐ%Ø(=×(EÑ(EÀaÈÈAÈqÓ(QÐ%Ø! mÐ%5Ñ5Ð!Ø*Ð/DÐ.FÑFÐ*ã Ø# }°Q°RÐ'8Ñ8Ò#ðU*	9ñX ÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmä%Ø+Ø+Ø*Ø#=ô	
ð 	
r%   )NFFFFT)r   r   r   rB   r!   r{   r   r|   r   r"   r~   r   r   rz   r   r€   s   @r&   r^  r^  ë  s¹   ø„ ô,ð4 26Ø,1Ø/4ØCHØ+0Ø&*ñK
à—|‘|ðK
ð    S ™/ðK
ð ˜E×-Ñ-Ñ.ð	K
ð
 $ D™>ðK
ð ' t™nðK
ð 3;¸4±.ðK
ð # 4™.ðK
ð ˜d‘^ðK
ð 
ˆuÐ,Ð,Ñ	-÷K
r%   r^  c                   ó,   — e Zd ZdZeZdZdZdZdgZ	d„ Z
y)ÚDonutSwinPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úswinrn   TrL  c                 óH  — t        |t        j                  t        j                  f«      rm|j                  j
                  j                  d| j                  j                  ¬«       |j                  �%|j                  j
                  j                  «        yyt        |t        j                  «      rJ|j                  j
                  j                  «        |j                  j
                  j                  d«       yt        |t        «      rb|j                  �$|j                  j
                  j                  «        |j                  �%|j                  j
                  j                  «        yyt        |t         «      r%|j"                  j
                  j                  «        yy)zInitialize the weightsrª   )ÚmeanÚstdNrq   )r†   r   r›   rŠ   ÚweightÚdataÚnormal_rT   Úinitializer_rangerš   Úzero_rN   Úfill_r?   rK   rM   rÃ   rÍ   )rU   Úmodules     r&   Ú_init_weightsz&DonutSwinPreTrainedModel._init_weights]  s#  € ä�fœrŸy™y¬"¯)©)Ð4Ô5ð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜Ô 3Ô4Ø× Ñ Ð,Ø×!Ñ!×&Ñ&×,Ñ,Ô.Ø×)Ñ)Ð5Ø×*Ñ*×/Ñ/×5Ñ5Õ7ð 6ä˜Ô 6Ô7Ø×/Ñ/×4Ñ4×:Ñ:Õ<ð 8r%   N)r   r   r   r    r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingÚ_no_split_modulesr„  r$   r%   r&   rx  rx  Q  s-   „ ñð
 #€LØÐØ$€OØ&*Ð#Ø)Ð*Ðó=r%   rx  aL  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) sub-class. Use
    it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`DonutSwinConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aß  
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`DonutImageProcessor.__call__`] for details.
        head_mask (`torch.FloatTensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        interpolate_pos_encoding (`bool`, *optional*, defaults to `False`):
            Whether to interpolate the pre-trained position encodings.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
zdThe bare Donut Swin Model transformer outputting raw hidden-states without any specific head on top.c                   ó  ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Z ee«       ee	e
ede¬«      	 	 	 	 	 	 	 ddeej                     deej                      deej                     d	ee   d
ee   dedee   deee
f   fd„«       «       Zˆ xZS )ÚDonutSwinModelc                 óŠ  •— t         ‰| �  |«       || _        t        |j                  «      | _        t        |j                  d| j
                  dz
  z  z  «      | _        t        ||¬«      | _
        t        || j                  j                  «      | _        |rt        j                  d«      nd | _        | j#                  «        y )Nr+   r   )rV   )rA   rB   rT   r  r`  ra  r|   rJ   Únum_featuresr?   rX   r^  rG   Úencoderr   ÚAdaptiveAvgPool1dÚpoolerÚ	post_init)rU   rT   Úadd_pooling_layerrV   rW   s       €r&   rB   zDonutSwinModel.__init__™  s•   ø€ Ü‰Ñ˜Ô ØˆŒÜ˜fŸm™mÓ,ˆŒÜ × 0Ñ 0°1¸¿¹È1Ñ9LÑ3MÑ MÓNˆÔä-¨fÀ^ÔTˆŒÜ'¨°·±×0JÑ0JÓKˆŒá1B”b×*Ñ*¨1Ô-ÈˆŒð 	�‰Õr%   c                 ó.   — | j                   j                  S r¹   )rX   rD   r¾   s    r&   Úget_input_embeddingsz#DonutSwinModel.get_input_embeddings§  s   € Ø�‰×/Ñ/Ð/r%   c                 ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 y)z�
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        N)ÚitemsrŽ  Úlayerr   r	  )rU   Úheads_to_pruner—  r  s       r&   Ú_prune_headszDonutSwinModel._prune_headsª  sE   € ð
 +×0Ñ0Ó2ò 	C‰LˆE�5Ø�L‰L×Ñ˜uÑ%×/Ñ/×;Ñ;¸EÕBñ	Cr%   Úvision)Ú
checkpointÚoutput_typer…  ÚmodalityÚexpected_outputrn   ro   râ   rã   rh  rm   rj  rY   c                 ó~  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚| j                  |t        | j                   j                  «      «      }| j                  |||¬«      \  }}	| j                  ||	||||¬«      }
|
d   }d}| j                  �7| j                  |j                  dd«      «      }t        j                  |d«      }|s||f|
dd z   }|S t        |||
j                  |
j                   |
j"                  ¬«      S )	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)ro   rm   )râ   rã   rh  rj  r   r   r+   )r   r)   r   r   r   )rT   rã   rh  Úuse_return_dictrÉ   Úget_head_maskr  r`  rX   rŽ  r�  r“   r!   r’   r(   r   r   r   )rU   rn   ro   râ   rã   rh  rm   rj  Úembedding_outputrŸ   Úencoder_outputsÚsequence_outputÚpooled_outputr´   s                 r&   rz   zDonutSwinModel.forward²  sb  € ð, 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐÜÐ?Ó@Ð@ð ×&Ñ& y´#°d·k±k×6HÑ6HÓ2IÓJˆ	à-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%   )TF)NNNNNFN)r   r   r   rB   r”  r™  r   ÚSWIN_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr(   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr   r!   r"   r}   r~   r   r   rz   r   r€   s   @r&   r‹  r‹  ”  sç   ø„ õ
ò0òCñ +Ð+@ÓAÙØ&Ø(Ø$ØØ.ôð 59Ø6:Ø15Ø,0Ø/3Ø).Ø&*ñ=
à˜u×0Ñ0Ñ1ð=
ð " %×"2Ñ"2Ñ3ð=
ð ˜E×-Ñ-Ñ.ð	=
ð
 $ D™>ð=
ð ' t™nð=
ð #'ð=
ð ˜d‘^ð=
ð 
ˆuÐ*Ð*Ñ	+ò=
óó Bô=
r%   r‹  )rª   F)>r    Úcollections.abcr‡   rç   Údataclassesr   Útypingr   r   r   r!   Útorch.utils.checkpointr   Úactivationsr	   Úmodeling_utilsr
   Úpytorch_utilsr   r   r   Úutilsr   r   r   r   r   r   Úconfiguration_donut_swinr   Ú
get_loggerr   Úloggerr¨  r§  r©  r   r(   r;   r=   r¥   r?   rC   r•   r{   rÀ   r~   rµ   r·   rÃ   r÷   r   r  r  r  rL  r^  rx  ÚSWIN_START_DOCSTRINGr¦  r‹  Ú__all__r$   r%   r&   ú<module>r·     s  ðñó
 Û Ý !ß )Ñ )ã Û Ý å !Ý -ß [Ñ [÷÷ õ 6ð 
ˆ×	Ñ	˜HÓ	%€ð $€ð IÐ Ú%Ð ð ôK˜[ó Kó ðKð@ ô K˜;ó  Kó ð KòH	òôY-˜"Ÿ)™)ô Y-ôz(-˜rŸy™yô (-ôX3˜BŸI™Iô 3ñn�U—\‘\ð ¨eð ÀTð ÐV[×VbÑVbó ô*-˜Ÿ	™	ô -ôa˜RŸY™Yô aôJ
˜"Ÿ)™)ô 
ô#˜Ÿ™ô #ôN˜BŸI™Iô ô 	�b—i‘iô 	ôz�R—Y‘Yô zô|9�R—Y‘Yô 9ôzb
�r—y‘yô b
ôL=˜ô =ð@	Ð ðÐ ñ0 ØjØóô_
Ð-ó _
ó	ð_
ðD Ð7Ð
8�r%   