§
    ‚Štjpg  ã                   ó>  — d Z ddlZddl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mZ d	d
lmZ  ej        e¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Ze G d„ de
¦  «        ¦   «         Ze G d„ d e¦  «        ¦   «         Z G d!„ d"ej        ¦  «        Z G d#„ d$ej        ¦  «        Z  G d%„ d&ej        ¦  «        Z! G d'„ d(ej        ¦  «        Z" G d)„ d*ej        ¦  «        Z# ed+¬,¦  «         G d-„ d.e¦  «        ¦   «         Z$g d/¢Z%dS )0zPyTorch GLPN model.é    N)Únné   )ÚACT2FN)ÚBaseModelOutputÚDepthEstimatorOutput)ÚPreTrainedModel)Úauto_docstringÚloggingé   )Ú
GLPNConfigc                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚGLPNOverlapPatchEmbeddingsz+Construct the overlapping patch embeddings.c                 ó¼   •— t          ¦   «                              ¦   «          t          j        |||||dz  ¬¦  «        | _        t          j        |¦  «        | _        d S )Né   ©Úkernel_sizeÚstrideÚpadding)ÚsuperÚ__init__r   ÚConv2dÚprojÚ	LayerNormÚ
layer_norm)ÚselfÚ
patch_sizer   Únum_channelsÚhidden_sizeÚ	__class__s        €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/glpn/modeling_glpn.pyr   z#GLPNOverlapPatchEmbeddings.__init__#   s[   ø€ Ý‰Œ×ÒÑÔÐÝ”IØØØ"ØØ !‘Oð
ñ 
ô 
ˆŒ	õ œ, {Ñ3Ô3ˆŒˆˆó    c                 óÊ   — |                       |¦  «        }|j        \  }}}}|                     d¦  «                             dd¦  «        }|                      |¦  «        }|||fS )Nr   r   )r   ÚshapeÚflattenÚ	transposer   )r   Úpixel_valuesÚ
embeddingsÚ_ÚheightÚwidths         r    Úforwardz"GLPNOverlapPatchEmbeddings.forward/   sg   € Ø—Y’Y˜|Ñ,Ô,ˆ
Ø(Ô.Ñˆˆ1ˆf�eð  ×'Ò'¨Ñ*Ô*×4Ò4°Q¸Ñ:Ô:ˆ
Ø—_’_ ZÑ0Ô0ˆ
Ø˜6 5Ð(Ð(r!   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   Ú__classcell__©r   s   @r    r   r       sM   ø€ € € € € Ø5Ð5ð
4ð 
4ð 
4ð 
4ð 
4ð)ð )ð )ð )ð )ð )ð )r!   r   c                   ó,   ‡ — e Zd ZdZˆ fd„Z	 dd„Zˆ xZS )ÚGLPNEfficientSelfAttentionz£SegFormer's efficient self-attention mechanism. Employs the sequence reduction process introduced in the [PvT
    paper](https://huggingface.co/papers/2102.12122).c                 óÒ  •— t          ¦   «                              ¦   «          || _        || _        | j        | j        z  dk    r t	          d| j        › d| j        › d�¦  «        ‚t          | j        | j        z  ¦  «        | _        | j        | j        z  | _        t          j	        | j        | j        ¦  «        | _
        t          j	        | j        | j        ¦  «        | _        t          j	        | j        | j        ¦  «        | _        t          j        |j        ¦  «        | _        || _        |dk    r8t          j        ||||¬¦  «        | _        t          j        |¦  «        | _        d S d S )Nr   zThe hidden size (z6) is not a multiple of the number of attention heads (ú)r   )r   r   )r   r   r   Únum_attention_headsÚ
ValueErrorÚintÚattention_head_sizeÚall_head_sizer   ÚLinearÚqueryÚkeyÚvalueÚDropoutÚattention_probs_dropout_probÚdropoutÚsr_ratior   Úsrr   r   ©r   Úconfigr   r7   Úsequence_reduction_ratior   s        €r    r   z#GLPNEfficientSelfAttention.__init__>   s]  ø€ Ý‰Œ×ÒÑÔÐØ&ˆÔØ#6ˆÔ àÔ˜dÔ6Ñ6¸!Ò;Ð;Ýð6 DÔ$4ð 6ð 6ØÔ2ð6ð 6ð 6ñô ð õ
 $' tÔ'7¸$Ô:RÑ'RÑ#SÔ#SˆÔ Ø!Ô5¸Ô8PÑPˆÔå”Y˜tÔ/°Ô1CÑDÔDˆŒ
Ý”9˜TÔ-¨tÔ/AÑBÔBˆŒÝ”Y˜tÔ/°Ô1CÑDÔDˆŒ
å”z &Ô"EÑFÔFˆŒà0ˆŒØ# aÒ'Ð'Ý”iØ˜[Ð6NÐWoðñ ô ˆDŒGõ !œl¨;Ñ7Ô7ˆDŒOˆOˆOð	 (Ð'r!   Fc                 ó
  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }| j        dk    rŽ|j         \  }}	}
