ó
    ‡Ž¡jpg  ã                   óH  • S r SSKrSSKrSSKJr  SSKJr  SSKJrJr  SSK	J
r
  SSKJrJr  S	S
KJr  \R                   " \5      r " S S\R&                  5      r " S S\R&                  5      r " S S\R&                  5      r " S S\R&                  5      r " S S\R&                  5      r " S S\R&                  5      r " S S\R&                  5      r " S S\R&                  5      r " S S\R&                  5      r\ " S S\
5      5       r\ " S S \5      5       r " S! S"\R&                  5      r " S# S$\R&                  5      r  " S% S&\R&                  5      r! " S' S(\R&                  5      r" " S) S*\R&                  5      r#\" S+S,9 " S- S.\5      5       r$/ S/Qr%g)0zPyTorch GLPN model.é    N)Únné   )ÚACT2FN)ÚBaseModelOutputÚDepthEstimatorOutput)ÚPreTrainedModel)Úauto_docstringÚloggingé   )Ú
GLPNConfigc                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚGLPNOverlapPatchEmbeddingsé    z+Construct the overlapping patch embeddings.c                 ó˜   >• [         TU ]  5         [        R                  " UUUUUS-  S9U l        [        R
                  " U5      U l        g )Né   ©Úkernel_sizeÚstrideÚpadding)ÚsuperÚ__init__r   ÚConv2dÚprojÚ	LayerNormÚ
layer_norm)ÚselfÚ
patch_sizer   Únum_channelsÚhidden_sizeÚ	__class__s        €Ú´C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/glpn/modeling_glpn.pyr   Ú#GLPNOverlapPatchEmbeddings.__init__#   sC   ø€ Ü‰ÑÔÜ—I’IØØØ"ØØ !‘Oñ
ˆŒ	ô Ÿ,š, {Ó3ˆ�ó    c                 ó°   • U R                  U5      nUR                  u    p4nUR                  S5      R                  SS5      nU R	                  U5      nX$U4$ )Nr   r   )r   ÚshapeÚflattenÚ	transposer   )r   Úpixel_valuesÚ
embeddingsÚ_ÚheightÚwidths         r!   ÚforwardÚ"GLPNOverlapPatchEmbeddings.forward/   sZ   € Ø—Y‘Y˜|Ó,ˆ
Ø(×.Ñ.Ñˆˆ1�eð  ×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆ
Ø—_‘_ ZÓ0ˆ
Ø 5Ð(Ð(r#   )r   r   ©	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r-   Ú__static_attributes__Ú__classcell__©r    s   @r!   r   r       s   ø† Ù5õ
4÷)ð )r#   r   c                   ó8   ^ • \ rS rSrSrU 4S jr SS jrSrU =r$ )ÚGLPNEfficientSelfAttentioné:   zŸSegFormer's efficient self-attention mechanism. Employs the sequence reduction process introduced in the [PvT
paper](https://huggingface.co/papers/2102.12122).c                 ó8  >• [         TU ]  5         X l        X0l        U R                  U R                  -  S:w  a&  [	        SU R                   SU R                   S35      e[        U R                  U R                  -  5      U l        U R                  U R                  -  U l        [        R                  " U R                  U R                  5      U l
        [        R                  " U R                  U R                  5      U l        [        R                  " U R                  U R                  5      U l        [        R                  " UR                  5      U l        X@l        US:”  a6  [        R"                  " X"XDS9U l        [        R&                  " U5      U l        g g )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   r=   Úsequence_reduction_ratior    s        €r!   r   Ú#GLPNEfficientSelfAttention.__init__>   sI  ø€ Ü‰ÑÔØ&ÔØ#6Ô à×Ñ˜d×6Ñ6Ñ6¸!Ó;ÜØ# D×$4Ñ$4Ð#5ð 6Ø×2Ñ2Ð3°1ð6óð ô
 $' t×'7Ñ'7¸$×:RÑ:RÑ'RÓ#SˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y’Y˜t×/Ñ/°×1CÑ1CÓDˆŒ
Ü—9’9˜T×-Ñ-¨t×/AÑ/AÓBˆŒÜ—Y’Y˜t×/Ñ/°×1CÑ1CÓDˆŒ
ä—z’z &×"EÑ"EÓFˆŒà0ŒØ# aÓ'Ü—i’iØÐ6NñˆDŒGô !Ÿlšl¨;Ó7ˆD�Oð	 (r#   c                 óœ  • UR                   S S n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      nU R
                  S:”  aw  UR                   u  p‰n
UR                  SSS5      R                  XŠX#5      nU R                  U5      nUR                  XŠS5      R                  SSS5      nU R                  U5      n/ UR                   S S QSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      n[        R                  " X|R	                  SS5      5      nU[        R                  " U R                  5      -  n[         R"                  R%                  USS9nU R'                  U5      n[        R                  " Xý5      nUR                  SSSS5      R)                  5       nUR+                  5       S S U R,                  4-   nUR                  U5      nU(       a  UU4nU$ U4nU$ )Néÿÿÿÿr   r   r   éþÿÿÿ©Údimr   )r%   r@   rC   Úviewr'   rI   ÚpermuteÚreshaperJ   r   rD   rE   ÚtorchÚmatmulÚmathÚsqrtr   Ú
functionalÚsoftmaxrH   Ú
contiguousÚsizerA   )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-   Ú"GLPNEfficientSelfAttention.forwardY   s0  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆØ—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆà�=‰=˜1ÓØ0=×0CÑ0CÑ-ˆJ à)×1Ñ1°!°Q¸Ó:×BÑBÀ:Ð]cÓkˆMà ŸG™G MÓ2ˆMà)×1Ñ1°*ÈBÓO×WÑWÐXYÐ[\Ð^_Ó`ˆMØ ŸO™O¨MÓ:ˆMàL�]×(Ñ(¨¨"Ð-ÐL¨rÐL°4×3KÑ3KÑLˆØ—H‘H˜]Ó+×0Ñ0°Ó:×DÑDÀQÈÓJˆ	Ø—j‘j Ó/×4Ñ4°XÓ>×HÑHÈÈAÓNˆô !Ÿ<š<¨×5HÑ5HÈÈRÓ5PÓQÐà+¬d¯iªi¸×8PÑ8PÓ.QÑQÐô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÐIˆð Ÿ,™, Ó7ˆäŸš _ÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ%×*Ñ*Ð+BÓCˆæ6G�= /Ð2ˆàˆð O\ÐM]ˆàˆr#   )rA   r@   rH   r   rD   r   r=   rC   rJ   rI   rE   ©Fr/   r7   s   @r!   r9   r9   :   s   ø† ñ9õ8ð@  ÷-ò -r#   r9   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚGLPNSelfOutputéŠ   c                 ó¢   >• [         TU ]  5         [        R                  " X"5      U l        [        R
                  " UR                  5      U l        g ©N)r   r   r   rB   ÚdenserF   Úhidden_dropout_probrH   )r   rL   r   r    s      €r!   r   ÚGLPNSelfOutput.__init__‹   s4   ø€ Ü‰ÑÔÜ—Y’Y˜{Ó8ˆŒ
Ü—z’z &×"<Ñ"<Ó=ˆ�r#   c                 óJ   • U R                  U5      nU R                  U5      nU$ rt   ©ru   rH   )r   r_   Úinput_tensors      r!   r-   ÚGLPNSelfOutput.forward�   s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr#   ry   ©r0   r1   r2   r3   r   r-   r5   r6   r7   s   @r!   rq   rq   Š   s   ø† õ>÷
ð r#   rq   c                   ó2   ^ • \ rS rSrU 4S jrSS jrSrU =r$ )ÚGLPNAttentioné—   c                 ó`   >• [         TU ]  5         [        UUUUS9U l        [	        XS9U l        g )N)rL   r   r=   rM   )r   )r   r   r9   r   rq   ÚoutputrK   s        €r!   r   ÚGLPNAttention.__init__˜   s4   ø€ Ü‰ÑÔÜ.ØØ#Ø 3Ø%=ñ	
ˆŒ	ô % VÑEˆ�r#   c                 óf   • U R                  XX45      nU R                  US   U5      nU4USS  -   nU$ )Nr   r   )r   r�   )r   r_   r+   r,   r`   Úself_outputsÚattention_outputrm   s           r!   r-   ÚGLPNAttention.forward¢   s@   € Ø—y‘y ¸ÓQˆàŸ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr#   )r�   r   ro   r|   r7   s   @r!   r~   r~   —   s   ø† õF÷ò r#   r~   c                   ó6   ^ • \ rS rSrSrSU 4S jjrS rSrU =r$ )ÚGLPNDepthWiseConvé«   zVDepthwise convolution used in the Mix-FFN to implicitly encode positional information.c           	      ó\   >• [         TU ]  5         [        R                  " XSSSUS9U l        g )Nr   r   )Úgroups)r   r   r   r   Údwconv)r   rS   r    s     €r!   r   ÚGLPNDepthWiseConv.__init__®   s&   ø€ Ü‰ÑÔÜ—i’i ¨!¨Q°¸#Ñ>ˆ�r#   c                 óÌ   • UR                   u  pEnUR                  SS5      R                  XFX#5      nU R                  U5      nUR	                  S5      R                  SS5      nU$ )Nr   r   )r%   r'   rT   rŒ   r&   )r   r_   r+   r,   rd   re   r   s          r!   r-   ÚGLPNDepthWiseConv.forward²   sc   € Ø,9×,?Ñ,?Ñ)ˆ
˜\Ø%×/Ñ/°°1Ó5×:Ñ:¸:ÐU[ÓcˆØŸ™ MÓ2ˆØ%×-Ñ-¨aÓ0×:Ñ:¸1¸aÓ@ˆØÐr#   )rŒ   )i   r/   r7   s   @r!   rˆ   rˆ   «   s   ø† Ù`÷?÷ð r#   rˆ   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú
GLPNMixFFNé»   c                 ó   >• [         TU ]  5         U=(       d    Un[        R                  " X#5      U l        [        U5      U l        [        UR                  [        5      (       a  [        UR                     U l        OUR                  U l        [        R                  " X45      U l        [        R                  " UR                  5      U l        g rt   )r   r   r   rB   Údense1rˆ   rŒ   Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnÚdense2rF   rv   rH   )r   rL   Úin_featuresÚhidden_featuresÚout_featuresr    s        €r!   r   ÚGLPNMixFFN.__init__¼   sŽ   ø€ Ü‰ÑÔØ#×2 {ˆÜ—i’i Ó=ˆŒÜ'¨Ó8ˆŒÜ�f×'Ñ'¬×-Ñ-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÔ$Ü—i’i Ó>ˆŒÜ—z’z &×"<Ñ"<Ó=ˆ�r#   c                 óÔ   • U R                  U5      nU R                  XU5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU$ rt   )r”   rŒ   r˜   rH   r™   )r   r_   r+   r,   s       r!   r-   ÚGLPNMixFFN.forwardÈ   s`   € ØŸ™ MÓ2ˆØŸ™ M¸5ÓAˆØ×0Ñ0°Ó?ˆØŸ™ ]Ó3ˆØŸ™ MÓ2ˆØŸ™ ]Ó3ˆØÐr#   )r”   r™   rH   rŒ   r˜   )NNr|   r7   s   @r!   r‘   r‘   »   s   ø† ÷
>÷ð r#   r‘   c                   ó„   ^ • \ rS rSrSrSS\SS4U 4S jjjrS\R                  S\R                  4S jr	S\
4S	 jrS
rU =r$ )ÚGlpnDropPathéÓ   zÃStochastic depth (DropPath) per sample, for residual blocks.

Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
<https://arxiv.org/abs/1603.09382>`_.
Ú	drop_probÚreturnNc                 ó.   >• [         TU ]  5         Xl        g rt   )r   r   r£   )r   r£   r    s     €r!   r   ÚGlpnDropPath.__init__Ú   s   ø€ Ü‰ÑÔØ"�r#   r_   c                 óV  • U R                   S:X  d  U R                  (       d  U$ SU R                   -
  nUR                  S   4SUR                  S-
  -  -   n[        R
                  " X1R                  UR                  S9n[        R                  " XB-   5      nUR                  U5      U-  $ )Nç        r   r   )r   )ÚdtypeÚdevice)
