§
    ‚Štj�(  ã                   ód  — 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j"        e#¦  «        Z$ddgZ%e G d„ de¦  «        ¦   «         Z& G d„ dej'        ¦  «        Z( G d„ dej'        ¦  «        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/¦  «        ¦   «         Z1dS )&é    )Ú	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<   dS )Ú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!   © ó    úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/radio/modular_radio.pyr   r   +   s¡   € € € € € € ðð ð  )-€GˆUÔ Ñ%Ð,Ð,Ñ,Ø)-€HˆeÔ $Ñ&Ð-Ð-Ñ-Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r+   r   c                   óL   ‡ — 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                 óX  •— t          ¦   «                              ¦   «          |                      dt          j        |j        ¦  «                             ddd¦  «        d¬¦  «         |                      dt          j        |j        ¦  «                             ddd¦  «        d¬¦  «         d S )NÚ	norm_meanéÿÿÿÿr   T©Ú
persistentÚnorm_std)ÚsuperÚ__init__Úregister_bufferr&   Útensorr1   Úviewr5   ©Úselfr/   Ú	__class__s     €r,   r7   zRadioInputConditioner.__init__G   s˜   ø€ Ý‰Œ×ÒÑÔÐØ×Ò˜[­%¬,°vÔ7GÑ*HÔ*H×*MÒ*MÈbÐRSÐUVÑ*WÔ*WÐdhÐÑiÔiÐiØ×Ò˜Z­¬°f´oÑ)FÔ)F×)KÒ)KÈBÐPQÐSTÑ)UÔ)UÐbfÐÑgÔgÐgÐgÐgr+   Úpixel_valuesÚreturnc                 óÆ   — |                      ¦   «         | j                              ¦   «         z
  | j                              ¦   «         z  }|                     |j        ¦  «        S ©N)Úfloatr1   r5   ÚtoÚdtype)r<   r>   Ú
