Ë
    ÜÓ^j1n  ã                   ó
  — d dl Z d dlZd dlmZ d dlZd dlmZ d dlmc mZ	 ddl
mZ ddlmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$m%Z%  G d„ dejL                  «      Z' G d„ dejL                  «      Z( G d„ dejL                  «      Z) G d„ de«      Z* G d„ dejL                  «      Z+ G d„ de«      Z, ed¬«      e G d„ de«      «       «       Z- G d „ d!ejL                  «      Z. G d"„ d#ej^                  «      Z0 G d$„ d%ejL                  «      Z1 G d&„ d'e*«      Z2 G d(„ d)e*«      Z3 G d*„ d+e*«      Z4ee G d,„ d-e«      «       «       Z5 ed.¬«       G d/„ d0e*«      «       Z6g d1¢Z7y)2é    N)Ú	dataclassé   )Úinitialization)ÚACT2CLSÚACT2FN)Úfilter_output_hidden_states)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚModelOutput)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚSLANeXtConfigÚSLANeXtVisionConfigc                   ó>  ‡ — e Zd ZdZˆ fd„Zdededej                  dej                  fd„Zdej                  d	ej                  d
ej                  de	eef   de	eef   dej                  fd„Z
ddej                  de	ej                  ej                  f   fd„Zˆ xZS )ÚSLANeXtVisionAttentionz=Multi-head Attention block with relative position embeddings.c                 ó.  •— t         ‰| �  «        |dk(  r2|j                  |j                  z  |j                  |j                  z  fn||f}|j                  | _        |j
                  |j                  z  }|dz  | _        |j                  | _        t        j                  |j
                  |j
                  dz  |j                  ¬«      | _        t        j                  |j
                  |j
                  «      | _        |j                  | _        | j                  r||€t        d«      ‚t        j                   t#        j$                  d|d   z  dz
  |«      «      | _        t        j                   t#        j$                  d|d   z  dz
  |«      «      | _        y y )Nr   g      à¿r   ©ÚbiaszBInput size must be provided if using relative positional encoding.é   r   )ÚsuperÚ__init__Ú
image_sizeÚ
patch_sizeÚnum_attention_headsÚhidden_sizeÚscaleÚattention_dropoutÚdropoutÚnnÚLinearÚqkv_biasÚqkvÚprojÚuse_rel_posÚ
ValueErrorÚ	ParameterÚtorchÚzerosÚ	rel_pos_hÚ	rel_pos_w)ÚselfÚconfigÚwindow_sizeÚ
input_sizeÚhead_dimÚ	__class__s        €úw/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/slanext/modeling_slanext.pyr   zSLANeXtVisionAttention.__init__.   sX  ø€ Ü‰ÑÔð ˜aÒð ×Ñ &×"3Ñ"3Ñ3°V×5FÑ5FÈ&×J[ÑJ[Ñ5[Ñ\à˜{Ð+ð 	ð $*×#=Ñ#=ˆÔ Ø×%Ñ%¨×)CÑ)CÑCˆØ˜t‘^ˆŒ
Ø×/Ñ/ˆŒä—9‘9˜V×/Ñ/°×1CÑ1CÀaÑ1GÈfÏoÉoÔ^ˆŒÜ—I‘I˜f×0Ñ0°&×2DÑ2DÓEˆŒ	à!×-Ñ-ˆÔØ×ÒØÐ!Ü Ð!eÓfÐfô  Ÿ\™\¬%¯+©+°a¸*ÀQ¹-Ñ6GÈ!Ñ6KÈXÓ*VÓWˆDŒNÜŸ\™\¬%¯+©+°a¸*ÀQ¹-Ñ6GÈ!Ñ6KÈXÓ*VÓWˆD�Nð ó    Úq_sizeÚk_sizeÚrel_posÚreturnc                 ó  — t        dt        ||«      z  dz
  «      }t        j                  |j	                  d|j
                  d   d«      j                  dd«      |d¬«      }|j	                  d|«      j                  dd«      }t        j                  |«      dd…df   t        ||z  d«      z  }t        j                  |«      ddd…f   t        ||z  d«      z  }||z
  |dz
  t        ||z  d«      z  z   }||j                  «          S )	aÁ  
        Get relative positional embeddings according to the relative positions of
            query and key sizes.

        Args:
            q_size (int):
                size of the query.
            k_size (int):
                size of key k.
            rel_pos (`torch.Tensor`):
                relative position embeddings (L, channel).

        Returns:
            Extracted positional embeddings according to relative positions.
        r   r   r   éÿÿÿÿÚlinear)ÚsizeÚmodeNç      ð?)ÚintÚmaxÚFÚinterpolateÚreshapeÚshapeÚ	transposeÚpermuter-   ÚarangeÚlong)	r1   r9   r:   r;   Úmax_rel_distÚrel_pos_resizedÚq_coordsÚk_coordsÚrelative_coordss	            r7   Úget_rel_posz"SLANeXtVisionAttention.get_rel_posG   s  € ô  ˜1œs 6¨6Ó2Ñ2°QÑ6Ó7ˆäŸ-™-Ø�O‰O˜A˜wŸ}™}¨QÑ/°Ó4×>Ñ>¸qÀ!ÓDØØô
ˆð
 *×1Ñ1°"°lÓC×KÑKÈAÈqÓQˆô —<‘< Ó'ª¨4¨Ñ0´3°vÀ±ÈÓ3LÑLˆÜ—<‘< Ó'¨ªa¨Ñ0´3°vÀ±ÈÓ3LÑLˆØ# hÑ.°6¸A±:ÄÀVÈfÁ_ÐVYÓAZÑ2ZÑZˆà˜×3Ñ3Ó5Ñ6Ð6r8   Úqueryr/   r0   c                 óT  — |\  }}|\  }}	| j                  |||«      }