r£   Útrainingr%   ÚndimrW   Úrandr©   rª   ÚfloorÚdiv)r   r_   Ú	keep_probr%   Úrandom_tensors        r!   r-   ÚGlpnDropPath.forwardÞ   s“   € Ø�>‰>˜SÓ ¨¯¯Ø Ð Ø˜Ÿ™Ñ&ˆ	Ø×$Ñ$ QÑ'Ð)¨D°M×4FÑ4FÈÑ4JÑ,KÑKˆÜŸ
š
 5×0CÑ0CÈM×L`ÑL`ÑaˆÜŸš MÑ$=Ó>ˆØ× Ñ  Ó+¨mÑ;Ð;r#   c                 ó    • SU R                    3$ )Nzp=©r£   )r   s    r!   Ú
extra_reprÚGlpnDropPath.extra_reprç   s   € Ø�D—N‘NÐ#Ð$Ð$r#   r´   )r¨   )r0   r1   r2   r3   r4   Úfloatr   rW   ÚTensorr-   r—   rµ   r5   r6   r7   s   @r!   r¡   r¡   Ó   sL   ø† ññ# %ð #°$÷ #ð #ð< U§\¡\ð <°e·l±lô <ð%˜C÷ %ò %r#   r¡   c                   ó6   ^ • \ rS rSrSrU 4S jrSS jrSrU =r$ )Ú	GLPNLayeréì   zCThis corresponds to the Block class in the original implementation.c                 ó>  >• [         TU ]  5         [        R                  " U5      U l        [        UUUUS9U l        US:”  a  [        U5      O[        R                  " 5       U l	        [        R                  " U5      U l
        [        X&-  5      n[        XUS9U l        g )N)r   r=   rM   r¨   )rš   r›   )r   r   r   r   Úlayer_norm_1r~   Ú	attentionr¡   ÚIdentityÚ	drop_pathÚlayer_norm_2r?   r‘   Úmlp)	r   rL   r   r=   rÀ   rM   Ú	mlp_ratioÚmlp_hidden_sizer    s	           €r!   r   ÚGLPNLayer.__init__ï   s   ø€ Ü‰ÑÔÜŸLšL¨Ó5ˆÔÜ&ØØ#Ø 3Ø%=ñ	