|                     ddd¦  «                             ||
||¦  «        }|                      |¦  «        }|                     ||
d¦  «                             ddd¦  «        }|  	                    |¦  «        }g |j         d d…         ¢d‘| j        ‘R }|  
                    |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }t          j        ||                     dd¦  «        ¦  «        }|t          j        | j        ¦  «        z  }t           j                             |d¬¦  «        }|                      |¦  «        }t          j        ||¦  «        }|                     dddd¦  «                             ¦   «         }|                     ¦   «         d d…         | j        fz   }|                     |¦  «        }|r||fn|f}|S )Néÿÿÿÿr   r   r   éþÿÿÿ©Údimr   )r#   r:   r=   Úviewr%   rC   ÚpermuteÚreshaperD   r   r>   r?   ÚtorchÚmatmulÚmathÚsqrtr   Ú
functionalÚsoftmaxrB   Ú
contiguousÚsizer;   )r   Úhidden_statesr)   r*   Úoutput_attentionsÚinput_shapeÚhidden_shapeÚquery_layerÚ
batch_sizeÚseq_lenr   Úkv_shapeÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                      r    r+   z"GLPNEfficientSelfAttention.forwardY   sr  € ð $Ô)¨#¨2¨#Ô.ˆØC˜ÐC bÐC¨$Ô*BÐCÐCˆØ—j’j Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆàŒ=˜1ÒÐØ0=Ô0CÑ-ˆJ˜ à)×1Ò1°!°Q¸Ñ:Ô:×BÒBÀ:È|Ð]cÐejÑkÔkˆMà ŸGšG MÑ2Ô2ˆMà)×1Ò1°*¸lÈBÑOÔO×WÒWÐXYÐ[\Ð^_Ñ`Ô`ˆMØ ŸOšO¨MÑ:Ô:ˆMàL�]Ô(¨¨"¨Ô-ÐL¨rÐL°4Ô3KÐLÐLˆØ—H’H˜]Ñ+Ô+×0Ò0°Ñ:Ô:×DÒDÀQÈÑJÔJˆ	Ø—j’j Ñ/Ô/×4Ò4°XÑ>Ô>×HÒHÈÈAÑNÔNˆõ !œ<¨°Y×5HÒ5HÈÈRÑ5PÔ5PÑQÔQÐà+­d¬i¸Ô8PÑ.QÔ.QÑQÐõ œ-×/Ò/Ð0@ÀbÐ/ÑIÔIˆð Ÿ,š, Ñ7Ô7ˆåœ _°kÑBÔBˆà%×-Ò-¨a°°A°qÑ9Ô9×DÒDÑFÔFˆØ"/×"4Ò"4Ñ"6Ô"6°s¸°sÔ";¸tÔ?QÐ>SÑ"SÐØ%×*Ò*Ð+BÑCÔCˆà6GÐ]�= /Ð2Ð2ÈmÐM]ˆàˆr!   ©Fr,   r2   s   @r    r4   r4   :   s\   ø€ € € € € ð9ð 9ð8ð 8ð 8ð 8ð 8ð@  ð-ð -ð -ð -ð -ð -ð -ð -r!   r4   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚGLPNSelfOutputc                 ó¸   •— t          ¦   «                              ¦   «          t          j        ||¦  «        | _        t          j        |j        ¦  «        | _        d S ©N)r   r   r   r<   Údenser@   Úhidden_dropout_probrB   )r   rF   r   r   s      €r    r   zGLPNSelfOutput.__init__‹   sD   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜{¨KÑ8Ô8ˆŒ
Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr!   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rk   )rl   rB   )r   rX   Úinput_tensors      r    r+   zGLPNSelfOutput.forward�   s*   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØÐr!   ©r-   r.   r/   r   r+   r1   r2   s   @r    ri   ri   Š   sG   ø€ € € € € ð>ð >ð >ð >ð >ð
ð ð ð ð ð ð r!   ri   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )ÚGLPNAttentionc                 ó¤   •— t          ¦   «                              ¦   «          t          ||||¬¦  «        | _        t	          ||¬¦  «        | _        d S )N)rF   r   r7   rG   )r   )r   r   r4   r   ri   ÚoutputrE   s        €r    r   zGLPNAttention.__init__˜   sU   ø€ Ý‰Œ×ÒÑÔÐÝ.ØØ#Ø 3Ø%=ð	
ñ 
ô 
ˆŒ	õ % V¸ÐEÑEÔEˆŒˆˆr!   Fc                 óŠ   — |                       ||||¦  «        }|                      |d         |¦  «        }|f|dd …         z   }|S )Nr   r   )r   rt   )r   rX   r)   r*   rY   Úself_outputsÚattention_outputrf   s           r    r+   zGLPNAttention.forward¢   sM   € Ø—y’y °¸Ð?PÑQÔQˆàŸ;š; |°A¤¸ÑFÔFÐØ#Ð%¨°Q°R°RÔ(8Ñ8ˆØˆr!   rg   rp   r2   s   @r    rr   rr   —   sQ   ø€ € € € € ðFð Fð Fð Fð Fðð ð ð ð ð ð ð r!   rr   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚGLPNDepthWiseConvzVDepthwise convolution used in the Mix-FFN to implicitly encode positional information.é   c                 ó†   •— t          ¦   «                              ¦   «          t          j        ||ddd|¬¦  «        | _        d S )Nr   r   )Úgroups)r   r   r   r   Údwconv)r   rL   r   s     €r    r   zGLPNDepthWiseConv.__init__®   s;   ø€ Ý‰Œ×ÒÑÔÐÝ”i  S¨!¨Q°¸#Ð>Ñ>Ô>ˆŒˆˆr!   c                 óð   — |j         \  }}}|                     dd¦  «                             ||||¦  «        }|                      |¦  «        }|                     d¦  «                             dd¦  «        }|S )Nr   r   )r#   r%   rM   r}   r$   )r   rX   r)   r*   r]   r^   r   s          r    r+   zGLPNDepthWiseConv.forward²   sv   € Ø,9Ô,?Ñ)ˆ
�G˜\Ø%×/Ò/°°1Ñ5Ô5×:Ò:¸:À|ÐU[Ð]bÑcÔcˆØŸš MÑ2Ô2ˆØ%×-Ò-¨aÑ0Ô0×:Ò:¸1¸aÑ@Ô@ˆØÐr!   )rz   r,   r2   s   @r    ry   ry   «   sR   ø€ € € € € Ø`Ð`ð?ð ?ð ?ð ?ð ?ð ?ðð ð ð ð ð ð r!   ry   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )Ú
GLPNMixFFNNc                 ó˜  •— t          ¦   «                              ¦   «          |p|}t          j        ||¦  «        | _        t          |¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        n|j        | _        t          j        ||¦  «        | _        t          j        |j        ¦  «        | _        d S rk   )r   r   r   r<   Údense1ry   r}   Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnÚdense2r@   rm   rB   )r   rF   Úin_featuresÚhidden_featuresÚout_featuresr   s        €r    r   zGLPNMixFFN.__init__¼   s£   ø€ Ý‰Œ×ÒÑÔÐØ#Ð2 {ˆÝ”i ¨_Ñ=Ô=ˆŒÝ'¨Ñ8Ô8ˆŒÝ�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$à'-Ô'8ˆDÔ$Ý”i °Ñ>Ô>ˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr!   c                 ó  — |                       |¦  «        }|                      |||¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rk   )r‚   r}   r†   rB   r‡   )r   rX   r)   r*   s       r    r+   zGLPNMixFFN.forwardÈ   st   € ØŸš MÑ2Ô2ˆØŸš M°6¸5ÑAÔAˆØ×0Ò0°Ñ?Ô?ˆØŸš ]Ñ3Ô3ˆØŸš MÑ2Ô2ˆØŸš ]Ñ3Ô3ˆØÐr!   )NNrp   r2   s   @r    r€   r€   »   sL   ø€ € € € € ð
>ð 
>ð 
>ð 
>ð 
>ð 
>ðð ð ð ð ð ð r!   r€   c                   ó^   ‡ — e Zd ZdZd
deddfˆ fd„Zdej        dej        fd„Zde	fd	„Z
ˆ xZS )ÚGlpnDropPathzÏStochastic depth (DropPath) per sample, for residual blocks.

    Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
    <https://arxiv.org/abs/1603.09382>`_.
    ç        Ú	drop_probÚreturnNc                 óV   •— t          ¦   «                              ¦   «          || _        d S rk   )r   r   r�   )r   r�   r   s     €r    r   zGlpnDropPath.__init__Ú   s$   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒˆˆr!   rX   c                 ó  — | j         dk    s| j        s|S d| j         z
  }|j        d         fd|j        dz
  z  z   }t	          j        ||j        |j        ¬¦  «        }t	          j        ||z   ¦  «        }| 	                    |¦  «        |z  S )NrŽ   r   r   )r   )ÚdtypeÚdevice)
