§
    ‚Štj5Ô  ã                   ó‚  — d Z ddl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 dd	lmZ dd
lmZ ddlmZmZmZ ddlmZ  ej        e¦  «        Z ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z  G d„ dej        ¦  «        Z! G d„ dej        ¦  «        Z"dDd!„Z# G d"„ d#ej        ¦  «        Z$ G d$„ d%ej        ¦  «        Z% G d&„ d'ej        ¦  «        Z&ej'        j(        dEd*e)d+e*fd,„¦   «         Z+ G d-„ d.ej        ¦  «        Z, G d/„ d0ej        ¦  «        Z- G d1„ d2ej        ¦  «        Z. G d3„ d4ej        ¦  «        Z/ G d5„ d6ej        ¦  «        Z0 G d7„ d8ej        ¦  «        Z1 G d9„ d:ej        ¦  «        Z2 G d;„ d<ej        ¦  «        Z3 G d=„ d>ej        ¦  «        Z4e G d?„ d@e¦  «        ¦   «         Z5 edA¬¦  «         G dB„ dCe5¦  «        ¦   «         Z6dCd@gZ7dS )FzPyTorch ZoeDepth model.é    N)Ú	dataclass)Únné   )Úinitialization)ÚACT2FN)Úload_backbone)ÚDepthEstimatorOutput)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚloggingé   )ÚZoeDepthConfigz[
    Extension of `DepthEstimatorOutput` to include domain logits (ZoeDepth specific).
    )Úcustom_introc                   óÊ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
eej        df         dz  ed<   dZeej        df         dz  ed<   dS )	ÚZoeDepthDepthEstimatorOutputaT  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Classification (or regression if config.num_labels==1) loss.
    domain_logits (`torch.FloatTensor` of shape `(batch_size, num_domains)`):
        Logits for each domain (e.g. NYU and KITTI) in case multiple metric heads are used.
    NÚlossÚpredicted_depthÚdomain_logits.Úhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   r   r   Útupler   © ó    úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/zoedepth/modeling_zoedepth.pyr   r   "   sª   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ø.2€M�5Ô$ tÑ+Ð2Ð2Ñ2Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;r!   r   c                   ó^   ‡ — e Zd ZdZˆ fd„Zdeej                 deej                 fd„Zˆ xZ	S )ÚZoeDepthReassembleStageaE  
    This class reassembles the hidden states of the backbone into image-like feature representations at various
    resolutions.

    This happens in 3 stages:
    1. Map the N + 1 tokens to a set of N tokens, by taking into account the readout ([CLS]) token according to
       `config.readout_type`.
    2. Project the channel dimension of the hidden states according to `config.neck_hidden_sizes`.
    3. Resizing the spatial dimensions (height, width).

    Args:
        config (`[ZoeDepthConfig]`):
            Model configuration class defining the model architecture.
    c           	      ó6  •— t          ¦   «                              ¦   «          |j        | _        t          j        ¦   «         | _        t          |j        |j        ¦  «        D ]/\  }}| j         	                    t          |||¬¦  «        ¦  «         Œ0|j        dk    r|t          j        ¦   «         | _        |j        }|j        D ]W}| j         	                    t          j        t          j        d|z  |¦  «        t          |j                 ¦  «        ¦  «         ŒVd S d S )N)ÚchannelsÚfactorÚprojecté   )ÚsuperÚ__init__Úreadout_typer   Ú
ModuleListÚlayersÚzipÚneck_hidden_sizesÚreassemble_factorsÚappendÚZoeDepthReassembleLayerÚreadout_projectsÚbackbone_hidden_sizeÚ
SequentialÚLinearr   Ú
hidden_act)ÚselfÚconfigÚneck_hidden_sizer'   Úhidden_sizeÚ_Ú	__class__s         €r"   r+   z ZoeDepthReassembleStage.__init__G   s  ø€ Ý‰Œ×ÒÑÔÐà"Ô/ˆÔÝ”m‘o”oˆŒå(+¨FÔ,DÀfÔF_Ñ(`Ô(`ð 	jð 	jÑ$Ð˜fØŒK×ÒÕ6°vÐHXÐagÐhÑhÔhÑiÔiÐiÐiàÔ )Ò+Ð+Ý$&¤M¡O¤OˆDÔ!Ø Ô5ˆKØÔ-ð ð �ØÔ%×,Ò,Ý”M¥"¤)¨A°©O¸[Ñ"IÔ"IÍ6ÐRXÔRcÔKdÑeÔeñô ð ð ð	 ,Ð+ðð r!   r   Úreturnc                 óž  — |d         j         d         }t          j        |d¬¦  «        }|dd…df         |dd…dd…f         }}|j         \  }}}|                     ||||¦  «        }|                     dddd¦  «                             ¦   «         }| j        dk    ri|                     d¦  «                             d¦  «        }|                     d¬¦  «         	                    |¦  «        }	t          j        ||	fd	¦  «        }n#| j        d
k    r||                     d	¦  «        z   }g }
t          |                     |d¬¦  «        ¦  «        D ]~\  }}| j        dk    r | j        |         |¦  «        }|                     ddd¦  «                             |d	||¦  «        } | j        |         |¦  «        }|
                     |¦  «         Œ|
S )zÇ
        Args:
            hidden_states (`list[torch.FloatTensor]`, each of shape `(batch_size, sequence_length + 1, hidden_size)`):
                List of hidden states from the backbone.
        r   ©ÚdimNr   r   r)   r(   )r   r)   r   éÿÿÿÿÚadd)Úshaper   ÚcatÚreshapeÚpermuteÚ
contiguousr,   ÚflattenÚ	unsqueezeÚ	expand_asÚ	enumerateÚsplitr4   r.   r2   )r9   r   Úpatch_heightÚpatch_widthÚ
batch_sizeÚ	cls_tokenÚtotal_batch_sizeÚsequence_lengthÚnum_channelsÚreadoutÚoutÚ	stage_idxÚhidden_states                r"   ÚforwardzZoeDepthReassembleStage.forwardX   sï  € ð # 1Ô%Ô+¨AÔ.ˆ
õ œ	 -°QÐ7Ñ7Ô7ˆà#0°°°°A°Ô#6¸ÀaÀaÀaÈÈÈÀeÔ8L�=ˆ	à:GÔ:MÑ7Ð˜/¨<Ø%×-Ò-Ð.>ÀÈkÐ[gÑhÔhˆØ%×-Ò-¨a°°A°qÑ9Ô9×DÒDÑFÔFˆàÔ 	Ò)Ð)à)×1Ò1°!Ñ4Ô4×<Ò<¸YÑGÔGˆMØ×)Ò)¨aÐ)Ñ0Ô0×:Ò:¸=ÑIÔIˆGõ "œI }°gÐ&>ÀÑCÔCˆMˆMØÔ %Ò'Ð'Ø)¨I×,?Ò,?ÀÑ,CÔ,CÑCˆMàˆÝ'0°×1DÒ1DÀZÐUVÐ1DÑ1WÔ1WÑ'XÔ'Xð 	%ð 	%Ñ#ˆI�|ØÔ  IÒ-Ð-Ø?˜tÔ4°YÔ?ÀÑMÔM�ð (×/Ò/°°1°aÑ8Ô8×@Ò@ÀÈRÐQ]Ð_jÑkÔkˆLØ1˜4œ; yÔ1°,Ñ?Ô?ˆLØ�JŠJ�|Ñ$Ô$Ð$Ð$àˆ
r!   ©
r   r   r   r   r+   Úlistr   ÚTensorrZ   Ú__classcell__©r>   s   @r"   r$   r$   7   su   ø€ € € € € ðð ðð ð ð ð ð"& T¨%¬,Ô%7ð &ÐW[Ð\aÔ\hÔWið &ð &ð &ð &ð &ð &ð &ð &r!   r$   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r3   c           	      ó†  •— t          ¦   «                              ¦   «          |j        }t          j        ||d¬¦  «        | _        |dk    r t          j        ||||d¬¦  «        | _        d S |dk    rt          j        ¦   «         | _        d S |dk     r0t          j        ||dt          d|z  ¦  «        d¬¦  «        | _        d S d S )Nr   )Úin_channelsÚout_channelsÚkernel_sizer   ©rd   ÚstrideÚpaddingr   )
r*   r+   r5   r   ÚConv2dÚ
projectionÚConvTranspose2dÚresizeÚIdentityÚint)r9   r:   r&   r'   r<   r>   s        €r"   r+   z ZoeDepthReassembleLayer.__init__‚   sÀ   ø€ Ý‰Œ×ÒÑÔÐàÔ1ˆÝœ)°È(Ð`aÐbÑbÔbˆŒð �AŠ:ˆ:ÝÔ,¨X°xÈVÐ\bÐlmÐnÑnÔnˆDŒKˆKˆKØ�qŠ[ˆ[Ýœ+™-œ-ˆDŒKˆKˆKØ�aŠZˆZåœ) H¨hÀAÍcÐRSÐV\ÑR\ÉoÌoÐghÐiÑiÔiˆDŒKˆKˆKð ˆZr!   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S ©N)ri   rk   ©r9   rY   s     r"   rZ   zZoeDepthReassembleLayer.forward’   s*   € Ø—’ |Ñ4Ô4ˆØ—{’{ <Ñ0Ô0ˆØÐr!   ©r   r   r   r+   rZ   r^   r_   s   @r"   r3   r3   �   sL   ø€ € € € € ðjð jð jð jð jð ð ð ð ð ð ð r!   r3   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚZoeDepthFeatureFusionStager:   c                 ó  •— t          ¦   «                              ¦   «          t          j        ¦   «         | _        t          t          |j        ¦  «        ¦  «        D ])}| j                             t          |¦  «        ¦  «         Œ*d S ro   )
r*   r+   r   r-   r.   ÚrangeÚlenr0   r2   ÚZoeDepthFeatureFusionLayer)r9   r:   r=   r>   s      €r"   r+   z#ZoeDepthFeatureFusionStage.__init__š   sx   ø€ Ý‰Œ×ÒÑÔÐÝ”m‘o”oˆŒÝ•s˜6Ô3Ñ4Ô4Ñ5Ô5ð 	Cð 	CˆAØŒK×ÒÕ9¸&ÑAÔAÑBÔBÐBÐBð	Cð 	Cr!   c                 ó¸   — |d d d…         }g }d }t          || j        ¦  «        D ]4\  }}|€ ||¦  «        }n |||¦  «        }|                     |¦  «         Œ5|S )NrC   )r/   r.   r2   )r9   r   Úfused_hidden_statesÚfused_hidden_staterY   Úlayers         r"   rZ   z"ZoeDepthFeatureFusionStage.forward    sˆ   € à% d d¨ dÔ+ˆà ÐØ!ÐÝ#& }°d´kÑ#BÔ#Bð 	;ð 	;ÑˆL˜%Ø!Ð)à%* U¨<Ñ%8Ô%8Ð"Ð"à%* UÐ+=¸|Ñ%LÔ%LÐ"Ø×&Ò&Ð'9Ñ:Ô:Ð:Ð:à"Ð"r!   )r   r   r   r   r+   rZ   r^   r_   s   @r"   rs   rs   ™   sZ   ø€ € € € € ðC˜~ð Cð Cð Cð Cð Cð Cð#ð #ð #ð #ð #ð #ð #r!   rs   c                   óF   ‡ — e Zd ZdZˆ fd„Zdej        dej        fd„Zˆ xZS )ÚZoeDepthPreActResidualLayerz®
    ResidualConvUnit, pre-activate residual unit.

    Args:
        config (`[ZoeDepthConfig]`):
            Model configuration class defining the model architecture.
    c                 ó6  •— t          ¦   «                              ¦   «          |j        | _        |j        �|j        n| j         }t          j        ¦   «         | _        t          j        |j	        |j	        ddd|¬¦  «        | _
        t          j        ¦   «         | _        t          j        |j	        |j	        ddd|¬¦  «        | _        | j        rLt          j        |j	        |j        ¬¦  «        | _        t          j        |j	        |j        ¬¦  «        | _        d S d S )Nr   r   )rd   rf   rg   Úbias)Úeps)r*   r+   Ú!use_batch_norm_in_fusion_residualÚuse_batch_normÚuse_bias_in_fusion_residualr   ÚReLUÚactivation1rh   Úfusion_hidden_sizeÚconvolution1Úactivation2Úconvolution2ÚBatchNorm2dÚbatch_norm_epsÚbatch_norm1Úbatch_norm2)r9   r:   rƒ   r>   s      €r"   r+   z$ZoeDepthPreActResidualLayer.__init__¼   s$  ø€ Ý‰Œ×ÒÑÔÐà$ÔFˆÔð Ô1Ð=ð Ô.Ð.àÔ(Ð(ð 	$õ œ7™9œ9ˆÔÝœIØÔ%ØÔ%ØØØØ,ð
