Ë
    ÜÓ^j�(  ã                   ó&  — d dl mZ d dlZd dlmc 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mZ dd
lmZ ddlmZ ddlmZmZmZmZmZ ddl m!Z!  ejD                  e#«      Z$ddgZ%e G d„ de«      «       Z& G d„ dejN                  «      Z( G d„ dejN                  «      Z) G d„ de«      Z* G d„ de«      Z+ G d„ de«      Z, G d„ de«      Z- G d „ d!e«      Z.e G d"„ de«      «       Z/ G d#„ d$e/«      Z0e G d%„ de/«      «       Z1y)&é    )Ú	dataclassN)Únné   )Úinitialization)ÚBaseModelOutputÚModelOutput)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚDinov2AttentionÚDinov2LayerÚDinov2LayerScaleÚ	Dinov2MLPÚDinov2SelfAttentioné   )ÚRadioConfigÚ
RadioModelÚRadioPreTrainedModelc                   óæ   — 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j                  dz  ed<   dZ
eej                     dz  ed<   dZeej                     dz  ed<   y)ÚRadioModelOutputa  Output of [`RadioModel`].

    Args:
        summary (`torch.FloatTensor` of shape `(batch_size, num_summary_idxs * hidden_size)`):
            Flattened summary embedding, gathered from the cls tokens selected by `config.summary_idxs`.
        features (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`):
            Dense spatial patch features.
        last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
            Full token sequence (prefix tokens + patches) from the final encoder layer.
        hidden_states (`tuple[torch.FloatTensor]`, *optional*, returned when `output_hidden_states=True`):
            Tuple of `(batch_size, sequence_length, hidden_size)` tensors, one for the embedding output plus one for
            each encoder layer.
        attentions (`tuple[torch.FloatTensor]`, *optional*, returned when `output_attentions=True`):
            Tuple of `(batch_size, num_heads, sequence_length, sequence_length)` attention weights, one per layer.
    NÚsummaryÚfeaturesÚlast_hidden_stateÚhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   r   r    Útupler!   © ó    úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/radio/modular_radio.pyr   r   +   s}   … ñð  )-€GˆU×Ñ Ñ%Ó,Ø)-€Hˆe×Ñ $Ñ&Ó-Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ô6r+   r   c                   ó`   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚRadioInputConditionerzFNormalizes pixel values; arithmetic is done in float32 then cast back.Úconfigc                 ó*  •— t         ‰| �  «        | j                  dt        j                  |j
                  «      j                  ddd«      d¬«       | j                  dt        j                  |j                  «      j                  ddd«      d¬«       y )NÚ	norm_meanéÿÿÿÿr   T©Ú
persistentÚnorm_std)ÚsuperÚ__init__Úregister_bufferr&   Útensorr1   Úviewr5   ©Úselfr/   Ú	__class__s     €r,   r7   zRadioInputConditioner.__init__G   sx   ø€ Ü‰ÑÔØ×Ñ˜[¬%¯,©,°v×7GÑ7GÓ*H×*MÑ*MÈbÐRSÐUVÓ*WÐdhÐÔiØ×Ñ˜Z¬¯©°f·o±oÓ)F×)KÑ)KÈBÐPQÐSTÓ)UÐbfÐÕgr+   Úpixel_valuesÚreturnc                 óÄ   — |j                  «       | j                  j                  «       z
  | j                  j                  «       z  }|j                  |j                  «      S ©N)Úfloatr1   r5   ÚtoÚdtype)r<   r>   Ú