r�   Útrainingr#   ÚndimrP   Úrandr“   r”   ÚfloorÚdiv)r   rX   Ú	keep_probr#   Úrandom_tensors        r    r+   zGlpnDropPath.forwardÞ   s“   € ØŒ>˜SÒ Ð ¨¬Ð Ø Ð Ø˜œÑ&ˆ	ØÔ$ QÔ'Ð)¨D°MÔ4FÈÑ4JÑ,KÑKˆÝœ
 5°Ô0CÈMÔL`ÐaÑaÔaˆÝœ M°IÑ$=Ñ>Ô>ˆØ× Ò  Ñ+Ô+¨mÑ;Ð;r!   c                 ó   — d| j         › �S )Nzp=)r�   )r   s    r    Ú
extra_reprzGlpnDropPath.extra_reprç   s   € Ø$�D”NÐ$Ð$Ð$r!   )rŽ   )r-   r.   r/   r0   Úfloatr   rP   ÚTensorr+   r…   r�   r1   r2   s   @r    r�   r�   Ó   s›   ø€ € € € € ðð ð#ð # %ð #°$ð #ð #ð #ð #ð #ð #ð< U¤\ð <°e´lð <ð <ð <ð <ð%˜Cð %ð %ð %ð %ð %ð %ð %ð %r!   r�   c                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )Ú	GLPNLayerzCThis corresponds to the Block class in the original implementation.c                 óˆ  •— t          ¦   «                              ¦   «          t          j        |¦  «        | _        t          ||||¬¦  «        | _        |dk    rt          |¦  «        nt          j        ¦   «         | _	        t          j        |¦  «        | _
        t          ||z  ¦  «        }t          |||¬¦  «        | _        d S )N)r   r7   rG   rŽ   )rˆ   r‰   )r   r   r   r   Úlayer_norm_1rr   Ú	attentionr�   ÚIdentityÚ	drop_pathÚlayer_norm_2r9   r€   Úmlp)	r   rF   r   r7   r¦   rG   Ú	mlp_ratioÚmlp_hidden_sizer   s	           €r    r   zGLPNLayer.__init__ï   s¯   ø€ Ý‰Œ×ÒÑÔÐÝœL¨Ñ5Ô5ˆÔÝ&ØØ#Ø 3Ø%=ð	
ñ 
ô 
ˆŒð 5>À²O°O� iÑ0Ô0Ð0ÍÌÉÌˆŒÝœL¨Ñ5Ô5ˆÔÝ˜k¨IÑ5Ñ6Ô6ˆÝ˜f°+ÈÐ_Ñ_Ô_ˆŒˆˆr!   Fc                 óJ  — |                       |                      |¦  «        |||¬¦  «        }|d         }|dd …         }|                      |¦  «        }||z   }|                      |                      |¦  «        ||¦  «        }|                      |¦  «        }||z   }	|	f|z   }|S )N)rY   r   r   )r¤   r£   r¦   r¨   r§   )
r   rX   r)   r*   rY   Úself_attention_outputsrw   rf   Ú
mlp_outputÚlayer_outputs
             r    r+   zGLPNLayer.forwardý   sÀ   € Ø!%§¢Ø×Ò˜mÑ,Ô,ØØØ/ð	 "0ñ "
ô "
Ðð 2°!Ô4ÐØ(¨¨¨Ô,ˆð  Ÿ>š>Ð*:Ñ;Ô;ÐØ(¨=Ñ8ˆà—X’X˜d×/Ò/°Ñ>Ô>ÀÈÑNÔNˆ
ð —^’^ JÑ/Ô/ˆ
Ø! MÑ1ˆà�/ GÑ+ˆàˆr!   rg   r,   r2   s   @r    r¡   r¡   ì   sW   ø€ € € € € ØMÐMð`ð `ð `ð `ð `ðð ð ð ð ð ð ð r!   r¡   c                   ó,   ‡ — e Zd Zˆ fd„Z	 	 	 dd„Zˆ xZS )ÚGLPNEncoderc                 ó@  •‡— t          ¦   «                              ¦   «          ‰| _        d„ t          j        d‰j        t          ‰j        ¦  «        d¬¦  «        D ¦   «         }g }t          ‰j	        ¦  «        D ]d}| 
                    t          ‰j        |         ‰j        |         |dk    r‰j        n‰j        |dz
           ‰j        |         ¬¦  «        ¦  «         Œet!          j        |¦  «        | _        g }d}t          ‰j	        ¦  «        D ]¾}g }|dk    r|‰j        |dz
           z  }t          ‰j        |         ¦  «        D ]_}| 
                    t'          ‰‰j        |         ‰j        |         |||z            ‰j        |         ‰j        |         ¬¦  «        ¦  «         Œ`| 
                    t!          j        |¦  «        ¦  «         Œ¿t!          j        |¦  «        | _        t!          j        ˆfd„t          ‰j	        ¦  «        D ¦   «         ¦  «        | _        d S )	Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )Úitem)Ú.0Úxs     r    ú
