§
    ‚ŠtjÃ½  ã                   óæ  — d Z ddlZddlmZ ddlmZ ddlZddlmZ ddlm	Z	 ddl
mZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZmZ ddlmZ ddlmZmZmZm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(  e j)        e*¦  «        Z+ ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z, ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z- G d„ dej.        ¦  «        Z/ G d„ dej.        ¦  «        Z0 G d„ d ej.        ¦  «        Z1	 	 dXd"ej.        d#ej2        d$ej2        d%ej2        d&ej2        dz  d'e3dz  d(e3d)ee         fd*„Z4 G d+„ d,ej.        ¦  «        Z5 G d-„ d.ej.        ¦  «        Z6 G d/„ d0ej.        ¦  «        Z7 G d1„ d2ej.        ¦  «        Z8 G d3„ d4ej.        ¦  «        Z9 G d5„ d6e¦  «        Z: G d7„ d8ej.        ¦  «        Z;d9„ Z< G d:„ d;ej.        ¦  «        Z= G d<„ d=ej.        ¦  «        Z> G d>„ d?ej.        ¦  «        Z? G d@„ dAej.        ¦  «        Z@e G dB„ dCe¦  «        ¦   «         ZA G dD„ dEej.        ¦  «        ZBe G dF„ dGeA¦  «        ¦   «         ZC G dH„ dIej.        ¦  «        ZD G dJ„ dKej.        ¦  «        ZE G dL„ dMej.        ¦  «        ZF edN¬¦  «         G dO„ dPeA¦  «        ¦   «         ZG G dQ„ dRej.        ¦  «        ZH G dS„ dTej.        ¦  «        ZIe G dU„ dVeA¦  «        ¦   «         ZJg dW¢ZKdS )YzèPyTorch DPT (Dense Prediction Transformers) model.

This implementation is heavily inspired by OpenMMLab's implementation, found here:
https://github.com/open-mmlab/mmsegmentation/blob/master/mmseg/models/decode_heads/dpt_head.py.

é    N)ÚCallable)Ú	dataclass)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)Úload_backbone)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚDepthEstimatorOutputÚSemanticSegmenterOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚloggingÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )Ú	DPTConfigz£
    Base class for model's outputs that also contains intermediate activations that can be used at later stages. Useful
    in the context of Vision models.:
    )Úcustom_introc                   ó`   — e Zd ZU dZdZej        dz  ed<   dZe	ej        df         dz  ed<   dS )Ú*BaseModelOutputWithIntermediateActivationsak  
    last_hidden_states (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
        Sequence of hidden-states at the output of the last layer of the model.
    intermediate_activations (`tuple(torch.FloatTensor)`, *optional*):
        Intermediate activations that can be used to compute hidden states of the model at various layers.
    NÚlast_hidden_states.Úintermediate_activations)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r    Útuple© ó    úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/dpt/modeling_dpt.pyr   r   -   sZ   € € € € € € ðð ð 48Ð˜Ô)¨DÑ0Ð7Ð7Ñ7ØEIÐ˜e EÔ$5°sÐ$:Ô;¸dÑBÐIÐIÑIÐIÐIr*   r   z¶
    Base class for model's outputs that also contains a pooling of the last hidden states as well as intermediate
    activations that can be used by the model at later stages.
    c                   óÚ   — 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<   dZe
ej        df         dz  ed<   dS )	Ú4BaseModelOutputWithPoolingAndIntermediateActivationsaÐ  
    pooler_output (`torch.FloatTensor` of shape `(batch_size, hidden_size)`):
        Last layer hidden-state of the first token of the sequence (classification token) after further processing
        through the layers used for the auxiliary pretraining task. E.g. for BERT-family of models, this returns
        the classification token after processing through a linear layer and a tanh activation function. The linear
        layer weights are trained from the next sentence prediction (classification) objective during pretraining.
    intermediate_activations (`tuple(torch.FloatTensor)`, *optional*):
        Intermediate activations that can be used to compute hidden states of the model at various layers.
    NÚlast_hidden_stateÚpooler_output.Úhidden_statesÚ
attentionsr    )r!   r"   r#   r$   r.   r%   r&   r'   r/   r0   r(   r1   r    r)   r*   r+   r-   r-   @   s¶   € € € € € € ðð ð 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø.2€M�5Ô$ tÑ+Ð2Ð2Ñ2Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;ØEIÐ˜e EÔ$5°sÐ$:Ô;¸dÑBÐIÐIÑIÐIÐIr*   r-   c                   ón   ‡ — e Zd ZdZddedeeef         dz  fˆ fd„Zdd„Z	 dd	e	j
        d
edefd„Zˆ xZS )ÚDPTViTHybridEmbeddingszì
    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.
    NÚconfigÚfeature_sizec                 ó&  •— 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        j        d         }t          | j        j        ¦  «        dk    r)t          dt          | j        j        ¦  «        › �¦  «        ‚ddg| _        |€|j        }	|	dd …         }|	d         }n7t          |t          j        j	        ¦  «        r|n||f}| j        j        d         }|| _        |d         | _        || _        t#          j        ||d¬¦  «        | _        t#          j        t+          j        dd|j        ¦  «        ¦  «        | _        t#          j        t+          j        d|dz   |j        ¦  «        ¦  «        | _        d S )Nr   r   éÿÿÿÿr   z1Expected backbone to have 3 output features, got éþÿÿÿ©Úkernel_size)ÚsuperÚ__init__Ú
image_sizeÚ
patch_sizeÚnum_channelsÚhidden_sizeÚ
isinstanceÚcollectionsÚabcÚIterabler
   ÚbackboneÚchannelsÚlenÚ
ValueErrorÚresidual_feature_map_indexÚbackbone_featmap_shaper   ÚConv2dÚ
projectionÚ	Parameterr%   ÚzerosÚ	cls_tokenÚposition_embeddings)Úselfr4   r5   r=   r>   r?   r@   Únum_patchesÚfeature_dimÚfeat_map_shapeÚ	__class__s             €r+   r<   zDPTViTHybridEmbeddings.__init__`   sñ  ø€ Ý‰Œ×ÒÑÔÐØ!'Ô!2°FÔ4E�Jˆ
Ø$*Ô$7¸Ô9K�kˆå#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ø! !”}¨
°1¬Ñ5¸*ÀQ¼-È:ÐVWÌ=Ñ:XÑYˆå% fÑ-Ô-ˆŒØ”mÔ,¨RÔ0ˆÝˆtŒ}Ô%Ñ&Ô&¨!Ò+Ð+ÝÐnÕQTÐUYÔUbÔUkÑQlÔQlÐnÐnÑoÔoÐoØ+,¨a¨&ˆÔ'àÐØ#Ô:ˆNØ)¨"¨#¨#Ô.ˆLØ(¨Ô+ˆKˆKõ !+¨<½¼Ô9QÑ RÔ RÐt��ÐYeÐgsÐXtð ð œ-Ô0°Ô4ˆKà$ˆŒØ$ Qœ-ˆŒØ(ˆÔåœ) K°È!ÐLÑLÔLˆŒåœ¥e¤k°!°Q¸Ô8JÑ&KÔ&KÑLÔLˆŒÝ#%¤<µ´¸A¸{ÈQ¹ÐPVÔPbÑ0cÔ0cÑ#dÔ#dˆÔ Ð Ð r*   r   c                 ó¨  — |d d …d |…f         }|d|d …f         }t          |j        d         dz  ¦  «        }|                     d||d¦  «                             dddd¦  «        }t          j                             |||fd¬¦  «        }|                     dddd¦  «                             d||z  d¦  «        }t          j        ||gd¬	¦  «        }|S ©
Nr   ç      à?r   r7   r   é   Úbilinear)ÚsizeÚmode©Údim)	r   ÚshapeÚreshapeÚpermuter   Ú
functionalÚinterpolater%   Úcat©rQ   ÚposembÚgrid_size_heightÚgrid_size_widthÚstart_indexÚ
posemb_tokÚposemb_gridÚold_grid_sizes           r+   Ú_resize_pos_embedz(DPTViTHybridEmbeddings._resize_pos_embed‚   sê   € Ø˜A˜A˜A˜| ˜|˜OÔ,ˆ
Ø˜Q   ˜_Ô-ˆå! +Ô"3°AÔ"6¸#Ñ"=Ñ>Ô>ˆà!×)Ò)¨!¨]¸MÈ2ÑNÔN×VÒVÐWXÐZ[Ð]^Ð`aÑbÔbˆÝ”m×/Ò/°ÐCSÐUdÐBeÐlvÐ/ÑwÔwˆØ!×)Ò)¨!¨Q°°1Ñ5Ô5×=Ò=¸aÐAQÐTcÑAcÐegÑhÔhˆå”˜J¨Ð4¸!Ð<Ñ<Ô<ˆàˆr*   FÚpixel_valuesÚinterpolate_pos_encodingÚreturnc                 óÊ  ‡— |j         \  }}}}|| j        k    rt          d¦  «        ‚|sT|| j        d         k    s|| j        d         k    r2t          d|› d|› d| j        d         › d| j        d         › d�	¦  «        ‚|                      | j        || j        z  || j        z  ¦  «        }|                      |¦  «        Š‰j        d         }ˆfd	„| j	        D ¦   «         }	|  
                    |¦  «                             d
¦  «                             dd
¦  «        }
| j                             |dd¦  «        }t          j        ||
fd¬¦  «        }
|
|z   }
t#          |
|	¬¦  «        S )NúeMake 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).r7   c                 ó*   •— g | ]}‰j         |         ‘ŒS r)   )Úfeature_maps)Ú.0ÚindexÚbackbone_outputs     €r+   ú
<listcomp>z2DPTViTHybridEmbeddings.forward.<locals>.<listcomp>¨   s!   ø€ ÐqÐqÐqÈ Ô <¸UÔ CÐqÐqÐqr*   rY   r]   )r   r    )r_   r?   rH   r=   rm   rP   r>   rE   ru   rI   rL   ÚflattenÚ	transposerO   Úexpandr%   rd   r   )rQ   rn   ro   Ú
batch_sizer?   ÚheightÚwidthrP   ÚfeaturesÚoutput_hidden_statesÚ
embeddingsÚ
cls_tokensrx   s               @r+   ÚforwardzDPTViTHybridEmbeddings.forward�   sÊ  ø€ ð 3?Ô2DÑ/ˆ
�L &¨%Ø˜4Ô,Ò,Ð,ÝØwñô ð ð (ð 	Ø˜œ¨Ô+Ò+Ð+¨u¸¼ÈÔ8JÒ/JÐ/JÝ ðE¨ð Eð E°%ð Eð EØœ¨Ô+ðEð EØ.2¬o¸aÔ.@ðEð Eð Eñô ð ð
 #×4Ò4ØÔ$ f°´Ñ&?ÀÈ$Ì/ÑAYñ
ô 
Ðð Ÿ-š-¨Ñ5Ô5ˆà"Ô/°Ô3ˆð  rÐqÐqÐqÐQUÔQpÐqÑqÔqÐà—_’_ XÑ.Ô.×6Ò6°qÑ9Ô9×CÒCÀAÀqÑIÔIˆ
à”^×*Ò*¨:°r¸2Ñ>Ô>ˆ
Ý”Y 
¨JÐ7¸QÐ?Ñ?Ô?ˆ
ð  Ð"5Ñ5ˆ
õ :Ø)Ø%9ð
ñ 
ô 
ð 	
r*   ©N©r   ©F)r!   r"   r#   r$   r   r(   Úintr<   rm   r%   ÚTensorÚboolr   r„   Ú__classcell__©rU   s   @r+   r3   r3   Y   s¿   ø€ € € € € ðð ð eð  e˜yð  e¸¸cÀ3¸h¼È$Ñ8Nð  eð  eð  eð  eð  eð  eðDð ð ð ð LQð&
ð &
Ø!œLð&
ØDHð&
à	3ð&
ð &
ð &
ð &
ð &
ð &
ð &
ð &
r*   r3   c                   óD   ‡ — e Zd ZdZˆ fd„Zdd„Zdej        defd„Z	ˆ xZ
S )	ÚDPTViTEmbeddingszB
    Construct the CLS token, position and patch embeddings.

    c                 ó   •— t          ¦   «                              ¦   «          t          j        t	          j        dd|j        ¦  «        ¦  «        | _        t          |¦  «        | _	        | j	        j
        }t          j        t	          j        d|dz   |j        ¦  «        ¦  «        | _        t          j        |j        ¦  «        | _        || _        d S )Nr   )r;   r<   r   rM   r%   rN   r@   rO   ÚDPTViTPatchEmbeddingsÚpatch_embeddingsrR   rP   ÚDropoutÚhidden_dropout_probÚdropoutr4   )rQ   r4   rR   rU   s      €r+   r<   zDPTViTEmbeddings.__init__¿   s�   ø€ Ý‰Œ×ÒÑÔÐåœ¥e¤k°!°Q¸Ô8JÑ&KÔ&KÑLÔLˆŒÝ 5°fÑ =Ô =ˆÔØÔ+Ô7ˆÝ#%¤<µ´¸A¸{ÈQ¹ÐPVÔPbÑ0cÔ0cÑ#dÔ#dˆÔ Ý”z &Ô"<Ñ=Ô=ˆŒØˆŒˆˆr*   r   c                 ó¸  — |d d …d |…f         }|d|d …f         }t          |                     d¦  «        dz  ¦  «        }|                     d||d¦  «                             dddd¦  «        }t          j                             |||fd¬¦  «        }|                     dddd¦  «                             d||z  d¦  «        }t          j        ||gd¬	¦  «        }|S rW   )	r   r[   r`   ra   r   rb   rc   r%   rd   re   s           r+   rm   z"DPTViTEmbeddings._resize_pos_embedÉ   sð   € Ø˜A˜A˜A˜| ˜|˜OÔ,ˆ
