Ë
    ÛÓ^j®B  ã                   óö  — d dl Z d dl mZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZmZmZ d
dlmZ d„ 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d¬«       G d„ d e«      «       Zd dgZy)!é    N)Únné   )Úinitialization)Úload_backbone)ÚDepthEstimatorOutput)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleé   )ÚCHMv2Configc                 óŠ   — | j                   �,t        | j                   d«      r| j                   j                  S | j                  S )NÚhidden_size)Úbackbone_configÚhasattrr   )Úconfigs    ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/chmv2/modeling_chmv2.pyÚ_get_backbone_hidden_sizer   "   s;   € Ø×ÑÐ)¬g°f×6LÑ6LÈmÔ.\Ø×%Ñ%×1Ñ1Ð1à×!Ñ!Ð!ó    c                   ó2   ‡ — e Zd Zdededefˆ fd„Zd„ Zˆ xZS )ÚCHMv2ReassembleLayerr   ÚchannelsÚfactorc           	      ó\  •— t         ‰| �  «        t        |«      }t        j                  ||d¬«      | _        |dkD  r t        j                  ||||d¬«      | _        y |dk(  rt        j                  «       | _        y |dk  r,t        j                  ||dt        d|z  «      d¬«      | _        y y )Nr   )Úin_channelsÚout_channelsÚkernel_sizer   ©r   ÚstrideÚpaddingr   )
ÚsuperÚ__init__r   r   ÚConv2dÚ
projectionÚConvTranspose2dÚresizeÚIdentityÚint)Úselfr   r   r   r   Ú	__class__s        €r   r#   zCHMv2ReassembleLayer.__init__*   s–   ø€ Ü‰ÑÔä/°Ó7ˆÜŸ)™)°È(Ð`aÔbˆŒð �AŠ:Ü×,Ñ,¨X°xÈVÐ\bÐlmÔnˆD�KØ�qŠ[ÜŸ+™+›-ˆD�KØ�aŠZäŸ)™) H¨hÀAÌcÐRSÐV\ÑR\ËoÐghÔiˆD�Kð r   c                 óJ   — | j                  |«      }| j                  |«      }|S ©N)r%   r'   )r*   Úhidden_states     r   ÚforwardzCHMv2ReassembleLayer.forward9   s$   € Ø—‘ |Ó4ˆØ—{‘{ <Ó0ˆØÐr   )Ú__name__Ú
__module__Ú__qualname__r   r)   r#   r/   Ú__classcell__©r+   s   @r   r   r   )   s&   ø„ ðj˜{ð j°cð jÀ3õ jör   r   c                   ón   ‡ — e Zd ZdZdefˆ fd„Zddeej                     deej                     fd„Z	ˆ xZ
S )ÚCHMv2ReassembleStagez�
    Reassemble stage that processes hidden states from the backbone into image-like feature
    representations at various resolutions.
    r   c           	      ó€  •— t         ‰| �  «        || _        |j                  | _        t	        j
                  «       | _        t        |j                  |j                  «      D ],  \  }}| j                  j                  t        |||¬«      «       Œ. t        |«      }| j                  dk(  r•t	        j
                  «       | _        t        t        | j                  «      «      D ]Z  }| j                  j                  t	        j                   t	        j"                  d|z  |«      t	        j$                  «       «      «       Œ\ y y )N)r   r   r   Úprojecté   )r"   r#   r   Úreadout_typer   Ú