<listcomp>z(GLPNEncoder.__init__.<locals>.<listcomp>  s    € ÐlÐlÐl˜Aˆq�vŠv‰xŒxÐlÐlÐlr!   r   Úcpu)r”   r   )r   r   r   r   )r   r7   r¦   rG   r©   c                 óN   •— g | ]!}t          j        ‰j        |         ¦  «        ‘Œ"S r³   )r   r   Úhidden_sizes)rµ   ÚirF   s     €r    r·   z(GLPNEncoder.__init__.<locals>.<listcomp>E  s+   ø€ Ð\Ð\Ð\°a�RŒ\˜&Ô-¨aÔ0Ñ1Ô1Ð\Ð\Ð\r!   )r   r   rF   rP   ÚlinspaceÚdrop_path_rateÚsumÚdepthsÚrangeÚnum_encoder_blocksÚappendr   Úpatch_sizesÚstridesr   rº   r   Ú
ModuleListÚpatch_embeddingsr¡   r7   Ú	sr_ratiosÚ
mlp_ratiosÚblockr   )
r   rF   Údprr'   r»   ÚblocksÚcurÚlayersÚjr   s
    `       €r    r   zGLPNEncoder.__init__  s9  øø€ Ý‰Œ×ÒÑÔÐØˆŒð mÐl¥¤°°6Ô3HÍ#ÈfÌmÑJ\ÔJ\ÐejÐ!kÑ!kÔ!kÐlÑlÔlˆð ˆ
Ý�vÔ0Ñ1Ô1ð 	ð 	ˆAØ×ÒÝ*Ø%Ô1°!Ô4Ø!œ>¨!Ô,Ø89¸Qº¸ Ô!4Ð!4ÀFÔDWÐXYÐ\]ÑX]ÔD^Ø &Ô 3°AÔ 6ð	ñ ô ñô ð ð õ !#¤¨jÑ 9Ô 9ˆÔð ˆØˆÝ�vÔ0Ñ1Ô1ð 	1ð 	1ˆAàˆFØ�AŠvˆvØ�v”} Q¨¡UÔ+Ñ+�Ý˜6œ=¨Ô+Ñ,Ô,ð 
ð 
�Ø—’ÝØØ$*Ô$7¸Ô$:Ø,2Ô,FÀqÔ,IØ"% c¨A¡g¤,Ø17Ô1AÀ!Ô1DØ"(Ô"3°AÔ"6ðñ ô ñ	ô 	ð 	ð 	ð �MŠM�"œ-¨Ñ/Ô/Ñ0Ô0Ð0Ð0å”] 6Ñ*Ô*ˆŒ
õ œ-Ø\Ð\Ð\Ð\½5ÀÔAZÑ;[Ô;[Ð\Ñ\Ô\ñ
ô 
ˆŒˆˆr!   FTc                 ó@  — |rdnd }|rdnd }|j         d         }|}t          t          | j        | j        | j        ¦  «        ¦  «        D ]¦\  }	}
|
\  }}} ||¦  «        \  }}}t          |¦  «        D ])\  }} |||||¦  «        }|d         }|r||d         fz   }Œ* ||¦  «        }|                     |||d¦  «                             dddd¦  «                             ¦   «         }|r||fz   }Œ§|st          d„ |||fD ¦   «         ¦  «        S t          |||¬¦  «        S )	Nr³   r   r   rI   r   r   c              3   ó   K  — | ]}|®|V — Œ	d S rk   r³   )rµ   Úvs     r    ú	<genexpr>z&GLPNEncoder.forward.<locals>.<genexpr>g  s(   è è € ÐmÐm˜qÐ_`Ð_l˜Ð_lÐ_lÐ_lÐ_lÐmÐmr!   ©Úlast_hidden_staterX   Ú
attentions)r#   Ú	enumerateÚziprÆ   rÉ   r   rO   rN   rV   Útupler   )r   r&   rY   Úoutput_hidden_statesÚreturn_dictÚall_hidden_statesÚall_self_attentionsr]   rX   Úidxr¶   Úembedding_layerÚblock_layerÚ
norm_layerr)   r*   r»   ÚblkÚlayer_outputss                      r    r+   zGLPNEncoder.forwardH  s“  € ð #7Ð@˜B˜B¸DÐØ$5Ð?˜b˜b¸4Ðà!Ô'¨Ô*ˆ
à$ˆÝ¥ DÔ$9¸4¼:ÀtÄÑ WÔ WÑXÔXð 	Ið 	I‰FˆC�Ø78Ñ4ˆO˜[¨*à+:¨?¸=Ñ+IÔ+IÑ(ˆM˜6 5å# KÑ0Ô0ð Tð T‘��3Ø #  M°6¸5ÐBSÑ TÔ T�Ø -¨aÔ 0�Ø$ð TØ*=ÀÈqÔAQÐ@SÑ*SÐ'øà&˜J }Ñ5Ô5ˆMà)×1Ò1°*¸fÀeÈRÑPÔP×XÒXÐYZÐ\]Ð_`ÐbcÑdÔd×oÒoÑqÔqˆMØ#ð IØ$5¸Ð8HÑ$HÐ!øàð 	nÝÐmÐm ]Ð4EÐGZÐ$[ÐmÑmÔmÑmÔmÐmÝØ+Ø+Ø*ð
ñ 
ô 
ð 	
r!   )FFTrp   r2   s   @r    r°   r°     sX   ø€ € € € € ð.
ð .
ð .
ð .
ð .
ðf  Ø"Øð$
ð $
ð $
ð $
ð $
ð $
ð $
ð $
r!   r°   c                   ó*   — e Zd ZU eed<   dZdZdZg ZdS )ÚGLPNPreTrainedModelrF   Úglpnr&   )ÚimageN)	r-   r.   r/   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_no_split_modulesr³   r!   r    rä   rä   o  s5   € € € € € € àÐÐÑØÐØ$€OØ!ÐØÐÐÐr!   rä   c                   ót   ‡ — e Zd Zˆ fd„Ze	 	 	 d	dej        dedz  dedz  dedz  dee	z  f
d„¦   «         Z
ˆ xZS )
Ú	GLPNModelc                 ó¨   •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        |                      ¦   «          d S rk   )r   r   rF   r°   ÚencoderÚ	post_init©r   rF   r   s     €r    r   zGLPNModel.__init__{  sK   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒõ # 6Ñ*Ô*ˆŒð 	�ŠÑÔÐÐÐr!   Nr&   rY   rÙ   rÚ   r�   c                 óü   — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|                      ||||¬¦  «        }|d         }|s|f|dd …         z   S t          ||j        |j        ¬¦  «        S )N©rY   rÙ   rÚ   r   r   rÓ   )rF   rY   rÙ   rÚ   rï   r   rX   rÕ   )r   r&   rY   rÙ   rÚ   ÚkwargsÚencoder_outputsÚsequence_outputs           r    r+   zGLPNModel.forward…  s¿   € ð 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàŸ,š,ØØ/Ø!5Ø#ð	 'ñ 
ô 
ˆð *¨!Ô,ˆàð 	<Ø#Ð%¨¸¸¸Ô(;Ñ;Ð;åØ-Ø)Ô7Ø&Ô1ð
ñ 
ô 
ð 	
r!   )NNN)r-   r.   r/   r   r	   rP   ÚFloatTensorÚboolrØ   r   r+   r1   r2   s   @r    rí   rí   x  s¬   ø€ € € € € ðð ð ð ð ð ð
 *.Ø,0Ø#'ð
