§
    ‚ŠtjýS  ã                   óÌ  — d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ	 ddl
mZmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$  ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z% G d„ ded¬¦  «        Z& G d„ de!¦  «        Z' G d„ de#¦  «        Z( G d„ d ej)        ¦  «        Z* 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/e G d+„ d,e¦  «        ¦   «         Z0 ed-¬.¦  «         G d/„ d0e0¦  «        ¦   «         Z1g d1¢Z2dS )2u9   CHMv2 model â€” Canopy Height Model v2, adapted from DPT.é    )ÚLiteralN)Ústrict)Únné   )Úinitialization)Ú%consolidate_backbone_kwargs_to_configÚload_backbone)ÚPreTrainedConfig)ÚDepthEstimatorOutput)ÚPreTrainedModel)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚrequires_backendsé   )Ú
AutoConfig)Ú DepthAnythingPreActResidualLayer)ÚDPTImageProcessor)ÚDPTReassembleLayerÚ_get_backbone_hidden_sizez%facebook/dinov3-vitl16-chmv2-dpt-head)Ú
checkpointc                   ó4  ‡ — e Zd ZU dZdZdeiZdZee	z  dz  e
d<   dZee
d<   dZee
d<   dZeeez           dz  e
d	<   dZee         dz  e
d
<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   dZed         e
d<   dZed         e
d<   ˆ fd„Zˆ xZS )ÚCHMv2Configa¡  
    backbone_config (`Union[dict, "PreTrainedConfig"]`, *optional*):
        The configuration of the backbone model. Only DINOv3ViTConfig is currently supported.
    patch_size (`int`, *optional*, defaults to 16):
        The patch size used by the backbone vision transformer.
    reassemble_factors (`list[float]`, *optional*, defaults to `[4, 2, 1, 0.5]`):
        The up/downsampling factors of the reassemble layers.
    post_process_channels (`list[int]`, *optional*, defaults to `[128, 256, 512, 1024]`):
        The output channel sizes of the reassemble stage for each backbone feature level.
    fusion_hidden_size (`int`, *optional*, defaults to 256):
        The number of channels before fusion.
    head_hidden_size (`int`, *optional*, defaults to 128):
        The number of channels in the hidden layer of the depth estimation head.
    number_output_channels (`int`, *optional*, defaults to 256):
        Number of output channels for the CHMv2 head (number of depth bins).
    readout_type (`str`, *optional*, defaults to `"project"`):
        Type of readout operation for the CLS token. One of `["ignore", "add", "project"]`.
    min_depth (`float`, *optional*, defaults to 0.001):
        The minimum depth value for depth bin calculation.
    max_depth (`float`, *optional*, defaults to 96.0):
        The maximum depth value for depth bin calculation.
    bins_strategy (`str`, *optional*, defaults to `"chmv2_mixlog"`):
        The strategy for depth bins distribution. One of `["linear", "log", "chmv2_mixlog"]`.
    norm_strategy (`str`, *optional*, defaults to `"chmv2_mixlog"`):
        The normalization strategy for depth prediction. One of `["linear", "softmax", "sigmoid", "chmv2_mixlog"]`.

    ```python
    >>> from transformers import CHMv2Config, CHMv2ForDepthEstimation

    >>> configuration = CHMv2Config()
    >>> model = CHMv2ForDepthEstimation(configuration)
    >>> configuration = model.config
    ```
    Úchmv2Úbackbone_configNé   Ú