normalizeds      r,   ÚforwardzRadioInputConditioner.forwardL   sN   € Ø"×(Ò(Ñ*Ô*¨T¬^×-AÒ-AÑ-CÔ-CÑCÀtÄ}×GZÒGZÑG\ÔG\Ñ\ˆ
Ø�}Š}˜\Ô/Ñ0Ô0Ð0r+   )
r"   r#   r$   r%   r   r7   r&   ÚTensorrF   Ú__classcell__©r=   s   @r,   r.   r.   D   sw   ø€ € € € € ØPÐPðh˜{ð hð hð hð hð hð hð
1 E¤Lð 1°U´\ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 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                 óX  •— 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        ¦  «        ¦  «        | _        d S )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ˆÔØ#Ô1ˆÔàÔ+¨vÔ/@Ñ@ˆŒØÔ+¨vÔ/@Ñ@ˆŒØœ¨¬Ñ5ˆå "¤	¨&Ô*=ÀÔ@QÐSTÑ@TÑ*TÐV\ÔVhÐotÐ uÑ uÔ uˆÔÝ"$¤,­u¬{¸1¸mÈVÔM_Ñ/`Ô/`Ñ"aÔ"aˆÔÝ"$¤,ÝŒK˜Ô-°Ô0DÑDÀfÔFXÑYÔYñ#
ô #
ˆÔÐÐr+   r>   r?   c                 óä   — | j         }|j        \  }}}}||z  ||z  }}|                     ||||||¦  «        }	|	                     dddddd¦  «                             |||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ÔKˆØ—/’/ ! Q¨¨1¨a°Ñ3Ô3×;Ò;¸EÀ4È$Á;ÐPXÐ[]ÑP]Ð`bÑPbÑcÔcˆØˆr+   Ú
input_dimsrD   c                 óð  — | j                              d| j        | j        d¦  «                             dddd¦  «        }t          |¦  «        }t          j        |                     ¦   «         ||fdd¬¦  «         	                    |¦  «        }|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          |¦  «        k    rJt          j        |                     ¦   «         t          |¦  «        dd¬¦  «         	                    |¦  «        }|                     d¦  «                             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   sU  € ØÔ%×-Ò-¨a°´ÀÄÈrÑRÔR×ZÒZÐ[\Ð^_ÐabÐdeÑfÔfˆÝ�j‘/”/ˆÝŒm˜CŸIšI™KœK¨w¸Ð.@ÀzÐafÐgÑgÔg×jÒjÐkpÑqÔqˆØ�aŒ=˜3œ9 Rœ=Ò(Ð(Ø�c˜?˜Z¨œ]˜?¨A¨A¨AÐ-Ô.ˆCØ�aŒ=˜3œ9 Rœ=Ò(Ð(Ø�c˜1˜1˜1˜o 
¨1¤˜oÐ-Ô.ˆCØŒ9�R�S�SŒ>�U :Ñ.Ô.Ò.Ð.Ý”- §	¢	¡¤µ%¸
Ñ2CÔ2CÈ*ÐdiÐjÑjÔj×mÒmÐnsÑtÔtˆCØ�{Š{˜1‰~Œ~×%Ò% a¨¨AÑ.Ô.Ð.r+   c                 ó†  — |                       |                      |¦  «        ¦  «        }|j        d         | j        z  |j        d         | j        z  f}||                      ||j        ¦  «        z   }| j                             d¦  «                             |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Ô(LÑMÔMˆØ"Ô(¨Ô,°´Ñ?ÀÔASÐTVÔAWÐ[_Ô[jÑAjÐkˆ
Ø˜D×@Ò@ÀÈWÌ]Ñ[Ô[Ñ[ˆØÔ(×2Ò2°1Ñ5Ô5×<Ò<¸W¼]È1Ô=MÈrÐSUÑVÔVˆÝŒy˜& 'Ð*°Ð2Ñ2Ô2Ð2r+   )r"   r#   r$   r%   r   r7   r&   rG   rl   r)   ÚintrD   rz   rF   rH   rI   s   @r,   rK   rK   Q   sÓ   ø€ € € € € ðð ð
˜{ð 
ð 
ð 
ð 
ð 
ð 
ð"¨e¬lð ¸u¼|ð ð ð ð ð
/¸%ÀÀSÀ¼/ð 
/ÐRWÔR]ð 
/ÐbgÔbnð 
/ð 
/ð 
/ð 
/ð3 E¤Lð 3°U´\ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3r+   rK   c                   ó   — e Zd ZdS )ÚRadioMLPN©r"   r#   r$   r*   r+   r,   rƒ   rƒ   …   ó   € € € € € Ø€Dr+   rƒ   c                   ó   — e Zd ZdS )ÚRadioLayerScaleNr„   r*   r+   r,   r‡   r‡   ‰   r…   r+   r‡   c                   ó   — e Zd ZdS )ÚRadioSelfAttentionNr„   r*   r+   r,   r‰   r‰   �   r…   r+   r‰   c                   ó   — e Zd ZdS )ÚRadioAttentionNr„   r*   r+   r,   r‹   r‹   ‘   r…   r+   r‹   c                   ó   — e Zd ZdS )Ú
RadioLayerNr„   r*   r+   r,   r�   r�   •   r…   r+   r�   c                   ól   — 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dS )	r   Úmodelr>   Tr�   zlayer_scale\d+\.lambda1)r    r!   c                 óŽ  — | j         j        }t          |t          j        ¦  «        r@t          j        |j        d|¬¦  «         |j        �t          j	        |j        ¦  «         d S d S t          |t          j
        ¦  «        r4t          j	        |j        ¦  «         t          j        |j        ¦  «         d S t          |t          ¦  «        r:t          j        |j        d|¬¦  «         t          j        |j        d|¬¦  «         d S t          |t          ¦  «        r&t          j        |j        | j         j        ¦  «         d S t          |t&          ¦  «        r˜t          j        |j        t-          j        | j         j        ¦  «                             ddd¦  «        ¦  «         t          j        |j        t-          j        | j         j        ¦  «                             ddd¦  «        ¦  «         d S t          |t4          ¦  «        rDt          j        |j        t-          j        | j         j        t,          j        ¬¦  «        ¦  «         d S d S )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Ô+ˆÝ�f�bœiÑ(Ô(ð 	fÝÔ˜vœ}°3¸CÐ@Ñ@Ô@Ð@ØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ð(Ð(ð 'Ð&å˜¥¤Ñ-Ô-ð 	fÝŒK˜œÑ$Ô$Ð$ÝŒJ�v”}Ñ%Ô%Ð%Ð%Ð%Ý˜Õ 4Ñ5Ô5ð 		fÝÔ˜vÔ8¸sÈÐLÑLÔLÐLÝÔ˜vÔ8¸sÈÐLÑLÔLÐLÐLÐLÝ˜¥Ñ0Ô0ð 	fÝŒN˜6œ>¨4¬;Ô+GÑHÔHÐHÐHÐHÝ˜Õ 5Ñ6Ô6ð 	fÝŒJ�vÔ'­¬°d´kÔ6KÑ)LÔ)L×)QÒ)QÐRTÐVWÐYZÑ)[Ô)[Ñ\Ô\Ð\ÝŒJ�v”­¬°T´[Ô5IÑ(JÔ(J×(OÒ(OÐPRÐTUÐWXÑ(YÔ(YÑZÔZÐZÐZÐZÝ˜¥
Ñ+Ô+ð 	fÝŒJ�vÔ*­E¬L¸¼Ô9QÕY^ÔYcÐ,dÑ,dÔ,dÑeÔeÐeÐeÐeð	fð 	f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ñ „_ðfð fð fr+   c                   ó‚   ‡ — 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        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        |                      ¦   «          d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r*   )r�   )Ú.0Ú_r/   s     €r,   ú
<listcomp>z)RadioEncoder.__init__.<locals>.<listcomp>Ã   s!   ø€ Ð#`Ð#`Ð#`¸1¥J¨vÑ$6Ô$6Ð#`Ð#`Ð#`r+   )r6   r7   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayerÚ	post_initr;   s    `€r,   r7   zRadioEncoder.__init__Á   sc   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”]Ð#`Ð#`Ð#`Ð#`ÅÀfÔF^Ñ@_Ô@_Ð#`Ñ#`Ô#`ÑaÔaˆŒ
Ø�ŠÑÔÐÐÐr+   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Æ   s7   € ð ”Zð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMÝ°Ð?Ñ?Ô?Ð?r+   )r"   r#   r$   r   r7   r   r   r&   rG   r
   r   r   rF   rH   rI   s   @r,   r¯   r¯   À   s¦   ø€ € € € € ð˜{ð ð ð ð ð ð ð
  Ø€_¨EÐ2Ñ2Ô2ð@ U¤\ð @¸VÐDVÔ=Wð @Ð\kð @ð @ð @ñ 3Ô2ñ  Ôð@ð @ð @ð @ð @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                 ón  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        |  	                    dt          j        |j        t          j        ¬¦  «        d¬¦  «         |                      ¦   «          d S )Nr    r“   Tr3   )r6   r7   r/   r.   Úinput_conditionerrK   Ú