ð 
àÔ'ð
ð   $™;ð
ð # T™kð	
ð
 ˜D‘[ð
ð 
�Ñ	 ð
ð 
ð 
ñ „^ð
ð 
ð 
ð 
ð 
r!   rí   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚGLPNSelectiveFeatureFusionzû
    Selective Feature Fusion module, as explained in the [paper](https://huggingface.co/papers/2201.07436) (section 3.4). This
    module adaptively selects and integrates local and global features by attaining an attention map for each feature.
    é@   c           	      óˆ  •— t          ¦   «                              ¦   «          t          j        t          j        t          |dz  ¦  «        |ddd¬¦  «        t          j        |¦  «        t          j        ¦   «         ¦  «        | _        t          j        t          j        |t          |dz  ¦  «        ddd¬¦  «        t          j        t          |dz  ¦  «        ¦  «        t          j        ¦   «         ¦  «        | _	        t          j        t          |dz  ¦  «        dddd¬¦  «        | _
        t          j        ¦   «         | _        d S )Nr   r   r   )Úin_channelsÚout_channelsr   r   r   )r   r   r   Ú
Sequentialr   r9   ÚBatchNorm2dÚReLUÚconvolutional_layer1Úconvolutional_layer2Úconvolutional_layer3ÚSigmoidÚsigmoid)r   Ú
in_channelr   s     €r    r   z#GLPNSelectiveFeatureFusion.__init__­  s  ø€ Ý‰Œ×ÒÑÔÐå$&¤MÝŒI¥# j°1¡nÑ"5Ô"5ÀJÐ\]ÐfgÐqrÐsÑsÔsÝŒN˜:Ñ&Ô&ÝŒG‰IŒIñ%
ô %
ˆÔ!õ %'¤MÝŒI *½3¸zÈA¹~Ñ;NÔ;NÐ\]ÐfgÐqrÐsÑsÔsÝŒN�3˜z¨A™~Ñ.Ô.Ñ/Ô/ÝŒG‰IŒIñ%
ô %
ˆÔ!õ %'¤IÝ˜J¨™NÑ+Ô+¸!ÈÐSTÐ^_ð%
ñ %
ô %
ˆÔ!õ ”z‘|”|ˆŒˆˆr!   c                 ó€  — t          j        ||fd¬¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }||d d …dd d …d d …f                              d¦  «        z  ||d d …dd d …d d …f                              d¦  «        z  z   }|S )Nr   rK   r   )rP   Úcatr  r  r  r  Ú	unsqueeze)r   Úlocal_featuresÚglobal_featuresÚfeaturesÚattnÚhybrid_featuress         r    r+   z"GLPNSelectiveFeatureFusion.forwardÂ  sÖ   € å”9˜n¨oÐ>ÀAÐFÑFÔFˆà×,Ò,¨XÑ6Ô6ˆØ×,Ò,¨XÑ6Ô6ˆØ×,Ò,¨XÑ6Ô6ˆà�|Š|˜HÑ%Ô%ˆà(¨4°°°°1°a°a°a¸¸¸°
Ô+;×+EÒ+EÀaÑ+HÔ+HÑHÈ?Ð]aØˆAˆAˆq�!�!�!�Q�Q�QˆJô^
ç
Š)�A‰,Œ,ñLñ ˆð Ðr!   )rû   r,   r2   s   @r    rú   rú   §  sV   ø€ € € € € ðð ð
$ð $ð $ð $ð $ð $ð*ð ð ð ð ð ð r!   rú   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )ÚGLPNDecoderStagec                 ó  •— t          ¦   «                              ¦   «          ||k    }|st          j        ||d¬¦  «        nt          j        ¦   «         | _        t          |¦  «        | _        t          j        ddd¬¦  «        | _	        d S )Nr   )r   r   ÚbilinearF©Úscale_factorÚmodeÚalign_corners)
r   r   r   r   r¥   Úconvolutionrú   ÚfusionÚUpsampleÚupsample)r   rý   rþ   Úshould_skipr   s       €r    r   zGLPNDecoderStage.__init__Ô  s|   ø€ Ý‰Œ×ÒÑÔÐØ! \Ò1ˆØVaÐt�2œ9 [°,ÈAÐNÑNÔNÐNÕgiÔgrÑgtÔgtˆÔÝ0°Ñ>Ô>ˆŒÝœ°¸ÐSXÐYÑYÔYˆŒˆˆr!   Nc                 óŠ   — |                       |¦  «        }|�|                      ||¦  «        }|                      |¦  «        }|S rk   )r  r  r  )r   Úhidden_stateÚresiduals      r    r+   zGLPNDecoderStage.forwardÛ  sE   € Ø×'Ò'¨Ñ5Ô5ˆØÐØŸ;š; |°XÑ>Ô>ˆLØ—}’} \Ñ2Ô2ˆàÐr!   rk   rp   r2   s   @r    r  r  Ó  sQ   ø€ € € € € ðZð Zð Zð Zð Zð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r!   r  c                   óZ   ‡ — e Zd Zˆ fd„Zdeej                 deej                 fd„Zˆ xZS )ÚGLPNDecoderc                 ó  •‡— t          ¦   «                              ¦   «          |j        d d d…         }|j        Št	          j        ˆfd„|D ¦   «         ¦  «        | _        d | j        d         _        t	          j        ddd¬¦  «        | _	        d S )NrI   c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS r³   )r  )rµ   r   rþ   s     €r    r·   z(GLPNDecoder.__init__.<locals>.<listcomp>ï  s$   ø€ ÐbÐbÐb¸[Õ˜k¨<Ñ8Ô8ÐbÐbÐbr!   r   r   r  Fr  )
r   r   rº   Údecoder_hidden_sizer   rÅ   Ústagesr  r  Úfinal_upsample)r   rF   Úreserved_hidden_sizesrþ   r   s      @€r    r   zGLPNDecoder.__init__è  s‘   øø€ Ý‰Œ×ÒÑÔÐà &Ô 3°D°D°b°DÔ 9ÐØÔ1ˆå”mØbÐbÐbÐbÐLaÐbÑbÔbñ
ô 
ˆŒð !%ˆŒ�AŒÔå œk°q¸zÐY^Ð_Ñ_Ô_ˆÔÐÐr!   rX   r�   c                 óÈ   — g }d }t          |d d d…         | j        ¦  «        D ]&\  }} |||¦  «        }|                     |¦  «         Œ'|                      |¦  «        |d<   |S )NrI   )r×   r%  rÂ   r&  )r   rX   Ústage_hidden_statesÚstage_hidden_stater  Ústages         r    r+   zGLPNDecoder.forwardö  s„   € Ø ÐØ!ÐÝ#& }°T°T°r°TÔ':¸D¼KÑ#HÔ#Hð 	;ð 	;ÑˆL˜%Ø!&  |Ð5GÑ!HÔ!HÐØ×&Ò&Ð'9Ñ:Ô:Ð:Ð:à"&×"5Ò"5Ð6HÑ"IÔ"IÐ˜BÑà"Ð"r!   ©	r-   r.   r/   r   ÚlistrP   rŸ   r+   r1   r2   s   @r    r!  r!  ç  sm   ø€ € € € € ð`ð `ð `ð `ð `ð	# T¨%¬,Ô%7ð 	#¸DÀÄÔ<Nð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#r!   r!  c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )Ú	SiLogLosszÿ
    Implements the Scale-invariant log scale loss [Eigen et al., 2014](https://huggingface.co/papers/1406.2283).

    $$L=\frac{1}{n} \sum_{i} d_{i}^{2}-\frac{1}{2 n^{2}}\left(\sum_{i} d_{i}^{2}\right)$$ where $d_{i}=\log y_{i}-\log
    y_{i}^{*}$.

    ç      à?c                 óV   •— t          ¦   «                              ¦   «          || _        d S rk   )r   r   Úlambd)r   r2  r   s     €r    r   zSiLogLoss.__init__  s$   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