normalizeds      r,   ÚforwardzRadioInputConditioner.forwardL   sI   € Ø"×(Ñ(Ó*¨T¯^©^×-AÑ-AÓ-CÑCÀtÇ}Á}×GZÑGZÓG\Ñ\ˆ
Ø�}‰}˜\×/Ñ/Ó0Ð0r+   )
r"   r#   r$   r%   r   r7   r&   ÚTensorrF   Ú__classcell__©r=   s   @r,   r.   r.   D   s/   ø„ ÙPðh˜{õ hð
1 E§L¡Lð 1°U·\±\÷ 1r+   r.   c                   óÞ   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  fd„Zde	e
e
f   dej                  dej                  fd	„Zdej                  dej                  fd
„Zˆ xZS )ÚRadioPatchEmbeddingszÕCropped Position Embedding (CPE) patch generator.

    Splits the image into patches, projects them, adds a resolution-interpolated
    absolute position embedding, and prepends learned cls + register tokens.
    r/   c                 óæ  •— t         ‰| �  «        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  |j                  z  | _        |j                  |j                  z  | _	        | j                  | j                  z  }t        j                  |j                  |j                  dz  z  |j                  d¬«      | _        t        j                  t        j                   d||j                  «      «      | _        t        j                  t        j                   |j
                  |j                  z   |j                  «      «      | _        y )Nr   F)Úbiasr   )r6   r7   Ú
