
    fThq              	          S r SSKrSSKJrJrJrJ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Jr  SSKJr  \R2                  " \5      rS7S\R8                  S\S\S\R8                  4S jj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/ " S0 S1\	R@                  5      r0\" S2S39 " S4 S5\*5      5       r1/ S6Qr2g)8zPyTorch GLPN model.    N)ListOptionalTupleUnion)nn   )ACT2FN)BaseModelOutputDepthEstimatorOutput)PreTrainedModel) find_pruneable_heads_and_indicesprune_linear_layer)auto_docstringlogging   )
GLPNConfiginput	drop_probtrainingreturnc                    US:X  d  U(       d  U $ SU-
  nU R                   S   4SU R                  S-
  -  -   nU[        R                  " X@R                  U R
                  S9-   nUR                  5         U R                  U5      U-  nU$ )a*  
Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

Comment by Ross Wightman: This is the same as the DropConnect impl I created for EfficientNet, etc networks,
however, the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper...
See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for changing the
layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use 'survival rate' as the
argument.
        r   r   )r   )dtypedevice)shapendimtorchrandr   r   floor_div)r   r   r   	keep_probr   random_tensoroutputs          ^/var/www/auris/envauris/lib/python3.13/site-packages/transformers/models/glpn/modeling_glpn.py	drop_pathr%   $   s     CxII[[^

Q 77E

5ELL YYMYYy!M1FM    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$ )GLPNDropPath9   zXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nr   r   c                 .   > [         TU ]  5         Xl        g N)super__init__r   )selfr   	__class__s     r$   r-   GLPNDropPath.__init__<   s    "r&   hidden_statesc                 B    [        XR                  U R                  5      $ r+   )r%   r   r   )r.   r1   s     r$   forwardGLPNDropPath.forward@   s    FFr&   c                 8    SR                  U R                  5      $ )Nzp={})formatr   )r.   s    r$   
extra_reprGLPNDropPath.extra_reprC   s    }}T^^,,r&   )r   r+   )__name__
__module____qualname____firstlineno____doc__r   floatr-   r   Tensorr3   strr7   __static_attributes____classcell__r/   s   @r$   r(   r(   9   sQ    b#(5/ #T # #GU\\ Gell G-C - -r&   r(   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )GLPNOverlapPatchEmbeddingsH   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)r,   r-   r   Conv2dproj	LayerNorm
layer_norm)r.   
patch_sizerK   num_channelshidden_sizer/   s        r$   r-   #GLPNOverlapPatchEmbeddings.__init__K   sC    II"!O
	 ,,{3r&   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$ )NrH   r   )rN   r   flatten	transposerP   )r.   pixel_values