Ø˜Q   ˜_Ô-ˆå! +×"2Ò"2°1Ñ"5Ô"5¸Ñ"<Ñ=Ô=ˆà!×)Ò)¨!¨]¸MÈ2ÑNÔN×VÒVÐWXÐZ[Ð]^Ð`aÑbÔbˆÝ”m×/Ò/°ÐCSÐUdÐBeÐlvÐ/ÑwÔwˆØ!×)Ò)¨!¨Q°°1Ñ5Ô5×=Ò=¸aÐAQÐTcÑAcÐegÑhÔhˆå”˜J¨Ð4¸!Ð<Ñ<Ô<ˆàˆr*   rn   rp   c                 óŒ  — |j         \  }}}}| j        j        }|                      | j        ||z  ||z  ¦  «        }|                      |¦  «        }|                     ¦   «         \  }}	}
| j                             |dd¦  «        }t          j
        ||fd¬¦  «        }||z   }|                      |¦  «        }t          |¬¦  «        S )Nr7   r   r]   )r   )r_   r4   r>   rm   rP   r‘   r[   rO   r|   r%   rd   r”   r   )rQ   rn   r}   r?   r~   r   r>   rP   r‚   Úseq_lenÚ_rƒ   s               r+   r„   zDPTViTEmbeddings.forward×   s×   € Ø2>Ô2DÑ/ˆ
�L &¨%ð ”[Ô+ˆ
Ø"×4Ò4ØÔ$ f°
Ñ&:¸EÀZÑ<Oñ
ô 
Ðð ×*Ò*¨<Ñ8Ô8ˆ
à!+§¢Ñ!2Ô!2Ñˆ
�G˜Qð ”^×*Ò*¨:°r¸2Ñ>Ô>ˆ
Ý”Y 
¨JÐ7¸QÐ?Ñ?Ô?ˆ
ð  Ð"5Ñ5ˆ
à—\’\ *Ñ-Ô-ˆ
å9ÈZÐXÑXÔXÐXr*   r†   )r!   r"   r#   r$   r<   rm   r%   r‰   r   r„   r‹   rŒ   s   @r+   rŽ   rŽ   ¹   s…   ø€ € € € € ðð ð
ð ð ð ð ðð ð ð ðY E¤Lð YÐ5_ð Yð Yð Yð Yð Yð Yð Yð Yr*   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 )r�   z$
    Image to Patch Embedding.

    r4   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        ||||¬¦  «        | _        d S )Nr   r   )r:   Ústride)r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rR   r   rK   rL   )rQ   r4   r=   r>   r?   r@   rR   rU   s          €r+   r<   zDPTViTPatchEmbeddings.__init__ö   sá   ø€ Ý‰Œ×ÒÑÔÐØ!'Ô!2°FÔ4E�Jˆ
Ø$*Ô$7¸Ô9K�kˆå#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ø! !”}¨
°1¬Ñ5¸*ÀQ¼-È:ÐVWÌ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔåœ) L°+È:Ð^hÐiÑiÔiˆŒˆˆr*   rn   rp   c                 óÊ   — |j         \  }}}}|| j        k    rt          d¦  «        ‚|                      |¦  «                             d¦  «                             dd¦  «        }|S )Nrr   rY   r   )r_   r?   rH   rL   rz   r{   )rQ   rn   r}   r?   r~   r   r‚   s          r+   r„   zDPTViTPatchEmbeddings.forward  sm   € Ø2>Ô2DÑ/ˆ
�L &¨%Ø˜4Ô,Ò,Ð,ÝØwñô ð ð —_’_ \Ñ2Ô2×:Ò:¸1Ñ=Ô=×GÒGÈÈ1ÑMÔMˆ
ØÐr*   ©
r!   r"   r#   r$   r   r<   r%   r‰   r„   r‹   rŒ   s   @r+   r�   r�   ð   s{   ø€ € € € € ðð ð
j˜yð jð jð jð jð jð jð E¤Lð °U´\ð ð ð ð ð ð ð ð r*   r�   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingr”   Úkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nr7   ç      à¿rY   r   r]   )ÚpÚtrainingr   )
r[   r%   Úmatmulr{   r   rb   Úsoftmaxr”   r©   Ú
contiguous)
rŸ   r    r¡   r¢   r£   r¤   r”   r¥   Úattn_weightsÚattn_outputs
             r+   Úeager_attention_forwardr¯     sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r*   c                   ór   ‡ — e Zd Zdefˆ fd„Zdej        dee         de	ej        ej        f         fd„Z
ˆ xZS )ÚDPTSelfAttentionr4   c                 ó¤  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r0t	          |d¦  «        s t          d|j        › d|j        › d�¦  «        ‚|| _        |j        | _        t          |j        |j        z  ¦  «        | _        | j        | j        z  | _	        |j
        | _        | j        dz  | _        d| _        t          j        |j        | j	        |j        ¬¦  «        | _        t          j        |j        | j	        |j        ¬¦  «        | _        t          j        |j        | j	        |j        ¬¦  «        | _        d S )	Nr   Úembedding_sizezThe hidden size z4 is not a multiple of the number of attention heads ú.r§   F)Úbias)r;   r<   r@   Únum_attention_headsÚhasattrrH   r4   rˆ   Úattention_head_sizeÚall_head_sizeÚattention_probs_dropout_probÚdropout_probr¤   Ú	is_causalr   ÚLinearÚqkv_biasr    r¡   r¢   ©rQ   r4   rU   s     €r+   r<   zDPTSelfAttention.__init__.  sB  ø€ Ý‰Œ×ÒÑÔÐØÔ Ô :Ñ:¸aÒ?Ð?ÍÐPVÐXhÑHiÔHiÐ?Ýð7 6Ô#5ð 7ð 7ØÔ3ð7ð 7ð 7ñô ð ð
 ˆŒØ#)Ô#=ˆÔ Ý#& vÔ'9¸FÔ<VÑ'VÑ#WÔ#WˆÔ Ø!Ô5¸Ô8PÑPˆÔØ"Ô?ˆÔØÔ/°Ñ5ˆŒØˆŒå”Y˜vÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