| j                  ||	|«      }|j                  \  }}}|j                  ||||«      }t        j                  d||
«      }t        j                  d||«      }|dd…dd…dd…dd…df   |dd…dd…dd…ddd…f   z   }|S )a®  
        Calculate decomposed Relative Positional Embeddings from :paper:`mvitv2`.
        https://github.com/facebookresearch/mvit/blob/19786631e330df9f3622e5402b4a419a263a2c80/mvit/models/attention.py

        Args:
            query (`torch.Tensor`):
                query q in the attention layer with shape (batch_size, query_height * query_width, channel).
            rel_pos_h (`torch.Tensor`):
                relative position embeddings (Lh, channel) for height axis.
            rel_pos_w (`torch.Tensor`):
                relative position embeddings (Lw, channel) for width axis.
            q_size (tuple):
                spatial sequence size of query q with (query_height, query_width).
            k_size (tuple):
                spatial sequence size of key k with (key_height, key_width).

        Returns:
            decomposed_rel_pos (`torch.Tensor`):
                decomposed relative position embeddings.
        zbhwc,hkc->bhwkzbhwc,wkc->bhwkN)rR   rH   rG   r-   Úeinsum)r1   rS   r/   r0   r9   r:   Úquery_heightÚquery_widthÚ
key_heightÚ	key_widthÚrelative_position_heightÚrelative_position_widthÚ
batch_sizeÚ_ÚdimÚreshaped_queryÚrel_hÚrel_wÚdecomposed_rel_poss                      r7   Úget_decomposed_rel_posz-SLANeXtVisionAttention.get_decomposed_rel_posg   s¿   € ð8 %+Ñ!ˆ�kØ &Ñˆ
�IØ#'×#3Ñ#3°LÀ*ÈiÓ#XÐ Ø"&×"2Ñ"2°;À	È9Ó"UÐà"Ÿ[™[Ñˆ
�A�sØŸ™ z°<ÀÈcÓRˆÜ—‘Ð-¨~Ð?WÓXˆÜ—‘Ð-¨~Ð?VÓWˆà"¢1¢aªªA¨tÐ#3Ñ4°uºQÂÂ1ÀdÊAÐ=MÑ7NÑNÐà!Ð!r8   Úhidden_statesc                 óÊ  — |j                   \  }}}}| j                  |«      j                  |||z  d| j                  d«      j	                  ddddd«      }|j                  d|| j                  z  ||z  d«      j                  d«      \  }}	}
|| j                  z  |	j                  dd«      z  }| j                  rC| j                  || j                  | j                  ||f||f«      }|j                  |«      }||z   }t        j                  j                  j!                  |t        j"                  d¬«      j%                  |j&                  «      }t        j                  j)                  || j(                  | j*                  ¬	«      }||
z  j                  || j                  ||d«      }|j	                  ddddd«      j                  |||d«      }| j-                  |«      }||fS )
Nr   r>   r   r   r   é   éþÿÿÿ)Údtyper^   )ÚpÚtraining)rH   r(   rG   r    rJ   Úunbindr"   rI   r*   rc   r/   r0   Ú
reshape_asr-   r%   Ú
functionalÚsoftmaxÚfloat32Útorh   r$   rj   r)   )r1   rd   Úoutput_attentionsr\   ÚheightÚwidthr]   r(   rS   ÚkeyÚvalueÚattn_weightsrb   Ú
attn_probsÚattn_outputs                  r7   ÚforwardzSLANeXtVisionAttention.forward‘   sÍ  € Ø'4×':Ñ':Ñ$ˆ
�F˜E 1ð �H‰H�]Ó#ß‰W�Z ¨%¡°°D×4LÑ4LÈbÓQß‰W�Q˜˜1˜a Ó#ð 	ð  ŸK™K¨¨:¸×8PÑ8PÑ+PÐRXÐ[`ÑR`ÐbdÓe×lÑlÐmnÓoÑˆˆs�Eà §
¡
Ñ*¨c¯m©m¸BÀÓ.CÑCˆà×ÒØ!%×!<Ñ!<Ø�t—~‘~ t§~¡~¸À°ÈÐQVÈó"Ðð "4×!>Ñ!>¸|Ó!LÐØ'Ð*<Ñ<ˆLä—x‘x×*Ñ*×2Ñ2°<ÄuÇ}Á}ÐZ\Ð2Ó]×`Ñ`Ðaf×alÑalÓmˆä—]‘]×*Ñ*¨<¸4¿<¹<ÐRV×R_ÑR_Ð*Ó`ˆ
à! EÑ)×2Ñ2°:¸t×?WÑ?WÐY_ÐafÐhjÓkˆØ!×)Ñ)¨!¨Q°°1°aÓ8×@Ñ@ÀÈVÐUZÐ\^Ó_ˆà—i‘i Ó,ˆØ˜LÐ(Ð(r8   ©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rC   r-   ÚTensorrR   Útuplerc   ry   Ú__classcell__©r6   s   @r7   r   r   +   sÅ   ø„ ÙGôXð27 #ð 7¨sð 7¸U¿\¹\ð 7ÈeÏlÉló 7ð@("à�|‰|ð("ð —<‘<ð("ð —<‘<ð	("ð
 �c˜3�h‘ð("ð �c˜3�h‘ð("ð 
�‰ó("ñT) U§\¡\ð )ÈeÐTY×T`ÑT`Ðbg×bnÑbnÐTnÑNo÷ )r8   r   c            	       óx   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  dee   fd„Zˆ xZ	S )ÚSLANeXtAttentionGRUCellc                 ó  •— t         ‰| �  «        t        j                  ||d¬«      | _        t        j                  ||«      | _        t        j                  |dd¬«      | _        t        j                  ||z   |«      | _        y )NFr   r   )	r   r   r%   r&   Úinput_to_hiddenÚhidden_to_hiddenÚscoreÚGRUCellÚrnn)r1   r4   r!   Únum_embeddingsr6   s       €r7   r   z SLANeXtAttentionGRUCell.__init__±   sa   ø€ Ü‰ÑÔä!Ÿy™y¨°[ÀuÔMˆÔÜ "§	¡	¨+°{Ó CˆÔÜ—Y‘Y˜{¨A°EÔ:ˆŒ
ä—:‘:˜j¨>Ñ9¸;ÓGˆ�r8   Úprev_hiddenÚbatch_hiddenÚchar_onehotsÚkwargsc                 ó  — | j                  |«      }| j                  |«      j                  d«      }||z   }t        j                  |«      }| j                  |«      }t        j                  |dt        j                  ¬«      j                  |j                  «      }|j                  dd«      }t        j                  ||«      j                  d«      }	t        j                  |	|gd«      }
| j                  |
|«      }||fS )Nr   ©r^   rh   r   )r†   r‡   Ú	unsqueezer-   Útanhrˆ   rE   rn   ro   rp   rh   rI   ÚmatmulÚsqueezeÚcatrŠ   )r1   rŒ   r�   rŽ   r�   Úbatch_hidden_projÚprev_hidden_projÚattention_scoresrv   ÚcontextÚconcat_contextrd   s               r7   ry   zSLANeXtAttentionGRUCell.forwardº   sã   € ð !×0Ñ0°Ó>ÐØ×0Ñ0°Ó=×GÑGÈÓJÐà,Ð/?Ñ?ÐÜ Ÿ:™:Ð&6Ó7ÐØŸ:™:Ð&6Ó7Ðä—y‘yÐ!1°qÄÇÁÔN×QÑQÐRb×RhÑRhÓiˆØ#×-Ñ-¨a°Ó3ˆÜ—,‘,˜|¨\Ó:×BÑBÀ1ÓEˆÜŸ™ G¨\Ð#:¸AÓ>ˆØŸ™ °Ó=ˆà˜lÐ*Ð*r8   )
r{   r|   r}   r   r-   ÚFloatTensorr   r   ry   r�   r‚   s   @r7   r„   r„   °   sL   ø„ ôHð+à×&Ñ&ð+ð ×'Ñ'ð+ð ×'Ñ'ð	+ð
 Ð+Ñ,÷+r8   r„   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )Ú