ñ 
ô 
ˆÔõ œ7™9œ9ˆÔÝœIØÔ%ØÔ%ØØØØ,ð
ñ 
ô 
ˆÔð Ôð 	dÝ!œ~¨fÔ.GÈVÔMbÐcÑcÔcˆDÔÝ!œ~¨fÔ.GÈVÔMbÐcÑcÔcˆDÔÐÐð	dð 	dr!   rY   r?   c                 ó(  — |}|                       |¦  «        }|                      |¦  «        }| j        r|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }| j        r|                      |¦  «        }||z   S ro   )r…   r‡   r‚   rŒ   rˆ   r‰   r�   ©r9   rY   Úresiduals      r"   rZ   z#ZoeDepthPreActResidualLayer.forwardÞ   sš   € ØˆØ×'Ò'¨Ñ5Ô5ˆà×(Ò(¨Ñ6Ô6ˆàÔð 	:Ø×+Ò+¨LÑ9Ô9ˆLà×'Ò'¨Ñ5Ô5ˆØ×(Ò(¨Ñ6Ô6ˆàÔð 	:Ø×+Ò+¨LÑ9Ô9ˆLà˜hÑ&Ð&r!   )	r   r   r   r   r+   r   r]   rZ   r^   r_   s   @r"   r}   r}   ²   sn   ø€ € € € € ðð ð dð  dð  dð  dð  dðD' E¤Lð '°U´\ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r!   r}   c                   óh   ‡ — e Zd ZdZddedefˆ fd„Zddej        dej        dz  d	ej        fd
„Z	ˆ xZ
S )rw   a8  Feature fusion layer, merges feature maps from different stages.

    Args:
        config (`[ZoeDepthConfig]`):
            Model configuration class defining the model architecture.
        align_corners (`bool`, *optional*, defaults to `True`):
            The align_corner setting for bilinear upsample.
    Tr:   Úalign_cornersc                 óô   •— t          ¦   «                              ¦   «          || _        t          j        |j        |j        dd¬¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        d S )Nr   T)rd   r   )
r*   r+   r’   r   rh   r†   ri   r}   Úresidual_layer1Úresidual_layer2)r9   r:   r’   r>   s      €r"   r+   z#ZoeDepthFeatureFusionLayer.__init__û   si   ø€ Ý‰Œ×ÒÑÔÐà*ˆÔåœ) FÔ$=¸vÔ?XÐfgÐnrÐsÑsÔsˆŒå:¸6ÑBÔBˆÔÝ:¸6ÑBÔBˆÔÐÐr!   NrY   r�   r?   c                 ót  — |�c|j         |j         k    r;t          j                             ||j         d         |j         d         fdd¬¦  «        }||                      |¦  «        z   }|                      |¦  «        }t          j                             |dd| j        ¬¦  «        }|                      |¦  «        }|S )Nr)   r   ÚbilinearF©ÚsizeÚmoder’   ©Úscale_factorrš   r’   )rE   r   Ú
functionalÚinterpolater”   r•   r’   ri   r�   s      r"   rZ   z"ZoeDepthFeatureFusionLayer.forward  sÂ   € ØÐØÔ! X¤^Ò3Ð3Ýœ=×4Ò4Ø LÔ$6°qÔ$9¸<Ô;MÈaÔ;PÐ#QÐXbÐrwð 5ñ ô �ð (¨$×*>Ò*>¸xÑ*HÔ*HÑHˆLà×+Ò+¨LÑ9Ô9ˆÝ”}×0Ò0Ø q¨zÈÔI[ð 1ñ 
ô 
ˆð —’ |Ñ4Ô4ˆàÐr!   )Tro   )r   r   r   r   r   Úboolr+   r   r]   rZ   r^   r_   s   @r"   rw   rw   ñ   sž   ø€ € € € € ðð ðCð C˜~ð C¸dð Cð Cð Cð Cð Cð Cðð  E¤Lð ¸E¼LÈ4Ñ<Oð Ð[`Ô[gð ð ð ð ð ð ð ð r!   rw   c                   ód   ‡ — e Zd ZdZdefˆ fd„Zdeej                 deej                 fd„Z	ˆ xZ
S )ÚZoeDepthNeckaO  
    ZoeDepthNeck. A neck is a module that is normally used between the backbone and the head. It takes a list of tensors as
    input and produces another list of tensors as output. For ZoeDepth, it includes 2 stages:

    * ZoeDepthReassembleStage
    * ZoeDepthFeatureFusionStage.

    Args:
        config (dict): config dict.
    r:   c           
      ó”  •— t          ¦   «                              ¦   «          || _        |j        �|j        j        dk    rd | _        nt          |¦  «        | _        t          j        ¦   «         | _	        |j
        D ]8}| j	                             t          j        ||j        ddd¬¦  «        ¦  «         Œ9t          |¦  «        | _        d S )NÚswinv2r   r   F)rd   rg   r   )r*   r+   r:   Úbackbone_configÚ
model_typeÚreassemble_stager$   r   r-   Úconvsr0   r2   rh   r†   rs   Úfusion_stage)r9   r:   Úchannelr>   s      €r"   r+   zZoeDepthNeck.__init__#  sÄ   ø€ Ý‰Œ×ÒÑÔÐØˆŒð Ô!Ð-°&Ô2HÔ2SÐW_Ò2_Ð2_Ø$(ˆDÔ!Ð!å$;¸FÑ$CÔ$CˆDÔ!å”]‘_”_ˆŒ
ØÔ/ð 	sð 	sˆGØŒJ×Ò�bœi¨°Ô1JÐXYÐcdÐkpÐqÑqÔqÑrÔrÐrÐrõ 7°vÑ>Ô>ˆÔÐÐr!   r   r?   c                 ó|  ‡ — t          |t          t          f¦  «        st          d¦  «        ‚t	          |¦  «        t	          ‰ j        j        ¦  «        k    rt          d¦  «        ‚‰ j        �‰                      |||¦  «        }ˆ fd„t          |¦  «        D ¦   «         }‰  
                    |¦  «        }||d         fS )zñ
        Args:
            hidden_states (`list[torch.FloatTensor]`, each of shape `(batch_size, sequence_length, hidden_size)` or `(batch_size, hidden_size, height, width)`):
                List of hidden states from the backbone.
        z2hidden_states should be a tuple or list of tensorszOThe number of hidden states should be equal to the number of neck hidden sizes.Nc                 óB   •— g | ]\  }} ‰j         |         |¦  «        ‘ŒS r    )r§   )Ú.0ÚiÚfeaturer9   s      €r"   ú
