+
    œ°³j÷l  ã                   ó`  € R t ^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^RIH	t
 ^RIHt ^RIHtHt ^RIHtHtHtHt ^RIHt ^RIHtHt ^R	IHt ^R
IHt ]P<                  ! ]4      t R/R R llt! ! R R]PD                  4      t# ! R R]PH                  4      t% ! R R]PL                  4      t' ! R R]PP                  4      t) ! R R]PL                  4      t* ! R R]PL                  4      t+R0R lt, ! R R]PL                  4      t- ! R R]PL                  4      t. ! R R]PL                  4      t/ ! R  R!]PL                  4      t0 ! R" R#]PL                  4      t1] ! R$ R%]4      4       t2] ! R& R']24      4       t3]! R(R)7       ! R* R+]24      4       t4]! R,R)7       ! R- R.]]24      4       t5. R1Ot6R# )2z9PyTorch BiT model. Also supports backbone for ViT hybrid.N)ÚTensorÚnn)Úinitialization)ÚACT2FN)ÚBackboneMixinÚfilter_output_hidden_states)ÚBackboneOutputÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttention)ÚPreTrainedModel)Úauto_docstringÚlogging)Úcan_return_tuple©Ú	BitConfigc                óF   € V ^8„  d   QhR\         \         \        3,          /# ©é   Úreturn)ÚtupleÚbool)Úformats   "Úe/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/bit/modeling_bit.pyÚ__annotate__r   )   s   € ÷ &ñ &ÌEÔRWÔY]ÐR]ÕL^ñ &ó    c                ó¾  € RpV f(   V^,
          W1^,
          ,          ,           ^,          p W3# \        V \        4      '       d™   V P                  4       p V R8X  dR   V^8X  dC   W1^,
          ,          ^,          ^ 8X  d(   V^,
          W1^,
          ,          ,           ^,          p W3# ^ p Rp W3# V R8X  d   ^ p W3# V^,
          W1^,
          ,          ,           ^,          p W3# )a<  
Utility function to get the tuple padding value given the kernel_size and padding.

Args:
    padding (Union[`str`, `int`], *optional*):
        Padding value, can be either `"same"`, `"valid"`. If a different value is provided the default padding from
        PyTorch is used.
    kernel_size (`int`, *optional*, defaults to 7):
        Kernel size of the convolution layers.
    stride (`int`, *optional*, defaults to 1):
        Stride value of the convolution layers.
    dilation (`int`, *optional*, defaults to 1):
        Dilation value of the convolution layers.
FÚsameTÚvalid)Ú
isinstanceÚstrÚlower)ÚpaddingÚkernel_sizeÚstrideÚdilationÚdynamics   &&&& r   Úget_padding_valuer'   )   sæ   € ð €GØ‚Ø˜Q•J (¸A­oÕ">Õ>À1ÕDˆØÐÐä�'œ3×Òà—-‘-“/ˆØ�fÔà˜Œ{ ¸!­OÕ <ÀÕAÀQÔFà" Q�J¨(ÀAµoÕ*FÕFÈ1ÕL�ð ÐÐð �Ø‘ð ÐÐð ˜ÔàˆGð ÐÐð  �
 hÀµ/Õ&BÕBÀqÕHˆGØÐÐr   c                   ó@   a a€ ] tR t^Rt oRtRV 3R lltR tRtVtV ;t	# )ÚWeightStandardizedConv2dzÄConv2d with Weight Standardization. Used for ViT Hybrid model.

Paper: [Micro-Batch Training with Batch-Channel Normalization and Weight
Standardization](https://huggingface.co/papers/1903.10520)
c
                ó¢   <€ \        WSWFR 7      w  rZ\        SV `	  VVVVVVVVR7       V