embeddings_heightwidths         r$   r3   "GLPNOverlapPatchEmbeddings.forwardW   sZ    YY|,
(..1e  ''*44Q:
__Z0
5((r&   )rP   rN   	r9   r:   r;   r<   r=   r-   r3   rA   rB   rC   s   @r$   rE   rE   H   s    5
4) )r&   rE   c                   >   ^  \ rS rSrSrU 4S jrS r SS jrSrU =r	$ )GLPNEfficientSelfAttentionb   zSegFormer's efficient self-attention mechanism. Employs the sequence reduction process introduced in the [PvT
paper](https://arxiv.org/abs/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   )rJ   rK   )r,   r-   rS   num_attention_heads
ValueErrorintattention_head_sizeall_head_sizer   LinearquerykeyvalueDropoutattention_probs_dropout_probdropoutsr_ratiorM   srrO   rP   r.   configrS   rd   sequence_reduction_ratior/   s        r$   r-   #GLPNEfficientSelfAttention.__init__f   sI   &#6 d666!;#D$4$4#5 622316 
 $'t'7'7$:R:R'R#S !558P8PPYYt//1C1CD
99T--t/A/ABYYt//1C1CD
zz&"E"EF0#a'ii6NDG !ll;7DO	 (r&   c                     UR                  5       S S U R                  U R                  4-   nUR                  U5      nUR	                  SSSS5      $ )Nr   rH   r   r   )sizerd   rg   viewpermute)r.   r1   	new_shapes      r$   transpose_for_scores/GLPNEfficientSelfAttention.transpose_for_scores   sT    !&&("-1I1I4KcKc0dd	%**95$$Q1a00r&   c                    U R                  U R                  U5      5      nU R                  S:  aw  UR                  u  pgnUR	                  SSS5      R                  XhX#5      nU R                  U5      nUR                  XhS5      R	                  SSS5      nU R                  U5      nU R                  U R                  U5      5      n	U R                  U R                  U5      5      n
[        R                  " XYR                  SS5      5      nU[        R                  " U R                  5      -  n[         R"                  R%                  USS9nU R'                  U5      n[        R                  " X5      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  X4nU$ U4nU$ )Nr   r   rH   rw   dimr   )r|   rj   rp   r   rz   reshaperq   rP   rk   rl   r   matmulrW   mathsqrtrg   r   
functionalsoftmaxro   
contiguousrx   rh   ry   )r.   r1   r[   r\   output_attentionsquery_layer
batch_sizeseq_lenrR   	key_layervalue_layerattention_scoresattention_probscontext_layernew_context_layer_shapeoutputss                   r$   r3   "GLPNEfficientSelfAttention.forward   s    //

=0IJ==10=0C0C-J)11!Q:BB:]ckM GGM2M)11*BOWWXY[\^_`M OOM:M--dhh}.EF	//

=0IJ !<<5H5HR5PQ+dii8P8P.QQ --//0@b/I ,,7_B%--aAq9DDF"/"4"4"6s";t?Q?Q>S"S%**+BC6G=2 O\M]r&   )rh   rg   ro   rS   rk   rP   rd   rj   rq   rp   rl   F)
r9   r:   r;   r<   r=   r-   r|   r3   rA   rB   rC   s   @r$   r`   r`   b   s!    1861  * *r&   r`   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 r+   )r,   r-   r   ri   denserm   hidden_dropout_probro   )r.   rs   rS   r/   s      r$   r-   GLPNSelfOutput.__init__   s4    YY{8
zz&"<"<=r&   c                 J    U R                  U5      nU R                  U5      nU$ r+   r   ro   )r.   r1   input_tensors      r$   r3   GLPNSelfOutput.forward   s$    