Ý”9˜VÔ/°Ô1CÈ&Ì/ÐZÑZÔZˆŒÝ”Y˜vÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
ˆ
ˆ
r*   r0   r¥   rp   c                 ó~  — |j         d         }|d| j        | j        f} |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        }t          j	        | j
        j        t          ¦  «        } || |||d f| j        | j        | j        sdn| j        dœ|¤Ž\  }	}
|	                     ¦   «         d d…         | j        fz   }|	                     |¦  «        }	|	|
fS )Nr   r7   r   rY   rž   )r¼   r¤   r”   r8   )r_   r¶   r¸   r¡   Úviewr{   r¢   r    r   Úget_interfacer4   Ú_attn_implementationr¯   r¼   r¤   r©   r»   r[   r¹   r`   )rQ   r0   r¥   r}   Ú	new_shapeÚ	key_layerÚvalue_layerÚquery_layerÚattention_interfaceÚcontext_layerÚattention_probsÚnew_context_layer_shapes               r+   r„   zDPTSelfAttention.forwardB  sd  € ð
 #Ô(¨Ô+ˆ
Ø  DÔ$<¸dÔ>VÐVˆ	à0�D—H’H˜]Ñ+Ô+Ô0°)Ð<×FÒFÀqÈ!ÑLÔLˆ	Ø4�d—j’j Ñ/Ô/Ô4°iÐ@×JÒJÈ1ÈaÑPÔPˆØ4�d—j’j Ñ/Ô/Ô4°iÐ@×JÒJÈ1ÈaÑPÔPˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð *=Ð)<ØØØØØð
*
ð ”nØ”LØ#œ}ÐC�C�C°$Ô2Cð
*
ð 
*
ð ð
*
ð 
*
Ñ&ˆ�ð #0×"4Ò"4Ñ"6Ô"6°s¸°sÔ";¸tÔ?QÐ>SÑ"SÐØ%×-Ò-Ð.EÑFÔFˆà˜oÐ-Ð-r*   )r!   r"   r#   r   r<   r%   r‰   r   r   r(   r„   r‹   rŒ   s   @r+   r±   r±   -  s‘   ø€ € € € € ð]˜yð ]ð ]ð ]ð ]ð ]ð ]ð(.à”|ð.ð Ð+Ô,ð.ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð	.ð .ð .ð .ð .ð .ð .ð .r*   r±   c                   óZ   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        dej        fd„Zˆ xZ	S )ÚDPTViTSelfOutputz 
    The residual connection is defined in ViTLayer instead of here (as is the case with other models), due to the
    layernorm applied before each block.
    r4   c                 óÌ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        d S r…   )	r;   r<   r   r½   r@   Údenser’   r“   r”   r¿   s     €r+   r<   zDPTViTSelfOutput.__init__k  sJ   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr*   r0   Úinput_tensorrp   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r…   ©rÏ   r”   ©rQ   r0   rÐ   s      r+   r„   zDPTViTSelfOutput.forwardp  s*   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØÐr*   r�   rŒ   s   @r+   rÍ   rÍ   e  s   ø€ € € € € ðð ð
>˜yð >ð >ð >ð >ð >ð >ð
 U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r*   rÍ   c                   óX   ‡ — e Zd Zdefˆ fd„Zdej        dee         dej        fd„Z	ˆ xZ
S )ÚDPTViTAttentionr4   c                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S r…   )r;   r<   r±   Ú	attentionrÍ   Úoutputr¿   s     €r+   r<   zDPTViTAttention.__init__x  s;   ø€ Ý‰Œ×ÒÑÔÐÝ)¨&Ñ1Ô1ˆŒÝ& vÑ.Ô.ˆŒˆˆr*   r0   r¥   rp   c                 óT   —  | j         |fi |¤Ž\  }}|                      ||¦  «        }|S r…   )r×   rØ   )rQ   r0   r¥   Úself_attn_outputr˜   rØ   s         r+   r„   zDPTViTAttention.forward}  s<   € ð
 -˜dœn¨]ÐEÐE¸fÐEÐEÑÐ˜!Ø—’Ð-¨}Ñ=Ô=ˆØˆr*   )r!   r"   r#   r   r<   r%   r‰   r   r   r„   r‹   rŒ   s   @r+   rÕ   rÕ   w  s~   ø€ € € € € ð/˜yð /ð /ð /ð /ð /ð /ð
à”|ðð Ð+Ô,ðð 
Œð	ð ð ð ð ð ð ð r*   rÕ   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚDPTViTIntermediater4   c                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S r…   )r;   r<   r   r½   r@   Úintermediate_sizerÏ   rA   Ú
hidden_actÚstrr	   Úintermediate_act_fnr¿   s     €r+   r<   zDPTViTIntermediate.__init__‰  sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$r*   r0   rp   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r…   )rÏ   rá   )rQ   r0   s     r+   r„   zDPTViTIntermediate.forward‘  s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐr*   ©	r!   r"   r#   r   r<   r%   r‰   r„   r‹   rŒ   s   @r+   rÜ   rÜ   ˆ  sj   ø€ € € € € ð9˜yð 9ð 9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð r*   rÜ   c                   óV   ‡ — e Zd Zdefˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚDPTViTOutputr4   c                 óÌ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        ¦  «        | _	        d S r…   )
r;   r<   r   r½   rÞ   r@   rÏ   r’   r“   r”   r¿   s     €r+   r<   zDPTViTOutput.__init__™  sJ   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr*   r0   rÐ   rp   c                 ód   — |                       |¦  «        }|                      |¦  «        }||z   }|S r…   rÒ   rÓ   s      r+   r„   zDPTViTOutput.forwardž  s4   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØ%¨Ñ4ˆØÐr*   rã   rŒ   s   @r+   rå   rå   ˜  su   ø€ € € € € ð>˜yð >ð >ð >ð >ð >ð >ð
 U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r*   rå   c                   ó\   ‡ — e Zd ZdZdefˆ fd„Zdej        dee	         dej        fd„Z
ˆ xZS )ÚDPTViTLayerz?This corresponds to the Block class in the timm implementation.r4   c                 óz  •— t          ¦   «                              ¦   «          |j        | _        d| _        t	          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        t          j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¬¦  «        | _        d S )Nr   ©Úeps)r;   r<   Úchunk_size_feed_forwardÚseq_len_dimrÕ   r×   rÜ   Úintermediaterå   rØ   r   Ú	LayerNormr@   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterr¿   s     €r+   r<   zDPTViTLayer.__init__©  sš   ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$ØˆÔÝ(¨Ñ0Ô0ˆŒÝ.¨vÑ6Ô6ˆÔÝ" 6Ñ*Ô*ˆŒÝ "¤¨VÔ-?ÀVÔEZÐ [Ñ [Ô [ˆÔÝ!œ|¨FÔ,>ÀFÔDYÐZÑZÔZˆÔÐÐr*   r0   r¥   rp   c                 óÖ   — |                       |¦  «        } | j        |fi |¤Ž}||z   }|                      |¦  «        }|                      |¦  «        }|                      ||¦  «        }|S r…   )rò   r×   ró   rï   rØ   )rQ   r0   r¥   Úhidden_states_normÚattention_outputÚlayer_outputs         r+   r„   zDPTViTLayer.forward³  s‚   € ð
 "×2Ò2°=ÑAÔAÐØ)˜4œ>Ð*<ÐGÐGÀÐGÐGÐð )¨=Ñ8ˆð ×+Ò+¨MÑ:Ô:ˆØ×(Ò(¨Ñ6Ô6ˆð —{’{ <°Ñ?Ô?ˆàÐr*   )r!   r"   r#   r$   r   r<   r%   r‰   r   r   r„   r‹   rŒ   s   @r+   ré   ré   ¦  s‹   ø€ € € € € ØIÐIð[˜yð [ð [ð [ð [ð [ð [ðà”|ðð Ð+Ô,ðð 
Œð	ð ð ð ð ð ð ð r*   ré   c                   ól   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd	deej	                 deej	                 fd„Z
ˆ xZS )
ÚDPTReassembleStagea@  
    This class reassembles the hidden states of the backbone into image-like feature representations at various
    resolutions.

    This happens in 3 stages:
    1. Map the N + 1 tokens to a set of N tokens, by taking into account the readout ([CLS]) token according to
       `config.readout_type`.
    2. Project the channel dimension of the hidden states according to `config.neck_hidden_sizes`.
    3. Resizing the spatial dimensions (height, width).

    Args:
        config (`[DPTConfig]`):
            Model configuration class defining the model architecture.
    c                 ó  •— t          ¦   «                              ¦   «          || _        t          j        ¦   «         | _        |j        r|                      |¦  «         n|                      |¦  «         |j	        | _	        d S r…   )
r;   r<   r4   r   Ú
ModuleListÚlayersÚ	is_hybridÚ_init_reassemble_dpt_hybridÚ_init_reassemble_dptÚneck_ignore_stagesr¿   s     €r+   r<   zDPTReassembleStage.__init__Ø  st   ø€ Ý‰Œ×ÒÑÔÐàˆŒÝ”m‘o”oˆŒØÔð 	.Ø×,Ò,¨VÑ4Ô4Ð4Ð4à×%Ò% fÑ-Ô-Ð-à"(Ô";ˆÔÐÐr*   c           	      ój  — t          t          t          |j        ¦  «        ¦  «        |j        ¦  «        D ]r\  }}|dk    r,| j                             t          j        ¦   «         ¦  «         Œ7|dk    r5| j                             t          ||j        |         |¬¦  «        ¦  «         Œs|j
        dk    rt          d|j
        › d�¦  «        ‚t          j        ¦   «         | _        t          |¦  «        }t          t          |j        ¦  «        ¦  «        D ]Ÿ}|dk    r>| j                             t          j        t          j        ¦   «         ¦  «        ¦  «         ŒF|dk    rS| j                             t          j        t          j        d|z  |¦  «        t"          |j                 ¦  «        ¦  «         Œ dS )a   "
        For DPT-Hybrid the first 2 reassemble layers are set to `nn.Identity()`, please check the official
        implementation: https://github.com/isl-org/DPT/blob/f43ef9e08d70a752195028a51be5e1aff227b913/dpt/vit.py#L438
        for more details.
        r   ©rF   ÚfactorÚprojectzReadout type z! is not supported for DPT-Hybrid.rY   N)ÚzipÚrangerG   Úneck_hidden_sizesÚreassemble_factorsrü   Úappendr   ÚIdentityÚDPTReassembleLayerÚreadout_typerH   rû   Úreadout_projectsÚ_get_backbone_hidden_sizeÚ
Sequentialr½   r	   rß   )rQ   r4   Úir  r@   s        r+   rþ   z.DPTReassembleStage._init_reassemble_dpt_hybridä  s�  € õ �U¥3 vÔ'?Ñ#@Ô#@ÑAÔAÀ6ÔC\Ñ]Ô]ð 	tð 	t‰IˆAˆvØ�AŠvˆvØ”×"Ò"¥2¤;¡=¤=Ñ1Ô1Ð1Ð1Ø�Q’�Ø”×"Ò"Õ#5°fÀvÔG_Ð`aÔGbÐkqÐ#rÑ#rÔ#rÑsÔsÐsøàÔ )Ò+Ð+ÝÐc¨VÔ-@ÐcÐcÐcÑdÔdÐdõ !#¤¡¤ˆÔÝ/°Ñ7Ô7ˆÝ•s˜6Ô3Ñ4Ô4Ñ5Ô5ð 	ð 	ˆAØ�AŠvˆvØÔ%×,Ò,­R¬]½2¼;¹=¼=Ñ-IÔ-IÑJÔJÐJÐJØ�Q’�ØÔ%×,Ò,Ý”M¥"¤)¨A°©O¸[Ñ"IÔ"IÍ6ÐRXÔRcÔKdÑeÔeñô ð øð		ð 	r*   c           	      ó:  — t          t          t          |j        ¦  «        ¦  «        |j        ¦  «        D ]:\  }}| j                             t          ||j        |         |¬¦  «        ¦  «         Œ;|j        dk    ržt          j
        ¦   «         | _        t          |¦  «        }t          t          |j        ¦  «        ¦  «        D ]W}| j                             t          j        t          j        d|z  |¦  «        t          |j                 ¦  «        ¦  «         ŒVd S d S )Nr  r  rY   )r  r  rG   r  r  rü   r	  r  r  r   rû   r  r  r  r½   r	   rß   )rQ   r4   r  r  r@   r˜   s         r+   rÿ   z'DPTReassembleStage._init_reassemble_dptþ  s  € Ý�U¥3 vÔ'?Ñ#@Ô#@ÑAÔAÀ6ÔC\Ñ]Ô]ð 	pð 	p‰IˆAˆvØŒK×ÒÕ1°&À6ÔC[Ð\]ÔC^ÐgmÐnÑnÔnÑoÔoÐoÐoàÔ )Ò+Ð+Ý$&¤M¡O¤OˆDÔ!Ý3°FÑ;Ô;ˆKÝ�3˜vÔ7Ñ8Ô8Ñ9Ô9ð ð �ØÔ%×,Ò,Ý”M¥"¤)¨A°©O¸[Ñ"IÔ"IÍ6ÐRXÔRcÔKdÑeÔeñô ð ð ð	 ,Ð+ðð r*   Nr0   rp   c                 óè  — g }t          |¦  «        D �]Þ\  }}|| j        v�r¹|dd…df         |dd…dd…f         }}|j        \  }}	}