SLANeXtMLPc                 óê   •— t         ‰| �  «        t        j                  ||«      | _        t        j                  ||«      | _        |€t        j                  «       | _        y t        |   «       | _        y rz   )	r   r   r%   r&   Úfc1Úfc2ÚIdentityr   Úact_fn)r1   r!   Úout_channelsÚ
activationr6   s       €r7   r   zSLANeXtMLP.__init__Ò   sR   ø€ Ü‰ÑÔÜ—9‘9˜[¨+Ó6ˆŒÜ—9‘9˜[¨,Ó7ˆŒØ'1Ð'9”b—k‘k“mˆ�¼wÀzÑ?RÓ?Tˆ�r8   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rz   )r    r¡   r£   ©r1   rd   s     r7   ry   zSLANeXtMLP.forwardØ   s2   € ØŸ™ Ó/ˆØŸ™ Ó/ˆØŸ™ MÓ2ˆØÐr8   rz   )r{   r|   r}   r   ry   r�   r‚   s   @r7   rž   rž   Ñ   s   ø„ õUör8   rž   c                   ój   ‡ — e Zd ZU eed<   dZdZdZdZddgZ	 e
j                  «       ˆ fd„«       Zˆ xZS )	ÚSLANeXtPreTrainedModelr2   ÚbackboneÚpixel_values©ÚimageTÚstructure_attention_cellÚstructure_generatorc                 óÔ  •— t         ‰| �  |«       t        |t        «      r,|j                  � t        j                  |j                  d«       t        |t        «      rL|j                  r@t        j                  |j                  d«       t        j                  |j                  d«       t        |t        j                  «      rÓ|j                  dkD  r"dt        j                  |j                  «      z  nd}t        j                   |j"                  | |«       t        j                   |j$                  | |«       |j&                  �"t        j                   |j&                  | |«       |j(                  �"t        j                   |j(                  | |«       t        |t*        «      rÃdt        j                  | j,                  j                  dz  «      z  }|j.                  fD ]ƒ  }|j1                  «       D ]n  }t        |t        j2                  «      sŒt        j                   |j4                  | |«       |j6                  €ŒMt        j                   |j6                  | |«       Œp Œ… yy)zInitialize the weightsNg        r   rB   )r   Ú_init_weightsÚ
isinstanceÚSLANeXtVisionEncoderÚ	pos_embedÚinitÚ	constant_r   r*   r/   r0   r%   r‰   r!   ÚmathÚsqrtÚuniform_Ú	weight_ihÚ	weight_hhÚbias_ihÚbias_hhÚSLANeXtSLAHeadr2   r¯   Úchildrenr&   Úweightr   )r1   ÚmoduleÚstdÚ	generatorÚlayerr6   s        €r7   r±   z$SLANeXtPreTrainedModel._init_weightsç   sÑ  ø€ ô 	‰Ñ˜fÔ%ô �fÔ2Ô3Ø×ÑÐ+Ü—‘˜v×/Ñ/°Ô5ô �fÔ4Ô5Ø×!Ò!Ü—‘˜v×/Ñ/°Ô5Ü—‘˜v×/Ñ/°Ô5ô �fœbŸj™jÔ)Ø9?×9KÑ9KÈaÒ9O�#œŸ	™	 &×"4Ñ"4Ó5Ò5ÐUVˆCÜ�M‰M˜&×*Ñ*¨S¨D°#Ô6Ü�M‰M˜&×*Ñ*¨S¨D°#Ô6Ø�~‰~Ð)Ü—‘˜fŸn™n¨s¨d°CÔ8Ø�~‰~Ð)Ü—‘˜fŸn™n¨s¨d°CÔ8ô �fœnÔ-ØœŸ	™	 $§+¡+×"9Ñ"9¸CÑ"?Ó@Ñ@ˆCà$×8Ñ8Ð:ò A�	Ø&×/Ñ/Ó1ò A�EÜ! %¬¯©Õ3ÜŸ™ e§l¡l°S°D¸#Ô>Ø Ÿ:™:Ñ1Ü ŸM™M¨%¯*©*°s°d¸CÕ@ñ	AñAð .r8   )r{   r|   r}   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_keep_in_fp32_modules_strictr-   Úno_gradr±   r�   r‚   s   @r7   r©   r©   ß   sH   ø… ØÓØ"ÐØ$€OØ!ÐØ&*Ð#Ø$>Ð@UÐ#VÐ à€U‡]�]ƒ_ó"Aó ô"Ar8   r©   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚSLANeXtMLPBlockc                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  «      | _        t        |j                     | _
        y rz   )r   r   r%   r&   r!   Úmlp_dimÚlin1Úlin2r   Ú
