Ë
    ÜÓ^j‰î  ã                   ó†  — d dl Z d dlmZmZ d dlmZ d dlZd dlZd dl	m
c mZ d dlmZ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mZmZmZmZ ddl m!Z!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- ddl.m/Z/ ddl0m1Z1  e)d¬«      e G d„ de«      «       «       Z2 e)d¬«      e G d„ de«      «       «       Z3 e)d¬«      e G d„ de«      «       «       Z4 e)d¬«      e G d„ d e«      «       «       Z5 e)d!¬«      e G d"„ d#e«      «       «       Z6 G d$„ d%e
jn                  «      Z8 e&d&¬'«      d(e9d)e9d*ejt                  d+ejv                  d,ej                  f
d-„«       Z<	 	 	 dd.ej                  d/e=dz  d0e=dz  d1e=dz  d,ej                  f
d2„Z> G d3„ d4e
jn                  «      Z? ed5«       G d6„ d7e
jn                  «      «       Z@d8„ ZA	 	 	 d€d9e
jn                  d:ej                  d;ej                  d<ej                  d=ej                  dz  d>e=e9z  d?e=dz  d@e=dz  d,eBej                  ej                  f   fdA„ZCdBej                  dCej                  dDej                  dEej                  d,eBej                  ej                  f   f
dF„ZDdGej                  dHe9d,ej                  fdI„ZE G dJ„ dKe
jn                  «      ZF G dL„ dMe
jn                  «      ZG G dN„ dOe
jn                  «      ZH G dP„ dQe
jn                  «      ZI G dR„ dSe
jn                  «      ZJ G dT„ dUe«      ZK G dV„ dWe
jn                  «      ZL G dX„ dYe
jn                  «      ZM G dZ„ d[e
jn                  «      ZN G d\„ d]e
jn                  «      ZO G d^„ d_e
jn                  «      ZPe) G d`„ dae"«      «       ZQ G db„ dceQ«      ZRe) G dd„ deeQ«      «       ZSe) G df„ dgeeQ«      «       ZT e)dh¬i«       G dj„ dkeQ«      «       ZUd�dl„ZV e)dmdn¬o«       G dp„ dqeQ«      «       ZW e)drds¬o«       G dt„ dueQ«      «       ZX e)dvdw¬o«       G dx„ dyeQ«      «       ZY e)dzd{¬o«       G d|„ d}eQ«      «       ZZg d~¢Z[y)‚é    N)ÚCallableÚIterable)Ú	dataclass)ÚTensorÚnné   )Úinitialization)ÚACT2FN)ÚBackboneMixinÚfilter_output_hidden_states)Úuse_kernel_forward_from_hub)ÚGradientCheckpointingLayer)ÚBackboneOutputÚBaseModelOutputÚBaseModelOutputWithPoolingÚModelOutputÚSemanticSegmenterOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Ú#compile_compatible_method_lru_cache)ÚTransformersKwargsÚauto_docstring)Úcan_return_tupleÚmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )ÚSapiens2Configz·
    Output type of [`Sapiens2Backbone`], extending [`BackboneOutput`] with optional CLS tokens from
    each selected feature stage (used when `config.return_class_token=True`).
    )Úcustom_introc                   ó@   — e Zd ZU dZdZeej                     dz  ed<   y)ÚSapiens2BackboneOutputzÙ
    cls_tokens (`tuple(torch.FloatTensor)`, *optional*):
        CLS token from each selected feature stage, each of shape `(batch_size, hidden_size)`.
        Only present when `config.return_class_token=True`.
    NÚ
cls_tokens)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   ÚtupleÚtorchÚFloatTensorÚ__annotations__© ó    úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/sapiens2/modeling_sapiens2.pyr"   r"   1   s#   … ñð 37€J��e×'Ñ'Ñ(¨4Ñ/Ô6r-   r"   z6
    Class for outputs of pose estimation models.
    c                   óÆ   — 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
ej                  df   dz  ed<   dZe
ej                  df   dz  ed<   y)ÚSapiens2PoseEstimatorOutputaÔ  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Pose estimation loss.
    heatmaps (`torch.FloatTensor` of shape `(batch_size, num_keypoints, height, width)`):
        Heatmaps as predicted by the model.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
        one for the output of each stage) of shape `(batch_size, sequence_length, hidden_size)`. Hidden-states
        (also called feature maps) of the model at the output of each stage.
    NÚlossÚheatmaps.Úhidden_statesÚ
attentions)r$   r%   r&   r'   r1   r)   r*   r+   r2   r3   r(   r4   r,   r-   r.   r0   r0   E   sq   … ñ	ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø)-€Hˆe×Ñ $Ñ&Ó-Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ô;r-   r0   z8
    Class for outputs of normal estimation models.
    c                   óÆ   — 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
ej                  df   dz  ed<   dZe
ej                  df   dz  ed<   y)ÚSapiens2NormalEstimatorOutputa  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Normal estimation loss.
    normals (`torch.FloatTensor` of shape `(batch_size, num_labels, height, width)`):
        Raw normal map predictions as output by the model (unnormalized).
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage)
        of shape `(batch_size, sequence_length, hidden_size)`. Hidden-states of the model at the output of
        each layer plus the initial embedding outputs.
    attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one per layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`. Attentions weights after the attention softmax.
    Nr1   Únormals.r3   r4   )r$   r%   r&   r'   r1   r)   r*   r+   r7   r3   r(   r4   r,   r-   r.   r6   r6   ]   sq   … ñð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø(,€GˆU×Ñ Ñ%Ó,Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ô;r-   r6   z:
    Class for outputs of pointmap estimation models.
    c                   óî   — 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<   y)	ÚSapiens2PointmapEstimatorOutputaÄ  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Pointmap estimation loss.
    pointmaps (`torch.FloatTensor` of shape `(batch_size, 3, height, width)`):
        Per-pixel 3D XYZ coordinate predictions in canonical camera space.
    scales (`torch.FloatTensor` of shape `(batch_size, 1)`, *optional*):
        Canonical focal length / actual focal length ratio. `None` when no scale branch is configured.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage)
        of shape `(batch_size, sequence_length, hidden_size)`. Hidden-states of the model at the output of
        each layer plus the initial embedding outputs.
    attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one per layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`. Attentions weights after the attention softmax.
    Nr1   Ú	pointmapsÚscales.r3   r4   )r$   r%   r&   r'   r1   r)   r*   r+   r:   r;   r3   r(   r4   r,   r-   r.   r9   r9   x   s†   … ñð  &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø*.€Iˆu× Ñ  4Ñ'Ó.Ø'+€FˆE×Ñ Ñ$Ó+Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ô;r-   r9   z4
    Class for outputs of image matting models.
    c                   óæ   — 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
ej                     dz  ed<   dZe
ej                     dz  ed<   dZej                  dz  ed<   y)ÚSapiens2ImageMattingOutputaN  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Loss.
    alphas (`torch.FloatTensor` of shape `(batch_size, 1, height, width)`):
        Estimated alpha values.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
        one for the output of each stage) of shape `(batch_size, sequence_length, hidden_size)`. Hidden-states
        (also called feature maps) of the model at the output of each stage.
    foregrounds (`torch.FloatTensor` of shape `(batch_size, 3, height, width)`):
        Pre-multiplied RGB foreground predictions in `[0, 1]` (sigmoid-activated).
    Nr1   Úalphasr3   r4   Úforegrounds)r$   r%   r&   r'   r1   r)   r*   r+   r>   r3   r(   r4   r?   r,   r-   r.   r=   r=   –   s|   … ñð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6à,0€K�×"Ñ" TÑ)Ô0r-   r=   c                   ó€   ‡ — e Zd ZdZdefˆ fd„Zd	dej                  dej                  dz  dej                  fd„Zˆ xZ	S )
ÚSapiens2EmbeddingszM
    Construct the CLS token, mask token, position and patch embeddings.
    Úconfigc                 óB  •— t         ‰| �  «        || _        t        j                  t        j                  dd|j                  «      «      | _        |j                  r4t        j                  t        j                  dd|j                  «      «      nd | _        t        j                  t        j                  d|j                  |j                  «      «      | _        t        j                  |j                   |j                  |j"                  |j"                  ¬«      | _        y )Nr   )Úkernel_sizeÚstride)ÚsuperÚ__init__rB   r   Ú	Parameterr)   ÚrandnÚhidden_sizeÚ	cls_tokenÚuse_mask_tokenÚzerosÚ
mask_tokenÚemptyÚnum_register_tokensÚregister_tokensÚConv2dÚnum_channelsÚ
patch_sizeÚpatch_embeddings©ÚselfrB   Ú	__class__s     €r.   rG   zSapiens2Embeddings.__init__·   sÄ   ø€ Ü‰ÑÔØˆŒÜŸ™¤e§k¡k°!°Q¸×8JÑ8JÓ&KÓLˆŒØQW×QfÒQfœ"Ÿ,™,¤u§{¡{°1°a¸×9KÑ9KÓ'LÔMÐlpˆŒÜ!Ÿ|™|¬E¯K©K¸¸6×;UÑ;UÐW]×WiÑWiÓ,jÓkˆÔÜ "§	¡	Ø×Ñ ×!3Ñ!3À×ARÑARÐ[a×[lÑ[lô!
ˆÕr-   NÚpixel_valuesÚbool_masked_posÚreturnc                 ó\  — |�| j                   €t        d«      ‚|j                  d   }| j                  j                  j
                  }| j                  |j                  |¬«      «      }|j                  d«      j                  dd«      }|�K| j                   j                  |j
                  «      }t        j                  |j                  d«      ||«      }| j                  j                  |dd«      }| j                  j                  |dd«      }t        j                  |||gd¬«      }	|	S )Nz:bool_masked_pos requires use_mask_token=True in the configr   ©Údtypeé   r   éÿÿÿÿ©Údim)rN   Ú
ValueErrorÚshaperU   Úweightr^   ÚtoÚflattenÚ	transposer)   ÚwhereÚ	unsqueezerK   ÚexpandrQ   Úcat)
rW   rY   rZ   Ú
batch_sizeÚtarget_dtyperU   rN   rK   rQ   Ú
embeddingss
             r.   ÚforwardzSapiens2Embeddings.forwardÁ   s  € ØÐ&¨4¯?©?Ð+BÜÐYÓZÐZØ!×'Ñ'¨Ñ*ˆ
Ø×,Ñ,×3Ñ3×9Ñ9ˆð  ×0Ñ0°·±À|°Ó1TÓUÐØ+×3Ñ3°AÓ6×@Ñ@ÀÀAÓFÐàÐ&ØŸ™×+Ñ+Ð,<×,BÑ,BÓCˆJÜ$Ÿ{™{¨?×+DÑ+DÀRÓ+HÈ*ÐVfÓgÐð —N‘N×)Ñ)¨*°b¸"Ó=ˆ	Ø×.Ñ.×5Ñ5°jÀ"ÀbÓIˆÜ—Y‘Y 	¨?Ð<LÐMÐSTÔUˆ
àÐr-   ©N)
r$   r%   r&   r'   r   rG   r)   r   rp   Ú__classcell__©rX   s   @r.   rA   rA   ²   sC   ø„ ñð
˜~õ 
ñ E§L¡Lð À5Ç<Á<ÐRVÑCVð Ðbg×bnÑbn÷ r-   rA   é    )ÚmaxsizeÚnum_patches_hÚnum_patches_wr^   Údevicer[   c                 ó  — t        j                  d| ||¬«      }t        j                  d|||¬«      }|| z  }||z  }t        j                  t        j                  ||d¬«      d¬«      }|j	                  dd«      }d	|z  d
z
  }|S )aq  
    Computes the 2D coordinates of the centers of image patches, normalized to the range [-1, +1].
    The center of each patch is exactly halfway between its top-left and bottom-right corners.

    Args:
        num_patches_h (int): Number of patches along the vertical (height) axis.
        num_patches_w (int): Number of patches along the horizontal (width) axis.
        dtype (torch.dtype): The desired data type of the returned tensor.

    Returns:
        torch.Tensor: A tensor of shape (height * width, 2), where each row contains the (y, x)
            coordinates of a patch center, normalized to [-1, +1].
    g      à?©r^   rx   Úij)Úindexingr`   ra   r   r   g       @g      ð?)r)   ÚarangeÚstackÚmeshgridrg   )rv   rw   r^   rx   Úcoords_hÚcoords_wÚcoordss          r.   Úget_patches_center_coordinatesrƒ   ×   s�   € ô" �|‰|˜C °eÀFÔK€HÜ�|‰|˜C °eÀFÔK€HØ˜-Ñ'€HØ˜-Ñ'€Hä�[‰[œŸ™¨°(ÀTÔJÐPRÔS€FØ�^‰^˜A˜qÓ!€Fà�6‰\˜CÑ€FØ€Mr-   r‚   ÚshiftÚjitterÚrescalec                 ó6  — |�Dt        j                  d| j                  | j                  ¬«      }|j	                  | |«      }| |z   } |�gt        j                  |«      }t        j                  d| j                  | j                  ¬«      }|j	                  | |«      j                  «       }| |z  } |�gt        j                  |«      }t        j                  d| j                  | j                  ¬«      }|j	                  | |«      j                  «       }| |z  } | S )N)r   r_   )rx   r^   r   )r)   rO   rx   r^   Úuniform_ÚnpÚlogÚexp)	r‚   r„   r…   r†   Úshift_hwÚjitter_rangeÚ	jitter_hwÚrescale_rangeÚ