<listcomp>z(ZoeDepthNeck.forward.<locals>.<listcomp>D  s-   ø€ ÐVÐVÐV©z¨q°'�M�D”J˜q”M 'Ñ*Ô*ÐVÐVÐVr!   rC   )Ú
isinstancer   r\   Ú	TypeErrorrv   r:   r0   Ú
ValueErrorr¦   rM   r¨   )r9   r   rO   rP   ÚfeaturesÚoutputs   `     r"   rZ   zZoeDepthNeck.forward4  sÁ   ø€ õ ˜-­%µ¨Ñ7Ô7ð 	RÝÐPÑQÔQÐQåˆ}ÑÔ¥ T¤[Ô%BÑ!CÔ!CÒCÐCÝÐnÑoÔoÐoð Ô Ð,Ø ×1Ò1°-ÀÈ{Ñ[Ô[ˆMàVÐVÐVÐV½YÀ}Ñ=UÔ=UÐVÑVÔVˆð ×"Ò" 8Ñ,Ô,ˆà�x ”|Ð#Ð#r!   )r   r   r   r   r   r+   r\   r   r]   rZ   r^   r_   s   @r"   r¡   r¡     s�   ø€ € € € € ð	ð 	ð?˜~ð ?ð ?ð ?ð ?ð ?ð ?ð"$ T¨%¬,Ô%7ð $ÐW[Ð\aÔ\hÔWið $ð $ð $ð $ð $ð $ð $ð $r!   r¡   c                   óR   ‡ — e Zd ZdZˆ fd„Zdeej                 dej        fd„Zˆ xZ	S )Ú#ZoeDepthRelativeDepthEstimationHeada  
    Relative depth estimation head consisting of 3 convolutional layers. It progressively halves the feature dimension and upsamples
    the predictions to the input resolution after the first convolutional layer (details can be found in DPT's paper's
    supplementary material).
    c                 óÒ  •— t          ¦   «                              ¦   «          |j        | _        d | _        |j        rt          j        ddddd¬¦  «        | _        |j        }t          j        ||dz  ddd¬¦  «        | _        t          j	        ddd	¬
¦  «        | _
        t          j        |dz  |j        ddd¬¦  «        | _        t          j        |j        dddd¬¦  «        | _        d S )Né   )r   r   )r   r   re   r)   r   r   r—   Tr›   r   )r*   r+   Úhead_in_indexri   Úadd_projectionr   rh   r†   Úconv1ÚUpsampleÚupsampleÚnum_relative_featuresÚconv2Úconv3)r9   r:   r³   r>   s      €r"   r+   z,ZoeDepthRelativeDepthEstimationHead.__init__S  sá   ø€ Ý‰Œ×ÒÑÔÐà#Ô1ˆÔàˆŒØÔ ð 	eÝ œi¨¨S¸fÈVÐ]cÐdÑdÔdˆDŒOàÔ,ˆÝ”Y˜x¨°Q©ÀAÈaÐYZÐ[Ñ[Ô[ˆŒ
Ýœ°¸ÐSWÐXÑXÔXˆŒÝ”Y˜x¨1™}¨fÔ.JÐXYÐbcÐmnÐoÑoÔoˆŒ
Ý”Y˜vÔ;¸QÈAÐVWÐabÐcÑcÔcˆŒ
ˆ
ˆ
r!   r   r?   c                 óÜ  — || j                  }| j        �1|                      |¦  «        } t          j        ¦   «         |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        } t          j        ¦   «         |¦  «        }|}|                      |¦  «        } t          j        ¦   «         |¦  «        }|                     d¬¦  «        }||fS )Nr   rA   )	r¹   ri   r   r„   r»   r½   r¿   rÀ   Úsqueeze)r9   r   r³   r   s       r"   rZ   z+ZoeDepthRelativeDepthEstimationHead.forwardb  sÑ   € à% dÔ&8Ô9ˆàŒ?Ð&Ø ŸOšO¨MÑ:Ô:ˆMØ%�BœG™IœI mÑ4Ô4ˆMàŸ
š
 =Ñ1Ô1ˆØŸš mÑ4Ô4ˆØŸ
š
 =Ñ1Ô1ˆØ!�œ™	œ	 -Ñ0Ô0ˆà ˆØŸ
š
 =Ñ1Ô1ˆØ!�œ™	œ	 -Ñ0Ô0ˆà'×/Ò/°AÐ/Ñ6Ô6ˆà Ð(Ð(r!   r[   r_   s   @r"   r¶   r¶   L  sr   ø€ € € € € ðð ðdð dð dð dð dð) T¨%¬,Ô%7ð )¸E¼Lð )ð )ð )ð )ð )ð )ð )ð )r!   r¶   çH¯¼šò×z>c                 ó¶   — | |z   } ||z   }| t          j        | ¦  «        z  |t          j        |¦  «        z  z
  | |z
  t          j        | |z
  |z   ¦  «        z  z
  S )z%log(nCk) using stirling approximation)r   Úlog)ÚnÚkr€   s      r"   Ú	log_binomrÈ   x  sY   € à	ˆC‰€AØ	ˆC‰€AØ�uŒy˜‰|Œ|Ñ˜a¥%¤)¨A¡,¤,Ñ.Ñ.°!°a±%½5¼9ÀQÈÁUÈSÁ[Ñ;QÔ;QÑ1QÑQÐQr!   c                   ó6   ‡ — e Zd Zdej        fˆ fd„	Zdd„Zˆ xZS )ÚLogBinomialSoftmaxr¸   c           	      óx  •— t          ¦   «                              ¦   «          || _        || _        |                      dt          j        d|¦  «                             dddd¦  «        d¬¦  «         |                      dt          j        | j        dz
  g¦  «                             dddd¦  «        d¬¦  «         dS )	a7  Compute log binomial distribution for n_classes

        Args:
            n_classes (`int`, *optional*, defaults to 256):
                Number of output classes.
            act (`torch.nn.Module`, *optional*, defaults to `torch.softmax`):
                Activation function to apply to the output.
        Úk_idxr   r   rC   F)Ú
persistentÚ	k_minus_1N)	r*   r+   rÇ   ÚactÚregister_bufferr   ÚarangeÚviewÚtensor)r9   Ú	n_classesrÏ   r>   s      €r"   r+   zLogBinomialSoftmax.__init__€  s°   ø€ õ 	‰Œ×ÒÑÔÐØˆŒØˆŒØ×Ò˜W¥e¤l°1°iÑ&@Ô&@×&EÒ&EÀaÈÈQÐPQÑ&RÔ&RÐ_dÐÑeÔeÐeØ×Ò˜[­%¬,¸¼À¹
°|Ñ*DÔ*D×*IÒ*IÈ!ÈRÐQRÐTUÑ*VÔ*VÐchÐÑiÔiÐiÐiÐir!   ç      ð?ç-Cëâ6?c                 ó�  — |j         dk    r|                     d¦  «        }d|z
                       |d¬¦  «        }|                     |d¬¦  «        }t          | j        | j        ¦  «        | j        t          j        |¦  «        z  z   | j        | j        z
  t          j        |¦  «        z  z   }|                      ||z  d¬¦  «        S )a°  Compute the log binomial distribution for probabilities.

        Args:
            probabilities (`torch.Tensor` of shape `(batch_size, num_channels, height, width)`):
                Tensor containing probabilities of each class.
            temperature (`float` or `torch.Tensor` of shape `(batch_size, num_channels, height, width)`, *optional*, defaults to 1):
                Temperature of distribution.
            eps (`float`, *optional*, defaults to 1e-4):
                Small number for numerical stability.

        Returns:
            `torch.Tensor` of shape `(batch_size, num_channels, height, width)`:
                Log binomial distribution logbinomial(p;t).
        r   r   rÕ   )ÚminÚmaxrA   )	ÚndimrK   ÚclamprÈ   rÎ   rÌ   r   rÅ   rÏ   )r9   ÚprobabilitiesÚtemperaturer€   Úone_minus_probabilitiesÚys         r"   rZ   zLogBinomialSoftmax.forward�  sÈ   € ð Ô Ò"Ð"Ø)×3Ò3°AÑ6Ô6ˆMà#$ }Ñ#4×";Ò";ÀÈÐ";Ñ"MÔ"MÐØ%×+Ò+°¸Ð+Ñ=Ô=ˆå�d”n d¤jÑ1Ô1ØŒj�5œ9 ]Ñ3Ô3Ñ3ñ4àŒ~ ¤
Ñ*­e¬iÐ8OÑ.PÔ.PÑPñQð 	
ð
 �xŠx˜˜K™¨QˆxÑ/Ô/Ð/r!   )rÕ   rÖ   )r   r   r   r   Úsoftmaxr+   rZ   r^   r_   s   @r"   rÊ   rÊ     s^   ø€ € € € € Ø!$¨%¬-ð jð jð jð jð jð jð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r!   rÊ   c                   ó*   ‡ — e Zd Z	 	 dˆ fd„	Zd„ Zˆ xZS )Ú%ZoeDepthConditionalLogBinomialSoftmaxr¸   r)   c                 ó´  •— t          ¦   «                              ¦   «          ||z   |z  }t          j        t          j        ||z   |ddd¬¦  «        t          j        ¦   «         t          j        |dddd¬¦  «        t          j        ¦   «         ¦  «        | _        d| _        |j	        | _	        |j
        | _
        t          |t          j        ¬¦  «        | _        dS )aß  Per-pixel MLP followed by a Conditional Log Binomial softmax.

        Args:
            in_features (`int`):
                Number of input channels in the main feature.
            condition_dim (`int`):
                Number of input channels in the condition feature.
            n_classes (`int`, *optional*, defaults to 256):
                Number of classes.
            bottleneck_factor (`int`, *optional*, defaults to 2):
                Hidden dim factor.

        r   r   re   é   rÖ   )rÏ   N)r*   r+   r   r6   rh   ÚGELUÚSoftplusÚmlpÚp_epsÚmax_tempÚmin_temprÊ   r   rà   Úlog_binomial_transform)r9   r:   Úin_featuresÚcondition_dimrÔ   Úbottleneck_factorÚ
bottleneckr>   s          €r"   r+   z.ZoeDepthConditionalLogBinomialSoftmax.__init__¬  s¿   ø€ õ* 	‰Œ×ÒÑÔÐà! MÑ1Ð6GÑGˆ
Ý”=ÝŒI�k MÑ1°:È1ÐUVÐ`aÐbÑbÔbÝŒG‰IŒIåŒI�j %°Q¸qÈ!ÐLÑLÔLÝŒK‰MŒMñ
ô 
ˆŒð ˆŒ
ØœˆŒØœˆŒÝ&8¸ÍÌÐ&VÑ&VÔ&VˆÔ#Ð#Ð#r!   c                 óê  — |                       t          j        ||fd¬¦  «        ¦  «        }|dd…dd…df         |dd…dd…df         }}|| j        z   }|dd…ddf         |dd…ddf         |dd…ddf         z   z  }|| j        z   }|dd…ddf         |dd…ddf         |dd…ddf         z   z  }|                     d¦  «        }| j        | j        z
  |z  | j        z   }|                      ||¦  «        S )az  
        Args:
            main_feature (`torch.Tensor` of shape `(batch_size, num_channels, height, width)`):
                Main feature.
            condition_feature (torch.Tensor of shape `(batch_size, num_channels, height, width)`):
                Condition feature.

        Returns:
            `torch.Tensor`:
                Output log binomial distribution
        r   rA   Nr)   .r   )rç   r   Úconcatrè   rK   ré   rê   rë   )r9   Úmain_featureÚcondition_featureÚprobabilities_and_temperaturerÜ   rÝ   s         r"   rZ   z-ZoeDepthConditionalLogBinomialSoftmax.forwardÑ  s@  € ð )-¯ªµ´¸|ÐM^Ð>_ÐefÐ1gÑ1gÔ1gÑ(hÔ(hÐ%à)¨!¨!¨!¨R¨a¨R°¨*Ô5Ø)¨!¨!¨!¨Q¨R¨R°¨*Ô5ð #ˆð
 &¨¬
Ñ2ˆØ% a a a¨¨C iÔ0°MÀ!À!À!ÀQÈÀ)Ô4LÈ}Ð]^Ð]^Ð]^Ð`aÐcfÐ]fÔOgÑ4gÑhˆà! D¤JÑ.ˆØ! ! ! ! Q¨ )Ô,°¸A¸A¸A¸qÀ#¸IÔ0FÈÐUVÐUVÐUVÐXYÐ[^ÐU^ÔI_Ñ0_Ñ`ˆØ!×+Ò+¨AÑ.Ô.ˆØ”} t¤}Ñ4¸ÑCÀdÄmÑSˆà×*Ò*¨=¸+ÑFÔFÐFr!   )r¸   r)   rq   r_   s   @r"   râ   râ   «  sb   ø€ € € € € ð Øð#Wð #Wð #Wð #Wð #Wð #WðJGð Gð Gð Gð Gð Gð Gr!   râ   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚZoeDepthSeedBinRegressoré   r¸   çü©ñÒMbP?é
   c                 ó¶  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        || _        t          j        | j        |ddd¦  «        | _	        t          j
        d¬¦  «        | _        t          j        ||ddd¦  «        | _        | j        dk    rt          j
        d¬¦  «        nt          j        ¦   «         | _        dS )ad  Bin center regressor network.

        Can be "normed" or "unnormed". If "normed", bin centers are bounded on the (min_depth, max_depth) interval.

        Args:
            config (`int`):
                Model configuration.
            n_bins (`int`, *optional*, defaults to 16):
                Number of bin centers.
            mlp_dim (`int`, *optional*, defaults to 256):
                Hidden dimension.
            min_depth (`float`, *optional*, defaults to 1e-3):
                Min depth value.
            max_depth (`float`, *optional*, defaults to 10):
                Max depth value.
        r   r   T©ÚinplaceÚnormedN)r*   r+   Úbottleneck_featuresrì   Úbin_centers_typeÚ	min_depthÚ	max_depthr   rh   r»   r„   Úact1r¿   ræ   Úact2)r9   r:   Ún_binsÚmlp_dimr   r  r>   s         €r"   r+   z!ZoeDepthSeedBinRegressor.__init__ï  s¼   ø€ õ" 	‰Œ×ÒÑÔÐà!Ô5ˆÔØ &Ô 7ˆÔØ"ˆŒØ"ˆŒå”Y˜tÔ/°¸!¸QÀÑBÔBˆŒ