patch_sizeg{®Gáz”?Úinitializer_rangeÚreassemble_factorsÚpost_process_channelsé   Úfusion_hidden_sizeé€   Úhead_hidden_sizeÚnumber_output_channelsÚprojectÚreadout_typegü©ñÒMbP?Ú	min_depthg      X@Ú	max_depthÚchmv2_mixlog)ÚlinearÚlogr-   Úbins_strategy)r.   ÚsoftmaxÚsigmoidr-   Únorm_strategyc                 óÖ   •— | j         €	g d¢| _         | j        €	g d¢| _        ddddddd	g d
¢d	d	dd	dœ}t          d| j        d|dœ|¤Ž\  | _        } t	          ¦   «         j        di |¤Ž d S )N)é   r   é   g      à?)r&   r$   i   é   i   r7   i   r   é   r5   T)é   é   é   r8   g�íµ ÷Æ°>)Ú
image_sizeÚhidden_sizeÚintermediate_sizeÚnum_attention_headsÚnum_hidden_layersÚnum_register_tokensÚkey_biasÚout_indicesÚreshape_hidden_statesÚapply_layernormÚlayer_norm_epsÚreturn_class_tokenÚ
dinov3_vit)r   Údefault_config_typeÚdefault_config_kwargs© )r"   r#   r   r   ÚsuperÚ__post_init__)ÚselfÚkwargsrJ   Ú	__class__s      €úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/chmv2/modular_chmv2.pyrM   zCHMv2Config.__post_init__\   sÅ   ø€ ØÔ"Ð*Ø&4 n nˆDÔ#ØÔ%Ð-Ø)>Ð)>Ð)>ˆDÔ&ð ØØ!%Ø#%Ø!#Ø#$ØØ*˜?˜?Ø%)Ø#Ø"Ø"&ð!
ð !
Ðõ (Mð (
Ø Ô0Ø ,Ø"7ð(
ð (
ð ð	(
ð (
Ñ$ˆÔ˜fð 	�‰ŒÔÐ'Ð' Ð'Ð'Ð'Ð'Ð'ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typer   Úsub_configsr   Údictr
   Ú__annotations__r    Úintr!   Úfloatr"   Úlistr#   r%   r'   r(   r*   Ústrr+   r,   r0   r   r3   rM   Ú__classcell__©rP   s   @rQ   r   r   %   sZ  ø€ € € € € € ð!ð !ðF €JØ$ jÐ1€Kà6:€O�TÐ,Ñ,¨tÑ3Ð:Ð:Ñ:Ø€J�ÐÐÑØ#Ð�uÐ#Ð#Ñ#Ø37Ð˜˜U S™[Ô)¨DÑ0Ð7Ð7Ñ7Ø.2Ð˜4 œ9 tÑ+Ð2Ð2Ñ2Ø!Ð˜Ð!Ð!Ñ!ØÐ�cÐÐÑØ"%Ð˜CÐ%Ð%Ñ%Ø!€L�#Ð!Ð!Ñ!Ø€IˆuÐÐÑØ€IˆuÐÐÑØ>L€M�7Ð:Ô;ÐLÐLÑLØM[€M�7ÐIÔJÐ[Ð[Ñ[ð(ð (ð (ð (ð (ð (ð (ð (ð (rR   r   c                   ó<   — e Zd ZU dZeed<   eed<   eed<   eed<   dS )ÚCHMv2ImageProcessorKwargsa=  
    ensure_multiple_of (`int`, *optional*, defaults to 1):
        If `do_resize` is `True`, the image is resized to a size that is a multiple of this value. Can be overridden
        by `ensure_multiple_of` in `preprocess`.
    keep_aspect_ratio (`bool`, *optional*, defaults to `False`):
        If `True`, the image is resized to the largest possible size such that the aspect ratio is preserved. Can
        be overridden by `keep_aspect_ratio` in `preprocess`.
    do_reduce_labels (`bool`, *optional*, defaults to `self.do_reduce_labels`):
        Whether or not to reduce all label values of segmentation maps by 1. Usually used for datasets where 0
        is used for background, and background itself is not included in all classes of a dataset (e.g.
        ADE20k). The background label will be replaced by 255.
    Úensure_multiple_ofÚsize_divisorÚkeep_aspect_ratioÚdo_reduce_labelsN)rS   rT   rU   rV   r[   rZ   ÚboolrK   rR   rQ   rb   rb   {   sN   € € € € € € ðð ð ÐÐÑØÐÐÑØÐÐÑØÐÐÑÐÐrR   rb   F)Útotalc            
       ó˜   — e Zd ZdZdZdZdZdZg d¢Zg d¢Z	e
Z	 dddd	eeeeef                  z  dz  dz  d
eeeef                  fd„ZdS )ÚCHMv2ImageProcessorFTr   )gáz®GáÚ?gçû©ñÒMÚ?g‹lçû©ñÒ?)gÝ$�•CË?g+‡ÙÎ÷Ã?gçû©ñÒMÂ?NÚoutputsr   Útarget_sizesÚreturnc                 ó¦  — t          | d¦  «         |j        }|�/t          |¦  «        t          |¦  «        k    rt          d¦  «        ‚g }|€dgt          |¦  «        z  n|}t	          ||¦  «        D ]^\  }}|�@t
          j        j                             |d         |dd¬¦  «         	                    ¦   «         }| 
                    d|i¦  «         Œ_|S )	aÊ  
        Converts the raw output of [`DepthEstimatorOutput`] into final depth predictions and depth PIL images.
        Only supports PyTorch.

        Args:
            outputs ([`DepthEstimatorOutput`]):
                Raw outputs of the model.
            target_sizes (`TensorType` or `List[Tuple[int, int]]`, *optional*):
                Tensor of shape `(batch_size, 2)` or list of tuples (`Tuple[int, int]`) containing the target size
                (height, width) of each image in the batch. If left to None, predictions will not be resized.

        Returns:
            `List[Dict[str, TensorType]]`: A list of dictionaries of tensors representing the processed depth
            predictions.
        ÚtorchNz]Make sure that you pass in as many target sizes as the batch dimension of the predicted depth)NN.ÚbilinearT©ÚsizeÚmodeÚalign_cornersÚpredicted_depth)r   ru   ÚlenÚ