|�|�|                     ||||
¦  «        }n*t	          |	dz  ¦  «        }|                     ||||
¦  «        }|                     dddd¦  «                             ¦   «         }|j        }| j        j        dk    r¦| 	                    d¦  «                             d¦  «        }| 
                    d¦  «                             |¦  «        } | j        |         t          j        ||fd	¦  «        ¦  «        }|                     ddd¦  «                             |¦  «        }nP| j        j        d
k    r@| 	                    d¦  «        | 
                    d	¦  «        z   }|                     |¦  «        } | j        |         |¦  «        }|                     |¦  «         �Œà|S )zÇ
        Args:
            hidden_states (`list[torch.FloatTensor]`, each of shape `(batch_size, sequence_length + 1, hidden_size)`):
                List of hidden states from the backbone.
        Nr   r   rX   r   rY   r  )r   rY   r   r7   Úadd)Ú	enumerater   r_   r`   r   ra   r¬   r4   r  rz   Ú	unsqueezeÚ	expand_asr  r%   rd   rü   r	  )rQ   r0   Úpatch_heightÚpatch_widthÚoutr  Úhidden_staterO   r}   Úsequence_lengthr?   r[   Úfeature_shapeÚreadouts                 r+   r„   zDPTReassembleStage.forward
  s  € ð ˆå(¨Ñ7Ô7ð 	%ñ 	%‰OˆAˆ|Ø˜Ô/Ð/Ñ/à*6°q°q°q¸!°tÔ*<¸lÈ1È1È1ÈaÈbÈbÈ5Ô>Q˜<�	Ø<HÔ<NÑ9�
˜O¨\ØÐ+°Ð0GØ#/×#7Ò#7¸
ÀLÐR]Ð_kÑ#lÔ#l�L�Lå$ _°cÑ%9Ñ:Ô:�DØ#/×#7Ò#7¸
ÀDÈ$ÐP\Ñ#]Ô#]�LØ+×3Ò3°A°q¸!¸QÑ?Ô?×JÒJÑLÔL�à ,Ô 2�Ø”;Ô+¨yÒ8Ð8à#/×#7Ò#7¸Ñ#:Ô#:×#BÒ#BÀ9Ñ#MÔ#M�LØ'×1Ò1°!Ñ4Ô4×>Ò>¸|ÑLÔL�Gà#; 4Ô#8¸Ô#;½E¼IÀ|ÐU\ÐF]Ð_aÑ<bÔ<bÑ#cÔ#c�Là#/×#7Ò#7¸¸1¸aÑ#@Ô#@×#HÒ#HÈÑ#WÔ#W�L�LØ”[Ô-°Ò6Ð6Ø#/×#7Ò#7¸Ñ#:Ô#:¸Y×=PÒ=PÐQSÑ=TÔ=TÑ#T�LØ#/×#7Ò#7¸Ñ#FÔ#F�LØ-˜tœ{¨1œ~¨lÑ;Ô;�Ø�JŠJ�|Ñ$Ô$Ð$Ñ$àˆ
r*   ©NN)r!   r"   r#   r$   r<   rþ   rÿ   Úlistr%   r‰   r„   r‹   rŒ   s   @r+   rù   rù   È  s˜   ø€ € € € € ðð ð
<ð 
<ð 
<ð 
<ð 
<ðð ð ð4
ð 
ð 
ð#ð # T¨%¬,Ô%7ð #ÐaeÐfkÔfrÔasð #ð #ð #ð #ð #ð #ð #ð #r*   rù   c                 ó`   — | j         �!t          | j         d¦  «        r| j         j        S | j        S )Nr@   )Úbackbone_configr·   r@   )r4   s    r+   r  r  0  s2   € ØÔÐ)­g°fÔ6LÈmÑ.\Ô.\Ð)ØÔ%Ô1Ð1àÔ!Ð!r*   c                   ó2   ‡ — e Zd Zdededefˆ fd„Zd„ Zˆ xZS )r  r4   rF   r  c           	      ó–  •— t          ¦   «                              ¦   «          t          |¦  «        }t          j        ||d¬¦  «        | _        |dk    r t          j        ||||d¬¦  «        | _        d S |dk    rt          j        ¦   «         | _        d S |dk     r0t          j        ||dt          d|z  ¦  «        d¬¦  «        | _        d S d S )Nr   )Úin_channelsÚout_channelsr:   r   ©r:   r›   Úpaddingr   )
r;   r<   r  r   rK   rL   ÚConvTranspose2dÚresizer
  rˆ   )rQ   r4   rF   r  r@   rU   s        €r+   r<   zDPTReassembleLayer.__init__8  sÅ   ø€ Ý‰Œ×ÒÑÔÐå/°Ñ7Ô7ˆÝœ)°È(Ð`aÐbÑbÔbˆŒð �AŠ:ˆ:ÝÔ,¨X°xÈVÐ\bÐlmÐnÑnÔnˆDŒKˆKˆKØ�qŠ[ˆ[Ýœ+™-œ-ˆDŒKˆKˆKØ�aŠZˆZåœ) H¨hÀAÍcÐRSÐV\ÑR\ÉoÌoÐghÐiÑiÔiˆDŒKˆKˆKð ˆZr*   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r…   )rL   r)  )rQ   r  s     r+   r„   zDPTReassembleLayer.forwardG  s*   € Ø—’ |Ñ4Ô4ˆØ—{’{ <Ñ0Ô0ˆØÐr*   )r!   r"   r#   r   rˆ   r<   r„   r‹   rŒ   s   @r+   r  r  7  sj   ø€ € € € € ðj˜yð j°Cð jÀð jð jð jð jð jð jðð ð ð ð ð ð r*   r  c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚDPTFeatureFusionStager4   c                 ó  •— t          ¦   «                              ¦   «          t          j        ¦   «         | _        t          t          |j        ¦  «        ¦  «        D ])}| j                             t          |¦  «        ¦  «         Œ*d S r…   )
r;   r<   r   rû   rü   r  rG   r  r	  ÚDPTFeatureFusionLayer)rQ   r4   r˜   rU   s      €r+   r<   zDPTFeatureFusionStage.__init__N  st   ø€ Ý‰Œ×ÒÑÔÐÝ”m‘o”oˆŒÝ•s˜6Ô3Ñ4Ô4Ñ5Ô5ð 	>ð 	>ˆAØŒK×ÒÕ4°VÑ<Ô<Ñ=Ô=Ð=Ð=ð	>ð 	>r*   c                 ó¸   — |d d d…         }g }d }t          || j        ¦  «        D ]4\  }}|€ ||¦  «        }n |||¦  «        }|                     |¦  «         Œ5|S )Nr7   )r  rü   r	  )rQ   r0   Úfused_hidden_statesÚfused_hidden_stater  Úlayers         r+   r„   zDPTFeatureFusionStage.forwardT  sˆ   € à% d d¨ dÔ+ˆà ÐØ!ÐÝ#& }°d´kÑ#BÔ#Bð 	;ð 	;ÑˆL˜%Ø!Ð)à%* U¨<Ñ%8Ô%8Ð"Ð"à%* UÐ+=¸|Ñ%LÔ%LÐ"Ø×&Ò&Ð'9Ñ:Ô:Ð:Ð:à"Ð"r*   )r!   r"   r#   r   r<   r„   r‹   rŒ   s   @r+   r,  r,  M  sS   ø€ € € € € ð>˜yð >ð >ð >ð >ð >ð >ð#ð #ð #ð #ð #ð #ð #r*   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 )ÚDPTPreActResidualLayerz©
    ResidualConvUnit, pre-activate residual unit.

    Args:
        config (`[DPTConfig]`):
            Model configuration class defining the model architecture.
    r4   c                 ó  •— t          ¦   «                              ¦   «          |j        | _        |j        �|j        n| j         }t          j        ¦   «         | _        t          j        |j	        |j	        ddd|¬¦  «        | _
        t          j        ¦   «         | _        t          j        |j	        |j	        ddd|¬¦  «        | _        | j        r>t          j        |j	        ¦  «        | _        t          j        |j	        ¦  «        | _        d S d S )Nr   r   )r:   r›   r'  rµ   )r;   r<   Ú!use_batch_norm_in_fusion_residualÚuse_batch_normÚuse_bias_in_fusion_residualr   ÚReLUÚactivation1rK   Úfusion_hidden_sizeÚconvolution1Úactivation2Úconvolution2ÚBatchNorm2dÚbatch_norm1Úbatch_norm2)rQ   r4   r8  rU   s      €r+   r<   zDPTPreActResidualLayer.__init__n  s  ø€ Ý‰Œ×ÒÑÔÐà$ÔFˆÔð Ô1Ð=ð Ô.Ð.àÔ(Ð(ð 	$õ œ7™9œ9ˆÔÝœIØÔ%ØÔ%ØØØØ,ð
ñ 
ô 
ˆÔõ œ7™9œ9ˆÔÝœIØÔ%ØÔ%ØØØØ,ð
ñ 
ô 
ˆÔð Ôð 	IÝ!œ~¨fÔ.GÑHÔHˆDÔÝ!œ~¨fÔ.GÑHÔHˆDÔÐÐð	Ið 	Ir*   r  rp   c                 ó(  — |}|                       |¦  «        }|                      |¦  «        }| j        r|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }| j        r|                      |¦  «        }||z   S r…   )r:  r<  r7  r@  r=  r>  rA  ©rQ   r  Úresiduals      r+   r„   zDPTPreActResidualLayer.forward�  sš   € ØˆØ×'Ò'¨Ñ5Ô5ˆà×(Ò(¨Ñ6Ô6ˆàÔð 	:Ø×+Ò+¨LÑ9Ô9ˆLà×'Ò'¨Ñ5Ô5ˆØ×(Ò(¨Ñ6Ô6ˆàÔð 	:Ø×+Ò+¨LÑ9Ô9ˆLà˜hÑ&Ð&r*   r�   rŒ   s   @r+   r4  r4  e  s|   ø€ € € € € ðð ð I˜yð  Ið  Ið  Ið  Ið  Ið  IðD' E¤Lð '°U´\ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r*   r4  c                   óh   ‡ — e Zd ZdZddedefˆ fd„Zddej        dej        dz  d	ej        fd
„Z	ˆ xZ
S )r.  a3  Feature fusion layer, merges feature maps from different stages.

    Args:
        config (`[DPTConfig]`):
            Model configuration class defining the model architecture.
        align_corners (`bool`, *optional*, defaults to `True`):
            The align_corner setting for bilinear upsample.
    Tr4   Úalign_cornersc                 óô   •— t          ¦   «                              ¦   «          || _        t          j        |j        |j        dd¬¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        d S )Nr   T)r:   rµ   )
r;   r<   rF  r   rK   r;  rL   r4  Úresidual_layer1Úresidual_layer2)rQ   r4   rF  rU   s      €r+   r<   zDPTFeatureFusionLayer.__init__¬  si   ø€ Ý‰Œ×ÒÑÔÐà*ˆÔåœ) FÔ$=¸vÔ?XÐfgÐnrÐsÑsÔsˆŒå5°fÑ=Ô=ˆÔÝ5°fÑ=Ô=ˆÔÐÐr*   Nr  rD  rp   c                 ót  — |�c|j         |j         k    r;t          j                             ||j         d         |j         d         fdd¬¦  «        }||                      |¦  «        z   }|                      |¦  «        }t          j                             |dd| j        ¬¦  «        }|                      |¦  «        }|S )NrY   r   rZ   F©r[   r\   rF  ©Úscale_factorr\   rF  )r_   r   rb   rc   rH  rI  rF  rL   rC  s      r+   r„   zDPTFeatureFusionLayer.forward¶  sÂ   € ØÐØÔ! X¤^Ò3Ð3Ýœ=×4Ò4Ø LÔ$6°qÔ$9¸<Ô;MÈaÔ;PÐ#QÐXbÐrwð 5ñ ô �ð (¨$×*>Ò*>¸xÑ*HÔ*HÑHˆLà×+Ò+¨LÑ9Ô9ˆÝ”}×0Ò0Ø q¨zÈÔI[ð 1ñ 
ô 
ˆð —’ |Ñ4Ô4ˆàÐr*   ©Tr…   )r!   r"   r#   r$   r   rŠ   r<   r%   r‰   r„   r‹   rŒ   s   @r+   r.  r.  ¢  s•   ø€ € € € € ðð ð>ð >˜yð >¸ð >ð >ð >ð >ð >ð >ðð  E¤Lð ¸E¼LÈ4Ñ<Oð Ð[`Ô[gð ð ð ð ð ð ð ð r*   r.  c                   ó~   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
dZdZeedœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚDPTPreTrainedModelr4   Údptrn   )ÚimageT)r0   r1   c                 óê   •— t          ¦   «                              |¦  «         t          |t          t          f¦  «        r4t          j        |j        ¦  «         t          j        |j        ¦  «         dS dS )zInitialize the weightsN)	r;   Ú_init_weightsrA   rŽ   r3   ÚinitÚzeros_rO   rP   )rQ   rŸ   rU   s     €r+   rT  z DPTPreTrainedModel._init_weights×  sl   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ/Õ1GÐHÑIÔIð 	4ÝŒK˜Ô(Ñ)Ô)Ð)ÝŒK˜Ô2Ñ3Ô3Ð3Ð3Ð3ð	4ð 	4r*   )r!   r"   r#   r   r'   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendré   r±   Ú_can_record_outputsr%   Úno_gradrT  r‹   rŒ   s   @r+   rP  rP  Ç  s›   ø€ € € € € € àÐÐÑØÐØ$€OØ!ÐØ&*Ð#Ø€NØÐØÐØ"&Ðà$Ø&ðð Ðð
 €U„]�_„_ð4ð 4ð 4ð 4ñ „_ð4ð 4ð 4ð 4ð 4r*   rP  c            	       óV   ‡ — e Zd Zdefˆ fd„Z	 d	dej        dedee	         de