patch_sizeÚhidden_sizeÚ	embed_dimÚnum_cls_tokensÚnum_registersÚmax_img_sizeÚmax_rowsÚmax_colsr   ÚLinearÚnum_channelsÚpatch_projectionÚ	Parameterr&   ÚzerosÚposition_embeddingÚcls_register_token)r<   r/   Únum_positionsr=   s      €r,   r7   zRadioPatchEmbeddings.__init__X   s  ø€ Ü‰ÑÔØ ×+Ñ+ˆŒØ×+Ñ+ˆŒØ$×3Ñ3ˆÔØ#×1Ñ1ˆÔà×+Ñ+¨v×/@Ñ/@Ñ@ˆŒØ×+Ñ+¨v×/@Ñ/@Ñ@ˆŒØŸ™¨¯©Ñ5ˆä "§	¡	¨&×*=Ñ*=À×@QÑ@QÐSTÑ@TÑ*TÐV\×VhÑVhÐotÔ uˆÔÜ"$§,¡,¬u¯{©{¸1¸mÈV×M_ÑM_Ó/`Ó"aˆÔÜ"$§,¡,Ü�K‰K˜×-Ñ-°×0DÑ0DÑDÀf×FXÑFXÓYó#
ˆÕr+   r>   r?   c                 óà   — | j                   }|j                  \  }}}}||z  ||z  }}|j                  ||||||«      }	|	j                  dddddd«      j                  |||z  ||z  |z  «      }	|	S )Nr   r   é   r   r   é   )rN   ÚshapeÚreshapeÚpermute)
r<   r>   ÚpsÚbatchÚchannelsÚheightÚwidthÚrowsÚcolsÚpatchess
             r,   Ú_image_to_patchesz&RadioPatchEmbeddings._image_to_patchesi   s‡   € Ø�_‰_ˆØ)5×);Ñ);Ñ&ˆˆx˜ Ø˜r‘\ 5¨B¡;ˆdˆØ×&Ñ& u¨h¸¸bÀ$ÈÓKˆØ—/‘/ ! Q¨¨1¨a°Ó3×;Ñ;¸EÀ4È$Á;ÐPXÐ[]ÑP]Ð`bÑPbÓcˆØˆr+   Ú
input_dimsrD   c                 ó˜  — | j                   j                  d| j                  | j                  d«      j	                  dddd«      }t        |«      }t        j                  |j                  «       ||fdd¬«      j                  |«      }|d   |j                  d	   k  r|d
d |d   …d d …f   }|d   |j                  d   k  r|d
d d …d |d   …f   }|j                  d	d  t        |«      k7  r?t        j                  |j                  «       t        |«      dd¬«      j                  |«      }|j                  d«      j	                  ddd«      S )Nr   r2   r   r   r   ÚbilinearF)ÚsizeÚmodeÚalign_cornerséþÿÿÿ.)r[   rb   rT   rU   rc   ÚmaxÚFÚinterpolaterB   rC   ra   r)   Úflatten)r<   rm   rD   ÚposÚmax_dims        r,   Ú_interpolate_position_embeddingz4RadioPatchEmbeddings._interpolate_position_embeddingq   s*  € Ø×%Ñ%×-Ñ-¨a°·±ÀÇÁÈrÓR×ZÑZÐ[\Ð^_ÐabÐdeÓfˆÜ�j“/ˆÜ�m‰m˜CŸI™I›K¨w¸Ð.@ÀzÐafÔg×jÑjÐkpÓqˆØ�a‰=˜3Ÿ9™9 R™=Ò(Ø�c˜?˜Z¨™]˜?ªAÐ-Ñ.ˆCØ�a‰=˜3Ÿ9™9 R™=Ò(Ø�cš1˜o 
¨1¡˜oÐ-Ñ.ˆCØ�9‰9�R�Sˆ>œU :Ó.Ò.Ü—-‘- §	¡	£´%¸
Ó2CÈ*ÐdiÔj×mÑmÐnsÓtˆCØ�{‰{˜1‹~×%Ñ% a¨¨AÓ.Ð.r+   c                 ó”  — | j                  | j                  |«      «      }|j                  d   | j                  z  |j                  d   | j                  z  f}|| j	                  ||j
                  «      z   }| j                  j                  d«      j                  |j                  d   dd«      }t        j                  ||gd¬«      S )Nrs   r2   r   r   )Údim)rX   rl   ra   rN   rz   rD   r\   Ú	unsqueezeÚexpandr&   Úcat)r<   r>   rk   rm   Úprefixs        r,   rF   zRadioPatchEmbeddings.forward}   s³   € Ø×'Ñ'¨×(>Ñ(>¸|Ó(LÓMˆØ"×(Ñ(¨Ñ,°·±Ñ?À×ASÑASÐTVÑAWÐ[_×[jÑ[jÑAjÐkˆ
Ø˜D×@Ñ@ÀÈWÏ]É]Ó[Ñ[ˆØ×(Ñ(×2Ñ2°1Ó5×<Ñ<¸W¿]¹]È1Ñ=MÈrÐSUÓVˆÜ�y‰y˜& 'Ð*°Ô2Ð2r+   )r"   r#   r$   r%   r   r7   r&   rG   rl   r)   ÚintrD   rz   rF   rH   rI   s   @r,   rK   rK   Q   sz   ø„ ñð
˜{õ 
ð"¨e¯l©lð ¸u¿|¹|ó ð
/¸%ÀÀSÀ¹/ð 
/ÐRW×R]ÑR]ð 
/Ðbg×bnÑbnó 
/ð3 E§L¡Lð 3°U·\±\÷ 3r+   rK   c                   ó   — e Zd Zy)ÚRadioMLPN©r"   r#   r$   r*   r+   r,   rƒ   rƒ   …   ó   „ Ør+   rƒ   c                   ó   — e Zd Zy)ÚRadioLayerScaleNr„   r*   r+   r,   r‡   r‡   ‰   r…   r+   r‡   c                   ó   — e Zd Zy)ÚRadioSelfAttentionNr„   r*   r+   r,   r‰   r‰   �   r…   r+   r‰   c                   ó   — e Zd Zy)ÚRadioAttentionNr„   r*   r+   r,   r‹   r‹   ‘   r…   r+   r‹   c                   ó   — e Zd Zy)Ú
RadioLayerNr„   r*   r+   r,   r�   r�   •   r…   r+   r�   c                   óh   — e Zd ZeZdZdZdZdgZdgZ	dZ
dZeedœZ ej                   «       d„ «       Zy)	r   Úmodelr>   Tr�   zlayer_scale\d+\.lambda1)r    r!   c                 ó:  — | j                   j                  }t        |t        j                  «      rOt        j                  |j                  d|¬«       |j                  � t        j                  |j                  «       y y t        |t        j                  «      r?t        j                  |j                  «       t        j                  |j                  «       y t        |t        «      rEt        j                  |j                  d|¬«       t        j                  |j                  d|¬«       y t        |t        «      r5t        j                   |j"                  | j                   j$                  «       y t        |t&        «      r±t        j(                  |j*                  t-        j.                  | j                   j*                  «      j1                  ddd«      «       t        j(                  |j2                  t-        j.                  | j                   j2                  «      j1                  ddd«      «       y t        |t4        «      rXt        j(                  |j6                  t-        j.                  | j                   j6                  t,        j8                  ¬«      «       y y )Ng        )ÚmeanÚstdr2   r   ©rD   )r/   Úinitializer_rangeÚ
isinstancer   rV   ÚinitÚtrunc_normal_ÚweightrM   Úzeros_Ú	LayerNormÚones_rK   r[   r\   r‡   Ú	constant_Úlambda1Úlayerscale_valuer.   Úcopy_r1   r&   r9   r:   r5   r   Úsummary_idxsÚlong)r<   Úmoduler’   s      r,   Ú_init_weightsz"RadioPreTrainedModel._init_weights¨   sŸ  € ð �k‰k×+Ñ+ˆÜ�fœbŸi™iÔ(Ü×Ñ˜vŸ}™}°3¸CÕ@Ø�{‰{Ð&Ü—‘˜FŸK™KÕ(ð 'ä˜¤§¡Ô-Ü�K‰K˜Ÿ™Ô$Ü�J‰J�v—}‘}Õ%Ü˜Ô 4Ô5Ü×Ñ˜v×8Ñ8¸sÈÕLÜ×Ñ˜v×8Ñ8¸sÈÖLÜ˜¤Ô0Ü�N‰N˜6Ÿ>™>¨4¯;©;×+GÑ+GÕHÜ˜Ô 5Ô6Ü�J‰J�v×'Ñ'¬¯©°d·k±k×6KÑ6KÓ)L×)QÑ)QÐRTÐVWÐYZÓ)[Ô\Ü�J‰J�v—‘¬¯©°T·[±[×5IÑ5IÓ(J×(OÑ(OÐPRÐTUÐWXÓ(YÕZÜ˜¤
Ô+Ü�J‰J�v×*Ñ*¬E¯L©L¸¿¹×9QÑ9QÔY^×YcÑYcÔ,dÕeð ,r+   N)r"   r#   r$   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_keys_to_ignore_on_load_missingÚ_supports_sdpaÚ_supports_flash_attnr�   r‰   Ú_can_record_outputsr&   Úno_gradr£   r*   r+   r,   r   r   ™   s`   „ à€LØÐØ$€OØ&*Ð#Ø%˜ÐØ'AÐ&BÐ#Ø€NØÐà#Ø(ñÐð
 €U‡]�]ƒ_ñfó ñfr+   c                   ót   ‡ — e Zd Zdefˆ fd„Ze ed¬«      dej                  de	e
   defd„«       «       Zˆ xZS )	ÚRadioEncoderr/   c                 óÖ   •— t         ‰| �  |«       t        j                  t	        |j
                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        | j                  «        y c c}w rA   )	r6   r7   r   Ú