ValueErrorÚzipro   r   Ú
functionalÚinterpolateÚsqueezeÚappend)rN   rk   rl   ru   ÚresultsÚdepthÚtarget_sizes          rQ   Úpost_process_depth_estimationz1CHMv2ImageProcessor.post_process_depth_estimation™   s÷   € õ( 	˜$ Ñ(Ô(Ð(à!Ô1ˆàÐ$­3¨Ñ+?Ô+?Å3À|ÑCTÔCTÒ+TÐ+TÝØoñô ð ð ˆØ8DÐ8L˜�v¥ OÑ 4Ô 4Ñ4Ð4ÐR^ˆÝ"% o°|Ñ"DÔ"Dð 	7ð 	7ÑˆE�;ØÐ&ÝœÔ+×7Ò7Ø˜/Ô*°À:Ð]að 8ñ ô ç’'‘)”)ð ð �NŠNÐ-¨uÐ5Ñ6Ô6Ð6Ð6àˆrR   ©N)rS   rT   rU   Ú	do_resizeÚdo_padrd   rc   re   Ú
image_meanÚ	image_stdrb   Úvalid_kwargsr   r]   Útupler[   rY   r^   r€   rK   rR   rQ   rj   rj   �   s°   € € € € € Ø€IØ€FØ€LØÐØÐØ&Ð&Ð&€JØ%Ð%Ð%€IØ,€Lð
 JNð'ð 'à'ð'ð ! 4¨¨c°3¨h¬Ô#8Ñ8¸4Ñ?À$ÑFð'ð 
ˆd�3˜
�?Ô#Ô	$ð	'ð 'ð 'ð 'ð 'ð 'rR   rj   c                   ó   — e Zd ZdS )ÚCHMv2ReassembleLayerN©rS   rT   rU   rK   rR   rQ   r‰   r‰   Ã   ó   € € € € € Ø€DrR   r‰   c                   óf   ‡ — 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.
    Úconfigc           	      óŠ  •— t          ¦   «                              ¦   «          || _        |j        | _        t	          j        ¦   «         | _        t          |j        |j	        ¦  «        D ]/\  }}| j         
                    t          |||¬¦  «        ¦  «         Œ0t          |¦  «        }| j        dk    r�t	          j        ¦   «         | _        t          t          | j        ¦  «        ¦  «        D ]X}| j         
                    t	          j        t	          j        d|z  |¦  «        t	          j        ¦   «         ¦  «        ¦  «         ŒWd S d S )N)rŽ   ÚchannelsÚfactorr)   r   )rL   Ú__init__rŽ   r*   r   Ú