'       d   \        W4V4      V n        MRV n        W�n        R# ))r$   r%   )r$   r"   r%   ÚgroupsÚbiasN)r'   ÚsuperÚ__init__ÚDynamicPad2dÚpadÚeps)ÚselfÚ
in_channelÚout_channelsr#   r$   r"   r%   r+   r,   r1   Ú
is_dynamicÚ	__class__s   &&&&&&&&&& €r   r.   Ú!WeightStandardizedConv2d.__init__Y   s]   ø€ ô 0°ÈVÔgÑˆÜ‰ÑØØØØØØØØð 	ô 		
÷ Ü# K¸ÓBˆD�HàˆDŒHØŽr   c           	     óÊ  € V P                   e   V P                  V4      p\        P                  P                  V P                  P                  ^V P                  R4      R R RRV P                  R7      P                  V P                  4      p\        P                  P                  WV P                  V P                  V P                  V P                  V P                  4      pV# )NTç        )ÚtrainingÚmomentumr1   éÿÿÿÿ)r0   r   Ú
functionalÚ
batch_normÚweightÚreshaper4   r1   Ú
reshape_asÚconv2dr,   r$   r"   r%   r+   )r2   Úhidden_stater?   s   && r   ÚforwardÚ WeightStandardizedConv2d.forwardv   sµ   € Ø�8‰8ÒØŸ8™8 LÓ1ˆLÜ—‘×)Ñ)Ø�K‰K×Ñ  4×#4Ñ#4°bÓ9¸4ÀÐPTÐ_bÐhl×hpÑhpð *ó 
ç
‰*�T—[‘[Ó
!ð 	ô —}‘}×+Ñ+Ø $§)¡)¨T¯[©[¸$¿,¹,ÈÏÉÐW[×WbÑWbó
ˆð Ðr   )r1   r0   )é   ÚSAMErF   rF   Fg�íµ ÷Æ°>©
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r.   rD   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r6   Ú__classdict__s   @@r   r)   r)   R   s   ù‡ € ñ÷÷:	ò 	r   r)   c                   ó@   a a€ ] tR t^‚t oRtRV 3R lltR tRtVtV ;t	# )ÚBitGroupNormActivationzI
A module that combines group normalization with an activation function.
c                óÀ   <€ \         SV `  VP                  W#VR 7       V'       d   \        VP                  ,          V n        R# \        P                  ! 4       V n        R# ))r1   ÚaffineN)r-   r.   Ú
num_groupsr   Ú
hidden_actÚ
activationr   ÚIdentity)r2   ÚconfigÚnum_channelsr1   rV   Úapply_activationr6   s   &&&&&&€r   r.   ÚBitGroupNormActivation.__init__‡   s?   ø€ Ü‰Ñ˜×*Ñ*¨LÈ&ÐÔQßÜ$ V×%6Ñ%6Õ7ˆDŽOä Ÿkšk›mˆDŽOr   c                ó¼   € \         P                  P                  WP                  V P                  V P
                  V P                  4      pV P                  V4      pV# ©N)r   r=   Ú
group_normrW   r?   r,   r1   rY   )r2   rC   s   &&r   rD   ÚBitGroupNormActivation.forwardŽ   sF   € Ü—}‘}×/Ñ/°¿o¹oÈtÏ{É{Ð\`×\eÑ\eÐgk×goÑgoÓpˆØ—‘ |Ó4ˆØÐr   )rY   )gñhãˆµøä>TTrH   rQ   s   @@r   rT   rT   ‚   s   ù‡ € ñ÷,÷ò r   rT   c                   ó@   a a€ ] tR t^”t oRtRV 3R lltR tRtVtV ;t	# )r/   z€
A module that wraps dynamic padding of any input, given the parameters of the convolutional layer and the input
hidden states.
c                óü   <€ \         SV `  4        \        V\        4      '       d   W3p\        V\        4      '       d   W"3p\        V\        4      '       d   W33pWn        W n        W0n        W@n        R  pWPn        R# )c                 ó°   € \        \        P                  ! W,          4      ^,
          V,          V^,
          V,          ,           ^,           V ,
          ^ 4      # ©rF   )ÚmaxÚmathÚceil)Úxr#   r$   r%   s   &&&&r   Úcompute_paddingÚ.DynamicPad2d.__init__.<locals>.compute_padding«   s@   € ÜœŸ	š	 !¥*Ó-°Õ1°VÕ;¸{ÈQ½ÐRZÕ>ZÕZÐ]^Õ^ÐabÕbÐdeÓfÐfr   N)	r-   r.   r   Úintr#   r$   r%   Úvaluerk   )r2   r#   r$   r%   rn   rk   r6   s   &&&&& €r   r.   ÚDynamicPad2d.__init__š   sp   ø€ Ü‰ÑÔä�k¤3×'Ò'Ø&Ð4ˆKä�fœc×"Ò"ØÐ%ˆFä�h¤×$Ò$Ø Ð+ˆHà&ÔØŒØ ŒØŒ
ò	gð  /Ör   c           	     ó  € VP                  4       RR w  r#V P                  W P                  ^ ,          V P                  ^ ,          V P                  ^ ,          4      pV P                  W0P                  ^,          V P                  ^,          V P                  ^,          4      pV^ 8”  g   V^ 8”  dY   \
        P                  P                  VV^,          WU^,          ,
          V^,          WD^,          ,
          .V P                  R7      pV# )r   N)rn   éþÿÿÿ)	Úsizerk   r#   r$   r%   r   r=   r0   rn   )r2   ÚinputÚinput_heightÚinput_widthÚpadding_heightÚpadding_widths   &&    r   rD   ÚDynamicPad2d.forward°   sï   € à$)§J¡J£L°°Ð$5Ñ!ˆð ×-Ñ-¨l×<LÑ<LÈQÕ<OÐQU×Q\ÑQ\Ð]^ÕQ_Ðae×anÑanÐopÕaqÓrˆØ×,Ñ,¨[×:JÑ:JÈ1Õ:MÈtÏ{É{Ð[\Í~Ð_c×_lÑ_lÐmnÕ_oÓpˆð ˜AÔ °Ô!2Ü—M‘M×%Ñ%Øà! QÕ&Ø!°QÕ$6Õ6Ø" aÕ'Ø"°qÕ%8Õ8ð	ð —j‘jð &ó 	ˆEð ˆr   )rk   r%   r#   r$   rn   ©é    rH   rQ   s   @@r   r/   r/   ”   s   ù‡ € ñ÷