=1]3r&   r   r9   r:   r;   r<   r-   r3   rA   rB   rC   s   @r$   r   r      s    >
 r&   r   c                   8   ^  \ rS rSrU 4S jrS 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        [        5       U l        g )N)rs   rS   rd   rt   )rS   )r,   r-   r`   r.   r   r#   setpruned_headsrr   s        r$   r-   GLPNAttention.__init__   s>    .# 3%=	
	 %VEEr&   c                 6   [        U5      S:X  a  g [        XR                  R                  U R                  R                  U R
                  5      u  p[        U R                  R                  U5      U R                  l        [        U R                  R                  U5      U R                  l        [        U R                  R                  U5      U R                  l	        [        U R                  R                  USS9U R                  l        U R                  R                  [        U5      -
  U R                  l        U R                  R                  U R                  R                  -  U R                  l        U R
                  R                  U5      U l        g )Nr   r   r   )lenr   r.   rd   rg   r   r   rj   rk   rl   r#   r   rh   union)r.   headsindexs      r$   prune_headsGLPNAttention.prune_heads   s   u:?79900$))2O2OQUQbQb

 -TYY__eD		*499==%@		,TYY__eD		.t{{/@/@%QO )-		(E(EE
(R		%"&))"?"?$))B_B_"_		 --33E: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.   r1   r[   r\   r   self_outputsattention_outputr   s           r$   r3   GLPNAttention.forward   s@    yyQ;;|AF#%QR(88r&   )r#   r   r.   r   )	r9   r:   r;   r<   r-   r   r3   rA   rB   rC   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$ )
GLPNDWConv   c           
      ^   > [         TU ]  5         [        R                  " XSSSSUS9U l        g )Nr   r   T)biasgroups)r,   r-   r   rM   dwconv)r.   r   r/   s     r$   r-   GLPNDWConv.__init__   s(    ii!QSI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   rH   )r   rW   ry   r   rV   )r.   r1   r[   r\   r   r   rR   s          r$   r3   GLPNDWConv.forward   sc    ,9,?,?)
\%//15:::U[cM2%--a0::1a@r&   )r   )i   r   rC   s   @r$   r   r      s    J 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 r+   )r,   r-   r   ri   dense1r   r   
isinstance
hidden_actr@   r	   intermediate_act_fndense2rm   r   ro   )r.   rs   in_featureshidden_featuresout_featuresr/   s        r$   r-   GLPNMixFFN.__init__   s    #2{ii= 1f''--'-f.?.?'@D$'-'8'8D$ii>zz&"<"<=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$ r+   )r   r   r   ro   r   )r.   r1   r[   r\   s       r$   r3   GLPNMixFFN.forward  s`    M2M5A00?]3M2]3r&   )r   r   ro   r   r   )NNr   rC   s   @r$   r   r      s    
> r&   r   c                   6   ^  \ rS rSrSrU 4S jrSS jrSrU =r$ )	GLPNLayeri  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)rS   rd   rt   r   )r   r   )r,   r-   r   rO   layer_norm_1r   	attentionr(   Identityr%   layer_norm_2rf   r   mlp)	r.   rs   rS   rd   r%   rt   	mlp_ratiomlp_hidden_sizer/   s	           r$   r-   GLPNLayer.__init__  s    LL5&# 3%=	
 5>Oi0LL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.   r1   r[   r\   r   self_attention_outputsr   r   
mlp_outputlayer_outputs
             r$   r3   GLPNLayer.forward   s    !%m,/	 "0 "
 2!4(,  >>*:;(8XXd//>N
 ^^J/
!1/G+r&   )r   r%   r   r   r   r   r^   rC   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   )rQ   rK   rR   rS   )rS   rd   r%   rt   r   )r,   r-   rs   r   linspacedrop_path_ratesumdepthsitemrangenum_encoder_blocksappendrE   patch_sizesstridesrR   hidden_sizesr   
ModuleListpatch_embeddingsr   rd   	sr_ratios
mlp_ratiosblockrO   rP   )r.   rs   xdprrY   iblockscurlayersjr/   s             r$   r-   GLPNEncoder.__init__;  s    "'63H3H#fmmJ\ej!kl!kAvvx!kl 
v001A*%11!4!>>!,89Q!4!4FDWDWXY\]X]D^ & 3 3A 6	 2 !#j 9 v001AFAv}}QU++6==+,$*$7$7$:,2,F,Fq,I"%Ag,171A1A!1D"("3"3A"6	 - MM"--/0! 2$ ]]6*
 --;@AZAZ;[\;[aR\\&--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  pU
u  pnU" U5      u  pn[        U5       H&  u  nnU" XX5      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 XU4 5       5      $ [        UUUS9$ )	N r   r   rw   r   rH   c              3   .   #    U  H  oc  M  Uv   M     g 7fr+   r   ).0vs     r$   	<genexpr>&GLPNEncoder.forward.<locals>.<genexpr>  s     m$[q$[s   	last_hidden_stater1   
attentions)r   	enumeratezipr   r   rP   r   rz   r   tupler
   )r.   rX   r   output_hidden_statesreturn_dictall_hidden_statesall_self_attentionsr   r1   idxr   embedding_layerblock_layer
norm_layerr[   r\   r   blklayer_outputss                      r$   r3   GLPNEncoder.forwardk  s3    #7BD$5b4!''*
$D$9$94::t WXFC784O*+:=+I(M5#K03 #M5 T -a 0$$*=qAQ@S*S'	 1 '}5M)11*eRPXXYZ\]_`bcdooqM##$58H$H! Y" m]GZ$[mmm++*
 	
r&   )r   rs   rP   r   )FFTr   rC   s   @r$   r   r   :  s    .
f  "$
 $