Ý”G DÐ)Ñ)Ô)ˆŒ	Ý”Y˜w¨°°1°aÑ8Ô8ˆŒ
Ø-1Ô-BÀhÒ-NÐ-N•B”G DÐ)Ñ)Ô)Ð)ÕTVÔT_ÑTaÔTaˆŒ	ˆ	ˆ	r!   c                 óò  — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }| j        dk    r•|dz   }||                     dd¬¦  «        z  }| j        | j        z
  |z  }t          j	         
                    |dd| j        ¬¦  «        }t          j        |d¬	¦  «        }d
|dd…dd…df         |dd…dd…df         z   z  }||fS ||fS )z]
        Returns tensor of bin_width vectors (centers). One vector b for every pixel
        rý   rø   r   T©rB   Úkeepdim)r   r   r   r   r   r   Úconstant)rš   ÚvaluerA   g      à?NrC   .)r»   r  r¿   r  rÿ   Úsumr  r   r   r�   Úpadr   Úcumsum)r9   ÚxÚbin_centersÚbin_widths_normedÚ
bin_widthsÚ	bin_edgess         r"   rZ   z ZoeDepthSeedBinRegressor.forward  s  € ð �JŠJ�q‰MŒMˆØ�IŠI�a‰LŒLˆØ�JŠJ�q‰MŒMˆØ—i’i ‘l”lˆàÔ  HÒ,Ð,Ø%¨Ñ,ˆKØ +¨k¯oªoÀ!ÈT¨oÑ.RÔ.RÑ RÐàœ.¨4¬>Ñ9Ð=NÑNˆJåœ×*Ò*¨:Ð7IÐPZÐbfÔbpÐ*ÑqÔqˆJåœ Z°QÐ7Ñ7Ô7ˆIà ¨1¨1¨1¨c¨r¨c°3¨;Ô!7¸)ÀAÀAÀAÀqÀrÀrÈ3ÀJÔ:OÑ!OÑPˆKØ$ kÐ1Ð1ð  Ð+Ð+r!   )r÷   r¸   rø   rù   rq   r_   s   @r"   rö   rö   î  sR   ø€ € € € € ðbð bð bð bð bð bð:,ð ,ð ,ð ,ð ,ð ,ð ,r!   rö   é,  r)   ÚalphaÚgammac                 ó^   — |                       d||                      |¦  «        z  z   ¦  «        S )a:  Inverse attractor: dc = dx / (1 + alpha*dx^gamma), where dx = a - c, a = attractor point, c = bin center, dc = shift in bin center
    This is the default one according to the accompanying paper.

    Args:
        dx (`torch.Tensor`):
            The difference tensor dx = Ai - Cj, where Ai is the attractor point and Cj is the bin center.
        alpha (`float`, *optional*, defaults to 300):
            Proportional Attractor strength. Determines the absolute strength. Lower alpha = greater attraction.
        gamma (`int`, *optional*, defaults to 2):
            Exponential Attractor strength. Determines the "region of influence" and indirectly number of bin centers affected.
            Lower gamma = farther reach.

    Returns:
        torch.Tensor: Delta shifts - dc; New bin centers = Old bin centers + dc
    r   )ÚdivÚpow)Údxr  r  s      r"   Úinv_attractorr  &  s*   € ð" �6Š6�!�e˜bŸfšf U™mœmÑ+Ñ+Ñ,Ô,Ð,r!   c                   ó0   ‡ — e Zd Z	 	 	 	 d	ˆ fd„	Zd
d„Zˆ xZS )ÚZoeDepthAttractorLayerr÷   rø   rù   Fc                 óÊ  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        || _        || _	        || _
        || _        || _        |j        x}}t          j        ||ddd¦  «        | _        t          j        d¬¦  «        | _        t          j        ||dz  ddd¦  «        | _        t          j        d¬¦  «        | _        dS )zq
        Attractor layer for bin centers. Bin centers are bounded on the interval (min_depth, max_depth)
        r   r   Trû   r)   N)r*   r+   Úattractor_alphar  Úattractor_gammaÚgemmaÚattractor_kindÚkindÚn_attractorsr  r   r  Úmemory_efficientÚbin_embedding_dimr   rh   r»   r„   r  r¿   r  ©
r9   r:   r  r#  r   r  r$  rì   r  r>   s
            €r"   r+   zZoeDepthAttractorLayer.__init__;  sÐ   ø€ õ 	‰Œ×ÒÑÔÐàÔ+ˆŒ
ØÔ+ˆŒ
ØÔ)ˆŒ	à(ˆÔØˆŒØ"ˆŒØ"ˆŒØ 0ˆÔð !'Ô 8Ð8ˆ�gÝ”Y˜{¨G°Q¸¸1Ñ=Ô=ˆŒ
Ý”G DÐ)Ñ)Ô)ˆŒ	Ý”Y˜w¨°qÑ(8¸!¸QÀÑBÔBˆŒ
Ý”G DÐ)Ñ)Ô)ˆŒ	ˆ	ˆ	r!   NTc                 ón  — |�7|r0t           j                             ||j        dd…         dd¬¦  «        }||z   }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|dz   }|j        \  }}}}	|                     || j	        d||	¦  «        }|dd…dd…dd	f         }
t           j                             |||	fdd¬¦  «        }| j
        sht          j        t          j        d
œ| j                 } |t          |
                     d¦  «        |                     d¦  «        z
  ¦  «        d¬¦  «        }nzt          j        ||j        ¬¦  «        }t'          | j	        ¦  «        D ]5}|t          |
dd…|d	f                              d¦  «        |z
  ¦  «        z  }Œ6| j        dk    r
|| j	        z  }||z   }| j        | j        z
  |z  | j        z   }t          j        |d¬¦  «        \  }}t          j        || j        | j        ¦  «        }||fS )ao  
        The forward pass of the attractor layer. This layer predicts the new bin centers based on the previous bin centers
        and the attractor points (the latter are predicted by the MLP).

        Args:
            x (`torch.Tensor` of shape `(batch_size, num_channels, height, width)`):
                Feature block.
            prev_bin (`torch.Tensor` of shape `(batch_size, prev_number_of_bins, height, width)`):
                Previous bin centers normed.
            prev_bin_embedding (`torch.Tensor`, *optional*):
                Optional previous bin embeddings.
            interpolate (`bool`, *optional*, defaults to `True`):
                Whether to interpolate the previous bin embeddings to the size of the input features.

        Returns:
            `tuple[`torch.Tensor`, `torch.Tensor`]:
                New bin centers normed and scaled.
        Néþÿÿÿr—   T©rš   r’   rø   r)   r   .©Úmeanr  r   rA   ©Údevicer+  )r   r�   rž   rE   r»   r  r¿   r  rÒ   r#  r$  r   r+  r  r"  r  rK   Ú
zeros_liker-  ru   r  r   ÚsortÚclip)r9   r  Úprev_binÚprev_bin_embeddingrž   Ú
attractorsrQ   r=   ÚheightÚwidthÚattractors_normedr  ÚfuncÚdelta_cr­   Úbin_new_centerss                   r"   rZ   zZoeDepthAttractorLayer.forwardZ  sP  € ð& Ð)Øð Ý%'¤]×%>Ò%>Ø&¨¬°°°¬¸:ÐUYð &?ñ &ô &Ð"ð Ð&Ñ&ˆAà�JŠJ�q‰MŒMˆØ�IŠI�a‰LŒLˆØ�JŠJ�q‰MŒMˆØ—Y’Y˜q‘\”\ˆ
à $Ñ&ˆ
Ø'1Ô'7Ñ$ˆ
�A�v˜uØ—_’_ Z°Ô1BÀAÀvÈuÑUÔUˆ
ð ' q q q¨!¨!¨!¨Q° |Ô4Ðå”m×/Ò/°¸6À5¸/ÐPZÐjnÐ/ÑoÔoˆð Ô$ð 	6Ý!œJ­u¬yÐ9Ð9¸$¼)ÔDˆDà�d�=Ð):×)DÒ)DÀQÑ)GÔ)GÈ+×J_ÒJ_Ð`aÑJbÔJbÑ)bÑcÔcÐijÐkÑkÔkˆGˆGåÔ& {¸;Ô;MÐNÑNÔNˆGÝ˜4Ô,Ñ-Ô-ð bð b�à�=Ð):¸1¸1¸1¸aÀ¸9Ô)E×)OÒ)OÐPQÑ)RÔ)RÐU`Ñ)`ÑaÔaÑa��àŒy˜FÒ"Ð"Ø! DÔ$5Ñ5�à%¨Ñ/ˆØ”~¨¬Ñ6¸/ÑIÈDÌNÑZˆÝœ K°QÐ7Ñ7Ô7‰ˆ�QÝ”j ¨d¬n¸d¼nÑMÔMˆØ Ð+Ð+r!   )r÷   rø   rù   F©NTrq   r_   s   @r"   r  r  :  s_   ø€ € € € € ð
 ØØØð*ð *ð *ð *ð *ð *ð><,ð <,ð <,ð <,ð <,ð <,ð <,ð <,r!   r  c                   ó0   ‡ — e Zd Z	 	 	 	 dˆ fd„	Zd	d„Zˆ xZS )
ÚZoeDepthAttractorLayerUnnormedr÷   rø   rù   Tc                 óÀ  •— t          ¦   «                              ¦   «          || _        || _        || _        || _        |j        | _        |j        | _        |j	        | _
        || _        |j        x}}t          j        ||ddd¦  «        | _        t          j        d¬¦  «        | _        t          j        ||ddd¦  «        | _        t          j        ¦   «         | _        dS )zL
        Attractor layer for bin centers. Bin centers are unbounded
        r   r   Trû   N)r*   r+   r#  r  r   r  r  r  r  r!  r"  r$  r%  r   rh   r»   r„   r  r¿   ræ   r  r&  s
            €r"   r+   z'ZoeDepthAttractorLayerUnnormed.__init__š  sÂ   ø€ õ 	‰Œ×ÒÑÔÐà(ˆÔØˆŒØ"ˆŒØ"ˆŒØÔ+ˆŒ
ØÔ+ˆŒ
ØÔ)ˆŒ	Ø 0ˆÔà &Ô 8Ð8ˆ�gÝ”Y˜{¨G°Q¸¸1Ñ=Ô=ˆŒ
Ý”G DÐ)Ñ)Ô)ˆŒ	Ý”Y˜w¨°a¸¸AÑ>Ô>ˆŒ
Ý”K‘M”MˆŒ	ˆ	ˆ	r!   Nc                 ór  — |�7|r0t           j                             ||j        dd…         dd¬¦  «        }||z   }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|j        dd…         \  }}t           j                             |||fdd¬¦  «        }| j        sht          j
        t          j        dœ| j                 }	 |	t          |                     d¦  «        |                     d¦  «        z
  ¦  «        d¬	¦  «        }