ModuleListÚlayersÚzipÚpost_process_channelsÚreassemble_factorsÚappendr   r   Úreadout_projectsÚrangeÚlenÚ
SequentialÚLinearÚGELU)r*   r   r   r   r   Ú_r+   s         €r   r#   zCHMv2ReassembleStage.__init__E   sÿ   ø€ Ü‰ÑÔØˆŒØ"×/Ñ/ˆÔä—m‘m“oˆŒÜ$'¨×(DÑ(DÀf×F_ÑF_Ó$`ò 	Ñ ˆL˜&Ø�K‰K×ÑÜ$Ø!Ø)Ø!ôõð	ô 0°Ó7ˆØ×Ñ 	Ò)Ü$&§M¡M£OˆDÔ!Üœ3˜tŸ{™{Ó+Ó,ò p�Ø×%Ñ%×,Ñ,¬R¯]©]¼2¿9¹9ÀQÈÁ_ÐVaÓ;bÔdf×dkÑdkÓdmÓ-nÕoñpð *r   Úhidden_statesÚreturnc                 ó‚  — g }t        |«      D �]­  \  }}t        |t        t        f«      �rt	        |«      dk(  rø|d   |d   }}|j
                  }| j                  dk(  r�|j                  d«      j                  dd«      }|j                  d«      j                  |«      }	 | j                  |   t        j                  ||	fd«      «      }|j                  ddd«      j                  |«      }n¨| j                  dk(  r™|j                  d«      |j                  d«      z   }|j                  |«      }nd|j!                  «       dk(  rQ|d d …dd …f   }|j
                  \  }
}}|j                  |
|||«      }|j                  dddd«      j#                  «       } | j$                  |   |«      }|j'                  |«       �Œ° |S )Nr9   r   r   r8   éÿÿÿÿÚaddr   )Ú	enumerateÚ
isinstanceÚtupleÚlistrC   Úshaper:   ÚflattenÚ	transposeÚ	unsqueezeÚ	expand_asrA   ÚtorchÚcatÚpermuteÚreshapeÚdimÚ
contiguousr<   r@   )r*   rH   Úpatch_heightÚpatch_widthÚoutÚ	layer_idxr.   Ú	cls_tokenÚfeature_shapeÚreadoutÚ
batch_sizerG   Únum_channelss                r   r/   zCHMv2ReassembleStage.forwardZ   s¶  € Øˆä'0°Ó'?ó 	%Ñ#ˆI�|Ü˜,¬´¨Õ6¼3¸|Ó;LÐPQÒ;QØ*6°q©/¸<È¹?˜i�Ø ,× 2Ñ 2�à×$Ñ$¨	Ò1Ø#/×#7Ñ#7¸Ó#:×#DÑ#DÀQÈÓ#J�LØ'×1Ñ1°!Ó4×>Ñ>¸|ÓL�GØ#C 4×#8Ñ#8¸Ñ#CÄEÇIÁIÈ|Ð]dÐNeÐgiÓDjÓ#k�LØ#/×#7Ñ#7¸¸1¸aÓ#@×#HÑ#HÈÓ#W‘LØ×&Ñ&¨%Ò/Ø#/×#7Ñ#7¸Ó#:¸Y×=PÑ=PÐQSÓ=TÑ#T�LØ#/×#7Ñ#7¸Ó#F‘Là×#Ñ#Ó%¨Ò*Ø#/²°1±2°Ñ#6�LØ2>×2DÑ2DÑ/�J  <Ø#/×#7Ñ#7¸
ÀLÐR]Ð_kÓ#l�LØ#/×#7Ñ#7¸¸1¸aÀÓ#C×#NÑ#NÓ#P�Là1˜4Ÿ;™; yÑ1°,Ó?ˆLØ�J‰J�|Ö$ð+	%ð. ˆ
r   ©NN)r0   r1   r2   Ú__doc__r   r#   rP   rV   ÚTensorr/   r3   r4   s   @r   r6   r6   ?   s?   ø„ ñð
p˜{õ pñ* T¨%¯,©,Ñ%7ð ÐaeÐfk×frÑfrÑas÷ r   r6   c                   óZ   ‡ — e Zd ZdZˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚCHMv2PreActResidualLayerz«
    ResidualConvUnit, pre-activate residual unit.

    Args:
        config (`[CHMv2Config]`):
            Model configuration class defining the model architecture.
    c                 óV  •— t         ‰| �  «        t        j                  «       | _        t        j
                  |j                  |j                  dddd¬«      | _        t        j                  «       | _        t        j
                  |j                  |j                  dddd¬«      | _	        y )Nr   r   T)r   r    r!   Úbias)