hidden_actÚact©r1   r2   r6   s     €r7   r   zSLANeXtMLPBlock.__init__  sX   ø€ Ü‰ÑÔÜ—I‘I˜f×0Ñ0°&·.±.ÓAˆŒ	Ü—I‘I˜fŸn™n¨f×.@Ñ.@ÓAˆŒ	Ü˜&×+Ñ+Ñ,ˆ�r8   rd   r<   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rz   )rÐ   rÓ   rÑ   r§   s     r7   ry   zSLANeXtMLPBlock.forward  s2   € ØŸ	™	 -Ó0ˆØŸ™ Ó/ˆØŸ	™	 -Ó0ˆØÐr8   )r{   r|   r}   r   r-   r   ry   r�   r‚   s   @r7   rÍ   rÍ     s#   ø„ ô-ð U§\¡\ð °e·l±l÷ r8   rÍ   c            
       ó  ‡ — e Zd Zˆ fd„Zdej
                  dedeej
                  eeef   f   fd„Zdej
                  dedeeef   deeef   dej
                  f
d	„Z	dej
                  deej                     fd
„Zˆ xZS )ÚSLANeXtVisionLayerc                 ó2  •— t         ‰| �  «        t        j                  |j                  |j
                  ¬«      | _        t        ||«      | _        t        j                  |j                  |j
                  ¬«      | _	        t        |«      | _        || _        y )N)Úeps)r   r   r%   Ú	LayerNormr!   Úlayer_norm_epsÚlayer_norm1r   ÚattnÚlayer_norm2rÍ   Úmlpr3   )r1   r2   r3   r6   s      €r7   r   zSLANeXtVisionLayer.__init__  sn   ø€ Ü‰ÑÔÜŸ<™<¨×(:Ñ(:À×@UÑ@UÔVˆÔÜ*¨6°;Ó?ˆŒ	ÜŸ<™<¨×(:Ñ(:À×@UÑ@UÔVˆÔÜ" 6Ó*ˆŒØ&ˆÕr8   rd   r3   r<   c           	      óL  — |j                   \  }}}}|||z  z
  |z  }|||z  z
  |z  }t        j                  |ddd|d|f«      }||z   ||z   }
}	|j                  ||	|z  ||
|z  ||«      }|j	                  dddddd«      j                  «       j                  d|||«      }||	|
ffS )a·  
        Args:
        Partition into non-overlapping windows with padding if needed.
            hidden_states (tensor): input tokens with [batch_size, height, width, channel]. window_size (int): window
            size.

        Returns:
            windows: windows after partition with [batch_size * num_windows, window_size, window_size, channel].
            (pad_height, pad_width): padded height and width before partition
        r   r   r   r   rf   é   r>   )rH   rE   ÚpadrG   rJ   Ú