nzt          j        ||j        ¬
¦  «        }
t#          | j        ¦  «        D ]5}|
t          |dd…|df                              d¦  «        |z
  ¦  «        z  }
Œ6| j        dk    r
|
| j        z  }
||
z   }|}||fS )a¤  
        The forward pass of the attractor layer. This layer predicts the new bin centers based on the previous bin centers
        and the attractor points (the latter are predicted by the MLP).

        Args:
            x (`torch.Tensor` of shape (batch_size, num_channels, height, width)`):
                Feature block.
            prev_bin (`torch.Tensor` of shape (batch_size, prev_num_bins, height, width)`):
                Previous bin centers normed.
            prev_bin_embedding (`torch.Tensor`, *optional*):
                Optional previous bin embeddings.
            interpolate (`bool`, *optional*, defaults to `True`):
                Whether to interpolate the previous bin embeddings to the size of the input features.

        Returns:
            `tuple[`torch.Tensor`, `torch.Tensor`]:
                New bin centers unbounded. Two outputs just to keep the API consistent with the normed version.
        Nr(  r—   Tr)  r*  r)   r   rA   r,  .r+  )r   r�   rž   rE   r»   r  r¿   r  r$  r   r+  r  r"  r  rK   r.  r-  ru   r#  )r9   r  r1  r2  rž   r3  r4  r5  r  r7  r8  r­   r9  s                r"   rZ   z&ZoeDepthAttractorLayerUnnormed.forward·  sÇ  € ð& Ð)Øð Ý%'¤]×%>Ò%>Ø&¨¬°°°¬¸:ÐUYð &?ñ &ô &Ð"ð Ð&Ñ&ˆAà�JŠJ�q‰MŒMˆØ�IŠI�a‰LŒLˆØ�JŠJ�q‰MŒMˆØ—Y’Y˜q‘\”\ˆ
à"Ô(¨¨¨Ô-‰ˆ�å”m×/Ò/°¸6À5¸/ÐPZÐjnÐ/ÑoÔoˆàÔ$ð 	6Ý!œJ­u¬yÐ9Ð9¸$¼)ÔDˆDà�d�=¨×)=Ò)=¸aÑ)@Ô)@À;×CXÒCXÐYZÑC[ÔC[Ñ)[Ñ\Ô\ÐbcÐdÑdÔdˆGˆGåÔ& {¸;Ô;MÐNÑNÔNˆGÝ˜4Ô,Ñ-Ô-ð [ð [�à�=¨°A°A°A°q¸#°IÔ)>×)HÒ)HÈÑ)KÔ)KÈkÑ)YÑZÔZÑZ��àŒy˜FÒ"Ð"Ø! DÔ$5Ñ5�à%¨Ñ/ˆØ%ˆà Ð+Ð+r!   )r÷   rø   rù   Tr:  rq   r_   s   @r"   r<  r<  ™  s_   ø€ € € € € ð
 ØØØð"ð "ð "ð "ð "ð "ð:3,ð 3,ð 3,ð 3,ð 3,ð 3,ð 3,ð 3,r!   r<  c                   óD   ‡ — e Zd Zdˆ fd„	Zdej        dej        fd„Zˆ xZS )ÚZoeDepthProjectoré€   c                 óð   •— t          ¦   «                              ¦   «          t          j        ||ddd¦  «        | _        t          j        d¬¦  «        | _        t          j        ||ddd¦  «        | _        dS )a  Projector MLP.

        Args:
            in_features (`int`):
                Number of input channels.
            out_features (`int`):
                Number of output channels.
            mlp_dim (`int`, *optional*, defaults to 128):
                Hidden dimension.
        r   r   Trû   N)r*   r+   r   rh   r»   r„   rÏ   r¿   )r9   rì   Úout_featuresr  r>   s       €r"   r+   zZoeDepthProjector.__init__î  se   ø€ õ 	‰Œ×ÒÑÔÐå”Y˜{¨G°Q¸¸1Ñ=Ô=ˆŒ
Ý”7 4Ð(Ñ(Ô(ˆŒÝ”Y˜w¨°a¸¸AÑ>Ô>ˆŒ
ˆ
ˆ
r!   rY   r?   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ro   )r»   rÏ   r¿   rp   s     r"   rZ   zZoeDepthProjector.forwardÿ  s;   € Ø—z’z ,Ñ/Ô/ˆØ—x’x Ñ-Ô-ˆØ—z’z ,Ñ/Ô/ˆàÐr!   )rA  ©r   r   r   r+   r   r]   rZ   r^   r_   s   @r"   r@  r@  í  sc   ø€ € € € € ð?ð ?ð ?ð ?ð ?ð ?ð" E¤Lð °U´\ð ð ð ð ð ð ð ð r!   r@  c                   ó’   ‡ — e Zd ZdZˆ fd„Z	 	 ddej        dej        dej        dej        dz  d	edz  d
e	ej                 fd„Z
ˆ xZS )ÚZoeDepthMultiheadAttentionzKEquivalent implementation of nn.MultiheadAttention with `batch_first=True`.c                 ó
  •— t          ¦   «                              ¦   «          ||z  dk    rt          d|› d|› d�¦  «        ‚|| _        t	          ||z  ¦  «        | _        | j        | j        z  | _        t          j        || j        ¦  «        | _	        t          j        || j        ¦  «        | _
        t          j        || j        ¦  «        | _        t          j        ||¦  «        | _        t          j        |¦  «        | _        d S )Nr   zThe hidden size (z6) is not a multiple of the number of attention heads (ú))r*   r+   r²   Únum_attention_headsrm   Úattention_head_sizeÚall_head_sizer   r7   ÚqueryÚkeyr
  Úout_projÚDropoutÚdropout)r9   r<   rJ  rQ  r>   s       €r"   r+   z#ZoeDepthMultiheadAttention.__init__  sü   ø€ Ý‰Œ×ÒÑÔÐØÐ,Ñ,°Ò1Ð1Ýð1 Kð 1ð 1Ø-ð1ð 1ð 1ñô ð ð
 $7ˆÔ Ý#& {Ð5HÑ'HÑ#IÔ#IˆÔ Ø!Ô5¸Ô8PÑPˆÔå”Y˜{¨DÔ,>Ñ?Ô?ˆŒ
Ý”9˜[¨$Ô*<Ñ=Ô=ˆŒÝ”Y˜{¨DÔ,>Ñ?Ô?ˆŒ
åœ	 +¨{Ñ;Ô;ˆŒå”z 'Ñ*Ô*ˆŒˆˆr!   NFÚqueriesÚkeysÚvaluesÚattention_maskÚoutput_attentionsr?   c                 ó  — |j         \  }}}|                      |¦  «                             |d| j        | j        ¦  «                             dd¦  «        }	|                      |¦  «                             |d| j        | j        ¦  «                             dd¦  «        }
|                      |¦  «                             |d| j        | j        ¦  «                             dd¦  «        }t          j	        |	|
                     dd¦  «        ¦  «        }|t          j        | j        ¦  «        z  }|�||z   }t          j                             |d¬¦  «        }|                      |¦  «        }t          j	        ||¦  «        }|                     dddd¦  «                             ¦   «         }|                     ¦   «         d d…         | j        fz   }|                     |¦  «        }|                      |¦  «        }|r||fn|f}|S )NrC   r   r)   r(  rA   r   r   )rE   rM  rÒ   rJ  rK  Ú	transposerN  r
  r   ÚmatmulÚmathÚsqrtr   r�   rà   rQ  rH   rI   r™   rL  rO  )r9   rR  rS  rT  rU  rV  rQ   Ú
seq_lengthr=   Úquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                    r"   rZ   z"ZoeDepthMultiheadAttention.forward   sè  € ð %,¤MÑ!ˆ
�J à�JŠJ�wÑÔßŠT�*˜b $Ô":¸DÔ<TÑUÔUßŠY�q˜!‰_Œ_ð 	ð �HŠH�T‰NŒN×Ò 
¨B°Ô0HÈ$ÔJbÑcÔc×mÒmÐnoÐqrÑsÔsð 	ð �JŠJ�vÑÔ×#Ò# J°°DÔ4LÈdÔNfÑgÔg×qÒqÐrsÐuvÑwÔwð 	õ
 !œ<¨°Y×5HÒ5HÈÈRÑ5PÔ5PÑQÔQÐà+­d¬i¸Ô8PÑ.QÔ.QÑQÐØÐ%à/°.Ñ@Ðõ œ-×/Ò/Ð0@ÀbÐ/ÑIÔIˆð Ÿ,š, Ñ7Ô7ˆåœ _°kÑBÔBˆà%×-Ò-¨a°°A°qÑ9Ô9×DÒDÑFÔFˆØ"/×"4Ò"4Ñ"6Ô"6°s¸°sÔ";¸tÔ?QÐ>SÑ"SÐØ%×*Ò*Ð+BÑCÔCˆàŸš mÑ4Ô4ˆà6GÐ]�= /Ð2Ð2ÈmÐM]ˆàˆr!   )NF)r   r   r   r   r+   r   r]   r   rŸ   r   rZ   r^   r_   s   @r"   rG  rG    s²   ø€ € € € € ØUÐUð+ð +ð +ð +ð +ð2 48Ø).ð.ð .à”ð.ð Œlð.ð ”ð	.ð
 Ô)¨DÑ0ð.ð   $™;ð.ð 
ˆuŒ|Ô	ð.ð .ð .ð .ð .ð .ð .ð .r!   rG  c                   ó@   ‡ — e Zd Zdˆ fd„	Z	 ddej        dz  fd„Zˆ xZS )	ÚZoeDepthTransformerEncoderLayerçš™™™™™¹?Úreluc                 ó&  •— t          ¦   «                              ¦   «          |j        }|j        }|j        }t          |||¬¦  «        | _        t          j        ||¦  «        | _	        t          j
        |¦  «        | _        t          j        ||¦  «        | _        t          j        |¦  «        | _        t          j        |¦  «        | _        t          j
        |¦  «        | _        t          j
        |¦  «        | _        t$          |         | _        d S )N)rQ  )r*   r+   Úpatch_transformer_hidden_sizeÚ#patch_transformer_intermediate_sizeÚ%patch_transformer_num_attention_headsrG  Ú	self_attnr   r7   Úlinear1rP  rQ  Úlinear2Ú	LayerNormÚnorm1Únorm2Údropout1Údropout2r   Ú
activation)r9   r:   rQ  ru  r<   Úintermediate_sizerJ  r>   s          €r"   r+   z(ZoeDepthTransformerEncoderLayer.__init__R  sØ   ø€ Ý‰Œ×ÒÑÔÐàÔ:ˆØ"ÔFÐØ$ÔJÐå3°KÐATÐ^eÐfÑfÔfˆŒå”y Ð.?Ñ@Ô@ˆŒÝ”z 'Ñ*Ô*ˆŒÝ”yÐ!2°KÑ@Ô@ˆŒå”\ +Ñ.Ô.ˆŒ
Ý”\ +Ñ.Ô.ˆŒ
Ýœ
 7Ñ+Ô+ˆŒÝœ
 7Ñ+Ô+ˆŒå  Ô,ˆŒˆˆr!   NÚsrc_maskc           	      óœ  — |x}}|                       ||||¬¦  «        d         }||                      |¦  «        z   }|                      |¦  «        }|                      |                      |                      |                      |¦  «        ¦  «        ¦  «        ¦  «        }||                      |¦  «        z   }|                      |¦  «        }|S )N)rR  rS  rT  rU  r   )	rm  rs  rq  ro  rQ  ru  rn  rt  rr  )r9   Úsrcrw  rR  rS  Úsrc2s         r"   rZ   z'ZoeDepthTransformerEncoderLayer.forwardf  s²   € ð
 Ðˆ�$Ø�~Š~ g°DÀÐU]ˆ~Ñ^Ô^Ð_`ÔaˆØ�D—M’M $Ñ'Ô'Ñ'ˆØ�jŠj˜‰oŒoˆØ�|Š|˜DŸLšL¨¯ª¸¿ºÀcÑ9JÔ9JÑ)KÔ)KÑLÔLÑMÔMˆØ�D—M’M $Ñ'Ô'Ñ'ˆØ�jŠj˜‰oŒoˆØˆ