/÷,ò r   r/   c                   óH   a a€ ] tR t^Çt oRV3R lV 3R llltR tRtVtV ;t# )ÚBitMaxPool2dc                ó    <€ V ^8„  d   QhRS[ /# )r   r#   )rm   )r   rR   s   "€r   r   ÚBitMaxPool2d.__annotate__È   s   ø€ ÷ %ñ %áñ%r   c                ó®  <€ \        V\        P                  P                  4      '       d   TMW3p\        V\        P                  P                  4      '       d   TMW"3p\        V\        P                  P                  4      '       d   TMW33p\        SV `  WWSV4       V'       d   \        WW64      V n        R # \        P                  ! 4       V n        R # r`   )
r   ÚcollectionsÚabcÚIterabler-   r.   r/   r0   r   rZ   )	r2   r#   r$   r%   Ú	ceil_moder"   Úpadding_valueÚuse_dynamic_paddingr6   s	   &&&&&&&&€r   r.   ÚBitMaxPool2d.__init__È   s–   ø€ ô &0°¼[¿_¹_×=UÑ=U×%VÒ%V‘kÐ]hÐ\vˆÜ% f¬k¯o©o×.FÑ.F×GÒG‘ÈfÐM]ˆÜ)¨(´K·O±O×4LÑ4L×MÒM‘8ÐT\ÐSgˆÜ‰Ñ˜¨gÀÔKßÜ# K¸ÓQˆDŽHä—{’{“}ˆDŽHr   c                óÎ   € V P                  V4      p\        P                  P                  WP                  V P
                  V P                  V P                  V P                  4      # r`   )	r0   r   r=   Ú
max_pool2dr#   r$   r"   r%   rƒ   )r2   Úhidden_statess   &&r   rD   ÚBitMaxPool2d.forwardÛ   sK   € ØŸ™ Ó/ˆÜ�}‰}×'Ñ'Ø×+Ñ+¨T¯[©[¸$¿,¹,ÈÏÉÐW[×WeÑWeó
ð 	
r   )r0   )NrF   F)rz   rz   rz   T©	rI   rJ   rK   rL   r.   rD   rN   rO   rP   rQ   s   @@r   r|   r|   Ç   s   ù‡ € ÷%õ %÷&
ò 
r   r|   c                   óT   a a€ ] tR t^ât oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚBitEmbeddingszD
BiT Embeddings (stem) composed of a single aggressive convolution.
c                ó    <€ V ^8„  d   QhRS[ /# ©r   r[   r   )r   rR   s   "€r   r   ÚBitEmbeddings.__annotate__ç   s   ø€ ÷ 0ñ 0™yñ 0r   c           	     ó@  <€ \         SV `  4        \        VP                  VP                  ^^RVP
                  R7      V n        \        ^^VP                  R7      V n	        VP
                  e;   VP
                  P                  4       R8X  d   \        P                  ! 4       V n        M\        P                  ! R
RR7      V n        VP                  R8w  d   \!        WP                  R	7      V n        M\        P                  ! 4       V n        VP                  V n        R# )é   ç:Œ0âŽyE>)r#   r$   r1   r"   )r#   r$   r…   NrG   r9   )r"   rn   Úpreactivation©r\   )rF   rF   rF   rF   )r-   r.   r)   r\   Úembedding_sizeÚglobal_paddingÚconvolutionr|   Úembedding_dynamic_paddingÚpoolerÚupperr   rZ   r0   ÚConstantPad2dÚ
layer_typerT   Únorm©r2   r[   r6   s   &&€r   r.   ÚBitEmbeddings.__init__ç   sÙ   ø€ Ü‰ÑÔä3Ø×ÑØ×!Ñ!ØØØØ×)Ñ)ô
ˆÔô #¨q¸ÐPV×PpÑPpÔqˆŒð × Ñ Ò,°×1FÑ1F×1LÑ1LÓ1NÐRXÔ1XÜ—{’{“}ˆD�Hä×'Ò'°ÀCÔHˆDŒHà×Ñ Ô/Ü.¨v×DYÑDYÔZˆD�IäŸš›ˆDŒIà"×/Ñ/ˆÖr   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   Úpixel_valuesr   ©r   )r   rR   s   "€r   r   r�     s   ø€ ÷ ñ ¡Fð ©vñ r   c                óê   € VP                   ^,          pW P                  8w  d   \        R4      hV P                  V4      pV P	                  V4      pV P                  V4      pV P                  V4      pV# )rF   zeMake sure that the channel dimension of the pixel values match with the one set in the configuration.)Úshaper\   Ú
ValueErrorr˜   r0   rž   rš   )r2   r¢   r\   Ú	embeddings   &&  r   rD   ÚBitEmbeddings.forward  sp   € Ø#×)Ñ)¨!Õ,ˆØ×,Ñ,Ô,ÜØwóð ð ×$Ñ$ \Ó2ˆ	à—H‘H˜YÓ'ˆ	à—I‘I˜iÓ(ˆ	à—K‘K 	Ó*ˆ	àÐr   )r˜   rž   r\   r0   rš   rH   rQ   s   @@r   r�   r�   â   s#   ù‡ € ñ÷0ó 0÷6÷ ð 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
# )ÚBitDropPathi  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_probr   N)Úfloat)r   rR   s   "€r   r   ÚBitDropPath.__annotate__  s   ø€ ÷ #ñ #¡%ð #°$ñ #r   c                ó0   <€ \         SV `  4        Wn        R # r`   )r-   r.   r¬   )r2   r¬   r6   s   &&€r   r.   ÚBitDropPath.__init__  s   ø€ Ü‰ÑÔØ"Žr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   r‰   r   )Útorchr   )r   rR   s   "€r   r   r®      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,          # )r9   )ÚdtypeÚdevicerf   )
r¬   r:   r¥   Úndimr²   Úrandr´   rµ   ÚfloorÚdiv)r2   r‰   Ú	keep_probr¥   Úrandom_tensors   &&   r   rD   ÚBitDropPath.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   )r    )r   rR   s   "€r   r   r®   )  s   ø€ ÷ %ñ %™Cñ %r   c                ó    € R V P                    2# )zp=©r¬   )r2   s   &r   Ú
extra_reprÚBitDropPath.extra_repr)  s   € Ø�D—N‘NÐ#Ð$Ð$r   r¿   )r9   )rI   rJ   rK   rL   rM   r.   rD   rÀ   rN   rO   rP   rQ   s   @@r   rª   rª     s-   ù‡ € ñ÷#õ #÷<ð <÷%÷ %ð %r   rª   c                 ó–   € Tp\        V\        W^,          ,           4      V,          V,          4      pVRV ,          8  d	   W1,          pV# )r   gÍÌÌÌÌÌì?)rg   rm   )rn   ÚdivisorÚ	min_valueÚ	new_values   &&  r   Úmake_divrÆ   -  sC   € Ø€IÜ�Iœs 5°Q­;Õ#6Ó7¸7ÕBÀWÕLÓM€IØ�3˜•;ÔØÕˆ	ØÐr   c                   ó@   a a€ ] tR tRt oRtRV 3R lltR tRtVtV ;t	# )ÚBitPreActivationBottleneckLayeri5  z÷Pre-activation (v2) bottleneck block.
Follows the implementation of "Identity Mappings in Deep Residual Networks":
https://github.com/KaimingHe/resnet-1k-layers/blob/master/resnet-pre-act.lua