contiguous)r1   rd   r3   r\   rr   rs   ÚchannelÚpad_hÚpad_wÚ
pad_heightÚ	pad_widthÚwindowss               r7   Úwindow_partitionz#SLANeXtVisionLayer.window_partition$  sà   € ð .;×-@Ñ-@Ñ*ˆ
�F˜E 7à˜v¨Ñ3Ñ3°{ÑBˆØ˜u {Ñ2Ñ2°kÑAˆÜŸ™˜m¨a°°A°u¸aÀÐ-GÓHˆØ &¨¡°¸±�Iˆ
à%×-Ñ-Ø˜
 kÑ1°;À	È[Ñ@XÐZeÐgnó
ˆð  ×'Ñ'¨¨1¨a°°A°qÓ9×DÑDÓF×NÑNÈrÐS^Ð`kÐmtÓuˆØ˜ YÐ/Ð/Ð/r8   ré   Úpadding_shapeÚoriginal_shapec                 ó2  — |\  }}|\  }}|j                   d   ||z  |z  |z  z  }	|j                  |	||z  ||z  ||d«      }
|
j                  dddddd«      j                  «       j                  |	||d«      }
|
dd…d|…d|…dd…f   j                  «       }
|
S )	aS  
        Args:
        Window unpartition into original sequences and removing padding.
            hidden_states (tensor):
                input tokens with [batch_size * num_windows, window_size, window_size, channel].
            window_size (int):
                window size.
            padding_shape (Tuple):
                padded height and width (pad_height, pad_width).
            original_shape (Tuple): original height and width (height, width) before padding.

        Returns:
            hidden_states: unpartitioned sequences with [batch_size, height, width, channel].
        r   r>   r   r   r   rf   rá   N)rH   rG   rJ   rã   )r1   ré   r3   rë   rì   rç   rè   rr   rs   r\   rd   s              r7   Úwindow_unpartitionz%SLANeXtVisionLayer.window_unpartition<  sÉ   € ð" !.Ñˆ
�IØ&‰ˆ�Ø—]‘] 1Ñ%¨*°yÑ*@ÀKÑ*OÐS^Ñ*^Ñ_ˆ
ØŸ™Ø˜
 kÑ1°9ÀÑ3KÈ[ÐZeÐgió
ˆð ×!Ñ! ! Q¨¨1¨a°Ó3×>Ñ>Ó@×HÑHÈÐU_ÐajÐlnÓoð 	ð &¢a¨¨&¨°&°5°&º!Ð&;Ñ<×GÑGÓIˆØÐr8   c                 ó   — |}| j                  |«      }| j                  dkD  r=|j                  d   |j                  d   }}| j                  || j                  «      \  }}| j	                  |¬«      \  }}| j                  dkD  r | j                  || j                  f«      }||z   }| j                  |«      }|| j                  |«      z   }|S )Nr   r   r   )rd   )rÜ   r3   rH   rê   rÝ   rî   rÞ   rß   )r1   rd   Úresidualrr   rs   rë   rv   Úlayernorm_outputs           r7   ry   zSLANeXtVisionLayer.forwardZ  sæ   € Ø ˆØ×(Ñ(¨Ó7ˆà×Ñ˜aÒØ)×/Ñ/°Ñ2°M×4GÑ4GÈÑ4J�EˆFØ+/×+@Ñ+@ÀÐPT×P`ÑP`Ó+aÑ(ˆM˜=à&*§i¡iØ'ð '0ó '
Ñ#ˆ�|ð ×Ñ˜aÒØ ×3Ñ3°MÀ4×CSÑCSÐUbÐekÐmrÐdsÓtˆMà  =Ñ0ˆØ×+Ñ+¨MÓ:ÐØ%¨¯©Ð1AÓ(BÑBˆØÐr8   )r{   r|   r}   r   r-   r   rC   r€   rê   rî   rœ   ry   r�   r‚   s   @r7   r×   r×     s±   ø„ ô'ð0¨e¯l©lð 0Èð 0ÐQVÐW\×WcÑWcÐejÐknÐpsÐksÑetÐWtÑQuó 0ð0Ø—|‘|ðØ25ðØFKÈCÐQTÈHÁoðØglÐmpÐruÐmuÑgvðà	�‰óð< U§\¡\ð °e¸E×<MÑ<MÑ6N÷ r8   r×   zŸ
    Base class for slanext vision model's outputs that also contains image embeddings obtained by applying the projection
    layer to the pooler_output.
    )Úcustom_introc                   óÆ   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
ej                  df   dz  ed<   dZe
ej                  df   dz  ed<   y)ÚSLANeXtVisionEncoderOutputzø
    image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)` *optional* returned when model is initialized with `with_projection=True`):
        The image embeddings obtained by applying the projection layer to the pooler_output.
    NÚimage_embedsÚlast_hidden_state.rd   Ú
attentions)r{   r|   r}   r~   rõ   r-   rœ   rÅ   rö   rd   r€   r÷   © r8   r7   rô   rô   o  sr   … ñð
 .2€L�%×#Ñ# dÑ*Ó1Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ô;r8   rô   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚSLANeXtPatchEmbeddingszì
    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  }|| _        || _        || _        || _
        t        j                  ||||¬«      | _        y )Nr   r   )Úkernel_sizeÚstride)r   r   r   r   Únum_channelsr!   r²   ÚcollectionsÚabcÚIterableÚnum_patchesr%   ÚConv2dÚ