ModuleListÚrangeÚnum_hidden_layersr�   ÚlayerÚ	post_init)r<   r/   Ú_r=   s      €r,   r7   zRadioEncoder.__init__Á   sK   ø€ Ü‰Ñ˜Ô Ü—]‘]ÄÀf×F^ÑF^Ó@_Ö#`¸1¤J¨vÕ$6Ò#`ÓaˆŒ
Ø�‰Õùò $as   ·A&F)Útie_last_hidden_statesr    Úkwargsr?   c                 óL   — | j                   D ]
  } ||«      }Œ t        |¬«      S )N)r   )r´   r   )r<   r    r¸   r´   s       r,   rF   zRadioEncoder.forwardÆ   s,   € ð —Z‘Zò 	1ˆEÙ! -Ó0‰Mð	1ä°Ô?Ð?r+   )r"   r#   r$   r   r7   r   r   r&   rG   r
   r   r   rF   rH   rI   s   @r,   r¯   r¯   À   sU   ø„ ð˜{õ ð
  Ù¨EÔ2ð@ U§\¡\ð @¸VÐDVÑ=Wð @Ð\kò @ó 3ó  ô@r+   r¯   c                   ó‚   ‡ — e Zd Zdefˆ fd„Zedefd„«       Zd„ Ze	e
dej                  dee   defd„«       «       Zˆ xZS )	r   r/   c                 ó4  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        |«      | _        | j                  dt        j                  |j                  t        j                  ¬«      d¬«       | j                  «        y )Nr    r“   Tr3   )r6   r7   r/   r.   Úinput_conditionerrK   Ú
embeddingsr¯   Úencoderr8   r&   r9   r    r¡   rµ   r;   s     €r,   r7   zRadioModel.__init__Ð   st   ø€ Ü‰Ñ˜Ô ØˆŒÜ!6°vÓ!>ˆÔÜ.¨vÓ6ˆŒÜ# FÓ+ˆŒØ×Ñ˜^¬U¯\©\¸&×:MÑ:MÔUZ×U_ÑU_Ô-`ÐmqÐÔrØ�‰Õr+   r?   c                 ó.   — | j                   j                  S rA   )r/   rN   )r<   s    r,   rN   zRadioModel.patch_sizeÙ   s   € à�{‰{×%Ñ%Ð%r+   c                 óP   — | j                   }t        j                  «       | _         |S )zCDetach the input conditioner (caller applies normalization itself).)r¼   r   ÚIdentity)r<   Úconditioners     r,   Úmake_preprocessor_externalz%RadioModel.make_preprocessor_externalÝ   s!   € à×,Ñ,ˆÜ!#§¡£ˆÔØÐr+   r>   r¸   c                 ó�  — | j                  |«      }| j                  |«      } | j                  |fi |¤Ž}|j                  }| j                  j
                  }|d d …d | j                  j                  …f   }|d d …| j                  f   j                  d«      }|d d …|d …f   }	t        ||	||j                  |j                  ¬«      S )Nr   )r   r   r   r    r!   )r¼   r½   r¾   r   r/   Únum_summary_tokensrQ   r    rw   r   r    r!   )