rescale_hws	            r.   Ú"augment_patches_center_coordinatesr‘   ô   só   € ð ÐÜ—;‘;˜v¨f¯m©mÀ6Ç<Á<ÔPˆØ×$Ñ$ e V¨UÓ3ˆØ˜(Ñ"ˆð ÐÜ—v‘v˜f“~ˆÜ—K‘K ¨v¯}©}ÀFÇLÁLÔQˆ	Ø×&Ñ&¨ }°lÓC×GÑGÓIˆ	Ø˜)Ñ#ˆð ÐÜŸ™˜w›ˆÜ—[‘[ ¨6¯=©=ÀÇÁÔMˆ
Ø×(Ñ(¨-¨¸ÓG×KÑKÓMˆ
Ø˜*Ñ$ˆà€Mr-   c                   óš   ‡ — e Zd ZU ej                  ed<   defˆ fd„Zdej                  deej                  ej                  f   fd„Z	ˆ xZ
S )ÚSapiens2RopePositionEmbeddingÚinv_freqrB   c                 ó$  •— t         ‰	| �  «        || _        |j                  | _        |j
                  |j                  z  | _        d| j                  t        j                  ddd| j                  z  t        j                  ¬«      z  z  }| j                  d|d¬«       |j                  }t        |t        «      r|n||f\  }}|j                  }t        |t         «      r|n|d   }t        |t         «      r|n|d   }||z  | _        ||z  | _        y )Nr   r   é   r]   r”   F)Ú
persistent)rF   rG   rB   Ú
rope_thetaÚbaserJ   Únum_attention_headsÚhead_dimr)   r}   Úfloat32Úregister_bufferÚ
image_sizeÚ
isinstancer   rT   Úintrv   rw   )
rW   rB   r”   rž   Úimage_hÚimage_wrT   Úpatch_size_hÚpatch_size_wrX   s
            €r.   rG   z&Sapiens2RopePositionEmbedding.__init__  s÷   ø€ Ü‰ÑÔàˆŒØ×%Ñ%ˆŒ	Ø×*Ñ*¨f×.HÑ.HÑHˆŒà�t—y‘y¤E§L¡L°°A°q¸4¿=¹=Ñ7HÔPU×P]ÑP]Ô$^Ñ^Ñ^ˆØ×Ñ˜Z¨¸eÐÔDØ×&Ñ&ˆ
Ü)3°JÄÔ)I™:ÐPZÐ\fÐOgÑˆ�Ø×&Ñ&ˆ
Ü%/°
¼CÔ%@‘zÀjÐQRÁmˆÜ%/°
¼CÔ%@‘zÀjÐQRÁmˆØ$¨Ñ4ˆÔØ$¨Ñ4ˆÕr-   rY   r[   c                 óž  — |j                   \  }}}}|| j                  j                  z  }|| j                  j                  z  }|j                  }t	        |j
                  t        «      r|j
                  dk7  r|j
                  nd}t        |d¬«      5  t        ||t        j                  |¬«      }	| j                  rKt        |	| j                  j                  | j                  j                  | j                  j                  ¬«      }	dt         j"                  z  |	d d …d d …d f   z  | j$                  d d d d …f   z  }
|
j'                  dd«      }
|
j)                  d«      }
t        j*                  |
«      }t        j,                  |
«      }d d d «       |j.                  }j1                  |¬	«      j1                  |¬	«      fS # 1 sw Y   Œ9xY w)
NÚmpsÚcpuF)Údevice_typeÚenabledrz   )r„   r…   r†   r_   r   r]   )rd   rB   rT   rx   rŸ   ÚtypeÚstrr   rƒ   r)   rœ   Útrainingr‘   Úpos_embed_shiftÚpos_embed_jitterÚpos_embed_rescaleÚmathÚpir”   rg   ÚtileÚcosÚsinr^   rf   )rW   rY   Ú_ÚheightÚwidthrv   rw   rx   r¨   Úpatch_coordsÚanglesr³   r´   r^   s                 r.   rp   z%Sapiens2RopePositionEmbedding.forward%  s  € Ø*×0Ñ0Ñˆˆ1ˆf�eØ $§+¡+×"8Ñ"8Ñ8ˆØ §¡×!7Ñ!7Ñ7ˆà×$Ñ$ˆÜ%/°·±¼SÔ%AÀfÇkÁkÐUZÒFZ�f—k’kÐ`eˆä¨¸UÔCñ 	$ô :Ø˜}´E·M±MÈ&ôˆLð �}Š}ÜAØ ØŸ+™+×5Ñ5ØŸ;™;×7Ñ7Ø ŸK™K×9Ñ9ô	 �ð œŸ™‘[ <²²1°d°
Ñ#;Ñ;¸d¿m¹mÈDÐRVÒXYÈMÑ>ZÑZˆFØ—^‘^ A qÓ)ˆFØ—[‘[ “^ˆFä—)‘)˜FÓ#ˆCÜ—)‘)˜FÓ#ˆC÷+	$ð. ×"Ñ"ˆØ�v‰v˜EˆvÓ" C§F¡F° FÓ$7Ð7Ð7÷1	$ð 	$ús   ÂC7GÇG)r$   r%   r&   r)   r   r+   r   rG   r(   rp   rr   rs   s   @r.   r“   r“     sB   ø… Ø�l‰lÓð5˜~õ 5ð" 8 E§L¡Lð  8°U¸5¿<¹<ÈÏÉÐ;UÑ5V÷  8r-   r“   ÚRMSNormc                   óh   ‡ — e Zd Zddeddfˆ fd„Zdej                  dej                  fd„Zd„ Zˆ xZ	S )	ÚSapiens2RMSNormÚepsr[   Nc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)z>
        Sapiens2RMSNorm is equivalent to T5LayerNorm
        N)rF   rG   r   rH   r)   Úonesre   Úvariance_epsilon)rW   rJ   r½   rX   s      €r.   rG   zSapiens2RMSNorm.__init__J  s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr-   r3   c                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Nr_   r`   T)Úkeepdim)	r^   rf   r)   rœ   ÚpowÚmeanÚrsqrtrÀ   re   )rW   r3   Úinput_dtypeÚvariances       r.   rp   zSapiens2RMSNorm.forwardR  sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r-   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)r(   re   rd   rÀ   ©rW   s    r.   Ú
extra_reprzSapiens2RMSNorm.extra_reprY  s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr-   )g�íµ ÷Æ°>)
r$   r%   r&   ÚfloatrG   r)   r   rp   rÊ   rr   rs   s   @r.   r¼   r¼   H  s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr-   r¼   c                 óš   — | dd| j                   d   dz  …f   }| d| j                   d   dz  d…f   }t        j                  | |fd¬«      S )z*Rotates half the hidden dims of the input..Nr`   r_   ra   )rd   r)   rl   )ÚxÚx1Úx2s      r.   Úrotate_halfrÐ   ]  sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰9�r�c˜2�Y BÔ'Ð'r-   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚdropoutÚscalingÚsoftcapc                 ó|  — |€| j                   dz  }t        || j                  «      }	t        || j                  «      }
t        j                  ||	j                  dd«      «      |z  }|�||z  }t        j                  |«      }||z  }|�||z   }t        j                  j                  |dt        j                  ¬«      j                  |j                  «      }t        j                  j                  ||| j                  ¬«      }t        j                  ||
«      }|j                  dd«      j                  «       }||fS )Nç      à¿r_   r   r`   )rb   r^   )Úpr¬   r   )r›   Ú	repeat_kvÚnum_key_value_groupsr)   Úmatmulrh   Útanhr   Ú
functionalÚsoftmaxrœ   rf   r^   rÖ   r¬   Ú
contiguous)rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   ÚkwargsÚ
key_statesÚvalue_statesÚattn_weightsÚattn_outputs                r.   Úeager_attention_forwardrè   d  s  € ð €Ø—/‘/ 4Ñ'ˆä˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LàÐØ# gÑ-ˆÜ—z‘z ,Ó/ˆØ# gÑ-ˆØÐ!Ø# nÑ4ˆô —=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KØ˜Ð$Ð$r-   ÚqÚkr³   r´   c                 ód  — | j                   d   }|j                   d   }||z
  }| j                  ||fd¬«      \  }}	|j                  ||fd¬«      \  }
}|	|z  t        |	«      |z  z   }	||z  t        |«      |z  z   }t        j                  ||	fd¬«      } t        j                  |
|fd¬«      }| |fS )a  Applies Rotary Position Embedding to the query and key tensors, but only to the patch tokens,
    ignoring the prefix tokens (cls token and register tokens).

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.

    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    éþÿÿÿra   )rd   ÚsplitrÐ   r)   rl   )ré   rê   r³   r´   rã   Ú