projection)r1   r2   r   r   rþ   r!   r  r6   s          €r7   r   zSLANeXtPatchEmbeddings.__init__‰  sÔ   ø€ Ü‰ÑÔØ!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ø$*×$7Ñ$7¸×9KÑ9K�kˆÜ#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔäŸ)™) L°+È:Ð^hÔiˆ�r8   c                 óN  — |j                   \  }}}}|| j                  k7  rt        d«      ‚|| j                  d   k7  s|| j                  d   k7  r2t        d|› d|› d| j                  d   › d| j                  d   › d�	«      ‚| j	                  |«      j                  ddd	d«      }|S )
NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r   r   zInput image size (Ú*z) doesn't match model (z).r   r   )rH   rþ   r+   r   r  rJ   )r1   r«   r\   rþ   rr   rs   Ú
embeddingss          r7   ry   zSLANeXtPatchEmbeddings.forward—  sÅ   € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ø˜4×,Ñ,Ò,ÜØwóð ð �T—_‘_ QÑ'Ò'¨5°D·O±OÀAÑ4FÒ+FÜØ$ V H¨A¨e¨WÐ4KÈDÏOÉOÐ\]ÑL^ÐK_Ð_`Ðae×apÑapÐqrÑasÐ`tÐtvÐwóð ð —_‘_ \Ó2×:Ñ:¸1¸aÀÀAÓFˆ
ØÐr8   )r{   r|   r}   r~   r   ry   r�   r‚   s   @r7   rú   rú   ‚  s   ø„ ñôjör8   rú   c                   óf   ‡ — e Zd ZdZdddœˆ fd„
Zdej                  dej                  fˆ fd„Zˆ xZS )	ÚSLANeXtLayerNormaA  LayerNorm that supports two data formats: channels_last (default) or channels_first.
    The ordering of the dimensions in the inputs. channels_last corresponds to inputs with shape (batch_size, height,
    width, channels) while channels_first corresponds to inputs with shape (batch_size, channels, height, width).
    g�íµ ÷Æ°>Úchannels_last)rÙ   Údata_formatc                ó\   •— t        ‰| �  |fd|i|¤Ž |dvrt        d|› �«      ‚|| _        y )NrÙ   )r
  Úchannels_firstzUnsupported data format: )r   r   ÚNotImplementedErrorr  )r1   Únormalized_shaperÙ   r  r�   r6   s        €r7   r   zSLANeXtLayerNorm.__init__«  s?   ø€ Ü‰ÑÐ)Ñ=¨sÐ=°fÒ=ØÐAÑAÜ%Ð(AÀ+ÀÐ&OÓPÐPØ&ˆÕr8   Úfeaturesr<   c                 ó¶   •— | j                   dk(  r9|j                  dddd«      }t        ‰| �  |«      }|j                  dddd«      }|S t        ‰| �  |«      }|S )zŒ
        Args:
            features: Tensor of shape (batch_size, channels, height, width) OR (batch_size, height, width, channels)
        r  r   r   r   r   )r  rJ   r   ry   )r1   r  r6   s     €r7   ry   zSLANeXtLayerNorm.forward±  sj   ø€ ð
 ×ÑÐ/Ò/Ø×'Ñ'¨¨1¨a°Ó3ˆHÜ‘w‘ xÓ0ˆHØ×'Ñ'¨¨1¨a°Ó3ˆHð ˆô ‘w‘ xÓ0ˆHØˆr8   )	r{   r|   r}   r~   r   r-   r   ry   r�   r‚   s   @r7   r	  r	  ¥  s4   ø„ ñð
 15À/ö 'ð §¡ð °·±÷ ñ r8   r	  c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚSLANeXtVisionNeckr2   c                 ój  •— t         ‰| �  «        || _        t        j                  |j
                  |j                  dd¬«      | _        t        |j                  d¬«      | _	        t        j                  |j                  |j                  ddd¬«      | _
        t        |j                  d¬«      | _        y )Nr   F)rü   r   r  )r  r   )rü   Úpaddingr   )r   r   r2   r%   r  r!   Úoutput_channelsÚconv1r	  rÜ   Úconv2rÞ   rÔ   s     €r7   r   zSLANeXtVisionNeck.__init__À  sŒ   ø€ Ü‰ÑÔØˆŒä—Y‘Y˜v×1Ñ1°6×3IÑ3IÐWXÐ_dÔeˆŒ
Ü+¨F×,BÑ,BÐP`ÔaˆÔÜ—Y‘Y˜v×5Ñ5°v×7MÑ7MÐ[\ÐfgÐnsÔtˆŒ
Ü+¨F×,BÑ,BÐP`ÔaˆÕr8   c                 ó¶   — |j                  dddd«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S )Nr   r   r   r   )rJ   r  rÜ   r  rÞ   r§   s     r7   ry   zSLANeXtVisionNeck.forwardÉ  sZ   € Ø%×-Ñ-¨a°°A°qÓ9ˆØŸ
™
 =Ó1ˆØ×(Ñ(¨Ó7ˆàŸ
™
 =Ó1ˆØ×(Ñ(¨Ó7ˆØÐr8   )r{   r|   r}   r   r   ry   r�   r‚   s   @r7   r  r  ¿  s   ø„ ðbÐ2õ bör8   r  c            
       ó˜   ‡ — e Zd ZeedœZdZdefˆ fd„Zd„ Z	e
 ed¬«      	 dd	ej                  dz  d
ee   deez  fd„«       «       Zˆ xZS )r³   )rd   r÷   r¬   r2   c                 ó¢  •— t         ‰| �  |«       || _        |j                  | _        t	        |«      | _        d | _        |j                  rht        j                  t        j                  d|j                  |j                  z  |j                  |j                  z  |j                  «      «      | _        t        j                  «       | _        t!        |j"                  «      D ]D  }t%        |||j&                  vr|j(                  nd¬«      }| j                  j+                  |«       ŒF t-        |«      | _        d| _        | j3                  «        y )Nr   r   )r3   F)r   r   r2   r   rú   Úpatch_embedr´   Úuse_abs_posr%   r,   r-   r.   r   r!   Ú
ModuleListÚlayersÚrangeÚnum_hidden_layersr×   Úglobal_attn_indexesr3   Úappendr  ÚneckÚgradient_checkpointingÚ	post_init)r1   r2   ÚirÄ   r6   s       €r7   r   zSLANeXtVisionEncoder.__init__×  s  ø€ Ü‰Ñ˜Ô ØˆŒØ ×+Ñ+ˆŒÜ1°&Ó9ˆÔàˆŒØ×ÒäŸ\™\Ü—‘ØØ×%Ñ%¨×):Ñ):Ñ:Ø×%Ñ%¨×):Ñ):Ñ:Ø×&Ñ&ó	óˆDŒNô —m‘m“oˆŒÜ�v×/Ñ/Ó0ò 	&ˆAÜ&ØØ23¸6×;UÑ;UÑ2U˜F×.Ò.Ð[\ôˆEð �K‰K×Ñ˜uÕ%ð	&ô & fÓ-ˆŒ	à&+ˆÔ#Ø�‰Õr8   c                 ó   — | j                   S rz   )r  )r1   s    r7   Úget_input_embeddingsz)SLANeXtVisionEncoder.get_input_embeddingsö  s   € Ø×ÑÐr8   F)Útie_last_hidden_statesNr«   r�   r<   c                 óà   — |€t        d«      ‚| j                  |«      }| j                  �|| j                  z   }| j                  D ]
  } ||«      }Œ | j	                  |«      }t        |¬«      S )Nz You have to specify pixel_values)rö   )r+   r  r´   r  r$  rô   )r1   r«   r�   rd   Úlayer_modules        r7   ry   zSLANeXtVisionEncoder.forwardù  sy   € ð
 ÐÜÐ?Ó@Ð@à×(Ñ(¨Ó6ˆØ�>‰>Ð%Ø)¨D¯N©NÑ:ˆMØ ŸK™Kò 	8ˆLÙ(¨Ó7‰Mð	8àŸ	™	 -Ó0ˆÜ)Ø+ô
ð 	
r8   rz   )r{   r|   r}   r×   r   Ú_can_record_outputsrÈ   r   r   r)  r   r   r-   rœ   r   r   r€   rô   ry   r�   r‚   s   @r7   r³   r³   Ó  sz   ø„ Ø,>ÐNdÑeÐØ!ÐðÐ2õ ò> ð  Ù¨EÔ2à7;ñ
Ø!×-Ñ-°Ñ4ð
ØGMÐN`ÑGað
à	Ð+Ñ	+ò
ó 3ó  ô
r8   r³   c                   óX   ‡ — e Zd Z	 ddedz  fˆ fd„Zdej                  dee   fd„Z	ˆ xZ
S )ÚSLANeXtBackboneNr2   c                 óà   •— t         ‰| �  |«       t        |j                  «      | _        t        j                  |j                  |j                  dddd¬«      | _	        | j                  «        y )Nr   r   r   F)rü   rý   r  r   )r   r   r³   Úvision_configÚvision_towerr%   r  Úpost_conv_in_channelsÚpost_conv_out_channelsÚ	post_convr&  ©r1   r2   r�   r6   s      €r7   r   zSLANeXtBackbone.__init__  s^   ø€ ô
 	‰Ñ˜Ô Ü0°×1EÑ1EÓFˆÔÜŸ™Ø×(Ñ(¨&×*GÑ*GÐUVÐ_`ÐjkÐrwô