ModuleListÚlayersrx   r#   r"   r|   r‰   r   Úreadout_projectsÚrangerv   Ú
SequentialÚLinearÚGELU)rN   rŽ   Úout_channelsr‘   r=   Ú_rP   s         €rQ   r’   zCHMv2ReassembleStage.__init__Í   s9  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"Ô/ˆÔå”m‘o”oˆŒÝ$'¨Ô(DÀfÔF_Ñ$`Ô$`ð 	ð 	Ñ ˆL˜&ØŒK×ÒÝ$Ø!Ø)Ø!ðñ ô ñô ð ð õ 0°Ñ7Ô7ˆØÔ 	Ò)Ð)Ý$&¤M¡O¤OˆDÔ!Ý�3˜tœ{Ñ+Ô+Ñ,Ô,ð pð p�ØÔ%×,Ò,­R¬]½2¼9ÀQÈÁ_ÐVaÑ;bÔ;bÕdfÔdkÑdmÔdmÑ-nÔ-nÑoÔoÐoÐoð *Ð)ðpð prR   NÚhidden_statesrm   c                 ó   — g }t          |¦  «        D �]ê\  }}t          |t          t          f¦  «        �r)t	          |¦  «        dk    �r|d         |d         }}|j        }| j        dk    r§|                     d¦  «                             dd¦  «        }| 	                    d¦  «         
                    |¦  «        }	 | j        |         t          j        ||	fd¦  «        ¦  «        }|                     ddd¦  «                             |¦  «        }n¿| j        dk    r@|                     d¦  «        | 	                    d¦  «        z   }|                     |¦  «        }ns|                     ¦   «         dk    r[|d d …dd …f         }|j        \  }
}}|                     |
|||¦  «        }|                     dddd¦  «                             ¦   «         } | j        |         |¦  «        }|                     |¦  «         �Œì|S )Nr   r   r6   r)   éÿÿÿÿÚaddr   )Ú	enumerateÚ
isinstancer‡   r]   rv   Úshaper*   ÚflattenÚ	transposeÚ	unsqueezeÚ	expand_asr•   ro   ÚcatÚpermuteÚreshapeÚdimÚ
contiguousr”   r|   )rN   rœ   Úpatch_heightÚpatch_widthÚoutÚ	layer_idxÚhidden_stateÚ	cls_tokenÚfeature_shapeÚreadoutÚ
batch_sizer›   Únum_channelss                rQ   ÚforwardzCHMv2ReassembleStage.forwardâ   sþ  € Øˆå'0°Ñ'?Ô'?ð 	%ñ 	%Ñ#ˆI�|Ý˜,­µ¨Ñ6Ô6ñ Q½3¸|Ñ;LÔ;LÐPQÒ;QÑ;QØ*6°q¬/¸<È¼?˜i�Ø ,Ô 2�àÔ$¨	Ò1Ð1Ø#/×#7Ò#7¸Ñ#:Ô#:×#DÒ#DÀQÈÑ#JÔ#J�LØ'×1Ò1°!Ñ4Ô4×>Ò>¸|ÑLÔL�GØ#C 4Ô#8¸Ô#CÅEÄIÈ|Ð]dÐNeÐgiÑDjÔDjÑ#kÔ#k�LØ#/×#7Ò#7¸¸1¸aÑ#@Ô#@×#HÒ#HÈÑ#WÔ#W�L�LØÔ&¨%Ò/Ð/Ø#/×#7Ò#7¸Ñ#:Ô#:¸Y×=PÒ=PÐQSÑ=TÔ=TÑ#T�LØ#/×#7Ò#7¸Ñ#FÔ#F�Løà×#Ò#Ñ%Ô%¨Ò*Ð*Ø#/°°°°1°2°2°Ô#6�LØ2>Ô2DÑ/�J  <Ø#/×#7Ò#7¸
ÀLÐR]Ð_kÑ#lÔ#l�LØ#/×#7Ò#7¸¸1¸aÀÑ#CÔ#C×#NÒ#NÑ#PÔ#P�Là1˜4œ; yÔ1°,Ñ?Ô?ˆLØ�JŠJ�|Ñ$Ô$Ð$Ñ$àˆ
rR   ©NN)rS   rT   rU   rV   r   r’   r]   ro   ÚTensorr¶   r_   r`   s   @rQ   r�   r�   Ç   s�   ø€ € € € € ðð ð
p˜{ð pð pð pð pð pð pð*ð  T¨%¬,Ô%7ð ÐaeÐfkÔfrÔasð ð ð ð ð ð ð ð rR   r�   c                   ó   — e Zd ZdS )ÚCHMv2PreActResidualLayerNrŠ   rK   rR   rQ   rº   rº   ÿ   r‹   rR   rº   c                   ó2   ‡ — e Zd Zddedefˆ fd„Zdd„Zˆ xZS )	ÚCHMv2FeatureFusionLayerFrŽ   Úis_first_layerc                 óø   •— t          ¦   «                              ¦   «          || _        t          j        |j        |j        dd¬¦  «        | _        |st          |¦  «        | _        t          |¦  «        | _	        d S )Nr6   T)Úkernel_sizeÚbias)
rL   r’   r½   r   ÚConv2dr%   Ú
projectionrº   Úresidual_layer1Úresidual_layer2)rN   rŽ   r½   rP   s      €rQ   r’   z CHMv2FeatureFusionLayer.__init__  sr   ø€ Ý‰Œ×ÒÑÔÐØ,ˆÔåœ) FÔ$=¸vÔ?XÐfgÐnrÐsÑsÔsˆŒàð 	DÝ#;¸FÑ#CÔ#CˆDÔ å7¸Ñ?Ô?ˆÔÐÐrR   Nc                 ój  — |�`| j         sY|j        |j        k    r1|j        \  }}}}t          j                             |||fdd¬¦  «        }||                      |¦  «        z   }|                      |¦  «        }|€ddind|i}t          j        j        |fi |¤dddœ¤Ž}|                      |¦  «        }|S )	Nrp   Frq   Úscale_factorr   rr   T)rs   rt   )r½   r¢   r   ry   rz   rÃ   rÄ   rÂ   )rN   r°   Úresidualrr   r›   ÚheightÚwidthÚmodifiers           rQ   r¶   zCHMv2FeatureFusionLayer.forward  só   € ØÐ¨Ô(;ÐØÔ! X¤^Ò3Ð3Ø&2Ô&8Ñ#��1�f˜eÝœ=×4Ò4Ø F¨E ?¸ÐSXð 5ñ ô �ð (¨$×*>Ò*>¸xÑ*HÔ*HÑHˆLà×+Ò+¨LÑ9Ô9ˆà*.¨,�N AÐ&Ð&¸VÀT¸Nˆå”}Ô0Øð
ð 
àð
ð Øð	
ð 
ð 
ð 
ˆð —’ |Ñ4Ô4ˆàÐrR   )Fr·   )rS   rT   rU   r   rg   r’   r¶   r_   r`   s   @rQ   r¼   r¼     sm   ø€ € € € € ð	@ð 	@˜{ð 	@¸Dð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ðð ð ð ð ð ð ð rR   r¼   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.
    r&   c                 óf  •— 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¦  «        | _        d S )	Nr   r   r6   )r¿   ÚstrideÚpaddingrp   T)rÆ   rs   rt   r   )rL   r’   r   r“   rÁ   ÚUpsampleÚReLUÚhead)rN   Úfeaturesr(   Ún_hidden_channelsrP   s       €rQ   r’   zCHMv2UpsampleConvHead.__init__/  s«   ø€ Ý‰Œ×ÒÑÔÐÝ”Må”	˜( H°¡M¸qÈÐTUÐVÑVÔVÝ”¨°È4ÐPÑPÔPÝ”	˜( a™-Ð):ÈÐRSÐ]^Ð_Ñ_Ô_Ý”‘	”	Ý”	Ð+Ð-CÐQRÐ[\ÐfgÐhÑhÔhðñ
ô 
ˆŒ	ˆ	ˆ	rR   c                 ó0   — | j         D ]} ||¦  «        }Œ|S r�   )rÒ   )rN   rœ   Úlayers      rQ   r¶   zCHMv2UpsampleConvHead.forward;  s*   € Ø”Yð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMØÐrR   )r&   )rS   rT   rU   rV   r’   r¶   r_   r`   s   @rQ   rÌ   rÌ   (  sV   ø€ € € € € ðð ð

ð 

ð 

ð 

ð 

ð 

ðð ð ð ð ð ð rR   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           
      óL  •— t          ¦   «                              ¦   «          || _        t          |¦  «        | _        t          j        ¦   «         | _        |j        D ]8}| j         	                    t          j
        ||j        ddd¬¦  «        ¦  «         Œ9t          j        ¦   «         | _        t          t          |j        ¦  «        ¦  «        D ]/}| j         	                    t          ||dk    ¬¦  «        ¦  «         Œ0t!          |j        |j        |j        ¬¦  «        | _        d S )Nr   r6   F)r¿   rÏ   rÀ   r   )r½   )rÓ   r(   rÔ   )rL   r’   rŽ   r�   Úreassemble_stager   r“   Úconvsr#   r|   rÁ   r%   Úfusion_layersr–   rv   r¼   rÌ   r(   r'   Ú