r"   r#   r   ÚReLUÚactivation1r$   Úfusion_hidden_sizeÚconvolution1Úactivation2Úconvolution2©r*   r   r+   s     €r   r#   z!CHMv2PreActResidualLayer.__init__€   sŠ   ø€ Ü‰ÑÔäŸ7™7›9ˆÔÜŸI™IØ×%Ñ%Ø×%Ñ%ØØØØô
ˆÔô Ÿ7™7›9ˆÔÜŸI™IØ×%Ñ%Ø×%Ñ%ØØØØô
ˆÕr   r.   rI   c                 ó˜   — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }||z   S r-   )rm   ro   rp   rq   )r*   r.   Úresiduals      r   r/   z CHMv2PreActResidualLayer.forward—   sR   € ØˆØ×'Ñ'¨Ó5ˆØ×(Ñ(¨Ó6ˆØ×'Ñ'¨Ó5ˆØ×(Ñ(¨Ó6ˆà˜hÑ&Ð&r   )	r0   r1   r2   rf   r#   rV   rg   r/   r3   r4   s   @r   ri   ri   w   s(   ø„ ñô
ð.' E§L¡Lð '°U·\±\÷ 'r   ri   c                   ó2   ‡ — e Zd Zddedefˆ fd„Zdd„Zˆ xZS )ÚCHMv2FeatureFusionLayerr   Úis_first_layerc                 óØ   •— t         ‰| �  «        || _        t        j                  |j
                  |j
                  dd¬«      | _        |st        |«      | _        t        |«      | _	        y )Nr   T)r   rk   )
r"   r#   rw   r   r$   rn   r%   ri   Úresidual_layer1Úresidual_layer2)r*   r   rw   r+   s      €r   r#   z CHMv2FeatureFusionLayer.__init__¢   sW   ø€ Ü‰ÑÔØ,ˆÔäŸ)™) F×$=Ñ$=¸v×?XÑ?XÐfgÐnrÔsˆŒáÜ#;¸FÓ#CˆDÔ ä7¸Ó?ˆÕr   c                 óŠ  — |�o| j                   sc|j                  |j                  k7  r6|j                  \  }}}}t        j                  j	                  |||fdd¬«      }|| j                  |«      z   }| j                  |«      }|€ddind|i}t        j                  j                  |fi |¤dddœ¤Ž}| j                  |«      }|S )	NÚbilinearF)ÚsizeÚmodeÚalign_cornersÚscale_factorr9   r}   T)r~   r   )rw   rQ   r   Ú
functionalÚinterpolatery   rz   r%   )r*   r.   rt   r}   rG   ÚheightÚwidthÚmodifiers           r   r/   zCHMv2FeatureFusionLayer.forward­   sÚ   € ØÐ¨×(;Ò(;Ø×!Ñ! X§^¡^Ò3Ø&2×&8Ñ&8Ñ#��1�f˜eÜŸ=™=×4Ñ4Ø F¨E ?¸ÐSXð 5ó �ð (¨$×*>Ñ*>¸xÓ*HÑHˆLà×+Ñ+¨LÓ9ˆà*.¨,�N AÑ&¸VÀT¸Nˆä—}‘}×0Ñ0Øñ
àð
ð Øó	
ˆð —‘ |Ó4ˆàÐr   )Fre   )r0   r1   r2   r   Úboolr#   r/   r3   r4   s   @r   rv   rv   ¡   s   ø„ ñ	@˜{ð 	@¸Dõ 	@÷r   rv   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚCHMv2UpsampleConvHeadzŒ
    Convolutional head with intermediate upsampling.

    Architecture: Conv3x3 -> 2x bilinear upsample -> Conv3x3 -> ReLU -> Conv1x1.
    c                 óL  •— t         ‰| �  «        t        j                  t        j                  ||dz  ddd¬«      t        j
                  ddd¬«      t        j                  |dz  |ddd¬«      t        j                  «       t        j                  ||ddd¬«      g«      | _        y )	Nr9   r   r   r   r|   T)r€   r~   r   r   )r"   r#   r   r;   r$   ÚUpsamplerl   Úhead)r*   ÚfeaturesÚnumber_output_channelsÚn_hidden_channelsr+   s       €r   r#   zCHMv2UpsampleConvHead.__init__Í   s‰   ø€ Ü‰ÑÔÜ—M‘Mä—	‘	˜( H°¡M¸qÈÐTUÔVÜ—‘¨°È4ÔPÜ—	‘	˜( a™-Ð):ÈÐRSÐ]^Ô_Ü—‘“	Ü—	‘	Ð+Ð-CÐQRÐ[\ÐfgÔhðó