ˆŒð 	�‰Õr8   rd   r�   c                 óä   —  | j                   |fi |¤Ž}| j                  |j                  «      }|j                  d«      j	                  dd«      }t        ||j                  |j                  ¬«      S )Nr   r   )rö   rd   r÷   )r2  r5  rö   ÚflattenrI   r
   rd   r÷   )r1   rd   r�   Úvision_outputs       r7   ry   zSLANeXtBackbone.forward  sl   € Ø)˜×)Ñ)¨-ÑB¸6ÑBˆØŸ™ }×'FÑ'FÓGˆØ%×-Ñ-¨aÓ0×:Ñ:¸1¸aÓ@ˆÜØ+Ø'×5Ñ5Ø$×/Ñ/ô
ð 	
r8   rz   )r{   r|   r}   Údictr   r-   r   r   r   ry   r�   r‚   s   @r7   r/  r/    s6   ø„ ð #ñ
à�t‘õ
ð
 U§\¡\ð 
¸VÐDVÑ=W÷ 
r8   r/  c                   ó    ‡ — e Zd ZdeiZ	 d	dedz  fˆ fd„Zeee		 d	de
j                  de
j                  dz  dee   fd„«       «       «       Zˆ xZS )
r¾   r÷   Nr2   c                 óî   •— t         ‰| �  |«       t        |j                  |j                  |j
                  «      | _        t        |j                  |j
                  «      | _        | j                  «        y rz   )
r   r   r„   r4  r!   r¤   r®   rž   r¯   r&  r6  s      €r7   r   zSLANeXtSLAHead.__init__)  s_   ø€ ô
 	‰Ñ˜Ô ä(?Ø×)Ñ)¨6×+=Ñ+=¸v×?RÑ?Ró)
ˆÔ%ô $.¨f×.@Ñ.@À&×BUÑBUÓ#VˆÔ à�‰Õr8   rd   Útargetsr�   c                 ó6  — t        j                  |j                  d   | j                  j                  ft         j
                  |j                  ¬«      }t        j                  |j                  d   gt         j                  |j                  ¬«      }g }g }t        | j                  j                  dz   «      D ]ÿ  }t        j                  || j                  j                  «      j                  «       }	| j                  ||j                  «       |	«      \  }}| j                  |«      }
|
j!                  d¬«      }|j#                  |
«       |j#                  |«       t        j$                  |d¬«      j'                  | j                  j                  dz
  «      j)                  d«      j+                  «       sŒÿ n t        j,                  t        j$                  |d¬«      dt         j
                  ¬«      j/                  |j0                  «      }t3        ||¬«      S )	Nr   )rh   Údevice)r@   rh   r?  r   )r^   r>   r‘   )rö   rd   )r-   r.   rH   r2   r!   ro   r?  rL   r   Úmax_text_lengthrE   Úone_hotr¤   Úfloatr®   r¯   Úargmaxr#  ÚstackÚeqÚanyÚallrn   rp   rh   r
   )r1   rd   r=  r�   r  Úpredicted_charsÚstructure_preds_listÚstructure_ids_listr]   Úembedding_featureÚstructure_stepÚstructure_predss               r7   ry   zSLANeXtSLAHead.forward7  s­  € ô —;‘;Ø× Ñ  Ñ# T§[¡[×%<Ñ%<Ð=ÄUÇ]Á]Ð[h×[oÑ[oô