num_tokensÚnum_patchesÚnum_prefix_tokensÚq_prefix_tokensÚ	q_patchesÚk_prefix_tokensÚ	k_patchess               r.   Úapply_rotary_pos_embrõ   †  sÈ   € ð  —‘˜‘€JØ—)‘)˜B‘-€KØ" [Ñ0Ðà!"§¡Ð*;¸[Ð)IÈr Ó!RÑ€O�YØ!"§¡Ð*;¸[Ð)IÈr Ó!RÑ€O�Yð ˜S‘¤[°Ó%;¸cÑ%AÑB€IØ˜S‘¤[°Ó%;¸cÑ%AÑB€Iä�	‰	�? IÐ.°BÔ7€AÜ�	‰	�? IÐ.°BÔ7€Aàˆaˆ4€Kr-   r3   Ún_repc                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||z  ||«      S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r   N)rd   rk   Úreshape)r3   rö   ÚbatchÚnum_key_value_headsÚslenr›   s         r.   rÜ   rÜ   §  so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr-   c                   óò   ‡ — e Zd ZdZdedefˆ fd„Z	 	 ddej                  dej                  dz  de	ej                  ej                  f   dz  d	e
e   d
e	ej                  ej                  dz  f   f
d„Zˆ xZS )ÚSapiens2AttentionzI
    Multi-headed attention compatible with ALL_ATTENTION_FUNCTIONS.
    rB   Ú	layer_idxc                 óª  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        d| _        | j                  dz  | _	        d| _        |j                  | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                   ¬«      | _        |j$                  |   | _        | j                  | j&                  z  | _        t        j                  | j                  | j&                  | j                  z  |j*                  ¬«      | _        t        j                  | j                  | j&                  | j                  z  |j.                  ¬«      | _        |j2                  r!t5        | j                  |j6                  ¬«      nt        j8                  «       | _        |j2                  r't5        | j                  |j6                  ¬«      | _        y t        j8                  «       | _        y )NFrÚ   ©Úbias©r½   )rF   rG   rB   rJ   Ú	embed_dimrš   Ú	num_headsr›   Ú	is_causalr×   Úattention_dropoutrÖ   r   ÚLinearÚ
query_biasÚq_projÚ	proj_biasÚo_projÚnum_key_value_heads_per_layerrú   rÝ   Úkey_biasÚk_projÚ
value_biasÚv_projÚuse_qk_normr¼   Úrms_norm_epsÚIdentityÚq_normÚk_norm©rW   rB   rþ   rX   s      €r.   rG   zSapiens2Attention.__init__¸  s”  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØˆŒà—}‘} dÑ*ˆŒØˆŒà×/Ñ/ˆŒä—i‘i §¡°·±ÀV×EVÑEVÔWˆŒÜ—i‘i §¡°·±ÀV×EUÑEUÔVˆŒØ#)×#GÑ#GÈ	Ñ#RˆÔ Ø$(§N¡N°d×6NÑ6NÑ$NˆÔ!Ü—i‘i §¡°×0HÑ0HÈ4Ï=É=Ñ0XÐ_e×_nÑ_nÔoˆŒÜ—i‘i §¡°×0HÑ0HÈ4Ï=É=Ñ0XÐ_e×_pÑ_pÔqˆŒØQW×QcÒQc”o d§m¡m¸×9LÑ9LÕMÔik×itÑitÓivˆŒØQW×QcÒQc”o d§m¡m¸×9LÑ9LÔMˆ�Ôik×itÑitÓivˆ�r-   Nr3   rÕ   Úposition_embeddingsrã   r[   c                 ó
  — |j                   dd }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }	| j                  |«      }| j                  |«      }|\  }
}t        |||
|«      \  }}t        j                  | j                  j                  t        «      } || |||	|f| j                  sdn| j                   | j"                  dœ|¤Ž\  }} |j$                  g |¢d‘­Ž j'                  «       }| j)                  |«      }||fS )z#Input shape: Batch x Time x ChannelNr`   r   r_   ç        )rÖ   r×   )rd   r›   r	  Úviewrh   r  r  r  r  rõ   r   Úget_interfacerB   Ú_attn_implementationrè   r¬   rÖ   r×   rø   râ   r  )rW   r3   rÕ   r  rã   Úinput_shapeÚhidden_shapeÚquery_statesrä   rå   r³   r´   Úattention_interfacerç   ræ   s                  r.   rp   zSapiens2Attention.forwardÎ  s…  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—{‘{ <Ó0ˆØ—[‘[ Ó,ˆ
à&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$·,±,Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r-   ©NN©r$   r%   r&   r'   r   r    rG   r)   r   r(   r   r   rp   rr   rs   s   @r.   rý   rý   ³  sœ   ø„ ñðw˜~ð w¸#õ wð2 /3ØHLñ	$)à—|‘|ð$)ð Ÿ™ tÑ+ð$)ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð	$)ð
 Ð+Ñ,ð$)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷$)r-   rý   c                   óX   ‡ — e Zd Zdˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚSapiens2LayerScaler[   c                 óª   •— t         ‰| �  «        t        j                  |j                  t        j                  |j                  «      z  «      | _        y rq   )	rF   rG   r   rH   Úlayerscale_valuer)   r¿   rJ   Úlambda1rV   s     €r.   rG   zSapiens2LayerScale.__init__ö  s8   ø€ Ü‰ÑÔÜ—|‘| F×$;Ñ$;¼e¿j¹jÈ×I[ÑI[Ó>\Ñ$\Ó]ˆ�r-   Úhidden_statec                 ó    — || j                   z  S rq   )r'  )rW   r(  s     r.   rp   zSapiens2LayerScale.forwardú  s   € Ø˜dŸl™lÑ*Ð*r-   ©r[   N)r$   r%   r&   rG   r)   r   rp   rr   rs   s   @r.   r$  r$  õ  s$   ø„ õ^ð+ E§L¡Lð +°U·\±\÷ +r-   r$  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚSapiens2MLPc                 ó�  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _	        t        |j                     | _        y ©Nr   )rF   rG   rB   rJ   Úintermediate_sizer   r  Úmlp_biasÚup_projÚ	down_projr
   Ú
hidden_actÚact_fnrV   s     €r.   rG   zSapiens2MLP.__init__ÿ  s‘   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPV×P_ÑP_Ô`ˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRX×RaÑRaÔbˆŒÜ˜V×.Ñ.Ñ/ˆ�r-   c                 ó`   — | j                  | j                  | j                  |«      «      «      S rq   )r2  r4  r1  )rW   rÍ   s     r.   rp   zSapiens2MLP.forward  s"   € Ø�~‰~˜dŸk™k¨$¯,©,°q«/Ó:Ó;Ð;r-   ©r$   r%   r&   rG   rp   rr   rs   s   @r.   r,  r,  þ  s   ø„ ô0ö<r-   r,  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚSapiens2GatedMLPc                 ó  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _	        t        j                  | j                  | j                  |j                  ¬«      | _
        t        |j                     | _        y r.  )rF   rG   rB   rJ   r/  r   r  r0  Ú	gate_projr1  r2  r
   r3  r4  rV   s     €r.   rG   zSapiens2GatedMLP.__init__  s¸   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜŸ™ 4×#3Ñ#3°T×5KÑ5KÐRX×RaÑRaÔbˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPV×P_ÑP_Ô`ˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRX×RaÑRaÔbˆŒÜ˜V×.Ñ.Ñ/ˆ�r-   c                 óˆ   — | j                  | j                  | j                  |«      «      | j                  |«      z  «      }|S rq   )r2  r4  r:  r1  )rW   rÍ   r2  s      r.   rp   zSapiens2GatedMLP.forward  s6   € Ø—N‘N 4§;¡;¨t¯~©~¸aÓ/@Ó#AÀDÇLÁLÐQRÃOÑ#SÓTˆ	ØÐr-   r6  rs   s   @r.   r8  r8    s   ø„ ô0ör-   r8  c                   ór   ‡ — e Zd ZdZd	deddfˆ fd„Zdej                  dej                  fd„Zde	fd„Z
ˆ xZS )
ÚSapiens2DropPathzÏStochastic depth (DropPath) per sample, for residual blocks.

    Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
    <https://arxiv.org/abs/1603.09382>`_.
    Ú	drop_probr[   Nc                 ó0   •— t         ‰| �  «        || _        y rq   )rF   rG   r>  )rW   r>  rX   s     €r.   rG   zSapiens2DropPath.__init__#  s   ø€ Ü‰ÑÔØ"ˆ�r-   r3   c                 óP  — | j                   dk(  s| j                  s|S d| j                   z
  }|j                  d   fd|j                  dz
  z  z   }t	        j
                  ||j                  |j                  ¬«      }t	        j                  ||z   «      }|j                  |«      |z  S )Nr  r   r   )r   rz   )
r>  r¬   rd   Úndimr)   Úrandr^   rx   ÚfloorÚdiv)rW   r3   Ú	keep_probrd   Úrandom_tensors        r.   rp   zSapiens2DropPath.forward'  s—   € Ø�>‰>˜SÒ ¨¯ªØ Ð Ø˜Ÿ™Ñ&ˆ	Ø×$Ñ$ QÑ'Ð)¨D°M×4FÑ4FÈÑ4JÑ,KÑKˆÜŸ
™
 5°×0CÑ0CÈM×L`ÑL`ÔaˆÜŸ™ M°IÑ$=Ó>ˆØ× Ñ  Ó+¨mÑ;Ð;r-   c                 ó    — d| j                   › �S )Nzp=)r>  rÉ   s    r.   rÊ   zSapiens2DropPath.extra_repr0  s   € Ø�D—N‘NÐ#Ð$Ð$r-   )r  )r$   r%   r&   r'   rË   rG   r)   r   rp   r«   rÊ   rr   rs   s   @r.   r=  r=    sB   ø„ ññ# %ð #°$õ #ð< U§\¡\ð <°e·l±ló <ð%˜C÷ %r-   r=  c                   óÎ   ‡ — e Zd ZdZdedefˆ fd„Z	 	 ddej                  dej                  dz  de	ej                  ej                  f   dz  d	e