ˆ�	r   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r-   )r‹   )r*   rH   Úlayers      r   r/   zCHMv2UpsampleConvHead.forwardÙ   s%   € Ø—Y‘Yò 	1ˆEÙ! -Ó0‰Mð	1àÐr   )é€   )r0   r1   r2   rf   r#   r/   r3   r4   s   @r   rˆ   rˆ   Æ   s   ø„ ñõ

ör   rˆ   c                   ó´   ‡ — e Zd ZdZdefˆ fd„Zdeej                     de	de	dej                  fd„Z
deej                     de	de	dej                  fd	„Zˆ xZS )
Ú	CHMv2HeadzŒ
    CHMv2 dense-prediction head adapted from DPT.

    Integrates reassemble, projection convs, feature fusion, and UpConv depth head.
    r   c           
      óJ  •— t         ‰| �  «        || _        t        |«      | _        t        j                  «       | _        |j                  D ]?  }| j                  j                  t        j                  ||j                  ddd¬«      «       ŒA t        j                  «       | _        t        t        |j                  «      «      D ]+  }| j                  j                  t        ||dk(  ¬«      «       Œ- t!        |j                  |j"                  |j$                  ¬«      | _        y )Nr   r   F)r   r!   rk   r   )rw   )rŒ   r�   rŽ   )r"   r#   r   r6   Úreassemble_stager   r;   Úconvsr>   r@   r$   rn   Úfusion_layersrB   rC   rv   rˆ   r�   Úhead_hidden_sizeÚ
conv_depth)r*   r   ÚchannelÚidxr+   s       €r   r#   zCHMv2Head.__init__æ   sï   ø€ Ü‰ÑÔØˆŒä 4°VÓ <ˆÔä—]‘]“_ˆŒ
Ø×3Ñ3ò 	sˆGØ�J‰J×ÑœbŸi™i¨°×1JÑ1JÐXYÐcdÐkpÔqÕrð	sô  Ÿ]™]›_ˆÔÜœ˜V×9Ñ9Ó:Ó;ò 	bˆCØ×Ñ×%Ñ%Ô&=¸fÐVYÐ]^ÑV^Ô&`Õað	bô 0Ø×.Ñ.Ø#)×#@Ñ#@Ø$×5Ñ5ô
ˆ�r   rH   r\   r]   rI   c                 ób  — | j                  |||«      }t        |«      D ��cg c]  \  }} | j                  |   |«      ‘Œ }}}|j                  «         | j                  d   |d   «      }t        dt        | j                  «      «      D ]  } | j                  |   |||   «      }Œ |S c c}}w )Nr   r   )r•   rM   r–   Úreverser—   rB   rC   )r*   rH   r\   r]   ÚiÚfeaturerŒ   Úfused_hidden_states           r   Úforward_featureszCHMv2Head.forward_featuresú   sº   € Ø×-Ñ-¨m¸\È;ÓWˆä=FÀ}Ó=U×V©z¨q°'�M�D—J‘J˜q‘M 'Õ*ÐVˆÑVØ×ÑÔà2˜T×/Ñ/°Ñ2°8¸A±;Ó?ÐÜ�qœ#˜d×0Ñ0Ó1Ó2ò 	XˆAØ!6 ×!3Ñ!3°AÑ!6Ð7IÈ8ÐTUÉ;Ó!WÑð	Xð "Ð!ùó Ws   ¢B+c                 óN   — | j                  |||«      }| j                  |«      }|S r-   )r¡   r™   )r*   rH   r\   r]   r^   s        r   r/   zCHMv2Head.forward  s)   € Ø×#Ñ# M°<ÀÓMˆØ�o‰o˜cÓ"ˆØˆ
r   )r0   r1   r2   rf   r   r#   rP   rV   rg   r)   r¡   r/   r3   r4   s   @r   r“   r“   ß   sy   ø„ ñð
˜{õ 
ð(
"¨d°5·<±<Ñ.@ð 
"ÐPSð 
"Ðbeð 
"Ðjo×jvÑjvó 
"ð T¨%¯,©,Ñ%7ð Àsð ÐY\ð Ðaf×amÑam÷ r   r“   c                   óì   ‡ — e Zd ZdZdefˆ fd„Zdedej                  dej                  fd„Z
dej                  d	ej                  dej                  fd
„Zdej                  dej                  fd„Zˆ xZS )ÚCHMv2FeaturesToDepthzJConverts raw logits from the CHMv2 head into a depth map using depth bins.r   c                 óÔ   •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        d| _        d| _        d| _        y )Ng-Cëâ6?g:Œ0âŽyE>gê-�™—q=)	r"   r#   Ú	min_depthÚ	max_depthÚbins_strategyÚnorm_strategyÚ_mixlog_max_clamp_valueÚ_mixlog_eps_shiftÚ_mixlog_epsrr   s     €r   r#   zCHMv2FeaturesToDepth.__init__  s\   ø€ Ü‰ÑÔØ×)Ñ)ˆŒØ×)Ñ)ˆŒØ#×1Ñ1ˆÔØ#×1Ñ1ˆÔØ'+ˆÔ$Ø!%ˆÔØ ˆÕr   Ún_binsÚdevicerI   c                 óÄ  — | j                   dz  }t        j                  | j                  |||¬«      }t        j                  t        j                  t        j
                  t        j                  | j                  |¬«      «      t        j
                  t        j                  ||¬«      «      ||¬«      «      }t        j                  dd||¬«      }||z  d|z
  |z  z   }|S )zî
        Creates mixed log bins interpolated between linear and log distributions.

        The max_depth is divided by 8.0 internally; this scaling is reversed in
        `_create_outputs_with_mixlog_norm` by multiplying by 8.0.
        ç       @©r®   ç      ð?ç        )r§   rV   Úlinspacer¦   ÚexpÚlogÚtensor)r*   r­   r®   Úscaled_max_depthÚlinearr¶   Úinterp_weightÚbinss           r   Ú_create_mixlog_binsz(CHMv2FeaturesToDepth._create_mixlog_bins  s´   € ð  Ÿ>™>¨CÑ/ÐÜ—‘ §¡Ð0@À&ÐQWÔXˆÜ�i‰iÜ�N‰NÜ—	‘	œ%Ÿ,™, t§~¡~¸fÔEÓFÜ—	‘	œ%Ÿ,™,Ð'7ÀÔGÓHØØô	ó
ˆô Ÿ™ s¨C°ÀÔGˆØ˜sÑ" c¨MÑ&9¸VÑ%CÑCˆØˆr   Úinputr»   c                 ó&  — t        j                  |«      }|j                  dd¬«      }| j                  d«      j	                  | j
                  «      | j                  z   }||z   }|j                  dd¬«      }t        j                  |ddd¬«      j                  | j                  «      }||z  }|j                  dddd«      j                  | j                  «      }	||	z  j                  dd¬«      j                  | j                  «      }
|
dz  }
|
S )	zEConverts depth bin logits to depth values using mixlog normalization.r   T©rZ   Úkeepdimr³   r²   )ÚnanÚposinfÚneginfrK   r°   )rV   ÚreluÚaminÚ	clamp_minÚ	clamp_maxrª   r«   ÚsumÚ
nan_to_numr¬   Úview)r*   r½   r»   ÚlogitsÚmin_per_sampleÚshiftÚ
logits_posÚdenomÚweightsÚbins_broadcastÚoutputs              r   Ú _create_outputs_with_mixlog_normz5CHMv2FeaturesToDepth._create_outputs_with_mixlog_norm.  sü   € ä—‘˜EÓ"ˆàŸ™¨°D˜Ó9ˆØ �×+Ñ+¨CÓ0×:Ñ:¸4×;WÑ;WÓXÐ[_×[qÑ[qÑqˆØ˜e‘^ˆ
à—‘ 1¨d�Ó3ˆÜ× Ñ  ¨C¸ÀCÔH×RÑRÐSW×ScÑScÓdˆØ˜uÑ$ˆàŸ™ 1 b¨!¨QÓ/×9Ñ9¸$×:JÑ:JÓKˆØ˜NÑ*×/Ñ/°A¸tÐ/ÓD×NÑNÈt×O_ÑO_Ó`ˆà˜#‘ˆàˆr   Úxc                 óJ  — |j                   d   }|dkD  �rë| j                  dk(  r8t        j                  | j                  | j
                  ||j                  ¬«      }nÄ| j                  dk(  r™t        j                  t        j                  t        j                  | j                  «      «      t        j                  t        j                  | j
                  «      «      ||j                  ¬«      }t        j                  |«      }n| j                  ||j                  «      }| j                  dv r¾| j                  dk(  r3t        j                  |«      }d}||z   }||j                  dd¬«      z  }nR| j                  d	k(  rt        j                  |d¬
«      }n+t        j                  |«      }||j                  dd¬«      z  }t        j                   d||g«      j#                  d¬
«      }|S | j%                  ||«      }|S t        j                  |«      | j                  z   }|S )Nr   r¹   r±   r¶   )r¹   ÚsoftmaxÚsigmoidgš™™™™™¹?Tr¿   rÖ   ©rZ   zikmn,k->imn)rQ   r¨   rV   r´   r¦   r§   r®   r¶   r·   rµ   r¼   r©   rÄ   rÈ   rÖ   r×   ÚeinsumrT   rÓ   )r*   rÔ   r­   r»   ÚlogitÚepsrÒ   s          r   r/   zCHMv2FeaturesToDepth.forwardA  s¸  € Ø—‘˜‘ˆà�A‹:Ø×!Ñ! XÒ-Ü—~‘~ d§n¡n°d·n±nÀfÐUV×U]ÑU]Ô^‘Ø×#Ñ# uÒ,Ü—~‘~Ü—I‘IœeŸl™l¨4¯>©>Ó:Ó;Ü—I‘IœeŸl™l¨4¯>©>Ó:Ó;ØØŸ8™8ô	�ô —y‘y “‘à×/Ñ/°¸¿¹ÓA�à×!Ñ!Ð%EÑEØ×%Ñ%¨Ò1Ü!ŸJ™J q›M�EØ�CØ! C™K�EØ! E§I¡I°!¸T IÓ$BÑB‘EØ×'Ñ'¨9Ò4Ü!ŸM™M¨!°Ô3‘Eä!ŸM™M¨!Ó,�EØ! E§I¡I°!¸T IÓ$BÑB�EÜŸ™ m°e¸T°]ÓC×MÑMÐRSÐMÓT�ð ˆð	 ×>Ñ>¸qÀ$ÓG�ð ˆô —Z‘Z “] T§^¡^Ñ3ˆFàˆr   )r0   r1   r2   rf   r   r#   r)   rV   r®   rg   r¼   rÓ   r/   r3   r4   s   @r   r¤   r¤     sx   ø„ ÙTð!˜{õ !ð¨#ð °u·|±|ð ÈÏÉó ð*°e·l±lð È%Ï,É,ð Ð[`×[gÑ[gó ð&"˜Ÿ™ð "¨%¯,©,÷ "r   r¤   c                   óL   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
dZdZdˆ fd„Zˆ xZS )ÚCHMv2PreTrainedModelr   Úchmv2Úpixel_values)ÚimageTc                 ó\  •— t         ‰| �  |«       t        |t        j                  t        j
                  t        j                  f«      rct        j                  |j                  d| j                  j                  ¬«       |j                  � t        j                  |j                  «       y y y )Nr³   )ÚmeanÚstd)r"   Ú_init_weightsrN   r   rE   r$   r&   ÚinitÚtrunc_normal_Úweightr   Úinitializer_rangerk   Úzeros_)r*   Úmoduler+   s     €r   rä   z"CHMv2PreTrainedModel._init_weightsr  st   ø€ Ü‰Ñ˜fÔ%Ü�fœrŸy™y¬"¯)©)´R×5GÑ5GÐHÔIÜ×Ñ˜vŸ}™}°3¸D¿K¹K×<YÑ<YÕZØ�{‰{Ð&Ü—‘˜FŸK™KÕ(ð 'ð Jr   )rI   N)r0   r1   r2   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendrä   r3   r4   s   @r   rÝ   rÝ   f  sA   ø… àÓØÐØ$€OØ!ÐØ&*Ð#Ø€NØÐØÐØ"&Ð÷)ñ )r   rÝ   z…
    CHMv2 Model with a depth estimation head on top (consisting of convolutional layers) e.g. for canopy height
    estimation.
    )Úcustom_introc                   óŽ   ‡ — e Zd Zdefˆ fd„Zd„ Zee	 d