r!   )rg  rh  ro   rE  r_   s   @r"   rf  rf  Q  sl   ø€ € € € € ð-ð -ð -ð -ð -ð -ð. )-ðð ð ”, Ñ%ðð ð ð ð ð ð ð r!   rf  c                   ó:   ‡ — e Zd Zˆ fd„Zdej        fd„Zd„ Zˆ xZS )ÚZoeDepthPatchTransformerEncoderc                 ó  •‡— t          ¦   «                              ¦   «          ‰j        }t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          j        |‰j	        ddd¬¦  «        | _
        dS )z¤ViT-like transformer block

        Args:
            config (`ZoeDepthConfig`):
                Model configuration class defining the model architecture.
        c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r    )rf  )r¬   r=   r:   s     €r"   r¯   z<ZoeDepthPatchTransformerEncoder.__init__.<locals>.<listcomp>‚  s"   ø€ ÐiÐiÐi¸Õ,¨VÑ4Ô4ÐiÐiÐir!   r   r   re   N)r*   r+   rþ   r   r-   ru   Únum_patch_transformer_layersÚtransformer_encoderrh   rj  Úembedding_convPxP)r9   r:   rb   r>   s    ` €r"   r+   z(ZoeDepthPatchTransformerEncoder.__init__v  s‹   øø€ õ 	‰Œ×ÒÑÔÐàÔ0ˆå#%¤=ØiÐiÐiÐi½eÀFÔDgÑ>hÔ>hÐiÑiÔiñ$
ô $
ˆÔ õ "$¤Ø˜Ô=È1ÐUVÐ`að"
ñ "
ô "
ˆÔÐÐr!   Úcpuc           	      ó  — t          j        d|||¬¦  «                             d¦  «        }t          j        d|d||¬¦  «                             d¦  «        }t          j        |t          j        t          j        d|¬¦  «        ¦  «         |z  z  ¦  «        }||z  }	t          j        t          j        |	¦  «        t          j        |	¦  «        gd¬¦  «        }	|	                     d¬¦  «         	                    |dd¦  «        }	|	S )zßGenerate positional encodings

        Args:
            sequence_length (int): Sequence length
            embedding_dim (int): Embedding dimension

        Returns:
            torch.Tensor: Positional encodings.
        r   )Údtyper-  r   r)   g     ˆÃ@r,  rA   )
r   rÑ   rK   ÚexprÅ   rÓ   rF   ÚsinÚcosÚrepeat)
r9   rQ   rT   Úembedding_dimr-  r„  ÚpositionÚindexÚdiv_termÚpos_encodings
             r"   Úpositional_encoding_1dz6ZoeDepthPatchTransformerEncoder.positional_encoding_1d‰  sð   € õ ”<  ?¸%ÈÐOÑOÔO×YÒYÐZ[Ñ\Ô\ˆÝ”˜Q ¨q¸ÀfÐMÑMÔM×WÒWÐXYÑZÔZˆÝ”9˜U¥u¤yµ´¸gÈfÐ1UÑ1UÔ1UÑ'VÔ'VÐ&VÐYfÑ&fÑgÑhÔhˆØ (Ñ*ˆÝ”y¥%¤)¨LÑ"9Ô"9½5¼9À\Ñ;RÔ;RÐ!SÐYZÐ[Ñ[Ô[ˆØ#×-Ò-°!Ð-Ñ4Ô4×;Ò;¸JÈÈ1ÑMÔMˆØÐr!   c                 óx  — |                       |¦  «                             d¦  «        }t          j                             |d¦  «        }|                     ddd¦  «        }|j        \  }}}||                      ||||j        |j	        ¬¦  «        z   }t          d¦  «        D ]} | j        |         |¦  «        }Œ|S )zßForward pass

        Args:
            x (torch.Tensor - NCHW): Input feature tensor

        Returns:
            torch.Tensor - Transformer output embeddings of shape (batch_size, sequence_length, embedding_dim)
        r)   )r   r   r   r   )r-  r„  rä   )r�  rJ   r   r�   r  rH   rE   rŽ  r-  r„  ru   r€  )r9   r  Ú
embeddingsrQ   rT   r‰  r­   s          r"   rZ   z'ZoeDepthPatchTransformerEncoder.forward›  sÍ   € ð ×+Ò+¨AÑ.Ô.×6Ò6°qÑ9Ô9ˆ
å”]×&Ò& z°6Ñ:Ô:ˆ
à×'Ò'¨¨1¨aÑ0Ô0ˆ
Ø5?Ô5EÑ2ˆ
�O ]Ø $×"=Ò"=Ø˜¨¸zÔ?PÐXbÔXhð #>ñ #
ô #
ñ 
ˆ
õ �q‘”ð 	Að 	AˆAØ4˜Ô1°!Ô4°ZÑ@Ô@ˆJˆJàÐr!   )	r   r   r   r+   r   Úfloat32rŽ  rZ   r^   r_   s   @r"   r|  r|  u  sh   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð& Y^ÐejÔerð ð ð ð ð$ð ð ð ð ð ð r!   r|  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚZoeDepthMLPClassifierr?   Nc                 óä   •— t          ¦   «                              ¦   «          |}t          j        ||¦  «        | _        t          j        ¦   «         | _        t          j        ||¦  «        | _        d S ro   )r*   r+   r   r7   rn  r„   ru  ro  )r9   rì   rC  Úhidden_featuresr>   s       €r"   r+   zZoeDepthMLPClassifier.__init__µ  sU   ø€ Ý‰Œ×ÒÑÔÐà%ˆÝ”y ¨oÑ>Ô>ˆŒÝœ'™)œ)ˆŒÝ”y °,Ñ?Ô?ˆŒˆˆr!   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ro   )rn  ru  ro  )r9   rY   r   s      r"   rZ   zZoeDepthMLPClassifier.forward½  s;   € Ø—|’| LÑ1Ô1ˆØ—’ |Ñ4Ô4ˆØŸš \Ñ2Ô2ˆàÐr!   )r?   Nrq   r_   s   @r"   r“  r“  ´  sR   ø€ € € € € ð@ð @ð @ð @ð @ð @ðð ð ð ð ð ð r!   r“  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú*ZoeDepthMultipleMetricDepthEstimationHeadszn
    Multiple metric depth estimation heads. A MLP classifier is used to route between 2 different heads.
    c                 ó4  •‡‡‡‡‡— t          ¦   «                              ¦   «          ‰j        Š‰j        Š‰j        | _        ‰j        | _        ‰j        }t          j        ||ddd¬¦  «        | _	        t          ‰¦  «        | _        t          dd¬¦  «        | _        | j        dk    rt          Šn| j        dk    rt          Št          j        ˆˆfd	„‰j        D ¦   «         ¦  «        | _        t%          |‰‰dz  ¬
¦  «        | _        t          j        ˆˆfd„t+          d¦  «        D ¦   «         ¦  «        | _        t          j        ˆˆˆfd„‰j        D ¦   «         ¦  «        | _        ‰j        Št          j        ˆˆˆfd„‰j        D ¦   «         ¦  «        | _        d S )Nr   r   re   rA  r)   ©rì   rC  rý   Úsoftplusc                 óp   •— i | ]2}|d          t          ‰|d         ‰dz  |d         |d         ¬¦  «        “Œ3S )Únamer  r)   r   r  )r  r  r   r  )rö   )r¬   Úconfr%  r:   s     €€r"   ú
<dictcomp>zGZoeDepthMultipleMetricDepthEstimationHeads.__init__.<locals>.<dictcomp>ã  sc   ø€ ð 	ð 	ð 	ð ð �V”Õ6ØØ œ>Ø-°Ñ2Ø" ;Ô/Ø" ;Ô/ðñ ô ð	ð 	ð 	r!   ©rì   rC  r  c                 óD   •— g | ]}t          ‰j        ‰‰d z  ¬¦  «        ‘ŒS )r)   r   ©r@  r†   ©r¬   r=   r%  r:   s     €€r"   r¯   zGZoeDepthMultipleMetricDepthEstimationHeads.__init__.<locals>.<listcomp>ó  sK   ø€ ð ð ð ð õ "Ø &Ô 9Ø!2Ø-°Ñ2ðñ ô ðð ð r!   rä   c                 óš   •‡— i | ]FŠ‰d          t          j        ˆˆˆˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         ¦  «        “ŒGS )r�  c           	      óR   •— g | ]#} ‰‰‰|         ‰d          ‰d         ¬¦  «        ‘Œ$S )r   r  ©r  r   r  r    )r¬   r­   Ú	Attractorr:   Úconfigurationr#  s     €€€€r"   r¯   zRZoeDepthMultipleMetricDepthEstimationHeads.__init__.<locals>.<dictcomp>.<listcomp>  sV   ø€ ð ð ð ð ð "˜	Ø"Ø#/°¤?Ø&3°KÔ&@Ø&3°KÔ&@ð	ñ ô ðð ð r!   )r   r-   ru   rv   )r¬   r¨  r§  r:   r#  s    @€€€r"   rŸ  zGZoeDepthMultipleMetricDepthEstimationHeads.__init__.<locals>.<dictcomp>ÿ  s†   øø€ ð ð ð ð "ð ˜fÔ%¥r¤}ðð ð ð ð ð ð õ "'¥s¨<Ñ'8Ô'8Ñ!9Ô!9ðñ ô ñ
(ô 
(ðð ð r!   c           
      óR   •— i | ]#}|d          t          ‰‰‰|d         d¬¦  «        “Œ$S )r�  r  rä   )rî   )râ   )r¬   r¨  r%  r:   Úlast_ins     €€€r"   rŸ  zGZoeDepthMultipleMetricDepthEstimationHeads.__init__.<locals>.<dictcomp>  sV   ø€ ð 	ð 	ð 	ð "ð ˜fÔ%Õ'LØØØ%Ø! (Ô+Ø&'ð(ñ (ô (ð	ð 	ð 	r!   )r*   r+   r%  Únum_attractorsÚbin_configurationsrÿ   rþ   r   rh   r¿   r|  Úpatch_transformerr“  Úmlp_classifierr  r<  Ú
ModuleDictÚseed_bin_regressorsr@  Úseed_projectorr-   ru   Ú
projectorsr3  r¾   Úconditional_log_binomial)r9   r:   rþ   r§  r%  rª  r#  r>   s    ` @@@@€r"   r+   z3ZoeDepthMultipleMetricDepthEstimationHeads.__init__Ê  s  øøøøøø€ Ý‰Œ×ÒÑÔÐà"Ô4ÐØÔ,ˆØ"(Ô";ˆÔØ &Ô 7ˆÔð %Ô8ÐÝ”YÐ2Ð4GÐUVÐ_`ÐjkÐlÑlÔlˆŒ
õ "AÀÑ!HÔ!HˆÔå3ÀÐRSÐTÑTÔTˆÔð Ô  HÒ,Ð,Ý.ˆIˆIØÔ" jÒ0Ð0Ý6ˆIõ $&¤=ð	ð 	ð 	ð 	ð 	ð #Ô5ð	ñ 	ô 	ñ$
ô $
ˆÔ õ 0Ø+Ð:KÐUfÐjkÑUkð
ñ 
ô 
ˆÔõ œ-ðð ð ð ð õ ˜q™œðñ ô ñ	
ô 	
ˆŒõ œ-ðð ð ð ð ð ð &,Ô%>ðñ ô ñ
ô 
ˆŒð" Ô.ˆå(*¬ð	ð 	ð 	ð 	ð 	ð 	ð &,Ô%>ð	ñ 	ô 	ñ)
ô )
ˆÔ%Ð%Ð%r!   c                 ó‚  ‡— |                       |¦  «        }|                      |¦  «        d d …dd d …f         }|                      |¦  «        }t          j        |                     dd¬¦  «        d¬¦  «        }d„ | j        D ¦   «         }	|	t          j        |d¬¦  «                             ¦   «          	                    ¦   «                  Š	 ˆfd„| j        D ¦   «         d         }
n!# t          $ r t          d‰› d	�¦  «        ‚w xY w|
d
         }|