r<   r>   r¸   r    Úencoder_outputsr   Únum_skipÚall_summaryr   r   s
             r,   rF   zRadioModel.forwardã   sÉ   € ð ×-Ñ-¨lÓ;ˆØŸ™¨Ó5ˆØ+7¨4¯<©<¸Ñ+PÈÑ+PˆØ+×=Ñ=Ðà—;‘;×1Ñ1ˆØ'ªÐ+G¨T¯[©[×-GÑ-GÐ+GÐ(GÑHˆØša ×!2Ñ!2Ð2Ñ3×;Ñ;¸AÓ>ˆØ$¢Q¨©	 \Ñ2ˆäØØØ/Ø)×7Ñ7Ø&×1Ñ1ô
ð 	
r+   )r"   r#   r$   r   r7   Úpropertyr�   rN   rÃ   r   r   r&   rG   r
   r   r   rF   rH   rI   s   @r,   r   r   Î   sk   ø„ ð˜{õ ð ð&˜Cò &ó ð&òð Øð
 E§L¡Lð 
¸FÐCUÑ<Vð 
Ð[kò 
ó ó ô
r+   )2Údataclassesr   r&   Útorch.nn.functionalr   Ú
functionalru   Ú r   r–   Úmodeling_outputsr   r   Úmodeling_utilsr	   Úprocessing_utilsr
   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Údinov2.modeling_dinov2r   r   r   r   r   Úconfiguration_radior   Ú
get_loggerr"   ÚloggerÚ__all__r   ÚModuler.   rK   rƒ   r‡   r‰   r‹   r�   r   r¯   r   r*   r+   r,   ú<module>rÚ      s   ðõ "ã ß Ð Ý å &ß <Ý -Ý &ß RÓ RÝ 7Ý 5÷õ õ -ð 
ˆ×	Ñ	˜HÓ	%€àÐ/Ð
0€ð ô7�{ó 7ó ð7ô0
1˜BŸI™Iô 
1ô13˜2Ÿ9™9ô 13ôh	ˆyô 	ô	Ð&ô 	ô	Ð,ô 	ô	�_ô 	ô	�ô 	ð ô#f˜?ó #fó ð#fôL@Ð'ô @ð ô'
Ð%ó '
ó ñ'
r+   