ˆŒð 5>À³Oœ iÔ0ÌÏÊËˆŒÜŸLšL¨Ó5ˆÔÜ˜kÑ5Ó6ˆÜ˜fÈÑ_ˆ�r#   c                 óþ   • U R                  U R                  U5      UUUS9nUS   nUSS  nU R                  U5      nXa-   nU R                  U R	                  U5      X#5      nU R                  U5      nX�-   n	U	4U-   nU$ )N)r`   r   r   )r¾   r½   rÀ   rÂ   rÁ   )
r   r_   r+   r,   r`   Úself_attention_outputsr…   rm   Ú
mlp_outputÚlayer_outputs
             r!   r-   ÚGLPNLayer.forwardý   s¤   € Ø!%§¡Ø×Ñ˜mÓ,ØØØ/ð	 "0ð "
Ðð 2°!Ñ4ÐØ(¨¨Ð,ˆð  Ÿ>™>Ð*:Ó;ÐØ(Ñ8ˆà—X‘X˜d×/Ñ/°Ó>ÀÓNˆ
ð —^‘^ JÓ/ˆ
Ø!Ñ1ˆà�/ GÑ+ˆàˆr#   )r¾   rÀ   r½   rÁ   rÂ   ro   r/   r7   s   @r!   rº   rº   ì   s   ø† ÙMõ`÷ò r#   rº   c                   ó8   ^ • \ rS rSrU 4S jr   SS jrSrU =r$ )ÚGLPNEncoderi  c                 óÀ  >• [         T
U ]  5         Xl        [        R                  " SUR
                  [        UR                  5      SS9 Vs/ s H  o"R                  5       PM     nn/ n[        UR                  5       Hg  nUR                  [        UR                  U   UR                  U   US:X  a  UR                  OUR                   US-
     UR                   U   S95        Mi     ["        R$                  " U5      U l        / nSn[        UR                  5       H¹  n/ nUS:w  a  XqR                  US-
     -  n[        UR                  U   5       HY  n	UR                  [)        UUR                   U   UR*                  U   X7U	-      UR,                  U   UR.                  U   S95        M[     UR                  ["        R$                  " U5      5        M»     ["        R$                  " U5      U l        ["        R$                  " [        UR                  5       Vs/ s H&  n["        R2                  " UR                   U   5      PM(     sn5      U l        g s  snf s  snf )Nr   Úcpu)rª   r   )r   r   r   r   )r   r=   rÀ   rM   rÃ   )r   r   rL   rW   ÚlinspaceÚdrop_path_rateÚsumÚdepthsÚitemÚrangeÚnum_encoder_blocksÚappendr   Úpatch_sizesÚstridesr   Úhidden_sizesr   Ú
ModuleListÚpatch_embeddingsrº   r=   Ú	sr_ratiosÚ
mlp_ratiosÚblockr   r   )r   rL   ÚxÚdprr)   ÚiÚblocksÚcurÚlayersÚjr    s             €r!   r   ÚGLPNEncoder.__init__  s  ø€ Ü‰ÑÔØŒô "'§¢°°6×3HÑ3HÌ#ÈfÏmÉmÓJ\ÐejÒ!kÓlÒ!k˜A�v‰vŽxÑ!kˆÐlð ˆ
Ü�v×0Ñ0Ö1ˆAØ×ÑÜ*Ø%×1Ñ1°!Ñ4Ø!Ÿ>™>¨!Ñ,Ø89¸Q» ×!4Ò!4ÀF×DWÑDWÐXYÐ\]ÑX]ÑD^Ø &× 3Ñ 3°AÑ 6ñ	öñ 2ô !#§¢¨jÓ 9ˆÔð ˆØˆÜ�v×0Ñ0Ö1ˆAàˆFØ�A‹vØ—}‘} Q¨¡UÑ+Ñ+�Ü˜6Ÿ=™=¨Ñ+Ö,�Ø—‘ÜØØ$*×$7Ñ$7¸Ñ$:Ø,2×,FÑ,FÀqÑ,IØ"%¨A¡g¡,Ø17×1AÑ1AÀ!Ñ1DØ"(×"3Ñ"3°AÑ"6ñö	ñ -ð �M‰Mœ"Ÿ-š-¨Ó/Ö0ñ! 2ô$ —]’] 6Ó*ˆŒ
ô Ÿ-š-Ü;@À×AZÑAZÔ;[Ó\Ò;[°aŒR�\Š\˜&×-Ñ-¨aÑ0Ö1Ñ;[Ñ\ó
ˆ�ùòO mùòP ]s   ÁIÈ-Ic                 ó2  • U(       a  SOS nU(       a  SOS nUR                   S   nUn[        [        U R                  U R                  U R
                  5      5       H“  u  pšU
u  p¼nU" U5      u  pŽn[        U5       H&  u  nnU" XŽXò5      nUS   nU(       d  M  UUS   4-   nM(     U" U5      nUR                  X~US5      R                  SSSS5      R                  5       nU(       d  MŽ  XX4-   nM•     U(       d  [        S X…U4 5       5      $ [        UUUS9$ )	N© r   r   rP   r   r   c              3   ó.   #   • U  H  oc  M  Uv •  M     g 7frt   rè   )Ú.0Úvs     r!   Ú	<genexpr>Ú&GLPNEncoder.forward.<locals>.<genexpr>g  s   é € ÐmÒ$[˜qŸ™Ò$[ùs   ‚Œ	©Úlast_hidden_stater_   Ú
attentions)r%   Ú	enumerateÚziprÛ   rÞ   r   rV   rU   r]   Útupler   )r   r(   r`   Úoutput_hidden_statesÚreturn_dictÚall_hidden_statesÚall_self_attentionsrd   r_   Úidxrß   Úembedding_layerÚblock_layerÚ
norm_layerr+   r,   rá   ÚblkÚlayer_outputss                      r!   r-   ÚGLPNEncoder.forwardH  s3  € ö #7™B¸DÐÞ$5™b¸4Ðà!×'Ñ'¨Ñ*ˆ
à$ˆÜ¤ D×$9Ñ$9¸4¿:¹:ÀtÇÁÓ WÖX‰FˆCØ78Ñ4ˆO¨*á+:¸=Ó+IÑ(ˆM 5ä# KÖ0‘��3Ù # M¸5Ó T�Ø -¨aÑ 0�ß$Ð$Ø*=ÀÈqÑAQÐ@SÑ*SÒ'ñ	 1ñ ' }Ó5ˆMà)×1Ñ1°*ÀeÈRÓP×XÑXÐYZÐ\]Ð_`ÐbcÓd×oÑoÓqˆMß#Ð#Ø$5Ð8HÑ$HÒ!ñ Yö" ÜÑm ]ÐGZÑ$[ÓmÓmÐmÜØ+Ø+Ø*ñ
ð 	
r#   )rÞ   rL   r   rÛ   )FFTr|   r7   s   @r!   rÌ   rÌ     s   ø† õ.
ðf  Ø"Ø÷$
ò $
r#   rÌ   c                   ó0   • \ rS rSr% \\S'   SrSrSr/ r	Sr
g)ÚGLPNPreTrainedModelio  rL   Úglpnr(   )Úimagerè   N)r0   r1   r2   r3   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_no_split_modulesr5   rè   r#   r!   r   r   o  s   ‡ àÓØÐØ$€OØ!ÐØÓr#   r   c                   ó†   ^ • \ rS rSrU 4S jr\   SS\R                  S\S-  S\S-  S\S-  S\	\
-  4
S	 jj5       rS
rU =r$ )Ú	GLPNModelix  c                 óp   >• [         TU ]  U5        Xl        [        U5      U l        U R                  5         g rt   )r   r   rL   rÌ   ÚencoderÚ	post_init©r   rL   r    s     €r!   r   ÚGLPNModel.__init__{  s/   ø€ Ü‰Ñ˜Ô ØŒô # 6Ó*ˆŒð 	�‰Õr#   Nr(   r`   rô   rõ   r¤   c                 ó0  • Ub  UOU R                   R                  nUb  UOU R                   R                  nUb  UOU R                   R                  nU R	                  UUUUS9nUS   nU(       d	  U4USS  -   $ [        UUR                  UR                  S9$ )N©r`   rô   rõ   r   r   rî   )rL   r`   rô   rõ   r  r   r_   rð   )r   r(   r`   rô   rõ   ÚkwargsÚencoder_outputsÚsequence_outputs           r!   r-   ÚGLPNModel.forward…  s·   € ð 2CÑ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ñ$DÑ È$Ï+É+×JjÑJjð 	ð &1Ñ%<‘kÀ$Ç+Á+×BYÑBYˆàŸ,™,ØØ/Ø!5Ø#ð	 'ð 
ˆð *¨!Ñ,ˆæØ#Ð%¨¸¸Ð(;Ñ;Ð;äØ-Ø)×7Ñ7Ø&×1Ñ1ñ
ð 	
r#   )rL   r  )NNN)r0   r1   r2   r3   r   r	   rW   ÚFloatTensorÚboolró   r   r-   r5   r6   r7   s   @r!   r	  r	  x  sn   ø† õð ð
 *.Ø,0Ø#'ñ
à×'Ñ'ð
ð   $™;ð
ð # T™kð	
ð
 ˜D‘[ð
ð 
�Ñ	 ô
ó ö
r#   r	  c                   ó6   ^ • \ rS rSrSrSU 4S jjrS rSrU =r$ )ÚGLPNSelectiveFeatureFusioni§  zï
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           
      óX  >• [         TU ]  5         [        R                  " [        R                  " [        US-  5      USSSS9[        R                  " U5      [        R                  " 5       5      U l        [        R                  " [        R                  " U[        US-  5      SSSS9[        R                  " [        US-  5      5      [        R                  " 5       5      U l	        [        R                  " [        US-  5      SSSSS9U l
        [        R                  " 5       U l        g )Nr   r   r   )Úin_channelsÚout_channelsr   r   r   )r   r   r   Ú
Sequentialr   r?   ÚBatchNorm2dÚReLUÚconvolutional_layer1Úconvolutional_layer2Úconvolutional_layer3ÚSigmoidÚsigmoid)r   Ú
in_channelr    s     €r!   r   Ú#GLPNSelectiveFeatureFusion.__init__­  sÝ   ø€ Ü‰ÑÔä$&§M¢MÜ�IŠI¤# j°1¡nÓ"5ÀJÐ\]ÐfgÐqrÑsÜ�NŠN˜:Ó&Ü�GŠG‹Ió%
ˆÔ!ô %'§M¢MÜ�IŠI *¼3¸zÈA¹~Ó;NÐ\]ÐfgÐqrÑsÜ�NŠNœ3˜z¨A™~Ó.Ó/Ü�GŠG‹Ió%
ˆÔ!ô %'§I¢IÜ˜J¨™NÓ+¸!ÈÐSTÐ^_ñ%
ˆÔ!ô —z’z“|ˆ�r#   c                 ó<  • [         R                  " X4SS9nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nXS S 2SS S 2S S 24   R                  S5      -  X$S S 2SS S 2S S 24   R                  S5      -  -   nU$ )Nr   rR   r   )rW   Úcatr  r   r!  r#  Ú	unsqueeze)r   Úlocal_featuresÚglobal_featuresÚfeaturesÚattnÚhybrid_featuress         r!   r-   Ú"GLPNSelectiveFeatureFusion.forwardÂ  s¢   € ä—9’9˜nÐ>ÀAÑFˆà×,Ñ,¨XÓ6ˆØ×,Ñ,¨XÓ6ˆØ×,Ñ,¨XÓ6ˆà�|‰|˜HÓ%ˆà(²°1²aº°
Ñ+;×+EÑ+EÀaÓ+HÑHÈ?Úˆq’!’QˆJñ^
ç
‰)�A‹,ñLñ ˆð Ðr#   )r  r   r!  r#  )é@   r/   r7   s   @r!   r  r  §  s   ø† ñ÷
$÷*ð r#   r  c                   ó2   ^ • \ rS rSrU 4S jrSS jrSrU =r$ )ÚGLPNDecoderStageiÓ  c                 óì   >• [         TU ]  5         X:H  nU(       d  [        R                  " XSS9O[        R                  " 5       U l        [        U5      U l        [        R                  " SSSS9U l	        g )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   ÚGLPNDecoderStage.__init__Ô  sX   ø€ Ü‰ÑÔØ!Ñ1ˆÞVaœ2Ÿ9š9 [ÈAÒNÔgi×grÒgrÓgtˆÔÜ0°Ó>ˆŒÜŸš°¸ÐSXÑYˆ�r#   c                 ór   • U R                  U5      nUb  U R                  X5      nU R                  U5      nU$ rt   ©r8  r9  r;  )r   Úhidden_stateÚresiduals      r!   r-   ÚGLPNDecoderStage.forwardÛ  s:   € Ø×'Ñ'¨Ó5ˆØÑØŸ;™; |Ó>ˆLØ—}‘} \Ó2ˆàÐr#   r?  rt   r|   r7   s   @r!   r1  r1  Ó  s   ø† õZ÷	ò 	r#   r1  c                   ón   ^ • \ rS rSrU 4S jrS\\R                     S\\R                     4S jrSr	U =r
$ )ÚGLPNDecoderiç  c           	      ó0  >• [         TU ]  5         UR                  S S S2   nUR                  n[        R
                  " U Vs/ s H  n[        XC5      PM     sn5      U l        S U R                  S   l        [        R                  " SSSS9U l
        g s  snf )NrP   r   r   r3  Fr4  )r   r   rÙ   Údecoder_hidden_sizer   rÚ   r1  Ústagesr9  r:  Úfinal_upsample)r   rL   Úreserved_hidden_sizesr  r   r    s        €r!   r   ÚGLPNDecoder.__init__è  s†   ø€ Ü‰ÑÔà &× 3Ñ 3±D°b°DÑ 9ÐØ×1Ñ1ˆä—m’mÙLaÓbÒLa¸[Ô˜kÖ8ÑLaÑbó
ˆŒð !%ˆ�‰�A‰Ôä Ÿkšk°q¸zÐY^Ñ_ˆÕùò cs   ÁBr_   r¤   c                 ó²   • / nS n[        US S S2   U R                  5       H  u  pEU" XC5      nUR                  U5        M      U R                  U5      US'   U$ )NrP   )rò   rG  rÖ   rH  )r   r_   Ústage_hidden_statesÚstage_hidden_stater@  Ústages         r!   r-   ÚGLPNDecoder.forwardö  si   € Ø ÐØ!ÐÜ#& }±T°r°TÑ':¸D¿K¹KÖ#HÑˆLÙ!& |Ó!HÐØ×&Ñ&Ð'9Ö:ñ $Ið #'×"5Ñ"5Ð6HÓ"IÐ˜BÑà"Ð"r#   )rH  rG  ©r0   r1   r2   r3   r   ÚlistrW   r¸   r-   r5   r6   r7   s   @r!   rD  rD  ç  s3   ø† õ`ð	# T¨%¯,©,Ñ%7ð 	#¸DÀÇÁÑ<N÷ 	#ò 	#r#   rD  c                   ó6   ^ • \ rS rSrSrSU 4S jjrS rSrU =r$ )Ú	SiLogLossi  zï
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                 ó.   >• [         TU ]  5         Xl        g rt   )r   r   Úlambd)r   rU  r    s     €r!   r   ÚSiLogLoss.__init__  s   ø€ Ü‰ÑÔØ�
r#   c                 óf  • US:„  R                  5       n[        R                  " X#   5      [        R                  " X   5      -
  n[        R                  " [        R                  " US5      R                  5       U R                  [        R                  " UR                  5       S5      -  -
  5      nU$ )Nr   r   )ÚdetachrW   ÚlogrZ   ÚpowÚmeanrU  )r   ÚpredÚtargetÚ
valid_maskÚdiff_logÚlosss         r!   r-   ÚSiLogLoss.forward  s�   € Ø˜q‘j×(Ñ(Ó*ˆ
Ü—9’9˜VÑ/Ó0´5·9²9¸TÑ=MÓ3NÑNˆÜ�zŠzœ%Ÿ)š) H¨aÓ0×5Ñ5Ó7¸$¿*¹*ÄuÇyÂyÐQY×Q^ÑQ^ÓQ`ÐbcÓGdÑ:dÑdÓeˆàˆr#   )rU  )g      à?r/   r7   s   @r!   rS  rS    s   ø† ñ÷÷ð r#   rS  c                   óh   ^ • \ rS rSrU 4S jrS\\R                     S\R                  4S jrSr	U =r
$ )ÚGLPNDepthEstimationHeadi  c                 óú   >• [         TU ]  5         Xl        UR                  n[        R
                  " [        R                  " X"SSSS9[        R                  " SS9[        R                  " USSSSS95      U l        g )Nr   r   r   F)Úinplace)	r   r   rL   rF  r   r  r   r  Úhead)r   rL   Úchannelsr    s      €r!   r   Ú GLPNDepthEstimationHead.__init__  s`   ø€ Ü‰ÑÔàŒà×-Ñ-ˆÜ—M’MÜ�IŠI�h°aÀÈ1ÑMÜ�GŠG˜EÑ"Ü�IŠI�h ¨q¸ÀAÑFó
ˆ�	r#   r_   r¤   c                 óÐ   • XR                   R                     nU R                  U5      n[        R                  " U5      U R                   R
                  -  nUR                  SS9nU$ )Nr   rR   )rL   Úhead_in_indexrf  rW   r#  Ú	max_depthÚsqueeze)r   r_   Úpredicted_depths      r!   r-   ÚGLPNDepthEstimationHead.forward$  sX   € à%§k¡k×&?Ñ&?Ñ@ˆàŸ	™	 -Ó0ˆäŸ-š-¨Ó6¸¿¹×9NÑ9NÑNˆØ)×1Ñ1°aÐ1Ð8ˆàÐr#   )rL   rf  rP  r7   s   @r!   rc  rc    s-   ø† õ

ð	 T¨%¯,©,Ñ%7ð 	¸E¿L¹L÷ 	ò 	r#   rc  zg
    GLPN Model transformer with a lightweight depth estimation head on top e.g. for KITTI, NYUv2.
    )Úcustom_introc                   óÀ   ^ • \ rS rSrU 4S jr\    SS\R                  S\R                  S-  S\S-  S\S-  S\S-  S	\	\R                     \-  4S
 jj5       rSrU =r$ )ÚGLPNForDepthEstimationi0  c                 ó¤   >• [         TU ]  U5        [        U5      U l        [	        U5      U l        [        U5      U l        U R                  5         g rt   )	r   r   r	  r  rD  Údecoderrc  rf  r  r  s     €r!   r   ÚGLPNForDepthEstimation.__init__6  s@   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	Ü" 6Ó*ˆŒÜ+¨FÓ3ˆŒ	ð 	�‰Õr#   Nr(   Úlabelsr`   rô   rõ   r¤   c                 óÞ  • Ub  UOU R                   R                  nUb  UOU R                   R                  nU R                  UUSUS9nU(       a  UR                  OUS   nU R                  U5      n	U R                  U	5      n
SnUb  [        5       nU" X¢5      nU(       d%  U(       a
  U
4USS -   nO	U
4USS -   nUb  U4U-   $ U$ [        UU
U(       a  UR                  OSUR                  S9$ )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`  rm  r_   rð   )
rL   rõ   rô   r  r_   rs  rf  rS  r   rð   )r   r(   ru  r`   rô   rõ   r  rm   r_   Úoutrm  r`  Úloss_fctr�   s                 r!   r-   ÚGLPNForDepthEstimation.forward@  s  € ðb &1Ñ%<‘kÀ$Ç+Á+×BYÑBYˆà$8Ñ$DÑ È$Ï+É+×JjÑJjð 	ð —)‘)ØØ/Ø!%Ø#ð	 ð 
ˆö 2=˜×-Ò-À'È!Á*ˆà�l‰l˜=Ó)ˆØŸ)™) C›.ˆàˆØÑÜ “{ˆHÙ˜OÓ4ˆDæÞ#Ø)Ð+¨g°a°b¨kÑ9‘à)Ð+¨g°a°b¨kÑ9�Ø)-Ñ)9�T�G˜fÑ$ÐE¸vÐEä#ØØ+Þ3G˜'×/Ò/ÈTØ×)Ñ)ñ	
ð 	
r#   )rs  r  rf  )NNNN)r0   r1   r2   r3   r   r	   rW   r  r  ró   r¸   r   r-   r5   r6   r7   s   @r!   rq  rq  0  s˜   ø† õð ð ,0Ø)-Ø,0Ø#'ñR
à×'Ñ'ðR
ð ×!Ñ! DÑ(ðR
ð   $™;ð	R
ð
 # T™kðR
ð ˜D‘[ðR
ð 
ˆu�|‰|Ñ	Ð3Ñ	3ôR
ó öR
r#   rq  )rq  rº   r	  r   )&r4   rY   rW   r   Úactivationsr   Úmodeling_outputsr   r   Úmodeling_utilsr   Úutilsr	   r
   Úconfiguration_glpnr   Ú
get_loggerr0   ÚloggerÚModuler   r9   rq   r~   rˆ   r‘   r¡   rº   rÌ   r   r	  r  r1  rD  rS  rc  rq  Ú__all__rè   r#   r!   Ú<module>rƒ     s†  ðñ ã ã Ý å !ß EÝ -ß ,Ý *ð 
×	Ò	˜HÓ	%€ô) §¡ô )ô4L §¡ô Lô`	�R—Y‘Yô 	ô�B—I‘Iô ô(˜Ÿ	™	ô ô �—‘ô ô0%�2—9‘9ô %ô2(�—	‘	ô (ôVU
�"—)‘)ô U
ðp ô˜/ó ó ðð ô+
Ð#ó +
ó ð+
ô\) §¡ô )ôX�r—y‘yô ô(#�"—)‘)ô #ô6�—	‘	ô ô*˜bŸi™iô ñ2 ðñô
^
Ð0ó ^
óð
^
òB V�r#   