ˆ
ˆ
r!   c                 ór  — |dk                          ¦   «         }t          j        ||         ¦  «        t          j        ||         ¦  «        z
  }t          j        t          j        |d¦  «                             ¦   «         | j        t          j        |                     ¦   «         d¦  «        z  z
  ¦  «        }|S )Nr   r   )ÚdetachrP   ÚlogrS   ÚpowÚmeanr2  )r   ÚpredÚtargetÚ
valid_maskÚdiff_logÚlosss         r    r+   zSiLogLoss.forward  s‘   € Ø˜q’j×(Ò(Ñ*Ô*ˆ
Ý”9˜V JÔ/Ñ0Ô0µ5´9¸TÀ*Ô=MÑ3NÔ3NÑNˆÝŒz�%œ) H¨aÑ0Ô0×5Ò5Ñ7Ô7¸$¼*ÅuÄyÐQY×Q^ÒQ^ÑQ`ÔQ`ÐbcÑGdÔGdÑ:dÑdÑeÔeˆàˆr!   )r0  r,   r2   s   @r    r/  r/    sV   ø€ € € € € ðð ðð ð ð ð ð ðð ð ð ð ð ð r!   r/  c                   óN   ‡ — e Zd Zˆ fd„Zdeej                 dej        fd„Zˆ xZS )ÚGLPNDepthEstimationHeadc                 ó  •— t          ¦   «                              ¦   «          || _        |j        }t	          j        t	          j        ||ddd¬¦  «        t	          j        d¬¦  «        t	          j        |dddd¬¦  «        ¦  «        | _        d S )Nr   r   r   F)Úinplace)	r   r   rF   r$  r   rÿ   r   r  Úhead)r   rF   Úchannelsr   s      €r    r   z GLPNDepthEstimationHead.__init__  s   ø€ Ý‰Œ×ÒÑÔÐàˆŒàÔ-ˆÝ”MÝŒI�h °aÀÈ1ÐMÑMÔMÝŒG˜EÐ"Ñ"Ô"ÝŒI�h ¨q¸ÀAÐFÑFÔFñ
ô 
ˆŒ	ˆ	ˆ	r!   rX   r�   c                 óÂ   — || j         j                 }|                      |¦  «        }t          j        |¦  «        | j         j        z  }|                     d¬¦  «        }|S )Nr   rK   )rF   Úhead_in_indexrA  rP   r  Ú	max_depthÚsqueeze)r   rX   Úpredicted_depths      r    r+   zGLPNDepthEstimationHead.forward$  sW   € à% d¤kÔ&?Ô@ˆàŸ	š	 -Ñ0Ô0ˆåœ-¨Ñ6Ô6¸¼Ô9NÑNˆØ)×1Ò1°aÐ1Ñ8Ô8ˆàÐr!   r,  r2   s   @r    r>  r>    sc   ø€ € € € € ð