embeddingsr¯   Úencoderr8   r&   r9   r    r¡   r¹   r;   s     €r,   r7   zRadioModel.__init__Ð   s˜   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒÝ!6°vÑ!>Ô!>ˆÔÝ.¨vÑ6Ô6ˆŒÝ# FÑ+Ô+ˆŒØ×Ò˜^­U¬\¸&Ô:MÕUZÔU_Ð-`Ñ-`Ô-`ÐmqÐÑrÔrÐrØ�ŠÑÔÐÐÐr+   r?   c                 ó   — | j         j        S rA   )r/   rN   )r<   s    r,   rN   zRadioModel.patch_sizeÙ   s   € àŒ{Ô%Ð%r+   c                 óD   — | 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                 óh  — |                       |¦  «        }|                      |¦  «        } | j        |fi |¤Ž}|j        }| j        j        }|d d …d | j        j        …f         }|d d …| j        f                              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Ô5ˆØ+7¨4¬<¸Ð+PÐ+PÈÐ+PÐ+PˆØ+Ô=Ðà”;Ô1ˆØ'¨¨¨Ð+G¨T¬[Ô-GÐ+GÐ(GÔHˆØ˜a˜a˜a Ô!2Ð2Ô3×;Ò;¸AÑ>Ô>ˆØ$ Q Q Q¨¨	¨	 \Ô2ˆåØØØ/Ø)Ô7Ø&Ô1ð
ñ 
ô 
ð 	
r+   )r"   r#   r$   r   r7   Úpropertyr�   rN   rÆ   r   r   r&   rG   r
   r   r   rF   rH   rI   s   @r,   r   r   Î   sÃ   ø€ € € € € ð˜{ð ð ð ð ð ð ð ð&˜Cð &ð &ð &ñ „Xð&ðð ð ð Øð
 E¤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Ý      st  ðð "Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð -Ð ,Ð ,Ð ,Ð ,Ð ,ð 
ˆÔ	˜HÑ	%Ô	%€àÐ/Ð
0€ð ð7ð 7ð 7ð 7ð 7�{ñ 7ô 7ñ „ð7ð0
1ð 
1ð 
1ð 
1ð 
1˜BœIñ 
1ô 
1ð 
1ð13ð 13ð 13ð 13ð 13˜2œ9ñ 13ô 13ð 13ðh	ð 	ð 	ð 	ð 	ˆyñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð&ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð,ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�_ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð ð#fð #fð #fð #fð #f˜?ñ #fô #fñ „ð#fðL@ð @ð @ð @ð @Ð'ñ @ô @ð @ð ð'
ð '
ð '
ð '
ð '
Ð%ñ '
ô '
ñ „ð'
ð '
ð '
r+   