r&   r   c                   *    \ rS rSr\rSrSr/ rS r	Sr
g)GLPNPreTrainedModeli  glpnrX   c                 X   [        U[        R                  [        R                  45      (       ak  UR                  R
                  R                  SU R                  R                  S9  UR                  b%  UR                  R
                  R                  5         gg[        U[        R                  5      (       ax  UR                  R
                  R                  SU R                  R                  S9  UR                  b2  UR                  R
                  UR                     R                  5         gg[        U[        R                  [        R                  45      (       aJ  UR                  R
                  R                  5         UR                  R
                  R                  S5        gg)zInitialize the weightsr   )meanstdNg      ?)r   r   ri   rM   weightdatanormal_rs   initializer_ranger   zero_	Embeddingpadding_idxrO   BatchNorm2dfill_)r.   modules     r$   _init_weights!GLPNPreTrainedModel._init_weights  s"   fryy"))455 MM&&CT[[5R5R&S{{&  &&( '--MM&&CT[[5R5R&S!!-""6#5#56<<> .r~~ >??KK""$MM$$S) @r&   r   N)r9   r:   r;   r<   r   config_classbase_model_prefixmain_input_name_no_split_modulesr!  rA   r   r&   r$   r  r    s    L$O*r&   r  c                      ^  \ rS rSrU 4S jrS r\   SS\R                  S\	\
   S\	\
   S\	\
   S\\\4   4
S	 jj5       rS
rU =r$ )	GLPNModeli  c                 p   > [         TU ]  U5        Xl        [        U5      U l        U R                  5         g r+   )r,   r-   rs   r   encoder	post_initr.   rs   r/   s     r$   r-   GLPNModel.__init__  s/      #6* 	r&   c                     UR                  5        H7  u  p#U R                  R                  U   R                  R	                  U5        M9     g)z
Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
class PreTrainedModel
N)itemsr*  layerr   r   )r.   heads_to_pruner0  r   s       r$   _prune_headsGLPNModel._prune_heads  s<    
 +002LELLu%//;;EB 3r&   rX   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   )rs   r   r  use_return_dictr*  r
   r1   r  )r.   rX   r   r  r  encoder_outputssequence_outputs          r$   r3   GLPNModel.forward  s     2C1N-TXT_T_TqTq$8$D $++JjJj 	 &1%<k$++B]B],,/!5#	 ' 
 *!,#%(;;;-)77&11
 	
r&   )rs   r*  )NNN)r9   r:   r;   r<   r-   r2  r   r   FloatTensorr   boolr   r   r
   r3   rA   rB   rC   s   @r$   r(  r(    sy    C 
 -1/3&*
''
 $D>
 'tn	

 d^
 
uo%	&
 
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://arxiv.org/abs/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 )NrH   r   r   )in_channelsout_channelsrJ   rK   rL   )r,   r-   r   
SequentialrM   rf   r  ReLUconvolutional_layer1convolutional_layer2convolutional_layer3Sigmoidsigmoid)r.   
in_channelr/   s     r$   r-   #GLPNSelectiveFeatureFusion.__init__  s    $&MMII#j1n"5J\]fgqrsNN:&GGI%
! %'MMII*3zA~;N\]fgqrsNN3zA~./GGI%
! %'IIJN+!ST^_%
! zz|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   r   r   )r   catrC  rD  rE  rG  	unsqueeze)r.   local_featuresglobal_featuresfeaturesattnhybrid_featuress         r$   r3   "GLPNSelectiveFeatureFusion.forward  s    99n>AF,,X6,,X6,,X6||H%(1a
+;+E+Ea+HH?q!QJ^

)A,L  r&   )rC  rD  rE  rG  )@   r^   rC   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   )rJ   rH   bilinearFscale_factormodealign_corners)
r,   r-   r   rM   r   convolutionr=  fusionUpsampleupsample)r.   r?  r@  should_skipr/   s       r$   r-   GLPNDecoderStage.__init__  sX    !1Va299[ANgigrgrgt0>SXYr&   c                 r    U R                  U5      nUb  U R                  X5      nU R                  U5      nU$ r+   r\  r]  r_  )r.   hidden_stateresiduals      r$   r3   GLPNDecoderStage.forward  s:    ''5;;|>L}}\2r&   rc  r+   r   rC   s   @r$   rU  rU    s    Z	 	r&   rU  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 )Nrw   r   rH   rW  FrX  )r,   r-   r   decoder_hidden_sizer   r   rU  stagesr]  r^  final_upsample)r.   rs   reserved_hidden_sizesr@  rS   r/   s        r$   r-   GLPNDecoder.__init__"  s     & 3 3DbD 911mmLabLa[k8Lab
 !%A kkqzY^_ cs   Br1   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$ )Nrw   )r  rk  r   rl  )r.   r1   stage_hidden_statesstage_hidden_staterd  stages         r$   r3   GLPNDecoder.forward0  si     !#&}TrT':DKK#HL!&|!H&&'9: $I #'"5"56H"IB""r&   )rl  rk  r9   r:   r;   r<   r-   r   r   r?   r3   rA   rB   rC   s   @r$   rh  rh  !  s3    `	#T%,,%7 	#D<N 	# 	#r&   rh  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://arxiv.org/abs/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 r+   )r,   r-   lambd)r.   rx  r/   s     r$   r-   SiLogLoss.__init__E  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   rH   )detachr   logr   powr  rx  )r.   predtarget