fd„Zˆ xZS )
ÚDPTViTEncoderr4   c                 óÆ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r)   )ré   )rv   r˜   r4   s     €r+   ry   z*DPTViTEncoder.__init__.<locals>.<listcomp>ä  s!   ø€ Ð#aÐ#aÐ#a¸A¥K°Ñ$7Ô$7Ð#aÐ#aÐ#ar*   )r;   r<   r4   r   rû   r  Únum_hidden_layersr2  r¿   s    `€r+   r<   zDPTViTEncoder.__init__á  sV   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”]Ð#aÐ#aÐ#aÐ#aÅÀvÔG_ÑA`ÔA`Ð#aÑ#aÔ#aÑbÔbˆŒ
ˆ
ˆ
r*   Fr0   r�   r¥   rp   c                 óL   — | j         D ]} ||¦  «        }Œt          |¬¦  «        S )N)r.   )r2  r   )rQ   r0   r�   r¥   Úlayer_modules        r+   r„   zDPTViTEncoder.forwardæ  s7   € ð !œJð 	8ð 	8ˆLØ(˜L¨Ñ7Ô7ˆMˆMå°Ð?Ñ?Ô?Ð?r*   r‡   )r!   r"   r#   r   r<   r%   r‰   rŠ   r   r   r   r„   r‹   rŒ   s   @r+   rb  rb  à  s    ø€ € € € € ðc˜yð cð cð cð cð cð cð INð@ð @Ø"œ\ð@ØAEð@ØY_Ð`rÔYsð@à	ð@ð @ð @ð @ð @ð @ð @ð @r*   rb  c            	       óž   ‡ — e Zd Zddedefˆ fd„Zd„ Ze ed¬¦  «        e	de
j        d	ee         d
efd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚDPTModelTr4   Úadd_pooling_layerc                 ó‚  •— t          ¦   «                              |¦  «         || _        |j        rt	          |¦  «        | _        nt          |¦  «        | _        t          |¦  «        | _        t          j
        |j        |j        ¬¦  «        | _        |rt          |¦  «        nd| _        |                      ¦   «          dS )zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        rë   N)r;   r<   r4   rý   r3   r‚   rŽ   rb  Úencoderr   rð   r@   rñ   Ú	layernormÚDPTViTPoolerÚpoolerÚ	post_init)rQ   r4   rj  rU   s      €r+   r<   zDPTModel.__init__ñ  s­   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð ØˆŒð Ôð 	7Ý4°VÑ<Ô<ˆDŒOˆOå.¨vÑ6Ô6ˆDŒOÝ$ VÑ,Ô,ˆŒåœ fÔ&8¸fÔ>SÐTÑTÔTˆŒØ.?ÐI•l 6Ñ*Ô*Ð*ÀTˆŒð 	�ŠÑÔÐÐÐr*   c                 ó@   — | j         j        r| j        S | j        j        S r…   )r4   rý   r‚   r‘   )rQ   s    r+   Úget_input_embeddingszDPTModel.get_input_embeddings  s"   € ØŒ;Ô ð 	4Ø”?Ð"à”?Ô3Ð3r*   F)Útie_last_hidden_statesrn   r¥   rp   c                 óø   — |                       |¦  «        }|j        } | j        |fi |¤Ž}|j        }|                      |¦  «        }| j        �|                      |¦  «        nd }t          |||j        ¬¦  «        S )N)r.   r/   r    )r‚   r   rl  r.   rm  ro  r-   r    )rQ   rn   r¥   Úembedding_outputÚembedding_last_hidden_statesÚencoder_outputsÚsequence_outputÚpooled_outputs           r+   r„   zDPTModel.forward  s—   € ð HLÇÂÐWcÑGdÔGdÐØ'7Ô'JÐ$à+7¨4¬<Ð8TÐ+_Ð+_ÐX^Ð+_Ð+_ˆØ)Ô;ˆàŸ.š.¨Ñ9Ô9ˆØ8<¼Ð8O˜Ÿš OÑ4Ô4Ð4ÐUYˆåCØ-Ø'Ø%5Ô%Nð
ñ 
ô 
ð 	
r*   rN  )r!   r"   r#   r   rŠ   r<   rr  r   r   r   r%   r&   r   r   r-   r„   r‹   rŒ   s   @r+   ri  ri  ï  sÇ   ø€ € € € € ðð ˜yð ¸Tð ð ð ð ð ð ð*4ð 4ð 4ð  Ø€_¨EÐ2Ñ2Ô2Øð
àÔ'ð
ð Ð+Ô,ð
ð 
>ð	
ð 
ð 
ñ „^ñ 3Ô2ñ  Ôð
ð 
ð 
ð 
ð 
r*   ri  c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )rn  r4   c                 ó¾   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j                 | _	        d S r…   )
r;   r<   r   r½   r@   Úpooler_output_sizerÏ   r	   Ú
pooler_actÚ
activationr¿   s     €r+   r<   zDPTViTPooler.__init__&  sE   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3LÑMÔMˆŒ
Ý  Ô!2Ô3ˆŒˆˆr*   r0   rp   c                 ór   — |d d …df         }|                       |¦  «        }|                      |¦  «        }|S )Nr   )rÏ   r~  )rQ   r0   Úfirst_token_tensorry  s       r+   r„   zDPTViTPooler.forward+  s@   € ð +¨1¨1¨1¨a¨4Ô0ÐØŸ
š
Ð#5Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØÐr*   rã   rŒ   s   @r+   rn  rn  %  sj   ø€ € € € € ð4˜yð 4ð 4ð 4ð 4ð 4ð 4ð
 U¤\ð °e´lð ð ð ð ð ð ð ð r*   rn  c            
       ó~   ‡ — e Zd ZdZdefˆ fd„Z	 	 d
deej                 de	dz  de	dz  deej                 fd	„Z
ˆ xZS )ÚDPTNecka;  
    DPTNeck. A neck is a module that is normally used between the backbone and the head. It takes a list of tensors as
    input and produces another list of tensors as output. For DPT, it includes 2 stages:

    * DPTReassembleStage
    * DPTFeatureFusionStage.

    Args:
        config (dict): config dict.
    r4   c           
      ó”  •— t          ¦   «                              ¦   «          || _        |j        �|j        j        dk    rd | _        nt          |¦  «        | _        t          j        ¦   «         | _	        |j
        D ]8}| j	                             t          j        ||j        ddd¬¦  «        ¦  «         Œ9t          |¦  «        | _        d S )NÚswinv2r   r   F©r:   r'  rµ   )r;   r<   r4   r!  Ú
model_typeÚreassemble_stagerù   r   rû   Úconvsr  r	  rK   r;  r,  Úfusion_stage)rQ   r4   ÚchannelrU   s      €r+   r<   zDPTNeck.__init__@  sÄ   ø€ Ý‰Œ×ÒÑÔÐØˆŒð Ô!Ð-°&Ô2HÔ2SÐW_Ò2_Ð2_Ø$(ˆDÔ!Ð!å$6°vÑ$>Ô$>ˆDÔ!å”]‘_”_ˆŒ
ØÔ/ð 	sð 	sˆGØŒJ×Ò�bœi¨°Ô1JÐXYÐcdÐkpÐqÑqÔqÑrÔrÐrÐrõ 2°&Ñ9Ô9ˆÔÐÐr*   Nr0   r  r  rp   c                 ól  ‡ — t          |t          t          f¦  «        st          d¦  «        ‚t	          |¦  «        t	          ‰ j        j        ¦  «        k    rt          d¦  «        ‚‰ j        �‰                      |||¦  «        }ˆ fd„t          |¦  «        D ¦   «         }‰  
                    |¦  «        }|S )zñ
        Args:
            hidden_states (`list[torch.FloatTensor]`, each of shape `(batch_size, sequence_length, hidden_size)` or `(batch_size, hidden_size, height, width)`):
                List of hidden states from the backbone.
        z2hidden_states should be a tuple or list of tensorszOThe number of hidden states should be equal to the number of neck hidden sizes.Nc                 óB   •— g | ]\  }} ‰j         |         |¦  «        ‘ŒS r)   )rˆ  )rv   r  ÚfeaturerQ   s      €r+   ry   z#DPTNeck.forward.<locals>.<listcomp>f  s-   ø€ ÐVÐVÐV©z¨q°'�M�D”J˜q”M 'Ñ*Ô*ÐVÐVÐVr*   )rA   r(   r  Ú	TypeErrorrG   r4   r  rH   r‡  r  r‰  )rQ   r0   r  r  r€   rØ   s   `     r+   r„   zDPTNeck.forwardQ  s·   ø€ õ ˜-­%µ¨Ñ7Ô7ð 	RÝÐPÑQÔQÐQåˆ}ÑÔ¥ T¤[Ô%BÑ!CÔ!CÒCÐCÝÐnÑoÔoÐoð Ô Ð,Ø ×1Ò1°-ÀÈ{Ñ[Ô[ˆMàVÐVÐVÐV½YÀ}Ñ=UÔ=UÐVÑVÔVˆð ×"Ò" 8Ñ,Ô,ˆàˆr*   r  )r!   r"   r#   r$   r   r<   r  r%   r‰   rˆ   r„   r‹   rŒ   s   @r+   r‚  r‚  4  s«   ø€ € € € € ð	ð 	ð:˜yð :ð :ð :ð :ð :ð :ð( $(Ø"&ð	ð à˜EœLÔ)ðð ˜D‘jðð ˜4‘Zð	ð
 
ˆeŒlÔ	ðð ð ð ð ð ð ð r*   r‚  c                   óX   ‡ — e Zd ZdZdefˆ fd„Zdeej                 dej        fd„Z	ˆ xZ
S )ÚDPTDepthEstimationHeada	  
    Output head consisting of 3 convolutional layers. It progressively halves the feature dimension and upsamples
    the predictions to the input resolution after the first convolutional layer (details can be found in the paper's
    supplementary material).
    r4   c                 óü  •— t          ¦   «                              ¦   «          || _        d | _        |j        rt          j        ddddd¬¦  «        | _        |j        }t          j        t          j        ||dz  ddd¬¦  «        t          j	        ddd	¬