Except it puts the stride on 3x3 conv when available.
c           
     ó>  <€ \         SV `  4        T;'       g    TpT;'       g    Tp\        W4,          4      pV
'       d   \        VVVVR R7      V n        MRV n        \        W4      V n        \        W+^RVP                  R7      V n	        \        WR7      V n
        \        W»^WXRVP                  R7      V n        \        W4      V n        \        W³^RVP                  R7      V n        V	^ 8”  d   \        V	4      V n        R# \        P                   ! 4       V n        R# )T©r$   ÚpreactNr“   ©r1   r"   r•   )r$   r+   r1   r"   )r-   r.   rÆ   ÚBitDownsampleConvÚ
downsamplerT   Únorm1r)   r—   Úconv1Únorm2Úconv2Únorm3Úconv3rª   r   rZ   Ú	drop_path)r2   r[   Úin_channelsr4   Úbottle_ratior$   r%   Úfirst_dilationr+   Údrop_path_rateÚis_first_layerÚmid_channelsr6   s   &&&&&&&&&&& €r   r.   Ú(BitPreActivationBottleneckLayer.__init__=  sù   ø€ ô 	‰ÑÔà'×3Ð3¨8ˆà#×2Ð2 {ˆÜ Õ ;Ó<ˆçÜ/ØØØØØôˆD�Oð #ˆDŒOä+¨FÓ@ˆŒ
Ü-¨kÈÐPTÐ^d×^sÑ^sÔtˆŒ
ä+¨FÔNˆŒ
Ü-Ø¨°&ÈTÐ[a×[pÑ[pô
ˆŒ
ô ,¨FÓAˆŒ
Ü-¨lÈ!ÐQUÐ_e×_tÑ_tÔuˆŒ
à8FÈÔ8Jœ ^Ó4ˆŽÔPR×P[ÒP[ÓP]ˆŽr   c                ó:  € V P                  V4      pTpV P                  e   V P                  V4      pV P                  V4      pV P                  V P	                  V4      4      pV P                  V P                  V4      4      pV P                  V4      pW,           # r`   )rÏ   rÎ   rÐ   rÒ   rÑ   rÔ   rÓ   rÕ   )r2   r‰   Úhidden_states_preactÚshortcuts   &&  r   rD   Ú'BitPreActivationBottleneckLayer.forwardi  s‡   € Ø#Ÿz™z¨-Ó8Ðð !ˆØ�?‰?Ò&Ø—‘Ð';Ó<ˆHð Ÿ
™
Ð#7Ó8ˆØŸ
™
 4§:¡:¨mÓ#<Ó=ˆØŸ
™
 4§:¡:¨mÓ#<Ó=ˆØŸ™ }Ó5ˆØÕ'Ð'r   )rÐ   rÒ   rÔ   rÎ   rÕ   rÏ   rÑ   rÓ   ©Nç      Ð?rF   rF   NrF   r9   FrH   rQ   s   @@r   rÈ   rÈ   5  s   ù‡ € ñ÷*^÷X(ò (r   rÈ   c                   ó@   a a€ ] tR tRt oRtRV 3R lltR tRtVtV ;t	# )ÚBitBottleneckLayeriy  z\Non Pre-activation bottleneck block, equivalent to V1.5/V1b bottleneck. Used for ViT Hybrid.c                ót  <€ \         SV `  4        T;'       g    TpT;'       g    Tp\        W4,          4      pV
'       d   \        VVVVR R7      V n        MRV n        \        W+^RVP                  R7      V n        \        WR7      V n	        \        VV^VVVRVP                  R7      V n
        \        WR7      V n        \        W³^RVP                  R7      V n        \        WR R7      V n        V	^ 8”  d   \        V	4      M\        P                   ! 4       V n        \$        VP&                  ,          V n        R# )FrÊ   Nr“   rÌ   r•   )r$   r%   r+   r1   r"   ©r\   r]   )r-   r.   rÆ   rÍ   rÎ   r)   r—   rÐ   rT   rÏ   rÒ   rÑ   rÔ   rÓ   rª   r   rZ   rÕ   r   rX   rY   )r2   r[   rÖ   r4   r×   r$   r%   rØ   r+   rÙ   rÚ   Úmid_chsr6   s   &&&&&&&&&&& €r   r.   ÚBitBottleneckLayer.__init__|  s  ø€ ô 	‰ÑÔØ'×3Ð3¨8ˆà#×2Ð2 {ˆÜ˜<Õ6Ó7ˆçÜ/ØØØØØôˆD�Oð #ˆDŒOä-¨kÀAÈ4ÐY_×YnÑYnÔoˆŒ