e   d
ej                  f
d„Zˆ xZS )ÚSapiens2LayerzCThis corresponds to the Block class in the original implementation.rB   rþ   c                 ó  •— t         ‰| �  «        t        |j                  |j                  ¬«      | _        t        ||¬«      | _        t        |«      | _	        |j                  dkD  rt        |j                  «      nt        j                  «       | _        t        |j                  |j                  ¬«      | _        |j                   rt#        |«      | _        nt'        |«      | _        t        j                  «       | _        y )Nr  ©rþ   r  )rF   rG   r¼   rJ   r  Únorm1rý   Ú	attentionr$  Úlayer_scale1Údrop_path_rater=  r   r  Ú	drop_pathÚnorm2Úuse_gated_mlpr8  Úmlpr,  Úlayer_scale2r  s      €r.   rG   zSapiens2Layer.__init__7  s¹   ø€ Ü‰ÑÔÜ$ V×%7Ñ%7¸V×=PÑ=PÔQˆŒ
Ü*¨6¸YÔGˆŒÜ.¨vÓ6ˆÔØDJ×DYÑDYÐ\_ÒD_Ô)¨&×*?Ñ*?Ô@Ôeg×epÑepÓerˆŒÜ$ V×%7Ñ%7¸V×=PÑ=PÔQˆŒ
à×ÒÜ'¨Ó/ˆD�Hä" 6Ó*ˆDŒHÜŸK™K›MˆÕr-   Nr3   rÕ   r  rã   r[   c                 ó:  — |}| j                  |«      } | j                  |f||dœ|¤Ž\  }}| j                  |«      }| j                  |«      |z   }|}| j	                  |«      }| j                  |«      }| j                  |«      }| j                  |«      |z   }|S )N)rÕ   r  )rL  rM  rN  rP  rQ  rS  rT  )rW   r3   rÕ   r  rã   Úresidualrµ   s          r.   rp   zSapiens2Layer.forwardE  sµ   € ð !ˆØŸ
™
 =Ó1ˆØ)˜4Ÿ>™>Øð
à)Ø 3ñ
ð ñ	
Ñˆ�qð ×)Ñ)¨-Ó8ˆØŸ™ }Ó5¸Ñ@ˆð !ˆØŸ
™
 =Ó1ˆØŸ™ Ó/ˆØ×)Ñ)¨-Ó8ˆØŸ™ }Ó5¸Ñ@ˆàÐr-   r!  r"  rs   s   @r.   rI  rI  4  s„   ø„ ÙMð*˜~ð *¸#õ *ð" /3ØHLñ	à—|‘|ðð Ÿ™ tÑ+ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEð	ð
 Ð+Ñ,ðð 
�‰÷r-   rI  c                   óÂ   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 ddededeeeef   z  dedeeeef   z  ez  deded	ed
ededefˆ fd„Zde	j                  de	j                  fd„Zˆ xZS )ÚSapiens2ConvLayerzc
    A basic wrapper for Convolution-BatchNorm-Activation, typically used for head components.
    Úin_channelsÚout_channelsrD   rE   ÚpaddingÚgroupsÚ
activationr  Úconvolution_transposeÚpixel_shuffleÚscale_factorc           	      ó  •— t         ‰| �  «        |	rt        j                  ||||¬«      | _        n!t        j
                  |||||||¬«      | _        t        j                  |«      | _        t        |   | _	        |	r,t        j                  ||
r||dz  z  n||||||¬«      | _        n+t        j
                  ||
r||dz  z  n||||||¬«      | _        |
rt        j                  |«      | _        y t        j                  «       | _        y )N)rY  rZ  rD   rE   )rY  rZ  rD   rE   r[  r\  r  r_   )rD   rE   r[  r  r\  )rF   rG   r   ÚConvTranspose2dÚconvolutionrR   ÚInstanceNorm2dÚnormr
   r4  ÚPixelShuffler  r_  )rW   rY  rZ  rD   rE   r[  r\  r]  r  r^  r_  r`  rX   s               €r.   rG   zSapiens2ConvLayer.__init__g  s  ø€ ô 	‰ÑÔÙ Ü!×1Ñ1Ø'Ø)Ø'Øô	 ˆDÕô  "Ÿy™yØ'Ø)Ø'ØØØØô ˆDÔô ×%Ñ% lÓ3ˆŒ	Ü˜ZÑ(ˆŒÙ Ü!×1Ñ1ØÙ2?�˜|¨Q™Ò.À\Ø'ØØØØô ˆDÕô  "Ÿy™yØÙ2?�˜|¨Q™Ò.À\Ø'ØØØØô ˆDÔñ ?LœRŸ_™_¨\Ó:ˆÕÔQS×Q\ÑQ\ÓQ^ˆÕr-   r3   r[   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S rq   )rc  r_  re  r4  ©rW   r3   s     r.   rp   zSapiens2ConvLayer.forwardŸ  sD   € Ø×(Ñ(¨Ó7ˆØ×*Ñ*¨=Ó9ˆØŸ	™	 -Ó0ˆØŸ™ MÓ2ˆØÐr-   )	r   r   r   r   ÚsiluTFFr_   )r$   r%   r&   r'   r    r(   r«   ÚboolrG   r)   r   rp   rr   rs   s   @r.   rX  rX  b  sÝ   ø„ ñð ./ØØ/0ØØ ØØ&+Ø#Øñ6_àð6_ð ð6_ð ˜5  c ™?Ñ*ð	6_ð
 ð6_ð �u˜S #˜X‘Ñ&¨Ñ,ð6_ð ð6_ð ð6_ð ð6_ð  $ð6_ð ð6_ð õ6_ðp U§\¡\ð °e·l±l÷ r-   rX  c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚSapiens2HeadrB   c                 óø  •‡— t         ‰| �  «        ‰j                  j                  r#t	        ‰j
                  ‰j
                  dd¬«      nt        j                  «       | _        ‰j
                  g‰j                  j                  d d z   }t        j                  ˆfd„t        |‰j                  j                  ‰j                  j                  «      D «       «      | _        ‰j                  j                  d   g‰j                  j                  d d z   }t        j                  ˆfd„t        |‰j                  j                  ‰j                  j                  «      D «       «      | _        ‰j                  j                  r‰j                  j                  d   n:‰j                  j                  r‰j                  j                  d   n‰j
                  }t        j"                  |‰j$                  d¬«      | _        y )Nr   r   ©rD   r[  r`   c              3   óV  •K  — | ]   \  }}}t        |||‰j                  j                  rd nd‰j                  j                  r|d z
  dz  nd t        ‰j                  j                  «      t        ‰j                  j                  «      ‰j                  j                   ¬«      –— Œ¢ y­w)r   r_   )rD   rE   r[  r  r_  r^  N)rX  Úhead_configÚuse_pixel_shufflerj  ©Ú.0Úin_chÚout_chrD   rB   s       €r.   ú	<genexpr>z(Sapiens2Head.__init__.<locals>.<genexpr>°  sž   øè ø€ ò -
ñ +��v˜{ô ØØØ'Ø"×.Ñ.×@Ò@‘qÀaØ28×2DÑ2D×2VÒ2V˜ q™¨QÒ.Ð\]Ü˜&×,Ñ,×>Ñ>Ó?Ü" 6×#5Ñ#5×#GÑ#GÓHØ*0×*<Ñ*<×*NÑ*NÐ&N÷	ð 	ñ-
ùs   ƒB&B)c              3   ó€   •K  — | ]5  \  }}}t        |||‰j                  j                  r|d z
  dz  nd¬«      –— Œ7 y­w)r   r_   r   rn  N)rX  rp  rq  rr  s       €r.   rv  z(Sapiens2Head.__init__.<locals>.<genexpr>Â  sQ   øè ø€ ò 
)
ñ +��v˜{ô ØØØ'Ø28×2DÑ2D×2VÒ2V˜ q™¨QÒ.Ð\]÷	ð ñ
)
ùs   ƒ;>)rD   )rF   rG   rp  rq  rX  rJ   r   r  Ú
input_convÚupsample_out_channelsÚ
ModuleListÚzipÚupsample_kernel_sizesÚupsample_layersÚconv_out_channelsÚconv_kernel_sizesÚconv_layersrR   Ú
num_labelsÚ	predictor)rW   rB   Úupsample_in_channelsÚconv_in_channelsÚpredictor_inrX   s    `   €r.   rG   zSapiens2Head.__init__¨  s±  ù€ Ü‰ÑÔð ×!Ñ!×3Ò3ô ˜f×0Ñ0°&×2DÑ2DÐRSÐ]^Õ_ä—‘“ð 	Œð
 !'× 2Ñ 2Ð3°f×6HÑ6H×6^Ñ6^Ð_bÐ`bÐ6cÑcÐÜ!Ÿ}™}ó -
ô /2Ø$Ø×"Ñ"×8Ñ8Ø×"Ñ"×8Ñ8ó/ô-
ó  
ˆÔð" #×.Ñ.×DÑDÀRÑHÐIÈF×L^ÑL^×LpÑLpÐqtÐrtÐLuÑuÐÜŸ=™=ó 
)
ô /2Ø  &×"4Ñ"4×"FÑ"FÈ×HZÑHZ×HlÑHló/ô
)
ó 