¦  «        t          j        |dz  dddd¬¦  «        t          j
        ¦   «         t          j        ddddd¬¦  «        t          j
        ¦   «         ¦  «        | _        d S )Né   )r   r   )r   r   r&  rY   r   r   rZ   TrL  é    r   )r;   r<   r4   rL   Úadd_projectionr   rK   r;  r  ÚUpsampler9  Úhead©rQ   r4   r€   rU   s      €r+   r<   zDPTDepthEstimationHead.__init__u  sæ   ø€ Ý‰Œ×ÒÑÔÐàˆŒàˆŒØÔ ð 	eÝ œi¨¨S¸fÈVÐ]cÐdÑdÔdˆDŒOàÔ,ˆÝ”MÝŒI�h ¨A¡¸1ÀQÐPQÐRÑRÔRÝŒK Q¨ZÀtÐLÑLÔLÝŒI�h !‘m R°Q¸qÈ!ÐLÑLÔLÝŒG‰IŒIÝŒI�b˜!¨°1¸aÐ@Ñ@Ô@ÝŒG‰IŒIñ
ô 
ˆŒ	ˆ	ˆ	r*   r0   rp   c                 óð   — || j         j                 }| j        �1|                      |¦  «        } t          j        ¦   «         |¦  «        }|                      |¦  «        }|                     d¬¦  «        }|S )Nr   r]   )r4   Úhead_in_indexrL   r   r9  r–  Úsqueeze)rQ   r0   Úpredicted_depths      r+   r„   zDPTDepthEstimationHead.forwardˆ  sl   € à% d¤kÔ&?Ô@ˆàŒ?Ð&Ø ŸOšO¨MÑ:Ô:ˆMØ%�BœG™IœI mÑ4Ô4ˆMàŸ)š) MÑ2Ô2ˆØ)×1Ò1°aÐ1Ñ8Ô8ˆàÐr*   )r!   r"   r#   r$   r   r<   r  r%   r‰   r„   r‹   rŒ   s   @r+   r�  r�  n  sy   ø€ € € € € ðð ð
˜yð 
ð 
ð 
ð 
ð 
ð 
ð& T¨%¬,Ô%7ð ¸E¼Lð ð ð ð ð ð ð ð r*   r�  zu
    DPT Model with a depth estimation head on top (consisting of 3 convolutional layers) e.g. for KITTI, NYUv2.
    c                   ó€   ‡ — e Zd Zˆ fd„Zee	 ddej        dej        dz  de	e
         defd„¦   «         ¦   «         Zˆ xZS )	ÚDPTForDepthEstimationc                 óF  •— t          ¦   «                              |¦  «         d | _        |j        du r|j        �t          |¦  «        | _        nt          |d¬¦  «        | _        t          |¦  «        | _	        t          |¦  «        | _        |                      ¦   «          d S ©NF)rj  )r;   r<   rE   rý   r!  r
   ri  rQ  r‚  Úneckr�  r–  rp  r¿   s     €r+   r<   zDPTForDepthEstimation.__init__œ  s•   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àˆŒØÔ˜uÐ$Ð$¨Ô)?Ð)KÝ)¨&Ñ1Ô1ˆDŒMˆMå ¸%Ð@Ñ@Ô@ˆDŒHõ ˜F‘O”OˆŒ	õ +¨6Ñ2Ô2ˆŒ	ð 	�ŠÑÔÐÐÐr*   Nrn   Úlabelsr¥   rp   c                 óü  ‡ — d}|�t          d¦  «        ‚|                     d¦  «        pt          ‰ j        dd¦  «        }d|d<   ‰ j        � ‰ j        j        |fi |¤Ž}|j        }n„ ‰ j        |fi |¤Ž}|j        }‰ j        j	        s$ˆ fd„t          |dd…         ¦  «        D ¦   «         }n?|j        }|                     ˆ fd„t          |dd…         ¦  «        D ¦   «         ¦  «         |}d	\  }	}