Ü+¨FÔIˆŒ
Ü-ØØØØØ#ØØØ×)Ñ)ô	
ˆŒ
ô ,¨FÔIˆŒ
Ü-¨gÀQÈDÐZ`×ZoÑZoÔpˆŒ
Ü+¨FÐ`eÔfˆŒ
Ø8FÈÔ8Jœ ^Ô4ÔPR×P[ÒP[ÓP]ˆŒä  ×!2Ñ!2Õ3ˆŽr   c                ód  € TpV P                   e   V P                  V4      pV P                  V4      pV P                  V4      pV P                  V4      pV P	                  V4      pV P                  V4      pV P                  V4      pV P                  V4      pV P                  W,           4      pV# r`   )	rÎ   rÐ   rÏ   rÒ   rÑ   rÔ   rÓ   rÕ   rY   )r2   r‰   rß   s   && r   rD   ÚBitBottleneckLayer.forward­  sš   € à ˆØ�?‰?Ò&Ø—‘ }Ó5ˆHð Ÿ
™
 =Ó1ˆØŸ
™
 =Ó1ˆàŸ
™
 =Ó1ˆØŸ
™
 =Ó1ˆàŸ
™
 =Ó1ˆØŸ
™
 =Ó1ˆàŸ™ }Ó5ˆØŸ™¨Õ(@ÓAˆØÐr   )	rY   rÐ   rÒ   rÔ   rÎ   rÕ   rÏ   rÑ   rÓ   rá   rH   rQ   s   @@r   rä   rä   y  s   ù‡ € Ùf÷/4÷bò r   rä   c                   ó<   a a€ ] tR tRt oRV 3R lltR tRtVtV ;t# )rÍ   iÂ  c           	     óÎ   <€ \         SV `  4        \        W#^VRVP                  R7      V n        V'       d   \
        P                  ! 4       V n        R# \        WRR7      V n        R# )rF   r“   )r$   r1   r"   Fræ   N)	r-   r.   r)   r—   Úconvr   rZ   rT   rž   )r2   r[   rÖ   r4   r$   rË   r6   s   &&&&&&€r   r.   ÚBitDownsampleConv.__init__Ã  sX   ø€ ô 	‰ÑÔÜ,Ø q°¸TÈ6×K`ÑK`ô
ˆŒ	÷
 ô �KŠK‹Mð 	Ž	ô (¨Ð\aÔbð 	Ž	r   c                óB   € V P                  V P                  V4      4      # r`   )rž   rí   )r2   rj   s   &&r   rD   ÚBitDownsampleConv.forwardÕ  s   € Ø�y‰y˜Ÿ™ 1›Ó&Ð&r   )rí   rž   )rF   Tr‹   rQ   s   @@r   rÍ   rÍ   Â  s   ù‡ € ÷
÷$'ò 'r   rÍ   c                   óR   a a€ ] tR tRt oRtRV 3R lltR tV3R lR ltRtVt	V ;t
# )	ÚBitStageiÙ  z/
A ResNet v2 stage composed by stacked layers.
c	                ól  <€ \         SV `  4        VR9   d   ^M^p	VP                  R8X  d   \        p
M\        p
Tp\
        P                  ! 4       V n        \        V4       FP  pV P                  WÄV4      w  rMpV P                  P                  \        V4      V
! VVVVVVV	VVR7	      4       TpTp	KR  	  R# )rF   Ú
bottleneck)r$   r%   r×   rØ   rÙ   rÚ   N)rF   r   )r-   r.   r�   rä   rÈ   r   Ú
SequentialÚlayersÚrangeÚ_get_updated_hyperparametersÚ
add_moduler    )r2   r[   rÖ   r4   r$   r%   Údepthr×   Úlayer_dropoutrØ   Ú	layer_clsÚprev_chsÚ	layer_idxrÙ   rÚ   r6   s   &&&&&&&&&      €r   r.   ÚBitStage.__init__Þ  s¼   ø€ ô 	‰ÑÔà&¨&Ô0™°aˆð ×Ñ Ô,Ü*‰Iä7ˆIàˆÜ—m’m“oˆŒÜ˜užˆIà59×5VÑ5VØ =ó6Ñ2ˆF Nð �K‰K×"Ñ"Ü�I“ÙØØØ Ø!Ø%Ø!-Ø#1Ø#1Ø#1ô
ôð $ˆHØ%ŠNó+ &r   c                óL   € V'       d
   W1,          pMRpV^ 8w  d   ^pV^ 8H  pW$V3# )zd
Get the new hyper-parameters with respect to the previous ones and the index of the current layer.
r9   © )r2   rþ   r$   rû   rÙ   rÚ   s   &&&&  r   rø   Ú%BitStage._get_updated_hyperparameters  s4   € ÷ Ø*Õ5‰Nà ˆNà˜Œ>ØˆFà" a™ˆà ~Ð5Ð5r   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   rs   r   r£   )r   rR   s   "€r   r   ÚBitStage.__annotate__  s   ø€ ÷ ñ ™Vð ©ñ r   c                óV   € Tp\        V P                  4       F  w  r4V! V4      pK  	  V# r`   )Ú	enumeraterö   )r2   rs   rC   Ú_Úlayers   &&   r   rD   ÚBitStage.forward  s,   € ØˆÜ! $§+¡+Ö.‰HˆAÙ  Ó.ŠLñ /àÐr   )rö   )râ   N)rI   rJ   rK   rL   rM   r.   rø   rD   rN   rO   rP   rQ   s   @@r   rò   rò   Ù  s$   ù‡ € ñ÷,&ò\6÷ ÷ ð r   rò   c                   óZ   a a€ ] tR tRt oV3R lV 3R lltR tRV3R lR lltRtVtV ;t	# )	Ú
BitEncoderi#  c                ó    <€ V ^8„  d   QhRS[ /# r�   r   )r   rR   s   "€r   r   ÚBitEncoder.__annotate__$  s   ø€ ÷ $:ñ $:™yñ $:r   c                óž  <€ \         SV `  4        \        P                  ! . 4      V n        VP
                  p^p^p\        P                  ! \        P                  ! ^ VP                  \        VP                  4      4      4      P                  VP                  4       Uu. uF  pVP                  4       NK  	  pp\        \!        VP                  VP"                  V4      4       F`  w  pw  r‰p