ˆÔð ×!Ñ!×3Ò3ð ×Ñ×0Ñ0°Ò4ð ×!Ñ!×7Ò7ð ×#Ñ#×9Ñ9¸"Ò=à×#Ñ#ð 	ô Ÿ™ <°×1BÑ1BÐPQÔRˆ�r-   r3   r[   c                 óª   — | j                  |«      }| j                  D ]
  } ||«      }Œ | j                  D ]
  } ||«      }Œ | j                  |«      S rq   )rx  r}  r€  r‚  ©rW   r3   Úlayers      r.   rp   zSapiens2Head.forwardÖ  s]   € ØŸ™¨Ó6ˆØ×)Ñ)ò 	1ˆEÙ! -Ó0‰Mð	1à×%Ñ%ò 	1ˆEÙ! -Ó0‰Mð	1à�~‰~˜mÓ,Ð,r-   ©	r$   r%   r&   r   rG   r)   r   rp   rr   rs   s   @r.   rl  rl  §  s-   ø„ ð,S˜~õ ,Sð\- U§\¡\ð -°e·l±l÷ -r-   rl  c                   óT   ‡ — e Zd Zdededej
                  ddfˆ fd„Zdedefd„Zˆ xZ	S )	ÚSapiens2PointmapFinalLayerBlockÚin_dimÚout_dimr]  r[   Nc                 ó‚   •— t         ‰| �  «        t        j                  t        j                  ||«      |g«      | _        y rq   )rF   rG   r   rz  r  Úlayers)rW   rŒ  r�  r]  rX   s       €r.   rG   z(Sapiens2PointmapFinalLayerBlock.__init__à  s.   ø€ Ü‰ÑÔÜ—m‘m¤R§Y¡Y¨v°wÓ%?ÀÐ$LÓMˆ�r-   Úinputc                 ó<   — |}| j                   D ]
  } ||«      }Œ |S rq   )r�  )rW   r�  r(  rˆ  s       r.   rp   z'Sapiens2PointmapFinalLayerBlock.forwardä  s*   € ØˆØ—[‘[ò 	/ˆEÙ  Ó.‰Lð	/àÐr-   )
r$   r%   r&   r    r   ÚModulerG   r   rp   rr   rs   s   @r.   r‹  r‹  ß  s@   ø„ ðN˜sð N¨Sð N¸b¿i¹ið NÈDõ Nð˜Vð ¨÷ r-   r‹  c            	       ót   ‡ — e Zd Zd	dedeeef   dedefˆ fd„Zdej                  dej                  fd„Z	ˆ xZ
S )
ÚSapiens2PointmapFinalLayerrŒ  Úhidden_sizesr�  r]  c                 ó
  •— t         ‰| �  «        t        j                  «       | _        t        ||d   t        |   ¬«      | _        t        |d   |d   t        |   ¬«      | _        t        j                  |d   |«      | _
        y )Nr   )rŒ  r�  r]  r   )rF   rG   r   ÚFlattenrg   r‹  r
   Úblock1Úblock2r  Úproj)rW   rŒ  r•  r�  r]  rX   s        €r.   rG   z#Sapiens2PointmapFinalLayer.__init__ì  sq   ø€ Ü‰ÑÔÜ—z‘z“|ˆŒÜ5Ø <°¡?¼vÀjÑ?Qô
ˆŒô 6Ø ‘?¨L¸©OÌÈzÑHZô
ˆŒô —I‘I˜l¨1™o¨wÓ7ˆ�	r-   r3   r[   c                 óŠ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      S rq   )rg   r˜  r™  rš  rh  s     r.   rp   z"Sapiens2PointmapFinalLayer.forward÷  s;   € ØŸ™ ]Ó3ˆØŸ™ MÓ2ˆØŸ™ MÓ2ˆØ�y‰y˜Ó'Ð'r-   )r   ri  )r$   r%   r&   r    r(   r«   rG   r)   r   rp   rr   rs   s   @r.   r”  r”  ë  sH   ø„ ñ	8˜sð 	8°%¸¸S¸±/ð 	8ÈCð 	8Ðadõ 	8ð( U§\¡\ð (°e·l±l÷ (r-   r”  c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚSapiens2PointmapScaleHeadrB   c                 ó  •— t         ‰| �  «        t        j                  «       | _        |j
                  g|j                  j                  d d z   }t        ||j                  j                  |j                  j                  «      D ]5  \  }}}| j                  j                  t        |||d|dz
  dz  ¬«      «       Œ7 t        |j                  j                  |j                  j                  |j                  ¬«      | _        y )Nr`   r_   r   )rD   rE   r[  )r]  )rF   rG   r   rz  r€  rJ   rp  Úscale_conv_out_channelsr{  Úscale_conv_kernel_sizesÚappendrX  r”  Úscale_final_input_sizeÚscale_final_hidden_sizesr3  r‚  )rW   rB   Úscale_in_channelsrt  ru  rD   rX   s         €r.   rG   z"Sapiens2PointmapScaleHead.__init__ÿ  sê   ø€ Ü‰ÑÔÜŸ=™=›?ˆÔØ#×/Ñ/Ð0°6×3EÑ3E×3]Ñ3]Ð^aÐ_aÐ3bÑbÐÜ*-ØØ×Ñ×6Ñ6Ø×Ñ×6Ñ6ó+
ò 	Ñ&ˆE�6˜;ð
 ×Ñ×#Ñ#Ü! %¨¸[ÐQRÐ]hÐklÑ]lÐqrÑ\rÔsõð	ô 4Ø×Ñ×5Ñ5Ø×Ñ×7Ñ7Ø×(Ñ(ô
ˆ�r-   r3   r[   c                 óV   — | j                   D ]
  } ||«      }Œ | j                  |«      S rq   )r€  r‚  r‡  s      r.   rp   z!Sapiens2PointmapScaleHead.forward  s0   € Ø×%Ñ%ò 	1ˆEÙ! -Ó0‰Mð	1à�~‰~˜mÓ,Ð,r-   r‰  rs   s   @r.   r�  r�  þ  s*   ø„ ð
˜~õ 
ð$- U§\¡\ð -°e·l±l÷ -r-   r�  c                   ó�   ‡ — e Zd ZU eed<   dZdZdZdZdgZ	dZ
dZdZdZeedœZdgZd	gZ ej(                  «       dˆ fd
„«       Zˆ xZS )ÚSapiens2PreTrainedModelrB   ÚmodelrY   )ÚimageTrI  )r3   r4   ÚperiodsrN   c                 ó¸  •— t         ‰| �  |«       t        |t        j                  t        j
                  f«      r7t        j                  |j                  d| j                  j                  ¬«       yt        |t        j                  «      r#t        j                  |j                  dd¬«       yt        |t        «      r¼t        j                  |j                  d| j                  j                  ¬«       |j                  j                  dkD  r6t        j                  |j                   d| j                  j                  ¬«       |j                  j"                  r t        j$                  |j&                  «       yyt        |t(        «      r5t        j*                  |j,                  | j                  j.                  «       yt        |t0        «      red|j2                  t5        j6                  ddd|j8                  z  t4        j:                  ¬	«      z  z  }t        j<                  |j>                  |«       yt        |t@        tB        f«      r�|jE                  «       D ]|  }t        |t        j
                  «      r#t        j                  |j                  dd¬«       Œ@t        |t        j                  «      sŒ[t        j                  |j                  d
d¬«       Œ~ yy)zInitialize the weightsr  )rÄ   ÚstdÚfan_outÚrelu)ÚmodeÚnonlinearityr   r   r–   r]   Úfan_inÚlinearN)#rF   Ú_init_weightsrŸ   r   r  rR   ÚinitÚtrunc_normal_re   rB   Úinitializer_rangerb  Úkaiming_normal_rA   rK   rP   rQ   rL   Úzeros_rN   r$  Ú	constant_r'  r&  r“   r™   r)   r}   r›   rœ   Úcopy_r”   rl  r�  Úmodules)rW   rÑ   r”   Úhead_modulerX   s       €r.   r³  z%Sapiens2PreTrainedModel._init_weights-  sæ  ø€ ô 	‰Ñ˜fÔ%Ü�fœrŸy™y¬"¯)©)Ð4Ô5Ü×Ñ˜vŸ}™}°3¸D¿K¹K×<YÑ<YÖZÜ˜¤× 2Ñ 2Ô3Ü× Ñ  §¡°YÈVÖTÜ˜Ô 2Ô3Ü×Ñ˜v×/Ñ/°c¸t¿{¹{×?\Ñ?\Õ]Ø�}‰}×0Ñ0°1Ò4Ü×"Ñ" 6×#9Ñ#9ÀÈÏÉ×IfÑIfÕgØ�}‰}×+Ò+Ü—‘˜F×-Ñ-Õ.ð ,ä˜Ô 2Ô3Ü�N‰N˜6Ÿ>™>¨4¯;©;×+GÑ+GÕHÜ˜Ô =Ô>Ø˜6Ÿ;™;¬%¯,©,°q¸!¸QÀÇÁÑ=PÔX]×XeÑXeÔ*fÑfÑfˆHÜ�J‰J�v—‘¨Õ1Ü˜¤Ô/HÐ IÔJØ%Ÿ~™~Ó/ò c�Ü˜k¬2¯9©9Ô5Ü×(Ñ(¨×);Ñ);À)ÐZ`ÖaÜ ¬R¯Y©YÕ7Ü×(Ñ(¨×);Ñ);À(ÐYaÖbñ	cð Kr-   r*  )r$   r%   r&   r   r+   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendrI  rý   Ú_can_record_outputsÚ"_keys_to_ignore_on_load_unexpectedÚ_keys_to_ignore_on_load_missingr)   Úno_gradr³  rr   rs   s   @r.   r§  r§    s|   ø… àÓØÐØ$€OØ!ÐØ&*Ð#Ø(Ð)ÐØ€NØÐØÐØ"&Ðà&Ø'ñÐð +5¨Ð&à'4 oÐ#à€U‡]�]ƒ_ôcó ôcr-   r§  c                   ó´   ‡ — e Zd Zdefˆ fd„Ze ed¬«      	 ddej                  de	ej                  ej                  f   dz  de
e   d	efd
„«       «       Zˆ xZS )ÚSapiens2EncoderrB   c           	      óÚ   •— t         ‰| �  |«       t        j                  t	        |j
                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        | j                  «        y c c}w )NrK  )	rF   rG   r   rz  ÚrangeÚnum_hidden_layersrI  rˆ  Ú	post_initr  s      €r.   rG   zSapiens2Encoder.__init__I  sR   ø€ Ü‰Ñ˜Ô Ü—]‘]ÜINÈv×OgÑOgÓIhÖi¸IŒ]˜6¨YÖ7Òió