d         }| j        ‰         } ||¦  «        \  }}| j        dv r||z
  ||z
  z  }n|}|                      |¦  «        }| j        ‰         }t!          | j        ||¦  «        D ]'\  }}} ||¦  «        } ||||d¬¦  «        \  }}|}|}Œ(|}t$          j                             ||j        dd …         dd¬¦  «        }t$          j                             ||j        dd …         dd¬¦  «        }| j        ‰         } |||¦  «        }t          j        ||z  dd¬¦  «        }||fS )Nr   Tr  rC   rA   c                 ó   — g | ]
}|d          ‘ŒS ©r�  r    )r¬   r¨  s     r"   r¯   zFZoeDepthMultipleMetricDepthEstimationHeads.forward.<locals>.<listcomp>*  s   € ÐTÐTÐT¨=�˜vÔ&ÐTÐTÐTr!   c                 ó,   •— g | ]}|d          ‰k    ¯|‘ŒS r¶  r    )r¬   r:   Úbin_configurations_names     €r"   r¯   zFZoeDepthMultipleMetricDepthEstimationHeads.forward.<locals>.<listcomp>.  s(   ø€ ÐnÐnÐn˜vÀFÈ6ÄNÐVmÒDmÐDm�FÐDmÐDmÐDmr!   zbin_configurations_name z! not found in bin_configurationssr   r  ©rý   Úhybrid2©rž   r(  r—   r)  r   )r¿   r­  r®  r   rà   r  r¬  ÚargmaxrÂ   ÚitemÚ
IndexErrorr²   r°  rÿ   r±  r3  r/   r²  r   r�   rž   rE   r³  )r9   Úoutconv_activationrï   Úfeature_blocksÚrelative_depthr  Ú	embeddingr   Údomain_voteÚnamesrž  r   r  Úseed_bin_regressorr=   Úseed_bin_centersr1  r2  r3  Ú	projectorÚ	attractorr®   Úbin_embeddingÚbinr  Úlastr³  rW   r¸  s                               @r"   rZ   z2ZoeDepthMultipleMetricDepthEstimationHeads.forward  s¯  ø€ Ø�JŠJ�zÑ"Ô"ˆð ×*Ò*¨1Ñ-Ô-¨a¨a¨a°°A°A°A¨gÔ6ˆ	ð ×+Ò+¨IÑ6Ô6ˆÝ”m M×$5Ò$5¸!ÀTÐ$5Ñ$JÔ$JÐPRÐSÑSÔSˆð UÐT¸DÔ<SÐTÑTÔTˆØ"'­¬°[ÀbÐ(IÑ(IÔ(I×(QÒ(QÑ(SÔ(S×(XÒ(XÑ(ZÔ(ZÔ"[Ðð	tØnÐnÐnÐn¨Ô)@ÐnÑnÔnÐopÔqˆDˆDøÝð 	tð 	tð 	tÝÐrÐ8OÐrÐrÐrÑsÔsÐsð	tøøøð ˜Ô%ˆ	Ø˜Ô%ˆ	à!Ô5Ð6MÔNÐØ0Ð0°Ñ3Ô3ÑˆÐØÔ Ð$9Ð9Ð9Ø(¨9Ñ4¸ÀYÑ9NÑOˆHˆHà'ˆHØ!×0Ò0°Ñ3Ô3Ðà”_Ð%<Ô=ˆ
Ý-0°´À*ÈnÑ-]Ô-]ð 	/ð 	/Ñ)ˆI�y 'Ø%˜I gÑ.Ô.ˆMØ(˜y¨¸ÐBTÐbfÐgÑgÔgÑˆC�ØˆHØ!.ÐÐà!ˆå”m×/Ò/°¸T¼ZÈÈÈ¼_ÐS]ÐmqÐ/ÑrÔrˆÝœ×1Ò1°-ÀÄÈBÈCÈCÄÐWaÐquÐ1ÑvÔvˆà#'Ô#@ÐAXÔ#YÐ Ø$Ð$ T¨=Ñ9Ô9ˆõ Œi˜˜K™¨Q¸Ð=Ñ=Ô=ˆà�MÐ!Ð!s   ÃC% Ã%D)r   r   r   r   r+   rZ   r^   r_   s   @r"   r˜  r˜  Å  sW   ø€ € € € € ðð ðR
ð R
ð R
ð R
ð R
ðh1"ð 1"ð 1"ð 1"ð 1"ð 1"ð 1"r!   r˜  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú!ZoeDepthMetricDepthEstimationHeadc                 óü  •‡‡‡‡‡	‡
‡— t          ¦   «                              ¦   «          ‰j        d         }|d         Š|d         Š	|d         Š‰j        Š‰j        Š
‰j        }‰	| _        ‰| _        || _        ‰j        }t          j
        ||ddd¬¦  «        | _        | j        dk    rt          Šn| j        dk    rt          Št          ‰‰‰	‰¬	¦  «        | _        t!          |‰¬
¦  «        | _        t          j        ˆˆfd„t'          d¦  «        D ¦   «         ¦  «        | _        t          j        ˆˆˆˆ	ˆ
ˆfd„t'          d¦  «        D ¦   «         ¦  «        | _        ‰j        dz   }t/          ‰|‰‰¬¦  «        | _        d S )Nr   r  r   r  r   re   rý   r›  r¦  rš  c                 ó<   •— g | ]}t          ‰j        ‰¬ ¦  «        ‘ŒS )rš  r¢  r£  s     €€r"   r¯   z>ZoeDepthMetricDepthEstimationHead.__init__.<locals>.<listcomp>r  s:   ø€ ð ð ð àõ "¨fÔ.GÐVgÐhÑhÔhðð ð r!   rä   c           	      ó<   •— g | ]} ‰‰‰‰|         ‰‰¬ ¦  «        ‘ŒS ))r  r#  r   r  r    )r¬   r­   r§  r:   r  r   r#  r  s     €€€€€€r"   r¯   z>ZoeDepthMetricDepthEstimationHead.__init__.<locals>.<listcomp>x  sO   ø€ ð 	ð 	ð 	ð ð �	ØØ!Ø!-¨a¤Ø'Ø'ðñ ô ð	ð 	ð 	r!   )rÔ   )r*   r+   r¬  r%  r«  rÿ   r   r  rþ   r   rh   r¿   r  r<  rö   rÅ  r@  r±  r-   ru   r²  r3  r¾   râ   r³  )r9   r:   Úbin_configurationrÿ   rþ   rª  r§  r%  r  r   r#  r  r>   s    `    @@@@@@€r"   r+   z*ZoeDepthMetricDepthEstimationHead.__init__S  sæ  øøøøøøøø€ Ý‰Œ×ÒÑÔÐà"Ô5°aÔ8ÐØ" 8Ô,ˆØ% kÔ2ˆ	Ø% kÔ2ˆ	Ø"Ô4ÐØÔ,ˆØ!Ô2Ðà"ˆŒØ"ˆŒØ 0ˆÔð %Ô8ÐÝ”YÐ2Ð4GÐUVÐ_`ÐjkÐlÑlÔlˆŒ
ð Ô  HÒ,Ð,Ý.ˆIˆIØÔ" jÒ0Ð0Ý6ˆIå":Ø˜6¨YÀ)ð#
ñ #
ô #
ˆÔõ 0Ð<OÐ^oÐpÑpÔpˆÔåœ-ðð ð ð ð å˜q™œðñ ô ñ
ô 
ˆŒõ œ-ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ ˜q™œð	ñ 	ô 	ñ
ô 
ˆŒð Ô.°Ñ2ˆõ )NØØØØð	)
ñ )
ô )
ˆÔ%Ð%Ð%r!   c                 ó†  — |                       |¦  «        }|                      |¦  «        \  }}| j        dv r|| j        z
  | j        | j        z
  z  }n|}|                      |¦  «        }	t          | j        | j        |¦  «        D ]K\  }
}} |
|¦  «        } ||||	d¬¦  «        \  }}| 	                    ¦   «         }| 	                    ¦   «         }	ŒL|}| 
                    d¦  «        }t          j                             ||j        dd …         dd¬¦  «        }t          j        ||gd¬¦  «        }t          j                             ||j        d	d …         dd¬