V P%                  WsW”V4      w  r¼p\'        VVVVVVV
R7      pTpW<,          pV P                  P)                  \+        V4      V4       Kb  	  R# u upi )é   )r$   r%   rú   rû   N)r-   r.   r   Ú
ModuleListÚstagesr–   r²   r   ÚnpÚlinspacerÙ   ÚsumÚdepthsÚsplitÚtolistr  ÚzipÚhidden_sizesrø   rò   rù   r    )r2   r[   rý   Úcurrent_strider%   rj   Úlayer_dropoutsÚ	stage_idxÚcurrent_depthÚcurrent_hidden_sizerû   r4   r$   Ústager6   s   &&            €r   r.   ÚBitEncoder.__init__$  s5  ø€ Ü‰ÑÔÜ—m’m BÓ'ˆŒà×(Ñ(ˆð ˆØˆô —\’\¤"§+¢+¨a°×1FÑ1FÌÈFÏMÉMÓHZÓ"[Ó\×bÑbÐci×cpÑcpÔqó
áq�ð �H‰HŽJÙqð 	ð 
ô
 OXÜ�—‘˜v×2Ñ2°NÓCöO
ÑJˆIÑJ˜¸Mð .2×-NÑ-NØÐ+>È&ó.Ñ*ˆL (ô ØØØØØ!Ø#Ø+ôˆEð $ˆHØÕ$ˆNà�K‰K×"Ñ"¤3 y£>°5Ö9ó+O
ùò
s   ÂE
c                óŠ   € \        W5P                  ,          4      pV^ 8X  d   ^M^pW%P                  8¼  d   WG,          p^pWgV3# ry   )rÆ   Úwidth_factorÚoutput_stride)r2   r  r  r  r%   r[   r4   r$   s   &&&&&&  r   rø   Ú'BitEncoder._get_updated_hyperparametersJ  sG   € ÜÐ 3×6IÑ6IÕ IÓJˆØ 1”n‘¨!ˆØ×1Ñ1Ô1ØÕˆHØˆFØ XÐ-Ð-r   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# )r   rC   Úoutput_hidden_statesÚreturn_dictr   )r   r   r	   )r   rR   s   "€r   r   r  R  s-   ø€ ÷ 
ñ 
Ù"ð
Ù:>ð
ÙUYð
á	'ñ
r   c                ó  € V'       d   RMR pV P                    F  pV'       d
   WA3,           pV! V4      pK  	  V'       d
   WA3,           pV'       g/   \        ;QJ d    . R W3 4       F  NK  	  5# ! R W3 4       4      # \        VVR7      # )Nc              3   ó0   "  € T F  qf   K  Vx € K  	  R # 5ir`   r  )Ú.0Úvs   & r   Ú	<genexpr>Ú%BitEncoder.forward.<locals>.<genexpr>a  s   é € ÐSÑ$A˜qŸšÓ$Aùs   ‚Œ
)Úlast_hidden_stater‰   r  )r  r   r	   )r2   rC   r&  r'  r‰   Ústage_modules   &&&&  r   rD   ÚBitEncoder.forwardR  s   € ÷ 3™¸ˆà ŸKœKˆLß#Ø -°Õ ?�á'¨Ó5ŠLñ	 (÷  Ø)¨OÕ;ˆMçß”5ÑS \Ñ$AÓS—5ÐS�5ÑS \Ñ$AÓSÓSÐSä-Ø*Ø'ô
ð 	
r   )r  )FT)
rI   rJ   rK   rL   r.   rø   rD   rN   rO   rP   rQ   s   @@r   r  r  #  s$   ù‡ € ÷$:ó $:òL.÷
÷ 
ò 
r   r  c                   óx   a a€ ] tR tRt o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# )	ÚBitPreTrainedModelii  Úbitr¢   r�   c                ó|  <€ \         SV `  V4       \        V\        P                  4      '       d&   \
        P                  ! VP                  R RR7       R# \        V\        P                  4      '       dÇ   \
        P                  ! VP                  \        P                  ! ^4      R7       VP                  e�   \        P                  P
                  P                  VP                  4      w  r#V^ 8”  d   ^\        P                  ! V4      ,          M^ p\
        P                  ! VP                  V) V4       R# R# R# )Úfan_outÚrelu)ÚmodeÚnonlinearity)ÚaN)r-   Ú_init_weightsr   r   ÚConv2dÚinitÚkaiming_normal_r?   ÚLinearÚkaiming_uniform_rh   Úsqrtr,   r²   Ú_calculate_fan_in_and_fan_outÚuniform_)r2   ÚmoduleÚfan_inr  Úboundr6   s   &&   €r   r:  Ú BitPreTrainedModel._init_weightsq  sÇ   ø€ ä‰Ñ˜fÔ%Ü�fœbŸi™i×(Ò(Ü× Ò  §¡°YÈV×Tä˜¤§	¡	×*Ò*Ü×!Ò! &§-¡-´4·9²9¸Q³<Õ@Ø�{‰{Ò&Ü!ŸH™HŸM™M×GÑGÈÏÉÓV‘	�Ø17¸!´˜œDŸIšI fÓ-Ö-À�Ü—’˜fŸk™k¨E¨6°5Ö9ñ 'ñ +r   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # r�   r   )r   rR   s   "€r   r   ÚBitPreTrainedModel.__annotate__i  s   ø‡ ‚ áÑò r   r  )Úimage)rI   rJ   rK   rL   Úbase_model_prefixÚinput_modalitiesÚmain_input_nameÚ_no_split_modulesr²   Úno_gradr:  Ú__annotate_func__rN   rO   rP   rQ   s   @@r   r2  r2  i  s@   ù‡ € ð ÐØ!ÐØ$€OØ(Ð)Ðà