dej                  dej                  dz  dee   defd	„«       «       Zˆ xZS )ÚCHMv2ForDepthEstimationr   c                 ó¤   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        t        |«      | _        | j                  «        y r-   )	r"   r#   r   Úbackboner“   r‹   r¤   Úfeatures_to_depthÚ	post_initrr   s     €r   r#   z CHMv2ForDepthEstimation.__init__�  s?   ø€ Ü‰Ñ˜Ô ä% fÓ-ˆŒÜ˜fÓ%ˆŒ	Ü!5°fÓ!=ˆÔà�‰Õr   c                 ó6   — | j                   j                  «       S r-   )rø   Úget_input_embeddings)r*   s    r   rü   z,CHMv2ForDepthEstimation.get_input_embeddingsŠ  s   € Ø�}‰}×1Ñ1Ó3Ð3r   Nrß   ÚlabelsÚkwargsrI   c                 ó¬  — d}|�t        d«      ‚|j                  \  }}}}| j                  j                  }||z  }	||z  }
 | j                  |fi |¤Ž}t        t        |j                  |j                  «      «      }| j                  ||	|
«      }| j                  |«      }|j                  d¬«      }t        |||j                  |j                  ¬«      S )z¨
        labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth depth estimation maps for computing the loss.
        NzTraining is not implemented yetr   rØ   )ÚlossÚpredicted_depthrH   Ú