conv_depth)rN   rŽ   ÚchannelÚidxrP   s       €rQ   r’   zCHMv2Head.__init__H  s  ø€ Ý‰Œ×ÒÑÔÐØˆŒå 4°VÑ <Ô <ˆÔå”]‘_”_ˆŒ
ØÔ3ð 	sð 	sˆGØŒJ×Ò�bœi¨°Ô1JÐXYÐcdÐkpÐqÑqÔqÑrÔrÐrÐråœ]™_œ_ˆÔÝ�˜VÔ9Ñ:Ô:Ñ;Ô;ð 	bð 	bˆCØÔ×%Ò%Õ&=¸fÐVYÐ]^ÒV^Ð&`Ñ&`Ô&`ÑaÔaÐaÐaå/ØÔ.Ø#)Ô#@Ø$Ô5ð
ñ 
ô 
ˆŒˆˆrR   rœ   r¬   r­   rm   c                 óP  ‡ — ‰                       |||¦  «        }ˆ fd„t          |¦  «        D ¦   «         }|                     ¦   «           ‰ j        d         |d         ¦  «        }t	          dt          ‰ j        ¦  «        ¦  «        D ]} ‰ j        |         |||         ¦  «        }Œ |S )Nc                 óB   •— g | ]\  }} ‰j         |         |¦  «        ‘ŒS rK   )rÛ   )Ú.0ÚiÚfeaturerN   s      €rQ   ú
<listcomp>z.CHMv2Head.forward_features.<locals>.<listcomp>_  s-   ø€ ÐVÐVÐV©z¨q°'�M�D”J˜q”M 'Ñ*Ô*ÐVÐVÐVrR   r   r6   )rÚ   r    ÚreverserÜ   r–   rv   )rN   rœ   r¬   r­   rÓ   Úfused_hidden_staterã   s   `      rQ   Úforward_featureszCHMv2Head.forward_features\  s¸   ø€ Ø×-Ò-¨m¸\È;ÑWÔWˆàVÐVÐVÐV½YÀ}Ñ=UÔ=UÐVÑVÔVˆØ×ÒÑÔÐà2˜TÔ/°Ô2°8¸A´;Ñ?Ô?ÐÝ�q�#˜dÔ0Ñ1Ô1Ñ2Ô2ð 	Xð 	XˆAØ!6 Ô!3°AÔ!6Ð7IÈ8ÐTUÌ;Ñ!WÔ!WÐÐà!Ð!rR   c                 ó^   — |                       |||¦  «        }|                      |¦  «        }|S r�   )rè   rÝ   )rN   rœ   r¬   r­   r®   s        rQ   r¶   zCHMv2Head.forwardh  s/   € Ø×#Ò# M°<ÀÑMÔMˆØ�oŠo˜cÑ"Ô"ˆØˆ
rR   )rS   rT   rU   rV   r   r’   r]   ro   r¸   r[   rè   r¶   r_   r`   s   @rQ   rØ   rØ   A  sÇ   ø€ € € € € ðð ð
˜{ð 
ð 
ð 
ð 
ð 
ð 
ð(
"¨d°5´<Ô.@ð 
"ÐPSð 
"Ðbeð 
"ÐjoÔjvð 
"ð 
"ð 
"ð 
"ð T¨%¬,Ô%7ð Àsð ÐY\ð ÐafÔamð ð ð ð ð ð ð ð rR   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| _        d S )Ng-Cëâ6?g:Œ0âŽyE>gê-�™—q=)	rL   r’   r+   r,   r0   r3   Ú_mixlog_max_clamp_valueÚ_mixlog_eps_shiftÚ_mixlog_eps©rN   rŽ   rP   s     €rQ   r’   zCHMv2FeaturesToDepth.__init__q  sa   ø€ Ý‰Œ×ÒÑÔÐØÔ)ˆŒØÔ)ˆŒØ#Ô1ˆÔØ#Ô1ˆÔØ'+ˆÔ$Ø!%ˆÔØ ˆÔÐÐrR   Ún_binsÚdevicerm   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,   ro   Úlinspacer+   Úexpr/   Útensor)rN   rñ   rò   Úscaled_max_depthr.   r/   Úinterp_weightÚbinss           rQ   Ú_create_mixlog_binsz(CHMv2FeaturesToDepth._create_mixlog_bins{  sË   € ð  œ>¨CÑ/ÐÝ” ¤Ð0@À&ÐQWÐXÑXÔXˆÝŒiÝŒNÝ”	�%œ, t¤~¸fÐEÑEÔEÑFÔFÝ”	�%œ,Ð'7ÀÐGÑGÔGÑHÔHØØð	ñ ô ñ
ô 
ˆõ œ s¨C°ÀÐGÑGÔGˆØ˜sÑ" c¨MÑ&9¸VÑ%CÑCˆØˆrR   Úinputrý   c                 ó8  — t          j        |¦  «        }|                     dd¬¦  «        }|                      d¦  «                             | j        ¦  «        | j        z   }||z   }|                     dd¬¦  «        }t          j        |ddd¬¦  «                             | j	        ¦  «        }||z  }| 
                    dddd¦  «                             | j	        ¦  «        }	||	z                       dd¬¦  «                             | j	        ¦  «        }
|
dz  }
|
S )	zEConverts depth bin logits to depth values using mixlog normalization.r6   T©rª   Úkeepdimr÷   rö   )ÚnanÚposinfÚneginfrž   rô   )ro   ÚreluÚaminÚ	clamp_minÚ	clamp_maxrí   rî   ÚsumÚ
nan_to_numrï   Úview)rN   rÿ   rý   ÚlogitsÚmin_per_sampleÚshiftÚ
logits_posÚdenomÚweightsÚbins_broadcastÚoutputs              rQ   Ú _create_outputs_with_mixlog_normz5CHMv2FeaturesToDepth._create_outputs_with_mixlog_norm�  s  € å”˜EÑ"Ô"ˆàŸš¨°D˜Ñ9Ô9ˆØ �×+Ò+¨CÑ0Ô0×:Ò:¸4Ô;WÑXÔXÐ[_Ô[qÑqˆØ˜e‘^ˆ
à—’ 1¨d�Ñ3Ô3ˆÝÔ  ¨C¸ÀCÐHÑHÔH×RÒRÐSWÔScÑdÔdˆØ˜uÑ$ˆàŸš 1 b¨!¨QÑ/Ô/×9Ò9¸$Ô:JÑKÔKˆØ˜NÑ*×/Ò/°A¸tÐ/ÑDÔD×NÒNÈtÔO_Ñ`Ô`ˆà˜#‘ˆàˆrR   Úxc                 óÚ  — |j         d         }|dk    �rº| j        dk    r(t          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        dv r½| j        dk    r6t          j        |¦  «        }d}||z   }||                     dd¬¦  «        z  }nP| j        d	k    rt          j        |d¬
¦  «        }n.t          j        |¦  «        }||                     dd¬¦  «        z  }t          j        d||g¦  «                             d¬
¦  «        }n3|                      ||¦  «        }nt          j        |¦  «        | j        z   }|S )Nr6   r.   rõ   r/   )r.   r1   r2   gš™™™™™¹?Tr  r1   ©rª   zikmn,k->imn)r¢   r0   ro   rø   r+   r,   rò   r/   rú   rù   rþ   r3   r  r
  r1   r2   Úeinsumr¥   r  )rN   r  rñ   rý   ÚlogitÚepsr  s          rQ   r¶   zCHMv2FeaturesToDepth.forward£  sÆ  € Ø”˜”ˆà�AŠ:‰:ØÔ! XÒ-Ð-Ý”~ d¤n°d´nÀfÐUVÔU]Ð^Ñ^Ô^��ØÔ# uÒ,Ð,Ý”~Ý”I�eœl¨4¬>Ñ:Ô:Ñ;Ô;Ý”I�eœl¨4¬>Ñ:Ô:Ñ;Ô;ØØœ8ð	ñ ô �õ ”y ‘”��à×/Ò/°¸¼ÑAÔA�àÔ!Ð%EÐEÐEØÔ%¨Ò1Ð1Ý!œJ q™MœM�EØ�CØ! C™K�EØ! E§I¢I°!¸T IÑ$BÔ$BÑB�E�EØÔ'¨9Ò4Ð4Ý!œM¨!°Ð3Ñ3Ô3�E�Eå!œM¨!Ñ,Ô,�EØ! E§I¢I°!¸T IÑ$BÔ$BÑB�EÝœ m°e¸T°]ÑCÔC×MÒMÐRSÐMÑTÔT��à×>Ò>¸qÀ$ÑGÔG��å”Z ‘]”] T¤^Ñ3ˆFàˆrR   )rS   rT   rU   rV   r   r’   r[   ro   rò   r¸   rþ   r  r¶   r_   r`   s   @rQ   rë   rë   n  sÎ   ø€ € € € € ØTÐTð!˜{ð !ð !ð !ð !ð !ð !ð¨#ð °u´|ð ÈÌð ð ð ð ð*°e´lð È%Ì,ð Ð[`Ô[gð ð ð ð ð&"˜œð "¨%¬,ð "ð "ð "ð "ð "ð "ð "ð "rR   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Ž   r   Úpixel_values)ÚimageTrm   Nc                 ó@  •— t          ¦   «                              |¦  «         t          |t          j        t          j        t          j        f¦  «        rHt          j        |j	        d| j
        j        ¬¦  «         |j        �t          j        |j        ¦  «         d S d S d S )Nr÷   )ÚmeanÚstd)rL   Ú_init_weightsr¡   r   r˜   rÁ   ÚConvTranspose2dÚinitÚtrunc_normal_ÚweightrŽ   r!   rÀ   Úzeros_)rN   ÚmodulerP   s     €rQ   r#  z"CHMv2PreTrainedModel._init_weightsÔ  sŠ   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�rœy­"¬)µRÔ5GÐHÑIÔIð 	)ÝÔ˜vœ}°3¸D¼KÔ<YÐZÑZÔZÐZØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ð(Ð(ð	)ð 	)à&Ð&rR   )rm   N)rS   rT   rU   r   rZ   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendr#  r_   r`   s   @rQ   r  r  È  sy   ø€ € € € € € àÐÐÑØÐØ$€OØ!ÐØ&*Ð#Ø€NØÐØÐØ"&Ðð)ð )ð )ð )ð )ð )ð )ð )ð )ð )rR   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          |¦  «        | _        |                      ¦   «          d S r�   )	rL   r’   r	   ÚbackbonerØ   rÒ   rë   Úfeatures_to_depthÚ	post_initrð   s     €rQ   r’   z CHMv2ForDepthEstimation.__init__ã  s_   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å% fÑ-Ô-ˆŒÝ˜fÑ%Ô%ˆŒ	Ý!5°fÑ!=Ô!=ˆÔà�ŠÑÔÐÐÐrR   c                 ó4   — | j                              ¦   «         S r�   )r6  Úget_input_embeddings)rN   s    rQ   r:  z,CHMv2ForDepthEstimation.get_input_embeddingsì  s   € ØŒ}×1Ò1Ñ3Ô3Ð3rR   Nr  ÚlabelsrO   rm   c                 ó”  — d}|�t          d¦  «        ‚|j        \  }}}}| j        j        }||z  }	||z  }
 | j        |fi |¤Ž}t          t          |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 yetr6   r  )Úlossru   rœ   Ú