‡]‚]ƒ_ô
:ó ð
:÷ … r   r2  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	# )ÚBitModeli  c                óX  <€ \         SV `  V4       Wn        \        V4      V n        \        V4      V n        VP                  R 8X  d   \        WP                  R,          R7      M\        P                  ! 4       V n        \        P                  ! R4      V n        V P                  4        R# )r”   r•   Nr<   )rF   rF   )r-   r.   r[   r�   Úembedderr  Úencoderr�   rT   r  r   rZ   rž   ÚAdaptiveAvgPool2drš   Ú	post_initrŸ   s   &&€r   r.   ÚBitModel.__init__�  s€   ø€ Ü‰Ñ˜Ô ØŒä% fÓ-ˆŒä! &Ó)ˆŒð × Ñ  OÔ3ô # 6×8KÑ8KÈBÕ8OÕPä—’“ð 	Œ	ô ×*Ò*¨6Ó2ˆŒà�‰Ör   c                óN   <€ V ^8„  d   QhRS[ RS[R,          RS[R,          RS[/# ©r   r¢   r&  Nr'  r   )r   r   r
   )r   rR   s   "€r   r   ÚBitModel.__annotate__“  s;   ø€ ÷ 
ñ 
áð
ñ # T�kð
ñ ˜D•[ð	
ñ 
2ñ
r   c                ór  € Ve   TMV P                   P                  pVe   TMV P                   P                  pV P                  V4      pV P	                  WRVR7      pV^ ,          pV P                  V4      pV P                  V4      pV'       g   Wx3VR,          ,           # \        VVVP                  R7      # )N©r&  r'  :rF   NN)r.  Úpooler_outputr‰   )	r[   r&  r'  rS  rT  rž   rš   r
   r‰   )	r2   r¢   r&  r'  ÚkwargsÚembedding_outputÚencoder_outputsr.  Úpooled_outputs	   &&&&,    r   rD   ÚBitModel.forward’  s¼   € ð %9Ò$DÑ È$Ï+É+×JjÑJjð 	ð &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆàŸ=™=¨Ó6ÐàŸ,™,ØÐU`ð 'ó 