valid_maskdiff_loglosss         r$   r3   SiLogLoss.forwardI  s    qj((*
99V/0599T=M3NNzz%))Ha0557$**uyyQYQ^Q^Q`bcGd:dder&   )rx  )g      ?r^   rC   s   @r$   rv  rv  <  s     r&   rv  c                   h   ^  \ rS rSrU 4S jrS\\R                     S\R                  4S jrSr	U =r
$ )GLPNDepthEstimationHeadiQ  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   rI   F)inplace)	r,   r-   rs   rj  r   rA  rM   rB  head)r.   rs   channelsr/   s      r$   r-    GLPNDepthEstimationHead.__init__R  s`    --MMIIha1MGGE"IIhqAF
	r&   r1   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   r   )rs   head_in_indexr  r   rG  	max_depthsqueeze)r.   r1   predicted_depths      r$   r3   GLPNDepthEstimationHead.forward^  sX    %kk&?&?@		-0--69N9NN)11a18r&   )rs   r  rt  rC   s   @r$   r  r  Q  s-    

	T%,,%7 	ELL 	 	r&   r  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\
\\R                     \4   4S	 jj5       rS
rU =r$ )GLPNForDepthEstimationij  c                    > [         TU ]  U5        [        U5      U l        [	        U5      U l        [        U5      U l        U R                  5         g r+   )	r,   r-   r(  r  rh  decoderr  r  r+  r,  s     r$   r-   GLPNForDepthEstimation.__init__p  s@     f%	"6*+F3	 	r&   rX   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" X5      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 requests

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)

>>> 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"))
```NTr5  r   rH   )r  r  r1   r  )
rs   r6  r  r  r1   r  r  rv  r   r  )r.   rX   r  r   r  r  r   r1   outr  r  loss_fctr#   s                r$   r3   GLPNForDepthEstimation.forwardz  s   \ &1%<k$++B]B]$8$D $++JjJj 	 ))/!%#	  
 2=--'!*ll=)))C. {HO4D#)+gabk9)+gabk9)-)9TGf$EvE#+3G'//T))	
 	
r&   )r  r  r  )NNNN)r9   r:   r;   r<   r-   r   r   r:  r   r;  r   r   r?   r   r3   rA   rB   rC   s   @r$   r  r  j  s      /3,0/3&*O
''O
 **+O
 $D>	O

 'tnO
 d^O
 
uU\\"$88	9O
 O
r&   r  )r  r   r(  r  )r   F)3r=   r   typingr   r   r   r   r   torch.utils.checkpointr   activationsr	   modeling_outputsr
   r   modeling_utilsr   pytorch_utilsr   r   utilsr   r   configuration_glpnr   
get_loggerr9   loggerr?   r>   r;  r%   Moduler(   rE   r`   r   r   r   r   r   r   r  r(  r=  rU  rh  rv  r  r  __all__r   r&   r$   <module>r     s     / /    ! E - Q , * 
		H	%U\\ e T V[VbVb *-299 -) )4N Nd	RYY 	#BII #N  0(		 (VU
")) U
p */ * *0 2
# 2
 2
j) )Xryy (#")) #6		 *bii 2 
[
0 [

[
| Vr&   