‰ j        j        �5‰ j        j	        du r'|j        \  }}}}‰ j        j        j        }||z  }	||z  }
‰                      ||	|
¦  «        }‰                      |¦  «        }t%          |||r|j        nd|j        ¬
¦  «        S )aÙ  
        labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth depth estimation maps for computing the loss.

        Examples:
        ```python
        >>> from transformers import AutoImageProcessor, DPTForDepthEstimation
        >>> import torch
        >>> import numpy as np
        >>> 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()))

        >>> image_processor = AutoImageProcessor.from_pretrained("Intel/dpt-large")
        >>> model = DPTForDepthEstimation.from_pretrained("Intel/dpt-large")

        >>> # prepare image for the model
        >>> inputs = image_processor(images=image, return_tensors="pt")

        >>> with torch.no_grad():
        ...     outputs = model(**inputs)

        >>> # interpolate to original size
        >>> post_processed_output = image_processor.post_process_depth_estimation(
        ...     outputs,
        ...     target_sizes=[(image.height, image.width)],
        ... )

        >>> # visualize the prediction
        >>> predicted_depth = post_processed_output[0]["predicted_depth"]
        >>> depth = predicted_depth * 255 / predicted_depth.max()
        >>> depth = depth.detach().cpu().numpy()
        >>> depth = Image.fromarray(depth.astype("uint8"))
        ```NzTraining is not implemented yetr�   FTc                 ó6   •— g | ]\  }}|‰j         j        v ¯|‘ŒS r)   ©r4   Úbackbone_out_indices©rv   Úidxr�  rQ   s      €r+   ry   z1DPTForDepthEstimation.forward.<locals>.<listcomp>ð  s6   ø€ ð !ð !ð !Ù ,  WÐPSÐW[ÔWbÔWwÐPwÐPw�GÐPwÐPwÐPwr*   r   c              3   óN   •K  — | ]\  }}|‰j         j        d d…         v ¯|V — Œ dS ©rY   Nr¤  r¦  s      €r+   ú	<genexpr>z0DPTForDepthEstimation.forward.<locals>.<genexpr>õ  sL   øè è € ð .ð .á$˜˜WØ˜dœkÔ>¸q¸r¸rÔBÐBÐBð àBÐBÐBÐBð.ð .r*   r  )Úlossr›  r0   r1   )ÚNotImplementedErrorÚgetÚgetattrr4   rE   Úforward_with_filtered_kwargsru   rQ  r0   rý   r  r    Úextendr!  r_   r>   r   r–  r   r1   )rQ   rn   r¡  r¥   r«  Úuser_requested_hidden_statesÚoutputsr0   Úbackbone_hidden_statesr  r  r˜   r~   r   r>   r›  s   `               r+   r„   zDPTForDepthEstimation.forward®  s  ø€ ð\ ˆØÐÝ%Ð&GÑHÔHÐHð (.§z¢zÐ2HÑ'IÔ'Ið (
ÍWØŒKÐ/°ñN
ô N
Ð$ð *.ˆÐ%Ñ&àŒ=Ð$Ø@�d”mÔ@ÀÐXÐXÐQWÐXÐXˆGØ#Ô0ˆMˆMà�d”h˜|Ð6Ð6¨vÐ6Ð6ˆGØ#Ô1ˆMð ”;Ô(ð 7ð!ð !ð !ð !Ý09¸-ÈÈÈÔ:KÑ0LÔ0Lð!ñ !ô !��ð *1Ô)IÐ&Ø&×-Ò-ð .ð .ð .ð .å(1°-ÀÀÀÔ2CÑ(DÔ(Dð.ñ .ô .ñ ô ð ð
 !7�à$.Ñ!ˆ�kØŒ;Ô&Ð2°t´{Ô7LÐPUÐ7UÐ7UØ".Ô"4ÑˆAˆq�&˜%ØœÔ4Ô?ˆJØ! ZÑ/ˆLØ :Ñ-ˆKàŸ	š	 -°¸{ÑKÔKˆØŸ)š) MÑ2Ô2ˆå#ØØ+Ø3OÐY˜'Ô/Ð/ÐUYØÔ)ð	
ñ 
ô 
ð 	
r*   r…   )r!   r"   r#   r<   r   r   r%   r&   Ú
LongTensorr   r   r   r„   r‹   rŒ   s   @r+   r�  r�  –  s±   ø€ € € € € ðð ð ð ð ð$ Øð +/ð[
ð [
àÔ'ð[
ð Ô  4Ñ'ð[
ð Ð+Ô,ð	[
ð
 
ð[
ð [
ð [
ñ „^ñ Ôð[
ð [
ð [
ð [
ð [
r*   r�  c                   óT   ‡ — e Zd Zdefˆ fd„Zdeej                 dej        fd„Zˆ xZ	S )ÚDPTSemanticSegmentationHeadr4   c                 ó   •— t          ¦   «                              ¦   «          || _        |j        }t	          j        t	          j        ||ddd¬¦  «        t	          j        |¦  «        t	          j        ¦   «         t	          j	        |j
        ¦  «        t	          j        ||j        d¬¦  «        t	          j        ddd¬	¦  «        ¦  «        | _        d S )
Nr   r   Fr…  r9   rY   rZ   TrL  )r;   r<   r4   r;  r   r  rK   r?  r9  r’   Úsemantic_classifier_dropoutÚ
num_labelsr•  r–  r—  s      €r+   r<   z$DPTSemanticSegmentationHead.__init__  s¨   ø€ Ý‰Œ×ÒÑÔÐàˆŒØÔ,ˆÝ”MÝŒI�h °aÀÈÐOÑOÔOÝŒN˜8Ñ$Ô$ÝŒG‰IŒIÝŒJ�vÔ9Ñ:Ô:ÝŒI�h Ô 1¸qÐAÑAÔAÝŒK Q¨ZÀtÐLÑLÔLñ
ô 
ˆŒ	ˆ	ˆ	r*   r0   rp   c                 óT   — || j         j                 }|                      |¦  «        }|S r…   )r4   r™  r–  ©rQ   r0   Úlogitss      r+   r„   z#DPTSemanticSegmentationHead.forward  s'   € à% d¤kÔ&?Ô@ˆØ—’˜=Ñ)Ô)ˆØˆr*   )
r!   r"   r#   r   r<   r  r%   r‰   r„   r‹   rŒ   s   @r+   r¶  r¶    so   ø€ € € € € ð
˜yð 
ð 
ð 
ð 
ð 
ð 
ð T¨%¬,Ô%7ð ¸E¼Lð ð ð ð ð ð ð ð r*   r¶  c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚDPTAuxiliaryHeadr4   c                 ó^  •— t          ¦   «                              ¦   «          |j        }t          j        t          j        ||ddd¬¦  «        t          j        |¦  «        t          j        ¦   «         t          j        dd¦  «        t          j        ||j	        d¬¦  «        ¦  «        | _
        d S )Nr   r   Fr…  gš™™™™™¹?r9   )r;   r<   r;  r   r  rK   r?  r9  r’   r¹  r–  r—  s      €r+   r<   zDPTAuxiliaryHead.__init__%  sŒ   ø€ Ý‰Œ×ÒÑÔÐàÔ,ˆÝ”MÝŒI�h °aÀÈÐOÑOÔOÝŒN˜8Ñ$Ô$ÝŒG‰IŒIÝŒJ�s˜EÑ"Ô"ÝŒI�h Ô 1¸qÐAÑAÔAñ
ô 
ˆŒ	ˆ	ˆ	r*   r0   rp   c                 ó0   — |                       |¦  «        }|S r…   )r–  r»  s      r+   r„   zDPTAuxiliaryHead.forward1  s   € Ø—’˜=Ñ)Ô)ˆØˆr*   rã   rŒ   s   @r+   r¾  r¾  $  sj   ø€ € € € € ð

˜yð 

ð 

ð 

ð 

ð 

ð 

ð U¤\ð °e´lð ð ð ð ð ð ð ð r*   r¾  c                   óŽ   ‡ — e Zd Zdefˆ fd„Zee	 	 d	dej        dz  dej	        dz  de
e         defd„¦   «         ¦   «         Zˆ xZS )
ÚDPTForSemanticSegmentationr4   c                 ó(  •— t          ¦   «                              |¦  «         t          |d¬¦  «        | _        t	          |¦  «        | _        t          |¦  «        | _        |j        rt          |¦  «        nd | _
        |                      ¦   «          d S rŸ  )r;   r<   ri  rQ  r‚  r   r¶  r–  Úuse_auxiliary_headr¾  Úauxiliary_headrp  r¿   s     €r+   r<   z#DPTForSemanticSegmentation.__init__8  s†   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜F°eÐ<Ñ<Ô<ˆŒõ ˜F‘O”OˆŒ	õ 0°Ñ7Ô7ˆŒ	Ø:@Ô:SÐ]Õ.¨vÑ6Ô6Ð6ÐY]ˆÔð 	�ŠÑÔÐÐÐr*   Nrn   r¡  r¥   rp   c                 óâ  ‡ — |�‰ j         j        dk    rt          d¦  «        ‚|                     d¦  «        pt	          ‰ j         dd¦  «        }d|d<    ‰ j        |fi |¤Ž}|j        }‰ j         j        s$ˆ fd„t          |dd…         ¦  «        D ¦   «         }n?|j	        }| 
                    ˆ fd„t          |dd…         ¦  «        D ¦   «         ¦  «         |}‰                      |¬	¦  «        }‰                      |¦  «        }d}	‰ j        �‰                      |d
         ¦  «        }	d}
|�¦t          j                             ||j        dd…         dd¬¦  «        }|	�0t          j                             |	|j        dd…         dd¬¦  «        }t%          ‰ j         j        ¬¦  «        } |||¦  «        } |||¦  «        }|‰ j         j        |z  z   }
t+          |
||r|j        nd|j        ¬¦  «        S )a  
        labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth semantic segmentation maps for computing the loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels > 1`, a classification loss is computed (Cross-Entropy).

        Examples:
        ```python
        >>> from transformers import AutoImageProcessor, DPTForSemanticSegmentation
        >>> 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()))

        >>> image_processor = AutoImageProcessor.from_pretrained("Intel/dpt-large-ade")
        >>> model = DPTForSemanticSegmentation.from_pretrained("Intel/dpt-large-ade")

        >>> inputs = image_processor(images=image, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> logits = outputs.logits
        ```Nr   z/The number of labels should be greater than oner�   FTc                 ó6   •— g | ]\  }}|‰j         j        v ¯|‘ŒS r)   r¤  r¦  s      €r+   ry   z6DPTForSemanticSegmentation.forward.<locals>.<listcomp>w  s5   ø€ ð ð ð Ù(˜C ÈCÐSWÔS^ÔSsÐLsÐLs�ÐLsÐLsÐLsr*   c              3   óN   •K  — | ]\  }}|‰j         j        d d…         v ¯|V — Œ dS r©  r¤  r¦  s      €r+   rª  z5DPTForSemanticSegmentation.forward.<locals>.<genexpr>|  sM   øè è € ð *ð *Ù(˜C ÈCÐSWÔS^ÔSsÐtuÐtvÐtvÔSwÐLwÐLw�ÐLwÐLwÐLwÐLwð*ð *r*   )r0   r7   r8   rZ   rK  )Úignore_index)r«  r¼  r0   r1   )r4   r¹  rH   r­  r®  rQ  r0   rý   r  r    r°  r   r–  rÅ  r   rb   rc   r_   r   Úsemantic_loss_ignore_indexÚauxiliary_loss_weightr   r1   )rQ   rn   r¡  r¥   r±  r²  r0   r³  r¼  Úauxiliary_logitsr«  Úupsampled_logitsÚupsampled_auxiliary_logitsÚloss_fctÚ	main_lossÚauxiliary_losss   `               r+   r„   z"DPTForSemanticSegmentation.forwardG  s}  ø€ ð@ Ð $¤+Ô"8¸AÒ"=Ð"=ÝÐNÑOÔOÐOð (.§z¢zÐ2HÑ'IÔ'Ið (
ÍWØŒKÐ/°ñN
ô N
Ð$ð *.ˆÐ%Ñ&àHPÈÌÐQ]ÐHhÐHhÐagÐHhÐHhˆØÔ-ˆð Œ{Ô$ð 
	3ðð ð ð Ý,5°mÀAÀBÀBÔ6GÑ,HÔ,Hðñ ô ˆMˆMð &-Ô%EÐ"Ø"×)Ò)ð *ð *ð *ð *Ý,5°mÀAÀBÀBÔ6GÑ,HÔ,Hð*ñ *ô *ñ ô ð ð 3ˆMàŸ	š	°˜	Ñ>Ô>ˆØ—’˜=Ñ)Ô)ˆàÐØÔÐ*Ø#×2Ò2°=ÀÔ3DÑEÔEÐàˆØÐå!œ}×8Ò8Ø˜Vœ\¨"¨#¨#Ô.°ZÈuð  9ñ  ô  Ðð  Ð+Ý-/¬]×-FÒ-FØ$¨6¬<¸¸¸Ô+<À:Ð]bð .Gñ .ô .Ð*õ (°T´[Ô5[Ð\Ñ\Ô\ˆHØ ˜Ð!1°6Ñ:Ô:ˆIØ%˜XÐ&@À&ÑIÔIˆNØ˜tœ{Ô@À>ÑQÑQˆDå&ØØØ3OÐY˜'Ô/Ð/ÐUYØÔ)ð	
ñ 
ô 
ð 	
r*   r  )r!   r"   r#   r   r<   r   r   r%   r&   r´  r   r   r   r„   r‹   rŒ   s   @r+   rÂ  rÂ  6  sÅ   ø€ € € € € ð˜yð ð ð ð ð ð ð Øð 26Ø*.ðU
ð U
àÔ'¨$Ñ.ðU
ð Ô  4Ñ'ðU
ð Ð+Ô,ð	U
ð
 
!ðU
ð U
ð U
ñ „^ñ ÔðU
ð U
ð U
ð U
ð U
r*   rÂ  )r�  rÂ  ri  rP  )Nrž   )Lr$   Úcollections.abcrB   r   Údataclassesr   r%   r   Útorch.nnr   Ú r   rU  Úactivationsr	   Úbackbone_utilsr
   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_dptr   Ú
get_loggerr!   Úloggerr   r-   ÚModuler3   rŽ   r�   r‰   Úfloatr¯   r±   rÍ   rÕ   rÜ   rå   ré   rù   r  r  r,  r4  r.  rP  rb  ri  rn  r‚  r�  r�  r¶  r¾  rÂ  Ú__all__r)   r*   r+   ú<module>rå     s…  ððð ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø (Ð (Ð (Ð (Ð (Ð (ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð ð	Jð 	Jð 	Jð 	Jð 	J°ñ 	Jô 	Jñ „ñô ð	Jð €ððñ ô ð ðJð Jð Jð Jð J¸;ñ Jô Jñ „ñô ðJð$]
ð ]
ð ]
ð ]
ð ]
˜RœYñ ]
ô ]
ð ]
ð@4Yð 4Yð 4Yð 4Yð 4Y�r”yñ 4Yô 4Yð 4Yðnð ð ð ð ˜BœIñ ô ð ðL !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð:4.ð 4.ð 4.ð 4.ð 4.�r”yñ 4.ô 4.ð 4.ðpð ð ð ð �r”yñ ô ð ð$ð ð ð ð �b”iñ ô ð ð"ð ð ð ð ˜œñ ô ð ð 
ð 
ð 
ð 
ð 
�2”9ñ 
ô 
ð 
ðð ð ð ð Ð,ñ ô ð ðDeð eð eð eð e˜œñ eô eð eðP"ð "ð "ðð ð ð ð ˜œñ ô ð ð,#ð #ð #ð #ð #˜BœIñ #ô #ð #ð0:'ð :'ð :'ð :'ð :'˜RœYñ :'ô :'ð :'ðz"ð "ð "ð "ð "˜BœIñ "ô "ð "ðJ ð4ð 4ð 4ð 4ð 4˜ñ 4ô 4ñ „ð4ð0@ð @ð @ð @ð @�B”Iñ @ô @ð @ð ð1
ð 1
ð 1
ð 1
ð 1
Ð!ñ 1
ô 1
ñ „ð1
ðjð ð ð ð �2”9ñ ô ð ð7ð 7ð 7ð 7ð 7ˆbŒiñ 7ô 7ð 7ðt%ð %ð %ð %ð %˜RœYñ %ô %ð %ðP €ððñ ô ð
p
ð p
ð p
ð p
ð p
Ð.ñ p
ô p
ñô ð
p
ðfð ð ð ð  "¤)ñ ô ð ð,ð ð ð ð �r”yñ ô ð ð$ ðg
ð g
ð g
ð g
ð g
Ð!3ñ g
ô g
ñ „ðg
ðT dÐ
cÐ
c€€€r*   