ˆð ,¨AÕ.Ðà ŸI™IÐ&7Ó8ÐàŸ™Ð$5Ó6ˆçØ%Ð5¸ÈÕ8KÕKÐKä7Ø/Ø'Ø)×7Ñ7ô
ð 	
r   )r[   rS  rT  rž   rš   ©NN©
rI   rJ   rK   rL   r.   r   rD   rN   rO   rP   rQ   s   @@r   rQ  rQ    s(   ù‡ € õð" ÷
ñ 
ó ÷
ð 
r   rQ  zƒ
    BiT Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    )Úcustom_introc                   ó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	# )ÚBitForImageClassificationiµ  c                ó’  <€ \         SV `  V4       VP                  V n        \        V4      V n        \
        P                  ! \
        P                  ! 4       VP                  ^ 8”  d3   \
        P                  ! VP                  R,          VP                  4      M\
        P                  ! 4       4      V n        V P                  4        R# )rz   Nr<   )r-   r.   Ú
num_labelsrQ  r3  r   rõ   ÚFlattenr>  r  rZ   Ú
classifierrV  rŸ   s   &&€r   r.   Ú"BitForImageClassification.__init__¼  s‡   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ˜FÓ#ˆŒäŸ-š-Ü�JŠJ‹LØEK×EVÑEVÐYZÔEZŒB�IŠI�f×)Ñ)¨"Õ-¨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   r¢   NÚlabelsr&  r'  r   )r²   ÚFloatTensorÚ
LongTensorr   r   )r   rR   s   "€r   r   Ú&BitForImageClassification.__annotate__É  sb   ø€ ÷ sñ sá×'Ñ'¨$Õ.ðsñ × Ñ  4Õ'ðsñ # T�kð	sñ
 ˜D•[ðsñ 
.ñsr   c                ó€  € Ve   TMV P                   P                  pV P                  WVR7      pV'       d   VP                  M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
# \        W˜VP                  R7      # )a  
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 classification loss is computed (Cross-Entropy).
Nr\  :r   NN)ÚlossÚlogitsr‰   )r[   r'  r3  r]  rk  Úloss_functionr   r‰   )r2   r¢   rn  r&  r'  r^  Úoutputsra  rt  rs  Úoutputs   &&&&&,     r   rD   Ú!BitForImageClassification.forwardÈ  s­   € ð &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà—(‘(˜<Ð`k�(Ólˆç1<˜×-Ò-À'È!Å*ˆà—‘ Ó/ˆàˆàÒØ×%Ñ% f°d·k±kÓBˆDçØ�Y ¨¥Õ,ˆFØ'+Ò'7�D�7˜VÕ#ÐC¸VÐCä3¸Ð\c×\qÑ\qÔrÐrr   )r3  rk  ri  )NNNNrd  rQ   s   @@r   rg  rg  µ  s,   ù‡ € õ
ð ÷sñ só ÷sð sr   rg  zL
    BiT backbone, to be used with frameworks like DETR and MaskFormer.
    c                   ój   a a€ ] tR tRt oRtV 3R lt]]]RV3R lR ll4       4       4       t	Rt
VtV ;t# )ÚBitBackboneiê  Fc                ó¬   <€ \         SV `  V4       \        V4      V n        VP                  .VP
                  ,           V n        V P                  4        R # r`   )r-   r.   rQ  r3  r–   r  Únum_featuresrV  rŸ   s   &&€r   r.   ÚBitBackbone.__init__ò  sD   ø€ Ü‰Ñ˜Ô ä˜FÓ#ˆŒØ#×2Ñ2Ð3°f×6IÑ6IÕIˆÔð 	�‰Ör   c                óN   <€ V ^8„  d   QhRS[ RS[R,          RS[R,          RS[/# rY  )r   r   r   )r   rR   s   "€r   r   ÚBitBackbone.__annotate__þ  s;   ø€ ÷ 3
ñ 3
áð3
ñ # T�kð3
ñ ˜D•[ð	3
ñ 
ñ3
r   c                óÖ  € Ve   TMV P                   P                  pVe   TMV P                   P                  pV P                  VRRR7      pVP                  pRp\        V P                  4       F'  w  r‰W�P                  9   g   K  WvV,          3,          pK)  	  V'       g!   V3p
V'       d   W¥P                  3,          p
V
# \        TV'       d   VP                  RR7      # RRR7      # )a'  
Examples:

```python
>>> from transformers import AutoImageProcessor, AutoBackbone
>>> import torch
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> processor = AutoImageProcessor.from_pretrained("google/bit-50")
>>> model = AutoBackbone.from_pretrained("google/bit-50")

>>> inputs = processor(image, return_tensors="pt")
>>> outputs = model(**inputs)
```NTr\  )Úfeature_mapsr‰   Ú
attentionsr  )	r[   r'  r&  r3  r‰   r  Ústage_namesÚout_featuresr   )r2   r¢   r&  r'  r^  rv  r‰   r�  Úidxr  rw  s   &&&&,      r   rD   ÚBitBackbone.forwardû  sá   € ð< &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà$8Ò$DÑ È$Ï+É+×JjÑJjð 	ð —(‘(˜<¸dÐPT�(ÓUˆà×-Ñ-ˆàˆÜ# D×$4Ñ$4Ö5‰JˆCØ×)Ñ)Ö)Ø¨sÕ!3Ð 5Õ5’ñ 6÷ Ø"�_ˆFß#Ø×0Ñ0Ð2Õ2�ØˆMäØ%ß3G˜'×/Ñ/Øô
ð 	
àMQØô
ð 	
r   )r3  r|  rc  )rI   rJ   rK   rL   Úhas_attentionsr.   r   r   r   rD   rN   rO   rP   rQ   s   @@r   rz  rz  ê  s?   ù‡ € ð €Nõð Ø Ø÷3
ñ 3
ó ó !ó ÷3
ð 3
r   rz  )Nr’   rF   rF   )é   )rg  rQ  r2  rz  )7rM   r€   rh   Únumpyr  r²   r   r   Ú r   r<  Úactivationsr   Úbackbone_utilsr   r   Úmodeling_outputsr   r	   r
   r   Úmodeling_utilsr   Úutilsr   r   Úutils.genericr   Úconfiguration_bitr   Ú
get_loggerrI   Úloggerr'   r;  r)   Ú	GroupNormrT   ÚModuler/   Ú	MaxPool2dr|   r�   rª   rÆ   rÈ   rä   rÍ   rò   r  r2  rQ  rg  rz  Ú__all__r  r   r   Ú<module>r˜     s­  ðñ @ã Û ã Û ß å &Ý !ß H÷ó õ .ß ,Ý -Ý (ð 
×	Ò	˜HÓ	%€÷&ôR-˜rŸy™yô -ô`˜RŸ\™\ô ô$0�2—9‘9ô 0ôf
�2—<‘<ô 
ô6/�B—I‘Iô /ôf%�"—)‘)ô %ô0ôA( b§i¡iô A(ôHF˜Ÿ™ô FôR'˜Ÿ	™	ô 'ô.Gˆr�y‰yô GôTC
�—‘ô C
ðL ô:˜ó :ó ð:ð* ô2
Ð!ó 2
ó ð2
ñj ðôô,sÐ 2ó ,sóð,sñ^ ðôô
B
�-Ð!3ó B
óð
B
òJ Y‚r   