ˆŒ
ð 	�‰Õùò js   ·A(F)Útie_last_hidden_statesNr3   r  rã   r[   c                 óR   — | j                   D ]  } ||fd|i|¤Ž}Œ t        |¬«      S )Nr  )Úlast_hidden_state)rˆ  r   )rW   r3   r  rã   Úlayer_modules        r.   rp   zSapiens2Encoder.forwardQ  s<   € ð !ŸJ™Jò 	kˆLÙ(¨ÑjÐL_ÐjÐciÑj‰Mð	kô °Ô?Ð?r-   rq   )r$   r%   r&   r   rG   r   r   r)   r   r(   r   r   r   rp   rr   rs   s   @r.   rË  rË  H  s„   ø„ ð˜~õ ð  Ù¨EÔ2ð IMñ	@à—|‘|ð	@ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð	@ð Ð+Ñ,ð		@ð
 
ò	@ó 3ó  ô	@r-   rË  c                   óŽ   ‡ — 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 )ÚSapiens2ModelrB   c                 óþ   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        t        |«      | _        t        |j                  |j                  ¬«      | _        d| _        | j                  «        y )Nr  F)rF   rG   rA   ro   r“   Úrope_embeddingsrË  r¨  r¼   rJ   r  re  Úgradient_checkpointingrÏ  rV   s     €r.   rG   zSapiens2Model.__init__a  sa   ø€ Ü‰Ñ˜Ô Ü,¨VÓ4ˆŒÜ<¸VÓDˆÔÜ$ VÓ,ˆŒ
Ü# F×$6Ñ$6¸F×<OÑ<OÔPˆŒ	Ø&+ˆÔ#à�‰Õr-   c                 ó.   — | j                   j                  S rq   ©ro   rU   rÉ   s    r.   Úget_input_embeddingsz"Sapiens2Model.get_input_embeddingsk  ó   € Ø�‰×/Ñ/Ð/r-   NrY   rZ   rã   r[   c                 óx  — |j                  | j                  j                  j                  j                  «      }| j                  ||¬«      }| j                  |«      } | j                  ||fi |¤Ž}| j                  |j                  «      }|dd…ddd…f   }t        |||j                  |j                  ¬«      S )aØ  
        bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0). Only relevant for
            pre-training.

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-pretrain-0.4b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-pretrain-0.4b")

        >>> inputs = image_processor(images=image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> cls_token = outputs.pooler_output
        >>> cls_token.shape
        torch.Size([1, 1024])
        ```
        )rZ   Nr   )rÒ  Úpooler_outputr3   r4   )rf   ro   rU   re   r^   r×  r¨  re  rÒ  r   r3   r4   )	rW   rY   rZ   rã   r3   r  ÚoutputÚsequence_outputÚpooled_outputs	            r.   rp   zSapiens2Model.forwardn  s­   € ðD $—‘ t§¡×'GÑ'G×'NÑ'N×'TÑ'TÓUˆØŸ™¨Ào˜ÓVˆØ"×2Ñ2°<Ó@Ðà�—‘˜MÐ+>ÑIÀ&ÑIˆØŸ)™) F×$<Ñ$<Ó=ˆØ'ª¨1ªa¨Ñ0ˆä)Ø-Ø'Ø ×.Ñ.Ø×(Ñ(ô	
ð 	
r-   rq   )r$   r%   r&   r   rG   rÛ  r   r   r)   r   r   r   r   rp   rr   rs   s   @r.   rÕ  rÕ  _  sn   ø„ ð˜~õ ò0ð Øð 04ñ-
à—l‘lð-
ð Ÿ™¨Ñ,ð-
ð Ð+Ñ,ð	-
ð
 
$ò-
ó ó ô-
r-   rÕ  c            	       óv   ‡ — e Zd Zdefˆ fd„Zd„ Zeeede	j                  dee   defd„«       «       «       Zˆ xZS )ÚSapiens2BackbonerB   c                 ór  •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        t        |«      | _        t        |j                  |j                  ¬«      | _        d| _        t        |j                  dz   «      D �cg c]  }|j                  ‘Œ c}| _        | j!                  «        y c c}w )Nr  Fr   )rF   rG   rA   ro   r“   r×  rË  r¨  r¼   rJ   r  re  rØ  rÍ  rÎ  Únum_featuresrÏ  )rW   rB   rµ   rX   s      €r.   rG   zSapiens2Backbone.__init__¢  s‘   ø€ Ü‰Ñ˜Ô ä,¨VÓ4ˆŒÜ<¸VÓDˆÔÜ$ VÓ,ˆŒ
Ü# F×$6Ñ$6¸F×<OÑ<OÔPˆŒ	Ø&+ˆÔ#ä9>¸v×?WÑ?WÐZ[Ñ?[Ó9\Ö]°A˜V×/Ó/Ò]ˆÔØ�‰Õùò ^s   ÂB4c                 ó.   — | j                   j                  S rq   rÚ  rÉ   s    r.   rÛ  z%Sapiens2Backbone.get_input_embeddings®  rÜ  r-   rY   rã   r[   c                 óˆ  — |j                  | j                  j                  j                  j                  «      }| j                  |«      }| j                  |«      }d|d<    | j                  ||fi |¤Ž}|j                  }|j                  \  }}}	}
| j                  j                  }t        |t        «      r|n|d   }t        |t        «      r|n|d   }|	|z  }|
|z  }dt        | j                  dd«      z   }t        | j                  dd«      }g g }}t        t        | j                   |«      «      D ]Ô  \  }\  }}| j                  j"                  r| j%                  |«      }|| j&                  v sŒ?|r|j)                  |dd…ddd…f   «       |dd…|d…dd…f   }| j                  j*                  rB|j-                  ||||j                  d	   «      j/                  dd
dd«      j1                  «       }n|}|j)                  |«       ŒÖ t3        t5        |«      |rt5        |«      nd|j                  |j6                  ¬«      S )a2  
        Example:

        ```python
        >>> from transformers import AutoBackbone, AutoImageProcessor
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-pretrain-0.4b")
        >>> model = AutoBackbone.from_pretrained("facebook/sapiens2-pretrain-0.4b")

        >>> inputs = image_processor(images=image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs, return_class_token=True)

        >>> outputs.feature_maps[0].shape
        torch.Size([1, 1024, 64, 48])
        >>> outputs.cls_tokens[0].shape
        torch.Size([1, 1024])
        ```
        TÚoutput_hidden_statesr   r   rP   Úreturn_class_tokenFNr`   r   r_   )Úfeature_mapsr#   r3   r4   )rf   ro   rU   re   r^   r×  r¨  r3   rd   rB   rT   rŸ   r    ÚgetattrÚ	enumerater{  Ústage_namesÚnormalize_backbone_outputsre  Úout_featuresr¡  Úreshape_hidden_statesrø   Úpermuterâ   r"   r(   r4   )rW   rY   rã   r3   r  rß  Ústage_hidden_statesrm   rµ   Úimage_heightÚimage_widthrT   r£   r¤   Únum_patches_heightÚnum_patches_widthÚ
num_prefixré  rê  r#   ÚidxÚ
stage_namer(  Úpatch_tokensÚfeature_maps                            r.   rp   zSapiens2Backbone.forward±  s(  € ð< $—‘ t§¡×'GÑ'G×'NÑ'N×'TÑ'TÓUˆØŸ™¨Ó5ˆØ"×2Ñ2°<Ó@Ðà)-ˆÐ%Ñ&Ø�—‘˜MÐ+>ÑIÀ&ÑIˆØ$×2Ñ2Ðà3?×3EÑ3EÑ0ˆ
�A�| [Ø—[‘[×+Ñ+ˆ
Ü%/°
¼CÔ%@‘zÀjÐQRÁmˆÜ%/°
¼CÔ%@‘zÀjÐQRÁmˆØ)¨\Ñ9ÐØ'¨<Ñ7Ðàœ §¡Ð.CÀQÓGÑGˆ
Ü$ T§[¡[Ð2FÈÓNÐà#% r�jˆÜ/8¼¸T×=MÑ=MÐObÓ9cÓ/dò 	1Ñ+ˆCÑ+�*˜lØ�{‰{×5Ò5Ø#Ÿy™y¨Ó6�à˜T×.Ñ.Ò.Ù%Ø×%Ñ% l²1°aº°7Ñ&;Ô<Ø+ªA¨z©{ºAÐ,=Ñ>�Ø—;‘;×4Ò4à$×,Ñ,¨ZÐ9KÐM^Ð`l×`rÑ`rÐsuÑ`vÓwß ™  A q¨!Ó,ß#™›ñ  ð #/�Kà×#Ñ# KÕ0ð#	1ô& &Ü˜|Ó,Ù,>”u˜ZÔ(ÀDØ ×.Ñ.Ø×(Ñ(ô	
ð 	
r-   )r$   r%   r&   r   rG   rÛ  r   r   r   r)   r   r   r   r"   rp   rr   rs   s   @r.   rã  rã     sc   ø„ ð
˜~õ 
ò0ð Ø ØðF
à—l‘lðF
ð Ð+Ñ,ðF
ð 
 ò	F
ó ó !ó ôF
r-   rã  zfacebook/sapiens2-seg-0.4b)Ú
checkpointc                   óˆ   ‡ — e Zd Zdefˆ fd„Zee	 d	dej                  dej                  dz  de
e   defd„«       «       Zˆ xZS )
ÚSapiens2ForSemanticSegmentationrB   c                 ó¦   •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        |«      | _        | j                  «        y rq   ©rF   rG   r�  rÕ  r¨  rl  Údecode_headrÏ  rV   s     €r.   rG   z(Sapiens2ForSemanticSegmentation.__init__ÿ  ó@   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ" 6Ó*ˆŒ
Ü'¨Ó/ˆÔØ�‰Õr-   NrY   Úlabelsrã   r[   c                 ó’  — |�$| j                   j                  dk(  rt        d«      ‚ | j                  |fi |¤Ž}|j                  \  }}}}| j                   j
                  }	t        |	t        «      r|	n|	d   }
t        |	t        «      r|	n|	d   }||
z  }||z  }|j                  dd…d| j                   j                  z   d…f   }|j                  dd«      j                  |d||«      }| j                  |«      }d}|�(| j                  ||| j                   j                  ¬«      }t        |||j                   |j"                  ¬«      S )	aø  
        labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth semantic segmentation maps for computing the loss.
            Indices should be in `[0, ..., config.num_labels - 1]`.
            If `config.num_labels > 1`, a classification loss is computed (Cross-Entropy).

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-seg-0.4b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-seg-0.4b")

        >>> inputs = image_processor(image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> outputs.logits.shape
        torch.Size([1, 29, 1024, 768])
        ```
        Nr   z/The number of labels should be greater than oner   r_   r`   )Úignore_index)r1   Úlogitsr3   r4   )rB   r�  rc   r¨  rd   rT   rŸ   r    rÒ  rP   rh   rø   r  Úloss_functionÚsemantic_loss_ignore_indexr   r3   r4   )rW   rY   r  rã   Úoutputsrm   rµ   r¶   r·   rT   r£   r¤   Úpatch_heightÚpatch_widthrú  rû  r  r1   s                     r.   rp   z'Sapiens2ForSemanticSegmentation.forward  sJ  € ðB Ð $§+¡+×"8Ñ"8¸AÒ"=ÜÐNÓOÐOà�$—*‘*˜\Ñ4¨VÑ4ˆà'3×'9Ñ'9Ñ$ˆ