attentions)ÚNotImplementedErrorrQ   r   Ú
patch_sizerø   rP   r=   Úfeature_mapsÚ
cls_tokensr‹   rù   Úsqueezer   rH   r  )r*   rß   rý   rþ   r   rG   rƒ   r„   r  r\   r]   Úbackbone_outputÚintermediate_featuresÚhead_outputr  s                  r   r/   zCHMv2ForDepthEstimation.forward�  sà   € ð ˆØÐÜ%Ð&GÓHÐHà*×0Ñ0Ñˆˆ1ˆf�eØ—[‘[×+Ñ+ˆ
Ø Ñ+ˆØ˜zÑ)ˆà'˜$Ÿ-™-¨Ñ?¸Ñ?ˆÜ $¤S¨×)EÑ)EÀ×GaÑGaÓ%bÓ cÐà—i‘iÐ 5°|À[ÓQˆà×0Ñ0°Ó=ˆØ)×1Ñ1°aÐ1Ó8ˆä#ØØ+Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r   r-   )r0   r1   r2   r   r#   rü   r   r   rV   ÚFloatTensorÚ
LongTensorr	   r
   r   r/   r3   r4   s   @r   rö   rö   z  sr   ø„ ð˜{õ ò4ð Øð +/ñ 
à×'Ñ'ð 
ð × Ñ  4Ñ'ð 
ð Ð+Ñ,ð	 
ð
 
ò 
ó ó ô 
r   rö   )rV   r   Ú r   rå   Úbackbone_utilsr   Úmodeling_outputsr   Úmodeling_utilsr   Úprocessing_utilsr	   Úutilsr
   r   r   Úconfiguration_chmv2r   r   ÚModuler   r6   ri   rv   rˆ   r“   r¤   rÝ   rö   Ú__all__© r   r   ú<module>r     sð   ðó, Ý å &Ý +Ý 4Ý -Ý &ß IÑ IÝ ,ò"ô˜2Ÿ9™9ô ô,5˜2Ÿ9™9ô 5ôp''˜rŸy™yô ''ôT"˜bŸi™iô "ôJ˜BŸI™Iô ô2*�—	‘	ô *ôZW˜2Ÿ9™9ô Wðt ô)˜?ó )ó ð)ñ& ðôô/
Ð2ó /
óð/
ðd %Ð&<Ð
=�r   