ð 

ð 

ð 

ð 

ð	 T¨%¬,Ô%7ð 	¸E¼Lð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r!   r>  zg
    GLPN Model transformer with a lightweight depth estimation head on top e.g. for KITTI, NYUv2.
    )Úcustom_introc                   ó    ‡ — e Zd Zˆ fd„Ze	 	 	 	 d
dej        dej        dz  dedz  dedz  dedz  deej	                 e
z  fd	„¦   «         Zˆ xZS )ÚGLPNForDepthEstimationc                 óê   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S rk   )	r   r   rí   rå   r!  Údecoderr>  rA  rð   rñ   s     €r    r   zGLPNForDepthEstimation.__init__6  s`   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜fÑ%Ô%ˆŒ	Ý" 6Ñ*Ô*ˆŒÝ+¨FÑ3Ô3ˆŒ	ð 	�ŠÑÔÐÐÐr!   Nr&   ÚlabelsrY   rÙ   rÚ   r�   c                 ó¾  — |�|n| j         j        }|�|n| j         j        }|                      ||d|¬¦  «        }|r|j        n|d         }|                      |¦  «        }	|                      |	¦  «        }
d}|�t          ¦   «         } ||
|¦  «        }|s)|r|
f|dd…         z   }n|
f|dd…         z   }|�|f|z   n|S t          ||
|r|j        nd|j	        ¬¦  «        S )aç  
        labels (`torch.FloatTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth depth estimation maps for computing the loss.

        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, GLPNForDepthEstimation
        >>> 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("vinvino02/glpn-kitti")
        >>> model = GLPNForDepthEstimation.from_pretrained("vinvino02/glpn-kitti")

        >>> # 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"))
        ```NTró   r   r   )r<  rG  rX   rÕ   )
rF   rÚ   rÙ   rå   rX   rL  rA  r/  r   rÕ   )r   r&   rM  rY   rÙ   rÚ   rô   rf   rX   ÚoutrG  r<  Úloss_fctrt   s                 r    r+   zGLPNForDepthEstimation.forward@  s:  € ðb &1Ð%<�k�kÀ$Ä+ÔBYˆà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð —)’)ØØ/Ø!%Ø#ð	 ñ 
ô 
ˆð 2=ÐL˜Ô-Ð-À'È!Ä*ˆà�lŠl˜=Ñ)Ô)ˆØŸ)š) C™.œ.ˆàˆØÐÝ ‘{”{ˆHØ�8˜O¨VÑ4Ô4ˆDàð 	FØ#ð :Ø)Ð+¨g°a°b°b¬kÑ9��à)Ð+¨g°a°b°b¬kÑ9�Ø)-Ð)9�T�G˜fÑ$Ð$¸vÐEå#ØØ+Ø3GÐQ˜'Ô/Ð/ÈTØÔ)ð	
ñ 
ô 
ð 	
r!   )NNNN)r-   r.   r/   r   r	   rP   r÷   rø   rØ   rŸ   r   r+   r1   r2   s   @r    rJ  rJ  0  sØ   ø€ € € € € ðð ð ð ð ð ð ,0Ø)-Ø,0Ø#'ðR
ð R
àÔ'ðR
ð Ô! DÑ(ðR
ð   $™;ð	R
ð
 # T™kðR
ð ˜D‘[ðR
ð 
ˆuŒ|Ô	Ð3Ñ	3ðR
ð R
ð R
ñ „^ðR
ð R
ð R
ð R
ð R
r!   rJ  )rJ  r¡   rí   rä   )&r0   rR   rP   r   Úactivationsr   Úmodeling_outputsr   r   Úmodeling_utilsr   Úutilsr	   r
   Úconfiguration_glpnr   Ú
get_loggerr-   ÚloggerÚModuler   r4   ri   rr   ry   r€   r�   r¡   r°   rä   rí   rú   r  r!  r/  r>  rJ  Ú__all__r³   r!   r    ú<module>rZ     s   ðð Ð à €€€à €€€Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ -Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø *Ð *Ð *Ð *Ð *Ð *ð 
ˆÔ	˜HÑ	%Ô	%€ð)ð )ð )ð )ð ) ¤ñ )ô )ð )ð4Lð Lð Lð Lð L ¤ñ Lô Lð Lð`	ð 	ð 	ð 	ð 	�R”Yñ 	ô 	ð 	ðð ð ð ð �B”Iñ ô ð ð(ð ð ð ð ˜œ	ñ ô ð ð ð ð ð ð �”ñ ô ð ð0%ð %ð %ð %ð %�2”9ñ %ô %ð %ð2(ð (ð (ð (ð (�”	ñ (ô (ð (ðVU
ð U
ð U
ð U
ð U
�"”)ñ U
ô U
ð U
ðp ðð ð ð ð ˜/ñ ô ñ „ðð ð+
ð +
ð +
ð +
ð +
Ð#ñ +
ô +
ñ „ð+
ð\)ð )ð )ð )ð ) ¤ñ )ô )ð )ðXð ð ð ð �r”yñ ô ð ð(#ð #ð #ð #ð #�"”)ñ #ô #ð #ð6ð ð ð ð �”	ñ ô ð ð*ð ð ð ð ˜bœiñ ô ð ð2 €ððñ ô ð
^
ð ^
ð ^
ð ^
ð ^
Ð0ñ ^
ô ^
ñô ð
^
ðB VÐ
UÐ
U€€€r!   