¦  «        }|                      ||¦  «        }t          j                             ||j        d	d …         dd¬
¦  «        }t          j        ||z  dd¬¦  «        }|d fS )Nr¹  Tr»  r   r)   r—   r˜   rA   r(  r)  r  )r¿   rÅ  rÿ   r   r  r±  r/   r²  r3  ÚclonerK   r   r�   rž   rE   r   rF   r³  r  )r9   r¿  rï   rÀ  rÁ  r  r=   rÆ  r1  r2  rÇ  rÈ  r®   rÉ  rÊ  r  rË  Úrelative_conditioningrW   s                      r"   rZ   z)ZoeDepthMetricDepthEstimationHead.forwardŽ  sà  € Ø�JŠJ�zÑ"Ô"ˆØ"×5Ò5°aÑ8Ô8ÑˆÐàÔ Ð$9Ð9Ð9Ø(¨4¬>Ñ9¸d¼nÈtÌ~Ñ>]Ñ^ˆHˆHà'ˆHà!×0Ò0°Ñ3Ô3Ðõ .1°´À$Ä/ÐSaÑ-bÔ-bð 	7ð 	7Ñ)ˆI�y 'Ø%˜I gÑ.Ô.ˆMØ(˜y¨¸ÐBTÐbfÐgÑgÔgÑˆC�Ø—y’y‘{”{ˆHØ!.×!4Ò!4Ñ!6Ô!6ÐÐà!ˆð !/× 8Ò 8¸Ñ ;Ô ;ÐÝ "¤× 9Ò 9Ø!¨¬
°1°2°2¬¸ZÐW[ð !:ñ !
ô !
Ðõ Œy˜$Ð 5Ð6¸AÐ>Ñ>Ô>ˆåœ×1Ò1°-ÀÄÈBÈCÈCÄÐWaÐquÐ1ÑvÔvˆØ×)Ò)¨$°Ñ>Ô>ˆõ ”m×/Ò/°¸Q¼WÀRÀSÀS¼\ÐPZÐjnÐ/ÑoÔoˆÝŒi˜˜K™¨Q¸Ð=Ñ=Ô=ˆà�DˆyÐr!   rq   r_   s   @r"   rÍ  rÍ  R  sH   ø€ € € € € ð9
ð 9
ð 9
ð 9
ð 9
ðv"ð "ð "ð "ð "ð "ð "r!   rÍ  c                   ó:   ‡ — e Zd ZU eed<   dZdZdZdZˆ fd„Z	ˆ xZ
S )ÚZoeDepthPreTrainedModelr:   ÚzoedepthÚpixel_values)ÚimageTc           	      óž  •— t          ¦   «                              |¦  «         t          |t          ¦  «        r•t	          j        |j        t          j        d|j	        ¦  «         
                    dddd¦  «        ¦  «         t	          j        |j        t          j        |j	        dz
  g¦  «         
                    dddd¦  «        ¦  «         d S d S )Nr   r   rC   )r*   Ú_init_weightsr°   rÊ   ÚinitÚcopy_rÌ   r   rÑ   rÇ   rÒ   rÎ   rÓ   )r9   Úmoduler>   s     €r"   rÛ  z%ZoeDepthPreTrainedModel._init_weights½  s´   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ0Ñ1Ô1ð 	YÝŒJ�v”|¥U¤\°!°V´XÑ%>Ô%>×%CÒ%CÀAÀrÈ1ÈaÑ%PÔ%PÑQÔQÐQÝŒJ�vÔ'­¬°v´xÀ!±|°nÑ)EÔ)E×)JÒ)JÈ1ÈbÐRSÐUVÑ)WÔ)WÑXÔXÐXÐXÐXð	Yð 	Yr!   )r   r   r   r   r   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingrÛ  r^   r_   s   @r"   rÖ  rÖ  µ  sf   ø€ € € € € € àÐÐÑØ"ÐØ$€OØ!ÐØ&*Ð#ðYð Yð Yð Yð Yð Yð Yð Yð Yr!   rÖ  zU
    ZoeDepth model with one or multiple metric depth estimation head(s) on top.
    c                   ó    ‡ — e Zd Zˆ fd„Ze	 	 	 	 d
dej        dej        dz  dedz  dedz  dedz  de	ej
                 ez  fd	„¦   «         Zˆ xZS )ÚZoeDepthForDepthEstimationc                 ó@  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          | j        j        d¦  «        rGt	          | j        j        d¦  «        r-| j        j        j        |_        | j        j        j        | _        nt          d¦  «        ‚t          |¦  «        | _        t          |¦  «        | _        t          |j        ¦  «        dk    rt!          |¦  «        nt#          |¦  «        | _        |                      ¦   «          d S )Nr<   Ú
patch_sizezXZoeDepth assumes the backbone's config to have `hidden_size` and `patch_size` attributesr   )r*   r+   r   ÚbackboneÚhasattrr:   r<   r5   ræ  r²   r¡   Úneckr¶   Úrelative_headrv   r¬  r˜  rÍ  Úmetric_headÚ	post_init)r9   r:   r>   s     €r"   r+   z#ZoeDepthForDepthEstimation.__init__Ê  s  ø€ Ý‰Œ×Ò˜Ñ Ô Ð å% fÑ-Ô-ˆŒå�4”=Ô'¨Ñ7Ô7ð 	½GÀDÄMÔDXÐZfÑ<gÔ<gð 	Ø*.¬-Ô*>Ô*JˆFÔ'Ø"œmÔ2Ô=ˆDŒOˆOåØjñô ð õ ! Ñ(Ô(ˆŒ	Ý@ÀÑHÔHˆÔõ �6Ô,Ñ-Ô-°Ò1Ð1õ 7°vÑ>Ô>Ð>å2°6Ñ:Ô:ð 	Ôð 	�ŠÑÔÐÐÐr!   NrØ  ÚlabelsrV  Úoutput_hidden_statesÚreturn_dictr?   c                 ó¦  — d}|�t          d¦  «        ‚|�|n| j        j        }|�|n| j        j        }|�|n| j        j        }| j                             |||¬¦  «        }|j        }	|j        \  }
}
}}| j	        }||z  }||z  }|  
                    |	||¦  «        \  }	}|g|	z   }|                      |	¦  «        \  }}|g|z   }|                      |d         |d         |dd…         |¬¦  «        \  }}|                     d¬¦  «        }|s*|�||f|dd…         z   }n|f|dd…         z   }|�|f|z   n|S t          ||||j        |j        ¬	¦  «        S )
aõ  
        labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth depth estimation maps for computing the loss.

        Examples:
        ```python
        >>> from transformers import AutoImageProcessor, ZoeDepthForDepthEstimation
        >>> 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("Intel/zoedepth-nyu-kitti")
        >>> model = ZoeDepthForDepthEstimation.from_pretrained("Intel/zoedepth-nyu-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,
        ...     source_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"))
        ```NzTraining is not implemented yet)rî  rV  r   r   r)   )r¿  rï   rÀ  rÁ  rA   )r   r   r   r   r   )ÚNotImplementedErrorr:   rï  rî  rV  rç  Úforward_with_filtered_kwargsÚfeature_mapsrE   ræ  ré  rê  rë  rÂ   r   r   r   )r9   rØ  rí  rV  rî  rï  Úkwargsr   rd  r   r=   r4  r5  ræ  rO   rP   r³   rW   rÁ  Úmetric_depthr   r´   s                         r"   rZ   z"ZoeDepthForDepthEstimation.forwardã  sÚ  € ð` ˆØÐÝ%Ð&GÑHÔHÐHà%0Ð%<�k�kÀ$Ä+ÔBYˆà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà”-×<Ò<ØÐ/CÐWhð =ñ 
ô 
ˆð  Ô,ˆà*Ô0Ñˆˆ1ˆf�eØ”_ˆ
Ø Ñ+ˆØ˜zÑ)ˆà"&§)¢)¨M¸<ÈÑ"UÔ"UÑˆ�xàˆj˜=Ñ(ˆà#'×#5Ò#5°mÑ#DÔ#DÑ ˆ˜àˆj˜3Ñˆà&*×&6Ò&6Ø" 1œv°#°a´&ÈÈQÈRÈRÌÐaoð '7ñ '
ô '
Ñ#ˆ�mð $×+Ò+°Ð+Ñ2Ô2ˆàð 	FØÐ(Ø&¨Ð6¸ÀÀÀ¼ÑD��à&˜¨7°1°2°2¬;Ñ6�à)-Ð)9�T�G˜fÑ$Ð$¸vÐEå+ØØ(Ø'Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r!   )NNNN)r   r   r   r+   r   r   r   Ú
LongTensorrŸ   r   r]   r	   rZ   r^   r_   s   @r"   rä  rä  Ä  sØ   ø€ € € € € ðð ð ð ð ð2 ð +/Ø)-Ø,0Ø#'ð^
ð ^
àÔ'ð^
ð Ô  4Ñ'ð^
ð   $™;ð	^
ð
 # T™kð^
ð ˜D‘[ð^
ð 
ˆuŒ|Ô	Ð3Ñ	3ð^
ð ^
ð ^
ñ „^ð^
ð ^
ð ^
ð ^
ð ^
r!   rä  )rÃ   )r  r)   )8r   rZ  Údataclassesr   r   r   Ú r   rÜ  Úactivationsr   Úbackbone_utilsr   Úmodeling_outputsr	   Úmodeling_utilsr
   Úutilsr   r   r   Úconfiguration_zoedepthr   Ú
get_loggerr   Úloggerr   ÚModuler$   r3   rs   r}   rw   r¡   r¶   rÈ   rÊ   râ   rö   ÚjitÚscriptÚfloatrm   r  r  r<  r@  rG  rf  r|  r“  r˜  rÍ  rÖ  rä  Ú__all__r    r!   r"   ú<module>r     sÈ  ðð Ð à €€€Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø +Ð +Ð +Ð +Ð +Ð +Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø -Ð -Ð -Ð -Ð -Ð -Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð
 ð<ð <ð <ð <ð < ;ñ <ô <ñ „ñô ð<ðGð Gð Gð Gð G˜bœiñ Gô Gð GðTð ð ð ð ˜bœiñ ô ð ð0#ð #ð #ð #ð # ¤ñ #ô #ð #ð2;'ð ;'ð ;'ð ;'ð ;' "¤)ñ ;'ô ;'ð ;'ð~"ð "ð "ð "ð " ¤ñ "ô "ð "ðJ3$ð 3$ð 3$ð 3$ð 3$�2”9ñ 3$ô 3$ð 3$ðl))ð ))ð ))ð ))ð ))¨"¬)ñ ))ô ))ð ))ðXRð Rð Rð Rð)0ð )0ð )0ð )0ð )0˜œñ )0ô )0ð )0ðX@Gð @Gð @Gð @Gð @G¨B¬Iñ @Gô @Gð @GðF5,ð 5,ð 5,ð 5,ð 5,˜rœyñ 5,ô 5,ð 5,ðp „Ôð-ð -˜Uð -°ð -ð -ð -ñ Ôð-ð&\,ð \,ð \,ð \,ð \,˜RœYñ \,ô \,ð \,ð~Q,ð Q,ð Q,ð Q,ð Q, R¤Yñ Q,ô Q,ð Q,ðhð ð ð ð ˜œ	ñ ô ð ð6Fð Fð Fð Fð F ¤ñ Fô Fð FðR!ð !ð !ð !ð ! b¤iñ !ô !ð !ðH<ð <ð <ð <ð < b¤iñ <ô <ð <ð~ð ð ð ð ˜BœIñ ô ð ð"J"ð J"ð J"ð J"ð J"°´ñ J"ô J"ð J"ðZ^ð ^ð ^ð ^ð ^¨¬	ñ ^ô ^ð ^ðF ðYð Yð Yð Yð Y˜oñ Yô Yñ „ðYð €ððñ ô ð
y
ð y
ð y
ð y
ð y
Ð!8ñ y
ô y
ñô ð
y
ðx (Ð)BÐ
C€€€r!   