ˆô  Ÿ+™+¨M×,?Ñ,?ÀÑ,BÐ+CÌ5Ï:É:Ð^k×^rÑ^rÔsˆà!ÐØÐÜ�t—{‘{×2Ñ2°QÑ6Ó7ò 		ˆAÜ !§	¡	¨/¸4¿;¹;×;SÑ;SÓ T× ZÑ ZÓ \ÐØ×7Ñ7¸À-×BUÑBUÓBWÐYjÓk‰KˆH�aØ!×5Ñ5°hÓ?ˆNØ,×3Ñ3¸Ð3Ó:ˆOà ×'Ñ'¨Ô7Ø×%Ñ% oÔ6Ü�{‰{Ð-°1Ô5×8Ñ8¸¿¹×9QÑ9QÐTUÑ9UÓV×ZÑZÐ[]Ó^×bÑbÕdÙð		ô Ÿ)™)¤E§K¡KÐ0DÈ!Ô$LÐRTÔ\a×\iÑ\iÔj×mÑmØ×Ñó
ˆô °ÐPdÔeÐer8   rz   )r{   r|   r}   r„   r-  r:  r   r   r   r   r-   rœ   r   r   r   ry   r�   r‚   s   @r7   r¾   r¾   $  s†   ø„ àÐ-ðÐð #ñà�t‘õð  ØØ ð (,ñfà×(Ñ(ðfð —‘ Ñ$ðfð Ð+Ñ,ò	fó !ó ó  ôfr8   r¾   c                   ób   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   y)Ú SLANeXtForTableRecognitionOutputam  
    head_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Hidden-states of the SLANeXtSLAHead at each prediction step, varies up to max `self.config.max_text_length` states (depending on early exits).
    head_attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Attentions of the SLANeXtSLAHead at each prediction step, varies up to max `self.config.max_text_length` attentions (depending on early exits).
    NÚhead_hidden_statesÚhead_attentions)	r{   r|   r}   r~   rP  r-   rœ   rÅ   rQ  rø   r8   r7   rO  rO  X  s4   … ñð 48Ð˜×)Ñ)¨DÑ0Ó7Ø04€O�U×&Ñ&¨Ñ-Ô4r8   rO  z¼
    SLANeXt Table Recognition model for table recognition tasks. Wraps the core SLANeXtPreTrainedModel
    and returns outputs compatible with the Transformers table recognition API.
    c            	       ó†   ‡ — e Zd Zdefˆ fd„Zeedej                  de	e
   deej                     ez  fd„«       «       Zˆ xZS )ÚSLANeXtForTableRecognitionr2   c                 óˆ   •— t         ‰| �  |«       t        |¬«      | _        t	        |¬«      | _        | j                  «        y )N)r2   )r   r   r/  rª   r¾   Úheadr&  rÔ   s     €r7   r   z#SLANeXtForTableRecognition.__init__m  s2   ø€ Ü‰Ñ˜Ô Ü'¨vÔ6ˆŒÜ"¨&Ô1ˆŒ	Ø�‰Õr8   r«   r�   r<   c                 óæ   —  | j                   |fi |¤Ž} | j                  |j                  fi |¤Ž}t        |j                  |j                  |j
                  |j                  |j
                  ¬«      S )N)rö   rd   r÷   rP  rQ  )rª   rU  rö   rO  rd   r÷   )r1   r«   r�   Úbackbone_outputsÚhead_outputss        r7   ry   z"SLANeXtForTableRecognition.forwards  sp   € ð
 )˜4Ÿ=™=¨Ñ@¸Ñ@ÐØ �t—y‘yÐ!1×!CÑ!CÑNÀvÑNˆÜ/Ø*×<Ñ<Ø*×8Ñ8Ø'×2Ñ2Ø+×9Ñ9Ø(×3Ñ3ô
ð 	
r8   )r{   r|   r}   r   r   r   r   r-   rœ   r   r   r€   rO  ry   r�   r‚   s   @r7   rS  rS  f  s`   ø„ ð˜}õ ð Øð
Ø!×-Ñ-ð
Ø9?Ð@RÑ9Sð
à	ˆu× Ñ Ñ	!Ð$DÑ	Dò
ó ó ô
r8   rS  )r¾   r/  rS  r©   )8rÿ   r·   Údataclassesr   r-   Útorch.nnr%   Útorch.nn.functionalrm   rE   Ú r   rµ   Úactivationsr   r   Úbackbone_utilsr   Úmodeling_layersr	   Úmodeling_outputsr
   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_slanextr   r   ÚModuler   r„   rž   r©   rÍ   r×   rô   rú   rÚ   r	  r  r³   r/  r¾   rO  rS  Ú__all__rø   r8   r7   ú<module>ri     s  ðó, Û Ý !ã Ý ß Ð å &ß *Ý 9Ý 9ß <Ý -Ý &ß IÑ IÝ 7Ý 5ß EôB)˜RŸY™Yô B)ôJ+˜bŸi™iô +ôB�—‘ô ô+A˜_ô +Aô\�b—i‘iô ôQÐ3ô Qñh ðôð ô	< ó 	<ó óð	<ô ˜RŸY™Yô  ôF�r—|‘|ô ô4˜Ÿ	™	ô ô(6
Ð1ô 6
ôr
Ð,ô 
ô01fÐ+ô 1fðh Ø
ô	5 ó 	5ó ó ð	5ñ ðôô
Ð!7ó 
óð
ò. h�r8   