attentions)ÚNotImplementedErrorr¢   rŽ   r    r6  r]   rx   Úfeature_mapsÚ
cls_tokensrÒ   r7  r{   r   rœ   r>  )rN   r  r;  rO   r=  r›   rÈ   rÉ   r    r¬   r­   Úbackbone_outputÚintermediate_featuresÚhead_outputru   s                  rQ   r¶   zCHMv2ForDepthEstimation.forwardï  sì   € ð ˆØÐÝ%Ð&GÑHÔHÐHà*Ô0Ñˆˆ1ˆf�eØ”[Ô+ˆ
Ø Ñ+ˆØ˜zÑ)ˆà'˜$œ-¨Ð?Ð?¸Ð?Ð?ˆÝ $¥S¨Ô)EÀÔGaÑ%bÔ%bÑ cÔ cÐà—i’iÐ 5°|À[ÑQÔQˆà×0Ò0°Ñ=Ô=ˆØ)×1Ò1°aÐ1Ñ8Ô8ˆå#ØØ+Ø)Ô7Ø&Ô1ð	
ñ 
ô 
ð 	
rR   r�   )rS   rT   rU   r   r’   r:  r   r   ro   ÚFloatTensorÚ
LongTensorr   r   r   r¶   r_   r`   s   @rQ   r4  r4  Ü  s¿   ø€ € € € € ð˜{ð ð ð ð ð ð ð4ð 4ð 4ð Øð +/ð 
ð  
àÔ'ð 
ð Ô  4Ñ'ð 
ð Ð+Ô,ð	 
ð
 
ð 
ð  
ð  
ñ „^ñ Ôð 
ð  
ð  
ð  
ð  
rR   r4  )r   rj   r4  r  )3rV   Útypingr   ro   Úhuggingface_hub.dataclassesr   r   Ú r   r%  Úbackbone_utilsr   r	   Úconfiguration_utilsr
   Úmodeling_outputsr   Úmodeling_utilsr   Úprocessing_utilsr   r   Úutilsr   r   r   r   r   Úautor   Ú&depth_anything.modeling_depth_anythingr   Údpt.image_processing_dptr   Údpt.modeling_dptr   r   r   rb   rj   r‰   ÚModuler�   rº   r¼   rÌ   rØ   rë   r  r4  Ú__all__rK   rR   rQ   ú<module>rV     sÜ  ðð @Ð ?à Ð Ð Ð Ð Ð à €€€Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø -Ð -Ð -Ð -Ð -Ð -Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hØ Ð Ð Ð Ð Ð ðð ð ð ð ð ð 9Ð 8Ð 8Ð 8Ð 8Ð 8Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ Lð €ÐBÐCÑCÔCØðQ(ð Q(ð Q(ð Q(ð Q(Ð"ñ Q(ô Q(ñ „ñ DÔCðQ(ðhð ð ð ð  °Eð ñ ô ð ð(1ð 1ð 1ð 1ð 1Ð+ñ 1ô 1ð 1ðh	ð 	ð 	ð 	ð 	Ð-ñ 	ô 	ð 	ð5ð 5ð 5ð 5ð 5˜2œ9ñ 5ô 5ð 5ðp	ð 	ð 	ð 	ð 	Ð?ñ 	ô 	ð 	ð"ð "ð "ð "ð "˜bœiñ "ô "ð "ðJð ð ð ð ˜BœIñ ô ð ð2*ð *ð *ð *ð *�”	ñ *ô *ð *ðZWð Wð Wð Wð W˜2œ9ñ Wô Wð Wðt ð)ð )ð )ð )ð )˜?ñ )ô )ñ „ð)ð& €ððñ ô ð/
ð /
ð /
ð /
ð /
Ð2ñ /
ô /
ñô ð/
ðdð ð €€€rR   