�A�v˜uØ—[‘[×+Ñ+ˆ
Ü%/°
¼CÔ%@‘zÀjÐQRÁmˆÜ%/°
¼CÔ%@‘zÀjÐQRÁmˆØ Ñ-ˆØ˜|Ñ+ˆà×0Ñ0²°A¸¿¹×8WÑ8WÑ4WÑ4YÐ1YÑZˆØ"×,Ñ,¨Q°Ó2×:Ñ:¸:ÀrÈ<ÐYdÓeˆà×!Ñ! +Ó.ˆàˆØÐØ×%Ñ% f¨fÀ4Ç;Á;×CiÑCiÐ%ÓjˆDä&ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r-   rq   )r$   r%   r&   r   rG   r   r   r)   r*   Ú
LongTensorr   r   r   rp   rr   rs   s   @r.   rþ  rþ  ý  sm   ø„ ð˜~õ ð Øð +/ñ9
à×'Ñ'ð9
ð × Ñ  4Ñ'ð9
ð Ð+Ñ,ð	9
ð
 
!ò9
ó ó ô9
r-   rþ  c                 óä  — |dvrt        d«      ‚| j                  dk7  rt        d«      ‚| j                  \  }}}}d}|dk(  r+d}| j                  «       } | dd…ddd…d	f    | dd…ddd…d	f<   | j	                  |d
|||«      } | j                  «       }|j                  d
«      \  }	}
| dd…|
d	f   |dd…|	d	f<   | dd…|	d	f   |dd…|
d	f<   |j	                  ||||f«      }|j                  d
«      }|S )aÃ  Flip the flipped heatmaps back to the original form.

    Args:
        output_flipped (`torch.tensor` of shape `(batch_size, num_keypoints, height, width)`):
            The output heatmaps obtained from the flipped images.
        flip_pairs (`torch.Tensor` of shape `(num_keypoints, 2)`):
            Pairs of keypoints which are mirrored (for example, left ear -- right ear).
        target_type (`str`, *optional*, defaults to `"gaussian-heatmap"`):
            Target type to use. Can be gaussian-heatmap or combined-target.
            gaussian-heatmap: Classification target with gaussian distribution.
            combined-target: The combination of classification target (response map) and regression target (offset map).
            Paper ref: Huang et al. The Devil is in the Details: Delving into Unbiased Data Processing for Human Pose Estimation (CVPR 2020).

    Returns:
        torch.Tensor: heatmaps that flipped back to the original image
    )úgaussian-heatmapúcombined-targetz9target_type should be gaussian-heatmap or combined-targetr–   zCoutput_flipped should be [batch_size, num_keypoints, height, width]r   r  r   N.r`   )rc   rA  rd   Úclonerø   ÚunbindÚflip)Úoutput_flippedÚ
flip_pairsÚtarget_typerm   Únum_keypointsr¶   r·   ÚchannelsÚoutput_flipped_backÚleft_indicesÚright_indicess              r.   Ú	flip_backr  D  sA  € ð" ÐAÑAÜÐTÓUÐUà×Ñ˜aÒÜÐ^Ó_Ð_à/=×/CÑ/CÑ,€J�˜v uØ€HØÐ'Ò'ØˆØ'×-Ñ-Ó/ˆØ(6²q¸!¸$¸Q¸$À°|Ñ(DÐ'Dˆ’q˜!˜$˜Q˜$ �|Ñ$Ø#×+Ñ+¨J¸¸HÀfÈeÓT€NØ(×.Ñ.Ó0Ðð #-×"3Ñ"3°BÓ"7Ñ€L�-Ø0>ºqÀ-ÐQTÐ?TÑ0UÐš˜<¨Ð,Ñ-Ø1?ÂÀ<ÐQTÐ@TÑ1UÐš˜=¨#Ð-Ñ.Ø-×5Ñ5°zÀ=ÐRXÐZ_Ð6`ÓaÐà-×2Ñ2°2Ó6ÐØÐr-   zfacebook/sapiens2-pose-0.4bz�
    The Sapiens2 model with a pose estimation head on top (a set of heatmap predictors on top of the hidden states output).
    )rü  r    c                   óÈ   ‡ — e Zd Zdefˆ fd„Zee	 	 	 ddej                  dej                  dz  dej                  dz  dej                  dz  de
e   d	efd
„«       «       Zˆ xZS )ÚSapiens2ForPoseEstimationrB   c                 ó¦   •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        |«      | _        | j                  «        y rq   r   rV   s     €r.   rG   z"Sapiens2ForPoseEstimation.__init__u  r  r-   NrY   r  r  Úlabel_weightsrã   r[   c                 óB  —  | j                   |fi |¤Ž}|j                  \  }}}	}
| j                  j                  }t	        |t
        «      r|n|d   }t	        |t
        «      r|n|d   }|	|z  }|
|z  }|j                  dd…d| j                  j                  z   d…f   }|j                  dd«      j                  |d||«      }| j                  |«      }|�t        ||«      }d}|�t        j                  |||¬«      }t        |||j                  |j                   ¬«      S )a   
        flip_pairs (`torch.Tensor` of shape `(num_pairs, 2)`, *optional*):
            Pairs of keypoints which are mirrored (for example, left ear -- right ear), used for
            test-time flip augmentation. When provided, the model assumes `pixel_values` contains
            horizontally-flipped images and calls `flip_back` on the output heatmaps to restore the
            original orientation.
        labels (`torch.FloatTensor` of shape `(batch_size, num_keypoints, height, width)`, *optional*):
            Heatmap ground truth for computing the loss.
        label_weights (`torch.FloatTensor` of shape `(batch_size, num_labels, 1, 1)` or `(batch_size, num_labels, height, width)`, *optional*):
            Visibility weights for each keypoint. Must be broadcastable to the shape of `labels`.

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-pose-0.4b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-pose-0.4b")

        >>> boxes = [[[270.8, 0.6, 294.1, 379.5]]]
        >>> inputs = image_processor(image, boxes=boxes, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> outputs.heatmaps.shape
        torch.Size([1, 308, 256, 192])
        ```
        r   r   Nr_   r`   )re   )r1   r2   r3   r4   )r¨  rd   rB   rT   rŸ   r    rÒ  rP   rh   rø   r  r  ÚFÚmse_lossr0   r3   r4   )rW   rY   r  r  r  rã   r	  rm   rµ   r¶   r·   rT   r£   r¤   r
  r  rú  rû  r2   r1   s                       r.   rp   z!Sapiens2ForPoseEstimation.forward|  s*  € ðR �$—*‘*˜\Ñ4¨VÑ4ˆà'3×'9Ñ'9Ñ$ˆ
�A�v˜uØ—[‘[×+Ñ+ˆ
Ü%/°
¼CÔ%@‘zÀjÐQRÁmˆÜ%/°
¼CÔ%@‘zÀjÐQRÁmˆØ Ñ-ˆØ˜|Ñ+ˆà×0Ñ0²°A¸¿¹×8WÑ8WÑ4WÑ4YÐ1YÑZˆØ"×,Ñ,¨Q°Ó2×:Ñ:¸:ÀrÈ<ÐYdÓeˆà×#Ñ# KÓ0ˆØÐ!Ü  ¨:Ó6ˆHàˆØÐÜ—:‘:˜h¨°}ÔEˆDä*ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r-   ©NNN)r$   r%   r&   r   rG   r   r   r)   r*   r   r   r   r0   rp   rr   rs   s   @r.   r  r  n  s£   ø„ ð˜~õ ð Øð +/Ø+/Ø26ñ@
à×'Ñ'ð@
ð —L‘L 4Ñ'ð@
ð ×!Ñ! DÑ(ð	@
ð
 ×(Ñ(¨4Ñ/ð@
ð Ð+Ñ,ð@
ð 
%ò@
ó ó ô@
r-   r  zfacebook/sapiens2-normal-0.4bzƒ
    The Sapiens2 model with a normal estimation head on top (a PixelShuffle-based decoder that predicts surface normal maps).
    c                   óˆ   ‡ — e Zd Zdefˆ fd„Zee	 d	dej                  dej                  dz  de	e
   defd„«       «       Zˆ xZS )
ÚSapiens2ForNormalEstimationrB   c                 ó¦   •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        |«      | _        | j                  «        y rq   r   rV   s     €r.   rG   z$Sapiens2ForNormalEstimation.__init__È  r  r-   NrY   r  rã   r[   c                 ó  —  | j                   |fi |¤Ž}|j                  \  }}}}| j                  j                  }	t	        |	t
        «      r|	n|	d   }
t	        |	t
        «      r|	n|	d   }||
z  }||z  }|j                  dd…d| j                  j                  z   d…f   }|j                  dd«      j                  |d||«      }| j                  |«      }d}|�t        d«      ‚t        |||j                  |j                  ¬«      S )ae  
        labels (`torch.FloatTensor` of shape `(batch_size, num_labels, height, width)`, *optional*):
            Ground-truth surface normal maps for computing the loss.

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-normal-0.4b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-normal-0.4b")

        >>> inputs = image_processor(image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> outputs.normals.shape
        torch.Size([1, 3, 1024, 768])
        ```
        r   r   Nr_   r`   úTraining is not yet supported)r1   r7   r3   r4   )r¨  rd   rB   rT   rŸ   r    rÒ  rP   rh   rø   r  ÚNotImplementedErrorr6   r3   r4   )rW   rY   r  rã   r	  rm   rµ   r¶   r·   rT   r£   r¤   r
  r  rú  rû  r7   r1   s                     r.   rp   z#Sapiens2ForNormalEstimation.forwardÏ  s  € ð> �$—*‘*˜\Ñ4¨VÑ4ˆà'3×'9Ñ'9Ñ$ˆ
�A�v˜uØ—[‘[×+Ñ+ˆ
Ü%/°
¼CÔ%@‘zÀjÐQRÁmˆÜ%/°
¼CÔ%@‘zÀjÐQRÁmˆØ Ñ-ˆØ˜|Ñ+ˆà×0Ñ0²°A¸¿¹×8WÑ8WÑ4WÑ4YÐ1YÑZˆØ"×,Ñ,¨Q°Ó2×:Ñ:¸:ÀrÈ<ÐYdÓeˆà×"Ñ" ;Ó/ˆàˆØÐÜ%Ð&EÓFÐFä,ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r-   rq   )r$   r%   r&   r   rG   r   r   r)   r*   r   r   r6   rp   rr   rs   s   @r.   r%  r%  Á  sm   ø„ ð˜~õ ð Øð ,0ñ4
à×'Ñ'ð4
ð ×!Ñ! DÑ(ð4
ð Ð+Ñ,ð	4
ð
 
'ò4
ó ó ô4
r-   r%  zfacebook/sapiens2-pointmap-0.4bzÅ
    The Sapiens2 model with a pointmap head on top (a PixelShuffle-based decoder that predicts per-pixel 3D XYZ
    coordinates, plus an optional scale branch for focal-length normalization).
    c                   óˆ   ‡ — e Zd Zdefˆ fd„Zee	 d	dej                  dej                  dz  de	e
   defd„«       «       Zˆ xZS )
ÚSapiens2ForPointmapEstimationrB   c                 ó  •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        |j                  �!|j                  j                  �t        |«      nt        j                  «       | _        | j                  «        y rq   )rF   rG   rÕ  r¨  rl  r  rp  rŸ  r�  r   r  Ú
scale_headrÏ  rV   s     €r.   rG   z&Sapiens2ForPointmapEstimation.__init__  sn   ø€ Ü‰Ñ˜Ô Ü" 6Ó*ˆŒ
Ü'¨Ó/ˆÔð ×!Ñ!Ð-°&×2DÑ2D×2\Ñ2\Ð2hô & fÔ-ä—‘“ð 	Œð
 	�‰Õr-   NrY   r  rã   r[   c                 ó|  —  | j                   |fi |¤Ž}|j                  \  }}}}| j                  j                  }	t	        |	t
        «      r|	n|	d   }
t	        |	t
        «      r|	n|	d   }||
z  }||z  }|j                  dd…d| j                  j                  z   d…f   }|j                  dd«      j                  |d||«      }| j                  |«      }t	        | j                  t        j                  «      rdn| j                  |«      }d}|�t        d«      ‚t        ||||j                   |j"                  ¬«      S )aW  
        labels (`torch.FloatTensor` of shape `(batch_size, 3, height, width)`, *optional*):
            Ground-truth pointmap for computing the loss.

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-pointmap-0.4b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-pointmap-0.4b")

        >>> inputs = image_processor(image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> outputs.pointmaps.shape
        torch.Size([1, 3, 1024, 768])
        ```
        r   r   Nr_   r`   r(  )r1   r:   r;   r3   r4   )r¨  rd   rB   rT   rŸ   r    rÒ  rP   rh   rø   r  r-  r   r  r)  r9   r3   r4   )rW   rY   r  rã   r	  rm   rµ   r¶   r·   rT   r£   r¤   r
  r  rú  rû  r:   r;   r1   s                      r.   rp   z%Sapiens2ForPointmapEstimation.forward  s6  € ð> �$—*‘*˜\Ñ4¨VÑ4ˆà'3×'9Ñ'9Ñ$ˆ
�A�v˜uØ—[‘[×+Ñ+ˆ
Ü%/°
¼CÔ%@‘zÀjÐQRÁmˆÜ%/°
¼CÔ%@‘zÀjÐQRÁmˆØ Ñ-ˆØ˜|Ñ+ˆà×0Ñ0²°A¸¿¹×8WÑ8WÑ4WÑ4YÐ1YÑZˆØ"×,Ñ,¨Q°Ó2×:Ñ:¸:ÀrÈ<ÐYdÓeˆà×$Ñ$ [Ó1ˆ	Ü# D§O¡O´R·[±[ÔA‘ÀtÇÁÐWbÓGcˆàˆØÐÜ%Ð&EÓFÐFä.ØØØØ!×/Ñ/Ø×)Ñ)ô
ð 	
r-   rq   )r$   r%   r&   r   rG   r   r   r)   r*   r   r   r9   rp   rr   rs   s   @r.   r+  r+    sm   ø„ ð	˜~õ 	ð Øð ,0ñ6
à×'Ñ'ð6
ð ×!Ñ! DÑ(ð6
ð Ð+Ñ,ð	6
ð
 
)ò6
ó ó ô6
r-   r+  zfacebook/sapiens2-matting-1bzœ
    The Sapiens2 model with a matting head on top (a PixelShuffle-based decoder that predicts a
    pre-multiplied RGB foreground and an alpha matte).
    c                   óˆ   ‡ — e Zd Zdefˆ fd„Zee	 d	dej                  dej                  dz  de	e
   defd„«       «       Zˆ xZS )
ÚSapiens2ForImageMattingrB   c                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y rq   )rF   rG   rÕ  r¨  rl  r  rÏ  rV   s     €r.   rG   z Sapiens2ForImageMatting.__init__^  s3   ø€ Ü‰Ñ˜Ô Ü" 6Ó*ˆŒ
Ü'¨Ó/ˆÔØ�‰Õr-   NrY   r  rã   r[   c                 óV  —  | j                   |fi |¤Ž}|j                  \  }}}}| j                  j                  }	t	        |	t
        «      r|	n|	d   }
t	        |	t
        «      r|	n|	d   }||
z  }||z  }|j                  dd…d| j                  j                  z   d…f   }|j                  dd«      j                  |d||«      }| j                  |«      j                  «       }|dd…dd…f   }|dd…dd…f   }d}|�t        d«      ‚t        ||||j                  |j                  ¬«      S )	a¡  
        labels (`torch.FloatTensor` of shape `(batch_size, 4, height, width)`, *optional*):
            Ground-truth matting targets for computing the loss.

        Example:

        ```python
        >>> from transformers import AutoImageProcessor, AutoModel
        >>> from transformers.image_utils import load_image
        >>> import torch

        >>> image = load_image("http://images.cocodataset.org/val2017/000000004016.jpg")
        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/sapiens2-matting-1b")
        >>> model = AutoModel.from_pretrained("facebook/sapiens2-matting-1b")

        >>> inputs = image_processor(image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> outputs.alphas.shape
        torch.Size([1, 1, 1024, 768])
        >>> outputs.foregrounds.shape
        torch.Size([1, 3, 1024, 768])
        ```
        r   r   Nr_   r`   r   r(  )r1   r>   r?   r3   r4   )r¨  rd   rB   rT   rŸ   r    rÒ  rP   rh   rø   r  Úsigmoidr)  r=   r3   r4   )rW   rY   r  rã   r	  rm   rµ   r¶   r·   rT   r£   r¤   r
  r  rú  rû  Úmattingr?   r>   r1   s                       r.   rp   zSapiens2ForImageMatting.forwardd  s>  € ðB �$—*‘*˜\Ñ4¨VÑ4ˆà'3×'9Ñ'9Ñ$ˆ
�A�v˜uØ—[‘[×+Ñ+ˆ
Ü%/°
¼CÔ%@‘zÀjÐQRÁmˆÜ%/°
¼CÔ%@‘zÀjÐQRÁmˆØ Ñ-ˆØ˜|Ñ+ˆà×0Ñ0²°A¸¿¹×8WÑ8WÑ4WÑ4YÐ1YÑZˆØ"×,Ñ,¨Q°Ó2×:Ñ:¸:ÀrÈ<ÐYdÓeˆà×"Ñ" ;Ó/×7Ñ7Ó9ˆØša  ! ˜e‘nˆØš˜A™B˜‘ˆàˆØÐÜ%Ð&EÓFÐFä)ØØØ#Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r-   rq   )r$   r%   r&   r   rG   r   r   r)   r*   r   r   r=   rp   rr   rs   s   @r.   r0  r0  V  sm   ø„ ð˜~õ ð Øð ,0ñ9
à×'Ñ'ð9
ð ×!Ñ! DÑ(ð9
ð Ð+Ñ,ð	9
ð
 
$ò9
ó ó ô9
r-   r0  )rþ  r  r%  r+  r0  rÕ  r§  rã  r#  )r  NN)r  )\r°   Úcollections.abcr   r   Údataclassesr   Únumpyr‰   r)   Útorch.nn.functionalr   rà   r!  r   Ú r	   r´  Úactivationsr
   Úbackbone_utilsr   r   Úintegrationsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   Úutils.genericr   r   r   Úutils.output_capturingr   Úconfiguration_sapiens2r   r"   r0   r6   r9   r=   r’  rA   r    r^   rx   rƒ   rË   r‘   r“   r¼   rÐ   r(   rè   rõ   rÜ   rý   r$  r,  r8  r=  rI  rX  rl  r‹  r”  r�  r§  rË  rÕ  rã  rþ  r  r  r%  r+  r0  Ú__all__r,   r-   r.   ú<module>rG     sC  ðó& ß .Ý !ã Û ß Ð ß å &Ý !ß HÝ 7Ý 9÷õ ÷ GÝ &Ý @ß 7ß YÑ YÝ 5Ý 2ñ ðôð ô7˜^ó 7ó óð7ñ ðôð
 ô< +ó <ó óð<ñ$ ðôð
 ô< Kó <ó óð<ñ* ðôð
 ô< kó <ó óð<ñ0 ðôð
 ô1 ó 1ó óð1ô,"˜Ÿ™ô "ñJ %¨RÔ0ðØðØ'*ðØ38·;±;ðØHMÏÉðà
‡\�\òó 1ðð< ØØ ñ	Ø�L‰Lðà�4‰<ðð �D‰Lðð �T‰\ð	ð
 ‡\�\óô:48 B§I¡Iô 48ñn ˜YÓ'ôJ�b—i‘ió Jó (ðJò((ð Ø Ø ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �S‰[ð%ð �T‰\ð%ð �T‰\ð%ð ˆ5�<‰<˜Ÿ™Ð%Ñ&ó%ðDØ‡|�|ðØŸ™ðØ+0¯<©<ðØ>C¿l¹lðà
ˆ5�<‰<˜Ÿ™Ð%Ñ&óðB	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uô?)˜Ÿ	™	ô ?)ôD+˜Ÿ™ô +ô<�"—)‘)ô <ô�r—y‘yô ô %�r—y‘yô %ô0+Ð.ô +ô\B˜Ÿ	™	ô BôJ5-�2—9‘9ô 5-ôp	 b§i¡iô 	ô( §¡ô (ô&- §	¡	ô -ð2 ô-c˜oó -có ð-cô`@Ð-ô @ð. ô=
Ð+ó =
ó ð=
ð@ ôY
�}Ð&=ó Y
ó ðY
ñx Ð7Ô8ôC
Ð&=ó C
ó 9ðC
óL'ñT Ø,ðôôJ
Ð 7ó J
óðJ
ñZ Ø.ðôô>
Ð"9ó >
óð>
ñB Ø0ðôôD
Ð$;ó D
óðD
ñN Ø-ðôôB
Ð5ó B
óðB
òJ	�r-   