Ë
    T^(hÃ´  ã            	       ó&  — d Z ddlZddlmZ ddlmZmZmZm	Z	m
Z
 ddl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mZmZmZmZmZ ddlmZ  ej<                  e«      Z dZ!dZ"g d¢Z#e G d„ de«      «       Z$e G d„ de«      «       Z% G d„ dejL                  «      Z' G d„ dejL                  «      Z( G d„ dejL                  «      Z) G d„ dejL                  «      Z*d@dejV                  de,de-dejV                  fd „Z. G d!„ d"ejL                  «      Z/ G d#„ d$ejL                  «      Z0 G d%„ d&ejL                  «      Z1 G d'„ d(ejL                  «      Z2 G d)„ d*ejL                  «      Z3 G d+„ d,ejL                  «      Z4 G d-„ d.e«      Z5d/Z6d0Z7 ed1e6«       G d2„ d3e5«      «       Z8d4ejV                  d5e9dejV                  fd6„Z:d4ejV                  d7e9d8e9dejV                  fd9„Z; G d:„ d;ejL                  «      Z< ed<e6«       G d=„ d>e5«      «       Z=g d?¢Z>y)AzPyTorch SegGpt model.é    N)Ú	dataclass)ÚDictÚListÚOptionalÚTupleÚUnion)Únn)Ú
functionalé   )ÚACT2FN)ÚPreTrainedModel)ÚModelOutputÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsÚ	torch_inté   )ÚSegGptConfigr   zBAAI/seggpt-vit-large)r   i€  iÀ  c                   óº   — e Zd ZU dZej
                  ed<   dZee	ej
                        ed<   dZ
ee	ej
                        ed<   dZee	ej
                        ed<   y)ÚSegGptEncoderOutputaÞ  
    Output type of [`SegGptEncoderOutput`].
    Args:
        last_hidden_state (`torch.FloatTensor` of shape `(batch_size, patch_height, patch_width, hidden_size)`):
            Sequence of hidden-states at the output of the last layer of the model.
        hidden_states (`Tuple[torch.FloatTensor]`, `optional`, returned when `config.output_hidden_states=True`):
            Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each layer)
            of shape `(batch_size, patch_height, patch_width, hidden_size)`.
        attentions (`Tuple[torch.FloatTensor]`, `optional`, returned when `config.output_attentions=True`):
            Tuple of *torch.FloatTensor* (one for each layer) of shape
            `(batch_size, num_heads, seq_len, seq_len)`.
        intermediate_hidden_states (`Tuple[torch.FloatTensor]`, *optional*, returned when `config.intermediate_hidden_state_indices` is set):
            Tuple of `torch.FloatTensor` of shape `(batch_size, patch_height, patch_width, hidden_size)`.
            Each element in the Tuple corresponds to the output of the layer specified in `config.intermediate_hidden_state_indices`.
            Additionaly, each feature passes through a LayerNorm.
    Úlast_hidden_stateNÚhidden_statesÚ
attentionsÚintermediate_hidden_states)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚtorchÚFloatTensorÚ__annotations__r   r   r   r   r   © ó    úh/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/seggpt/modeling_seggpt.pyr   r   1   sd   … ñð" ×(Ñ(Ó(Ø8<€M�8˜E %×"3Ñ"3Ñ4Ñ5Ó<Ø59€J�˜˜u×0Ñ0Ñ1Ñ2Ó9ØEIÐ ¨¨u×/@Ñ/@Ñ)AÑ BÔIr$   r   c                   ó¾   — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   dZ
eeej                        ed<   dZeeej                        ed<   y)ÚSegGptImageSegmentationOutputaT  
    Output type of [`SegGptImageSegmentationOutput`].

    Args:
        loss (`torch.FloatTensor`, *optional*, returned when `labels` is provided):
            The loss value.
        pred_masks (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            The predicted masks.
        hidden_states (`Tuple[torch.FloatTensor]`, `optional`, returned when `config.output_hidden_states=True`):
            Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each layer)
            of shape `(batch_size, patch_height, patch_width, hidden_size)`.
        attentions (`Tuple[torch.FloatTensor]`, `optional`, returned when `config.output_attentions=True`):
            Tuple of `torch.FloatTensor` (one for each layer) of shape
            `(batch_size, num_heads, seq_len, seq_len)`.
    NÚlossÚ
pred_masksr   r   )r   r   r   r   r(   r   r    r!   r"   r)   r   r   r   r#   r$   r%   r'   r'   J   sg   … ñð  )-€Dˆ(�5×$Ñ$Ñ
%Ó,Ø.2€J�˜×*Ñ*Ñ+Ó2Ø8<€M�8˜E %×"3Ñ"3Ñ4Ñ5Ó<Ø59€J�˜˜u×0Ñ0Ñ1Ñ2Ô9r$   r'   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚSegGptPatchEmbeddingszì
    This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
    `hidden_states` (patch embeddings) of shape `(batch_size, seq_length, hidden_size)` to be consumed by a
    Transformer.
    c                 óÌ  •— t         ‰| �  «        |j                  |j                  }}|j                  |j
                  }}t        |t        j                  j                  «      r|n||f}t        |t        j                  j                  «      r|n||f}|d   |d   z  |d   |d   z  z  }|| _        || _        || _        || _
        t        j                  ||||¬«      | _        y )Nr   r   )Úkernel_sizeÚstride)ÚsuperÚ__init__Ú
image_sizeÚ
patch_sizeÚnum_channelsÚhidden_sizeÚ
isinstanceÚcollectionsÚabcÚIterableÚnum_patchesr	   ÚConv2dÚ
projection)ÚselfÚconfigr1   r2   r3   r4   r9   Ú	__class__s          €r%   r0   zSegGptPatchEmbeddings.__init__j   sÔ   ø€ Ü‰ÑÔØ!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ø$*×$7Ñ$7¸×9KÑ9K�kˆÜ#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔäŸ)™) L°+È:Ð^hÔiˆ�r$   c                 óN  — |j                   \  }}}}|| j                  k7  rt        d«      ‚|| j                  d   k7  s|| j                  d   k7  r2t        d|› d|› d| j                  d   › d| j                  d   › d�	«      ‚| j	                  |«      j                  ddd	d«      }|S )
NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r   r   zInput image size (Ú*z) doesn't match model (ú).é   r   )Úshaper3   Ú
ValueErrorr1   r;   Úpermute)r<   Úpixel_valuesÚ
batch_sizer3   ÚheightÚwidthÚ
embeddingss          r%   ÚforwardzSegGptPatchEmbeddings.forwardx   sÅ   € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ø˜4×,Ñ,Ò,ÜØwóð ð �T—_‘_ QÑ'Ò'¨5°D·O±OÀAÑ4FÒ+FÜØ$ V H¨A¨e¨WÐ4KÈDÏOÉOÐ\]ÑL^ÐK_Ð_`Ðae×apÑapÐqrÑasÐ`tÐtvÐwóð ð —_‘_ \Ó2×:Ñ:¸1¸aÀÀAÓFˆ
ØÐr$   )r   r   r   r   r0   rK   Ú__classcell__©r>   s   @r%   r+   r+   c   s   ø„ ñôjör$   r+   c                   óÒ   ‡ — e Zd ZdZdeddfˆ fd„Zdededej                  fd„Z		 	 dd	ej                  d
ej                  de
ej                     de
e   dej                  f
d„Zˆ xZS )ÚSegGptEmbeddingszX
    Construct the embeddings from patch, position embeddings for input and prompt.
    r=   ÚreturnNc                 ó~  •— t         ‰| �  «        t        j                  t	        j
                  ddd|j                  «      «      | _        t        j                  t	        j
                  ddd|j                  «      «      | _        t        j                  t	        j
                  ddd|j                  «      «      | _	        t        j                  t	        j
                  ddd|j                  «      «      | _
        t        j                  t	        j
                  ddd|j                  «      «      | _        t        |«      | _        |j                  |j                  z  dz  dz   }t        j                  t	        j                   d||j                  «      «      | _        t        j$                  |j&                  «      | _        y )Nr   rB   )r/   r0   r	   Ú	Parameterr    Úzerosr4   Ú
mask_tokenÚsegment_token_inputÚsegment_token_promptÚtype_token_semanticÚtype_token_instancer+   Úpatch_embeddingsÚpretrain_image_sizer2   ÚrandnÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropout)r<   r=   Únum_positionsr>   s      €r%   r0   zSegGptEmbeddings.__init__‹   s3  ø€ Ü‰ÑÔäŸ,™,¤u§{¡{°1°a¸¸F×<NÑ<NÓ'OÓPˆŒÜ#%§<¡<´·±¸A¸qÀ!ÀV×EWÑEWÓ0XÓ#YˆÔ Ü$&§L¡L´·±¸QÀÀ1Àf×FXÑFXÓ1YÓ$ZˆÔ!ä#%§<¡<´·±¸A¸qÀ!ÀV×EWÑEWÓ0XÓ#YˆÔ Ü#%§<¡<´·±¸A¸qÀ!ÀV×EWÑEWÓ0XÓ#YˆÔ ä 5°fÓ =ˆÔà×3Ñ3°v×7HÑ7HÑHÈQÑNÐQRÑRˆÜ#%§<¡<´·±¸A¸}Èf×N`ÑN`Ó0aÓ#bˆÔ Ü—z‘z &×"<Ñ"<Ó=ˆ�r$   rH   rI   c                 ó„  — | j                   d d …dd …f   }|j                  d   }t        |dz  «      }t        j                  j                  «       s
||k7  s||k7  rSt        j                  |j                  d||d«      j                  dddd«      ||fdd¬	«      }|j                  dddd«      S |j                  d||d«      S )
Nr   ç      à?éÿÿÿÿr   r   rB   ÚbicubicF)ÚsizeÚmodeÚalign_corners)
r\   rC   r   r    ÚjitÚ
is_tracingÚFÚinterpolateÚreshaperE   )r<   rH   rI   Úpatch_pos_embedr9   Úpretrain_patch_sizes         r%   Úinterpolate_pos_encodingz)SegGptEmbeddings.interpolate_pos_encoding›   sÒ   € Ø×2Ñ2²1°a±b°5Ñ9ˆØ%×+Ñ+¨AÑ.ˆÜ'¨°SÑ(8Ó9Ðô �9‰9×ÑÔ!Ð%8¸FÒ%BÐFYÐ]bÒFbÜŸm™mØ×'Ñ'¨Ð+>Ð@SÐUWÓX×`Ñ`ÐabÐdeÐghÐjkÓlØ˜e�_ØØ#ô	ˆOð #×*Ñ*¨1¨a°°AÓ6Ð6à"×*Ñ*¨1¨f°e¸RÓ@Ð@r$   rF   Úprompt_pixel_valuesÚbool_masked_posÚembedding_typec                 óR  — | j                  |«      }| j                  |«      }|j                  \  }}}	}
| j                  j                  |||	d«      }|j	                  d«      j                  |«      j                  d||	d«      }|d|z
  z  ||z  z   }|�|nd}| j                  ||	«      }|| j                  z   }|| j                  z   }||z   }||z   }|dk(  r| j                  }n |dk(  r| j                  }nt        d|› �«      ‚||z   }||z   }t        j                  ||fd¬«      }|S )Nrc   r   ÚinstanceÚsemanticzBEmbedding type should be either 'semantic' or 'instance', but got r   ©Údim)rY   rC   rT   ÚexpandÚ	unsqueezeÚtype_asrl   ro   rU   rV   rW   rX   rD   r    Úcat)r<   rF   rp   rq   rr   Úinput_embeddingsÚprompt_embeddingsrG   Úpatch_heightÚpatch_widthÚ_rT   ÚwÚ	pos_embedÚtype_embeddingrJ   s                   r%   rK   zSegGptEmbeddings.forward­   sh  € ð  ×0Ñ0°Ó>ÐØ ×1Ñ1Ð2EÓFÐà3C×3IÑ3IÑ0ˆ
�L +¨qà—_‘_×+Ñ+¨J¸ÀkÐSUÓVˆ
à×%Ñ% bÓ)×1Ñ1°*Ó=×EÑEÀbÈ,ÐXcÐefÓgˆØ-°°Q±Ñ7¸*Àq¹.ÑHÐà+9Ð+E™È:ˆð ×1Ñ1°,ÀÓLˆ	ð ,¨d×.FÑ.FÑFÐØ-°×0IÑ0IÑIÐð ,¨iÑ7ÐØ-°	Ñ9Ðð ˜ZÒ'Ø!×5Ñ5‰NØ˜zÒ)Ø!×5Ñ5‰NäÐaÐbpÐaqÐrÓsÐsà+¨nÑ<ÐØ-°Ñ>Ðä—Y‘YÐ 0Ð2CÐDÈ!ÔLˆ
àÐr$   )NN)r   r   r   r   r   r0   Úintr    ÚTensorro   r   Ú
BoolTensorÚstrrK   rL   rM   s   @r%   rO   rO   †   s•   ø„ ñð>˜|ð >°õ >ð A¨sð A¸3ð AÀ5Ç<Á<ó Að, 7;Ø(,ñ+à—l‘lð+ð #Ÿ\™\ð+ð " %×"2Ñ"2Ñ3ð	+ð
 ! ™ð+ð 
�‰÷+r$   rO   c                   ó8  ‡ — e Zd ZdZˆ fd„Zdededej                  dej                  fd„Zdej                  d	ej                  d
ej                  dej                  de	eef   de	eef   dej                  fd„Z
ddej                  dej                  fd„Zˆ xZS )ÚSegGptAttentionz=Multi-head Attention block with relative position embeddings.c                 ó¶  •— t         ‰| �  «        |j                  |j                  }}t	        |t
        j                  j                  «      r|n||f}t	        |t
        j                  j                  «      r|n||f}|d   |j                  z  |d   |j                  z  f}|j                  |j                  z  }|j                  | _	        |dz  | _
        t        j                  |j                  |j                  dz  |j                  ¬«      | _        t        j                  |j                  |j                  «      | _        |j                   | _        | j                   r||€t#        d«      ‚t        j$                  t'        j(                  d|d   z  dz
  |«      «      | _        t        j$                  t'        j(                  d|d   z  dz
  |«      «      | _        y y )Nr   r   g      à¿r   ©ÚbiaszBInput size must be provided if using relative positional encoding.rB   )r/   r0   r1   r2   r5   r6   r7   r8   r4   Únum_attention_headsÚscaler	   ÚLinearÚqkv_biasÚqkvÚprojÚ use_relative_position_embeddingsrD   rR   r    rS   Ú	rel_pos_hÚ	rel_pos_w)r<   r=   r1   r2   Ú
input_sizeÚhead_dimr>   s         €r%   r0   zSegGptAttention.__init__Þ   s…  ø€ Ü‰ÑÔØ!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
à  ‘m v×'8Ñ'8Ñ8¸*ÀQ¹-È6×K\ÑK\Ñ:\Ð]ˆ
Ø×%Ñ%¨×)CÑ)CÑCˆà#)×#=Ñ#=ˆÔ Ø˜t‘^ˆŒ
ä—9‘9˜V×/Ñ/°×1CÑ1CÀaÑ1GÈfÏoÉoÔ^ˆŒÜ—I‘I˜f×0Ñ0°&×2DÑ2DÓEˆŒ	à06×0WÑ0WˆÔ-Ø×0Ò0ØÐ!Ü Ð!eÓfÐfô  Ÿ\™\¬%¯+©+°a¸*ÀQ¹-Ñ6GÈ!Ñ6KÈXÓ*VÓWˆDŒNÜŸ\™\¬%¯+©+°a¸*ÀQ¹-Ñ6GÈ!Ñ6KÈXÓ*VÓWˆD�Nð 1r$   Úq_sizeÚk_sizeÚrel_posrP   c                 ó  — t        dt        ||«      z  dz
  «      }t        j                  |j	                  d|j
                  d   d«      j                  ddd«      |d¬«      }|j	                  d|«      j                  dd«      }t        j                  |«      dd…df   t        ||z  d«      z  }t        j                  |«      ddd…f   t        ||z  d«      z  }||z
  |dz
  t        ||z  d«      z  z   }||j                  «          S )	aÁ  
        Get relative positional embeddings according to the relative positions of
            query and key sizes.

        Args:
            q_size (int):
                size of the query.
            k_size (int):
                size of key k.
            rel_pos (`torch.Tensor`):
                relative position embeddings (L, channel).

        Returns:
            Extracted positional embeddings according to relative positions.
        rB   r   r   rc   Úlinear)re   rf   Nç      ð?)
r„   Úmaxrj   rk   rl   rC   rE   r    ÚarangeÚlong)	r<   r˜   r™   rš   Úmax_rel_distÚrel_pos_resizedÚq_coordsÚk_coordsÚrelative_coordss	            r%   Úget_rel_poszSegGptAttention.get_rel_posö   s  € ô  ˜1œs 6¨6Ó2Ñ2°QÑ6Ó7ˆäŸ-™-Ø�O‰O˜A˜wŸ}™}¨QÑ/°Ó4×<Ñ<¸QÀÀ1ÓEØØô
ˆð
 *×1Ñ1°"°lÓC×KÑKÈAÈqÓQˆô —<‘< Ó'ª¨4¨Ñ0´3°vÀ±ÈÓ3LÑLˆÜ—<‘< Ó'¨ªa¨Ñ0´3°vÀ±ÈÓ3LÑLˆØ# hÑ.°6¸A±:ÄÀVÈfÁ_ÐVYÓAZÑ2ZÑZˆà˜×3Ñ3Ó5Ñ6Ð6r$   ÚattnÚqueryr”   r•   c                 ó¶  — |\  }}|\  }	}
| j                  ||	|«      }| j                  ||
|«      }|j                  \  }}}|j                  ||||«      }t        j                  d||«      }t        j                  d||«      }|j                  ||||	|
«      }||dd…dd…dd…dd…df   z   |dd…dd…dd…ddd…f   z   }|j                  |||z  |	|
z  «      }|S )aò  
        Calculate decomposed Relative Positional Embeddings from :paper:`mvitv2`.
        https://github.com/facebookresearch/mvit/blob/19786631e330df9f3622e5402b4a419a263a2c80/mvit/models/attention.py

        Args:
            attn (`torch.Tensor`):
                attention map.
            query (`torch.Tensor`):
                query q in the attention layer with shape (batch_size, query_height * query_width, channel).
            rel_pos_h (`torch.Tensor`):
                relative position embeddings (Lh, channel) for height axis.
            rel_pos_w (`torch.Tensor`):
                relative position embeddings (Lw, channel) for width axis.
            q_size (tuple):
                spatial sequence size of query q with (query_height, query_width).
            k_size (tuple):
                spatial sequence size of key k with (key_height, key_width).

        Returns:
            attn (`torch.Tensor`):
                attention map with added relative positional embeddings.
        zbhwc,hkc->bhwkzbhwc,wkc->bhwkN)r¦   rC   rl   r    Úeinsum)r<   r§   r¨   r”   r•   r˜   r™   Úquery_heightÚquery_widthÚ
key_heightÚ	key_widthÚrelative_position_heightÚrelative_position_widthrG   r€   rw   Úreshaped_queryÚrel_hÚrel_ws                      r%   Úadd_decomposed_rel_posz&SegGptAttention.add_decomposed_rel_pos  sõ   € ð> %+Ñ!ˆ�kØ &Ñˆ
�IØ#'×#3Ñ#3°LÀ*ÈiÓ#XÐ Ø"&×"2Ñ"2°;À	È9Ó"UÐà"Ÿ[™[Ñˆ
�A�sØŸ™ z°<ÀÈcÓRˆÜ—‘Ð-¨~Ð?WÓXˆÜ—‘Ð-¨~Ð?VÓWˆØ�|‰|˜J¨°kÀ:ÈyÓYˆØ�ešAšq¢!¢Q¨Ð,Ñ-Ñ-°²aººA¸tÂQÐ6FÑ0GÑGˆØ�|‰|˜J¨°{Ñ(BÀJÐQZÑDZÓ[ˆØˆr$   r   c           	      óÆ  — |j                   \  }}}}| j                  |«      j                  |||z  d| j                  d«      j	                  ddddd«      }|j                  d|| j                  z  ||z  d«      j                  d«      \  }}	}
|| j                  z  |	j                  dd«      z  }| j                  r.| j                  ||| j                  | j                  ||f||f«      }t        j                  j                  j                  |t        j                   d¬«      j#                  |j$                  «      }|rE|j'                  || j                  ||z  d«      }|j'                  || j                  z  ||z  d«      }nd }||
z  j                  || j                  ||d«      }|j	                  ddddd«      j                  |||d«      }| j)                  |«      }||fS )	Nr   rc   rB   r   r   é   éþÿÿÿ)Údtyperw   )rC   r‘   rl   r�   rE   ÚunbindrŽ   Ú	transposer“   r´   r”   r•   r    r	   r
   ÚsoftmaxÚfloat32Útor¸   Úviewr’   )r<   r   Úoutput_attentionsrG   rH   rI   r€   r‘   r¨   ÚkeyÚvalueÚattn_weightsÚattn_weights_reshapedÚattn_outputs                 r%   rK   zSegGptAttention.forwardC  sæ  € Ø'4×':Ñ':Ñ$ˆ
�F˜E 1ð �H‰H�]Ó#ß‰W�Z ¨%¡°°D×4LÑ4LÈbÓQß‰W�Q˜˜1˜a Ó#ð 	ð  ŸK™K¨¨:¸×8PÑ8PÑ+PÐRXÐ[`ÑR`ÐbdÓe×lÑlÐmnÓoÑˆˆs�Eà §
¡
Ñ*¨c¯m©m¸BÀÓ.CÑCˆà×0Ò0Ø×6Ñ6Ø˜e T§^¡^°T·^±^ÀfÈeÀ_ÐW]Ð_dÐVeóˆLô —x‘x×*Ñ*×2Ñ2°<ÄuÇ}Á}ÐZ\Ð2Ó]×`Ñ`Ðaf×alÑalÓmˆáð
 %1×$5Ñ$5°jÀ$×BZÑBZÐ\bÐejÑ\jÐlnÓ$oÐ!Ø0×5Ñ5°jÀ4×C[ÑC[Ñ6[Ð]cÐfkÑ]kÐmoÓp‰Là$(Ð!à# eÑ+×4Ñ4°ZÀ×AYÑAYÐ[aÐchÐjlÓmˆØ!×)Ñ)¨!¨Q°°1°aÓ8×@Ñ@ÀÈVÐUZÐ\^Ó_ˆà—i‘i Ó,ˆàÐ2Ð3Ð3r$   )F)r   r   r   r   r0   r„   r    r…   r¦   r   r´   rK   rL   rM   s   @r%   r‰   r‰   Û   s¿   ø„ ÙGôXð07 #ð 7¨sð 7¸U¿\¹\ð 7ÈeÏlÉló 7ð@+à�l‰lð+ð �|‰|ð+ð —<‘<ð	+ð
 —<‘<ð+ð �c˜3�h‘ð+ð �c˜3�h‘ð+ð 
�‰ó+ñZ#4 U§\¡\ð #4ÈuÏ|É|÷ #4r$   r‰   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )Ú	SegGptMlpc                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  «      | _        t        |j                     | _
        y ©N)r/   r0   r	   r�   r4   Úmlp_dimÚlin1Úlin2r   Ú
hidden_actÚact©r<   r=   r>   s     €r%   r0   zSegGptMlp.__init__k  sX   ø€ Ü‰ÑÔÜ—I‘I˜f×0Ñ0°&·.±.ÓAˆŒ	Ü—I‘I˜fŸn™n¨f×.@Ñ.@ÓAˆŒ	Ü˜&×+Ñ+Ñ,ˆ�r$   r   rP   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rÈ   )rÊ   rÍ   rË   ©r<   r   s     r%   rK   zSegGptMlp.forwardq  s2   € ØŸ	™	 -Ó0ˆØŸ™ Ó/ˆØŸ	™	 -Ó0ˆØÐr$   )r   r   r   r0   r    r…   rK   rL   rM   s   @r%   rÆ   rÆ   j  s#   ø„ ô-ð U§\¡\ð °e·l±l÷ r$   rÆ   ÚinputÚ	drop_probÚtrainingrP   c                 ó  — |dk(  s|s| S d|z
  }| j                   d   fd| j                  dz
  z  z   }|t        j                  || j                  | j
                  ¬«      z   }|j                  «        | j                  |«      |z  }|S )aF  
    Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

    Comment by Ross Wightman: This is the same as the DropConnect impl I created for EfficientNet, etc networks,
    however, the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper...
    See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for changing the
    layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use 'survival rate' as the
    argument.
    ç        r   r   )r   ©r¸   Údevice)rC   Úndimr    Úrandr¸   r×   Úfloor_Údiv)rÑ   rÒ   rÓ   Ú	keep_probrC   Úrandom_tensorÚoutputs          r%   Ú	drop_pathrß   y  s�   € ð �CÒ™xØˆØ�I‘€IØ�[‰[˜‰^Ð ¨¯
©
°Q©Ñ 7Ñ7€EØ¤§
¡
¨5¸¿¹ÈEÏLÉLÔ YÑY€MØ×ÑÔØ�Y‰Y�yÓ! MÑ1€FØ€Mr$   c                   óx   ‡ — e Zd ZdZd	dee   ddfˆ fd„Zdej                  dej                  fd„Z	de
fd„Zˆ xZS )
ÚSegGptDropPathzXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).NrÒ   rP   c                 ó0   •— t         ‰| �  «        || _        y rÈ   )r/   r0   rÒ   )r<   rÒ   r>   s     €r%   r0   zSegGptDropPath.__init__‘  s   ø€ Ü‰ÑÔØ"ˆ�r$   r   c                 óD   — t        || j                  | j                  «      S rÈ   )rß   rÒ   rÓ   rÐ   s     r%   rK   zSegGptDropPath.forward•  s   € Ü˜¨¯©¸¿¹ÓFÐFr$   c                 ó8   — dj                  | j                  «      S )Nzp={})ÚformatrÒ   ©r<   s    r%   Ú
extra_reprzSegGptDropPath.extra_repr˜  s   € Ø�}‰}˜TŸ^™^Ó,Ð,r$   rÈ   )r   r   r   r   r   Úfloatr0   r    r…   rK   r‡   rç   rL   rM   s   @r%   rá   rá   Ž  sG   ø„ Ùbñ# (¨5¡/ð #¸Tõ #ðG U§\¡\ð G°e·l±ló Gð-˜C÷ -r$   rá   c                   ó¸   ‡ — e Zd Zdededdfˆ fd„Z	 	 ddej                  dede	d	e	de
eej                  ej                  f   eej                     f   f
d
„Zˆ xZS )ÚSegGptLayerr=   Údrop_path_raterP   Nc                 ót  •— t         ‰| �  «        t        |«      | _        t	        |«      | _        |dkD  rt        |«      nt        j                  «       | _	        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        y )NrÕ   ©Úeps)r/   r0   r‰   Ú	attentionrÆ   Úmlprá   r	   ÚIdentityrß   Ú	LayerNormr4   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_after)r<   r=   rë   r>   s      €r%   r0   zSegGptLayer.__init__�  sƒ   ø€ Ü‰ÑÔÜ(¨Ó0ˆŒÜ˜VÓ$ˆŒØ;IÈCÒ;Oœ¨Ô7ÔUW×U`ÑU`ÓUbˆŒÜ "§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÔÜ!Ÿ|™|¨F×,>Ñ,>ÀF×DYÑDYÔZˆÕr$   r   Úensemble_condÚfeature_ensembler¿   c                 ó¾  — | j                  | j                  |«      |¬«      }|d   }|dd  }|rÜ|j                  d   dz  |k\  rÇ|j                  |j                  d   dz  d¬«      \  }}	|dk(  ra|j                  d   dz  }
|	j	                  d|
d«      }	|	j                  dd¬«      j                  |	«      }	 |	j                  |j                  Ž }	n"|	j                  dd¬«      j                  |	«      }	t        j                  ||	gd¬«      }| j                  |«      |z   }|}| j                  |«      }| j                  |«      }|| j                  |«      z   }|f|z   }|S )	N)r¿   r   r   rB   rv   rc   T)rw   Úkeepdim)rï   rô   rC   Úsplitrl   ÚmeanÚ	expand_asr    r{   rß   rõ   rð   )r<   r   rö   r÷   r¿   Úself_attention_outputsÚattention_outputÚoutputsÚpromptÚinputsÚnum_promptsÚresiduals               r%   rK   zSegGptLayer.forward¥  sz  € ð "&§¡Ø×!Ñ! -Ó0Ø/ð "0ó "
Ðð 2°!Ñ4ÐØ(¨¨Ð,ˆáÐ 0× 6Ñ 6°qÑ 9¸QÑ >À-Ò OØ-×3Ñ3Ð4D×4JÑ4JÈ1Ñ4MÐQRÑ4RÐXYÐ3ÓZ‰NˆF�FØ Ò!Ø.×4Ñ4°QÑ7¸1Ñ<�ØŸ™¨¨;¸Ó;�ØŸ™¨°D˜Ó9×CÑCÀFÓK�Ø'˜Ÿ™¨¯©Ð6‘àŸ™¨°D˜Ó9×CÑCÀFÓK�Ü$Ÿy™y¨&°&Ð)9¸qÔAÐð Ÿ™Ð'7Ó8¸=ÑHˆØ ˆà×,Ñ,¨]Ó;ˆØŸ™ Ó/ˆØ  4§>¡>°-Ó#@Ñ@ˆà Ð" WÑ,ˆàˆr$   )FF)r   r   r   r   rè   r0   r    r…   r„   Úboolr   r   rK   rL   rM   s   @r%   rê   rê   œ  s‡   ø„ ð[˜|ð [¸Uð [Àtõ [ð "'Ø"'ñ#à—|‘|ð#ð ð#ð ð	#ð
  ð#ð 
ˆu�U—\‘\ 5§<¡<Ð/Ñ0°%¸¿¹Ñ2EÐEÑ	F÷#r$   rê   c                   óp   ‡ — e Zd Zdeddfˆ fd„Z	 	 	 	 ddej                  dededed	edee	e
f   fd
„Zˆ xZS )ÚSegGptEncoderr=   rP   Nc           
      óÎ  •— t         ‰| �  «        || _        t        j                  d|j
                  |j                  «      D �cg c]  }|j                  «       ‘Œ }}t        j                  t        |j                  «      D �cg c]  }t        |||   «      ‘Œ c}«      | _        t        j                  |j                  |j                  ¬«      | _        d| _        y c c}w c c}w )Nr   rí   F)r/   r0   r=   r    Úlinspacerë   Únum_hidden_layersÚitemr	   Ú
ModuleListÚrangerê   Úlayersrò   r4   ró   Ú	layernormÚgradient_checkpointing)r<   r=   ÚxÚdprÚir>   s        €r%   r0   zSegGptEncoder.__init__Ì  s¨   ø€ Ü‰ÑÔØˆŒÜ!&§¡°°6×3HÑ3HÈ&×JbÑJbÓ!cÖd˜Aˆq�v‰v�xÐdˆÐdÜ—m‘mÌ%ÐPV×PhÑPhÓJiÖ$jÀQ¤[°¸¸Q¹Õ%@Ò$jÓkˆŒÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒØ&+ˆÕ#ùò eùÚ$js   ÁCÂC"r   r÷   r¿   Úoutput_hidden_statesÚreturn_dictc                 ó¦  — |rdnd }|rdnd }g }t        | j                  «      D ]ý  \  }	}
|r||fz   }| j                  j                  |	kD  rdnd}| j                  r,| j
                  r | j                  |
j                  ||||«      }n |
||||«      }|d   }|	| j                  j                  k(  r.|d |j                  d   dz   ||j                  d   dz  d  z   dz  }|	| j                  j                  v r |j                  | j                  |«      «       |sŒõ||d   fz   }Œÿ |r||fz   }|st        d„ ||||fD «       «      S t        ||||¬«      S )Nr#   rB   r   r   rb   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wrÈ   r#   )Ú.0Úvs     r%   ú	<genexpr>z(SegGptEncoder.forward.<locals>.<genexpr>  s   è ø€ ò àØ�=ô ñùs   ‚)r   r   r   r   )Ú	enumerater  r=   Úmerge_indexr  rÓ   Ú_gradient_checkpointing_funcÚ__call__rC   Ú!intermediate_hidden_state_indicesÚappendr  Útupler   )r<   r   r÷   r¿   r  r  Úall_hidden_statesÚall_self_attentionsr   r  Úlayer_modulerö   Úlayer_outputss                r%   rK   zSegGptEncoder.forwardÔ  s¨  € ñ #7™B¸DÐÙ$5™b¸4ÐØ%'Ð"ä(¨¯©Ó5ò 	P‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!ð "&§¡×!8Ñ!8¸1Ò!<™AÀ!ˆMà×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)Ø!Ø!Ø$Ø%ó!‘ñ !-¨]¸MÐK[Ð]nÓ o�à)¨!Ñ,ˆMà�D—K‘K×+Ñ+Ò+à!Ð"? M×$7Ñ$7¸Ñ$:¸aÑ$?Ð@À=ÐQ^×QdÑQdÐefÑQgÐklÑQlÐQnÐCoÑoØñ!�ð �D—K‘K×AÑAÑAØ*×1Ñ1°$·.±.ÀÓ2OÔPâ Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð;	Pñ>  Ø 1°]Ð4DÑ DÐáÜñ à'Ð):Ð<OÐQkÐlôó ð ô
 #Ø+Ø+Ø*Ø'Aô	
ð 	
r$   )FFFT)r   r   r   r   r0   r    r…   r  r   r   r   rK   rL   rM   s   @r%   r  r  Ë  sr   ø„ ð,˜|ð ,°õ ,ð "'Ø"'Ø%*Ø ñ9
à—|‘|ð9
ð ð9
ð  ð	9
ð
 #ð9
ð ð9
ð 
ˆuÐ)Ð)Ñ	*÷9
r$   r  c                   ó\   ‡ — e Zd ZdZdˆ fd„	Zdej                  dej                  fd„Zˆ xZS )ÚSegGptLayerNormaA  LayerNorm that supports two data formats: channels_last (default) or channels_first.
    The ordering of the dimensions in the inputs. channels_last corresponds to inputs with shape (batch_size, height,
    width, channels) while channels_first corresponds to inputs with shape (batch_size, channels, height, width).
    c                 óN  •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        t        j                  t	        j                  |«      «      | _        || _	        || _
        | j                  dvrt        d| j                  › �«      ‚|f| _        y )N)Úchannels_lastÚchannels_firstzUnsupported data format: )r/   r0   r	   rR   r    ÚonesÚweightrS   rŒ   rî   Údata_formatÚNotImplementedErrorÚnormalized_shape)r<   r.  rî   r,  r>   s       €r%   r0   zSegGptLayerNorm.__init__  s…   ø€ Ü‰ÑÔÜ—l‘l¤5§:¡:Ð.>Ó#?Ó@ˆŒÜ—L‘L¤§¡Ð-=Ó!>Ó?ˆŒ	ØˆŒØ&ˆÔØ×ÑÐ#FÑFÜ%Ð(AÀ$×BRÑBRÐASÐ&TÓUÐUØ!1Ð 3ˆÕr$   r  rP   c                 ód  — | j                   dk(  rWt        j                  j                  j	                  || j
                  | j                  | j                  | j                  «      }|S | j                   dk(  rº|j                  }|j                  «       }|j                  dd¬«      }||z
  j                  d«      j                  dd¬«      }||z
  t        j                  || j                  z   «      z  }|j                  |¬«      }| j                  d d …d d f   |z  | j                  d d …d d f   z   }|S )Nr(  r)  r   T)rù   rB   )r¸   )r,  r    r	   r
   Ú
layer_normr.  r+  rŒ   rî   r¸   rè   rû   ÚpowÚsqrtr½   )r<   r  Úinput_dtypeÚuÚss        r%   rK   zSegGptLayerNorm.forward!  s
  € Ø×Ñ˜Ò.Ü—‘×#Ñ#×.Ñ.¨q°$×2GÑ2GÈÏÉÐVZ×V_ÑV_Ðae×aiÑaiÓjˆAð ˆð ×ÑÐ!1Ò1ØŸ'™'ˆKØ—‘“	ˆAØ—‘�q $�Ó'ˆAØ�Q‘—‘˜A“×#Ñ# A¨tÐ#Ó4ˆAØ�Q‘œ%Ÿ*™* Q¨¯©¡\Ó2Ñ2ˆAØ—‘˜;�Ó'ˆAØ—‘šA˜t T˜MÑ*¨QÑ.°·±º1¸dÀD¸=Ñ1IÑIˆAØˆr$   )g�íµ ÷Æ°>r(  )	r   r   r   r   r0   r    r…   rK   rL   rM   s   @r%   r&  r&    s(   ø„ ñõ
4ð˜Ÿ™ð ¨%¯,©,÷ r$   r&  c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚSegGptDecoderHeadc                 óT  •— t         ‰| �  «        t        j                  |j                  |j                  dd¬«      | _        t        |j                  |j                  d¬«      | _        t        |j                     | _        t        j                  |j                  ddd¬«      | _        y )Nr   r   )r-   Úpaddingr)  )r.  rî   r,  T)r-   rŒ   )r/   r0   r	   r:   Údecoder_hidden_sizeÚconvr&  ró   r  r   rÌ   Úact_fctÚheadrÎ   s     €r%   r0   zSegGptDecoderHead.__init__0  s‰   ø€ Ü‰ÑÔÜ—I‘IØ×&Ñ&Ø×&Ñ&ØØô	
ˆŒ	ô )Ø#×7Ñ7¸V×=RÑ=RÐ`pô
ˆŒô ˜f×/Ñ/Ñ0ˆŒÜ—I‘I˜f×8Ñ8¸!ÈÐQUÔVˆ�	r$   r   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S rÈ   )r;  r  r<  r=  rÐ   s     r%   rK   zSegGptDecoderHead.forward>  s@   € ØŸ	™	 -Ó0ˆØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØŸ	™	 -Ó0ˆàÐr$   )r   r   r   r0   r    r!   rK   rL   rM   s   @r%   r7  r7  /  s   ø„ ôWð U×%6Ñ%6÷ r$   r7  c                   óv   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zdej
                  fd„Zˆ xZS )ÚSegGptDecoderc                 óB  •— t         ‰| �  «        t        j                  |j                  t        |j                  «      z  |j                  dz  |j                  z  d¬«      | _	        t        |«      | _        |j                  | _        |j                  | _        || _        y )NrB   Tr‹   )r/   r0   r	   r�   r4   Úlenr  r2   r:  Údecoder_embedr7  Údecoder_predr=   rÎ   s     €r%   r0   zSegGptDecoder.__init__H  s…   ø€ Ü‰ÑÔÜŸY™YØ×Ñ¤ V×%MÑ%MÓ!NÑNØ×Ñ˜qÑ  6×#=Ñ#=Ñ=Øô
ˆÔô
 .¨fÓ5ˆÔØ ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Øˆ�r$   r   rP   c                 ó  — |j                   \  }}}}|j                  |||| j                  | j                  | j                  «      }|j	                  dddddd«      }|j                  |d|| j                  z  || j                  z  f¬«      }|S )	Nr   é   r   r   rB   r¶   rc   ©rC   )rC   rl   r2   r:  rE   )r<   r   rG   r~   r   r€   s         r%   Ú_reshape_hidden_statesz$SegGptDecoder._reshape_hidden_statesT  sœ   € Ø3@×3FÑ3FÑ0ˆ
�L +¨qØ%×-Ñ-Ø˜ k°4·?±?ÀDÇOÁOÐUY×UmÑUmó
ˆð &×-Ñ-¨a°°A°q¸!¸QÓ?ˆØ%×-Ñ-Ø˜r <°$·/±/Ñ#AÀ;ÐQU×Q`ÑQ`ÑC`Ðað .ó 
ˆð Ðr$   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rÈ   )rC  rH  rD  rÐ   s     r%   rK   zSegGptDecoder.forward`  s8   € Ø×*Ñ*¨=Ó9ˆØ×3Ñ3°MÓBˆØ×)Ñ)¨-Ó8ˆàÐr$   )	r   r   r   r0   r    r!   rH  rK   rL   rM   s   @r%   r@  r@  G  s9   ø„ ô
ð
°E×4EÑ4Eð 
È%×J[ÑJ[ó 
ð U×%6Ñ%6÷ r$   r@  c                   ó€   — e Zd ZdZeZdZdZdZddgZ	de
ej                  ej                  ej                  f   dd	fd
„Zy	)ÚSegGptPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚmodelrF   TrO   rê   ÚmodulerP   Nc                 ó2  — | j                   j                  }t        |t        j                  t        j
                  f«      r·t        j                  j                  |j                  j                  j                  t        j                  «      d|¬«      j                  |j                  j                  «      |j                  _	        |j                  �%|j                  j                  j                  «        yyt        |t        j                   «      rJ|j                  j                  j                  «        |j                  j                  j#                  d«       yt        |t$        «      �rt        j                  j                  |j&                  j                  j                  t        j                  «      d|¬«      j                  |j&                  j                  «      |j&                  _	        t        j                  j                  |j(                  j                  j                  t        j                  «      d|¬«      j                  |j(                  j                  «      |j(                  _	        yt        |t*        «      �r�t        j                  j                  |j,                  j                  j                  t        j                  «      d|¬«      j                  |j,                  j                  «      |j,                  _	        t        j                  j                  j/                  |j0                  |¬«       t        j                  j                  j/                  |j2                  |¬«       t        j                  j                  j/                  |j4                  |¬«       t        j                  j                  j/                  |j6                  |¬«       t        j                  j                  j/                  |j8                  |¬«       yy)zInitialize the weightsrÕ   )rû   ÚstdNr�   )rO  )r=   Úinitializer_ranger5   r	   r�   r:   ÚinitÚtrunc_normal_r+  Údatar½   r    r¼   r¸   rŒ   Úzero_rò   Úfill_r‰   r”   r•   rO   r\   Únormal_rT   rU   rV   rW   rX   )r<   rM  rO  s      r%   Ú_init_weightsz#SegGptPreTrainedModel._init_weightst  sË  € à�k‰k×+Ñ+ˆÜ�fœrŸy™y¬"¯)©)Ð4Ô5ô "$§¡×!6Ñ!6°v·}±}×7IÑ7I×7LÑ7LÌUÏ]É]Ó7[ÐbeÐknÐ!6Ó!o×!rÑ!rØ—‘×#Ñ#ó"ˆF�M‰MÔð �{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜¤Õ0Ü$&§G¡G×$9Ñ$9Ø× Ñ ×%Ñ%×(Ñ(¬¯©Ó7ØØð %:ó %÷ ‰b�×!Ñ!×'Ñ'Ó(ð	 ×ÑÔ!ô %'§G¡G×$9Ñ$9Ø× Ñ ×%Ñ%×(Ñ(¬¯©Ó7ØØð %:ó %÷ ‰b�×!Ñ!×'Ñ'Ó(ð	 ×ÑÕ!ô ˜Ô 0Õ1Ü.0¯g©g×.CÑ.CØ×*Ñ*×/Ñ/×2Ñ2´5·=±=ÓAØØð /Dó /÷ ‰b�×+Ñ+×1Ñ1Ó2ð	 ×&Ñ&Ô+ô �H‰H�M‰M×!Ñ! &×"3Ñ"3¸Ð!Ô=Ü�H‰H�M‰M×!Ñ! &×"<Ñ"<À#Ð!ÔFÜ�H‰H�M‰M×!Ñ! &×"=Ñ"=À3Ð!ÔGÜ�H‰H�M‰M×!Ñ! &×"<Ñ"<À#Ð!ÔFÜ�H‰H�M‰M×!Ñ! &×"<Ñ"<À#Ð!ÕFð 2r$   )r   r   r   r   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingÚ_no_split_modulesr   r	   r�   r:   rò   rW  r#   r$   r%   rK  rK  h  sY   „ ñð
  €LØÐØ$€OØ&*Ð#Ø+¨]Ð;Ðð&G E¨"¯)©)°R·Y±YÀÇÁÐ*LÑ$Mð &GÐRVô &Gr$   rK  aH  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. Use it
    as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`SegGptConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
a   
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See [`SegGptImageProcessor.__call__`]
            for details.

        prompt_pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Prompt pixel values. Prompt pixel values can be obtained using [`AutoImageProcessor`]. See
            [`SegGptImageProcessor.__call__`] for details.

        prompt_masks (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Prompt mask. Prompt mask can be obtained using [`AutoImageProcessor`]. See [`SegGptImageProcessor.__call__`] for
            details.

        bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, num_patches)`, *optional*):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).

        feature_ensemble (`bool`, *optional*):
            Boolean indicating whether to use feature ensemble or not. If `True`, the model will use feature ensemble
            if we have at least two prompts. If `False`, the model will not use feature ensemble. This argument should
            be considered when doing few-shot inference on an input image i.e. more than one prompt for the same image.

        embedding_type (`str`, *optional*):
            Embedding type. Indicates whether the prompt is a semantic or instance embedding. Can be either
            instance or semantic.

        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
z`The bare SegGpt Model transformer outputting raw hidden-states without any specific head on top.c                   ó\  ‡ — e Zd Zdefˆ fd„Zdefd„Zdeee	e   f   ddfd„Z
 ee«       eee¬«      	 	 	 	 	 	 	 dd	ej"                  d
ej"                  dej"                  deej&                     dee   dee   deej,                     dee   dee   dee   deeef   fd„«       «       Zˆ xZS )ÚSegGptModelr=   c                 ó’   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        | j                  «        y rÈ   )r/   r0   r=   rO   rJ   r  ÚencoderÚ	post_initrÎ   s     €r%   r0   zSegGptModel.__init__Ò  s;   ø€ Ü‰Ñ˜Ô ØˆŒä*¨6Ó2ˆŒÜ$ VÓ,ˆŒð 	�‰Õr$   rP   c                 ó.   — | j                   j                  S rÈ   )rJ   rY   ræ   s    r%   Úget_input_embeddingsz SegGptModel.get_input_embeddingsÜ  s   € Ø�‰×/Ñ/Ð/r$   Úheads_to_pruneNc                 ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 y)z�
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        N)Úitemsr`  Úlayerrï   Úprune_heads)r<   rd  rg  Úheadss       r%   Ú_prune_headszSegGptModel._prune_headsß  sE   € ð
 +×0Ñ0Ó2ò 	C‰LˆE�5Ø�L‰L×Ñ˜uÑ%×/Ñ/×;Ñ;¸EÕBñ	Cr$   ©Úoutput_typerX  rF   rp   Úprompt_masksrq   r÷   rr   Úlabelsr¿   r  r  c                 óâ  — |�|n| j                   j                  }|	�|	n| j                   j                  }	|
�|
n| j                   j                  }
|�|nd}| j                  j
                  j                  j                  j                  }|j                  |«      }|j                  |«      }t        j                  ||fd¬«      }|€t        j                  ||fd¬«      nt        j                  ||fd¬«      }|€|�t        j                  d«       |€±| j                  j
                  j                  }t        j                  |dz  t        j                   |j"                  ¬«      }t        j$                  ||dz  z
  t        j                   |j"                  ¬«      }t        j                  ||g«      }|j'                  d«      }| j	                  ||||¬«      }| j)                  ||||	|
¬«      }|S )	aÈ  
        labels (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`, `optional`):
            Ground truth mask for input images.

        Returns:

        Examples:

        ```python
        >>> from transformers import SegGptImageProcessor, SegGptModel
        >>> from PIL import Image
        >>> import requests

        >>> image_input_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_2.jpg"
        >>> image_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1.jpg"
        >>> mask_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1_target.png"

        >>> image_input = Image.open(requests.get(image_input_url, stream=True).raw)
        >>> image_prompt = Image.open(requests.get(image_prompt_url, stream=True).raw)
        >>> mask_prompt = Image.open(requests.get(mask_prompt_url, stream=True).raw).convert("L")

        >>> checkpoint = "BAAI/seggpt-vit-large"
        >>> model = SegGptModel.from_pretrained(checkpoint)
        >>> image_processor = SegGptImageProcessor.from_pretrained(checkpoint)

        >>> inputs = image_processor(images=image_input, prompt_images=image_prompt, prompt_masks=mask_prompt, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> list(outputs.last_hidden_state.shape)
        [1, 56, 28, 1024]
        ```
        FrB   rv   zšLabels were provided, but bool_masked_pos were not. It will be set to default value. If you're training the model, make sure to provide a bool_masked_pos.rÖ   r   )rr   rq   )r÷   r¿   r  r  )r=   r¿   r  Úuse_return_dictrJ   rY   r;   r+  r¸   r½   r    r{   ÚloggerÚwarning_oncer9   rS   r  r×   r*  ry   r`  )r<   rF   rp   rm  rq   r÷   rr   rn  r¿   r  r  Úexpected_dtyper9   Úbool_masked_pos_zerosÚbool_masked_pos_onesÚembedding_outputÚencoder_outputss                    r%   rK   zSegGptModel.forwardç  së  € ð^ 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØ/?Ð/KÑ+ÐQVÐàŸ™×9Ñ9×DÑD×KÑK×QÑQˆØ#—‘ ~Ó6ˆØ1×4Ñ4°^ÓDÐô —y‘yÐ"5°|Ð!DÈ!ÔLˆð ˆ~ô �I‰I�| \Ð2¸Õ:ä—‘˜L¨&Ð1°qÔ9ð 	ð Ð" vÐ'9Ü×Ñð môð Ð"ØŸ/™/×:Ñ:×FÑFˆKÜ$)§K¡K°¸qÑ0@ÌÏ
É
Ð[g×[nÑ[nÔ$oÐ!Ü#(§:¡:Ø˜k¨QÑ.Ñ.´e·j±jÈ×I\ÑI\ô$Ð ô $Ÿi™iÐ)>Ð@TÐ(UÓVˆOØ-×7Ñ7¸Ó:ˆOàŸ?™?ØÐ-¸nÐ^mð +ó 
Ðð Ÿ,™,ØØ-Ø/Ø!5Ø#ð 'ó 
ˆð Ðr$   ©NNNNNNN)r   r   r   r   r0   r+   rc  r   r„   r   rj  r   ÚSEGGPT_INPUTS_DOCSTRINGr   r   Ú_CONFIG_FOR_DOCr    r…   r   r†   r  r‡   r!   r   r   rK   rL   rM   s   @r%   r^  r^  Í  s<  ø„ ð
˜|õ ð0Ð&;ó 0ðC¨4°°T¸#±Y°Ñ+?ð CÀDó Cñ +Ð+BÓCÙÐ+>È_Ô]ð 7;Ø+/Ø(,Ø.2Ø,0Ø/3Ø&*ñ^à—l‘lð^ð #Ÿ\™\ð^ð —l‘lð	^ð
 " %×"2Ñ"2Ñ3ð^ð # 4™.ð^ð ! ™ð^ð ˜×*Ñ*Ñ+ð^ð $ D™>ð^ð ' t™nð^ð ˜d‘^ð^ð 
ˆuÐ)Ð)Ñ	*ò^ó ^ó Dô^r$   r^  Útensorr2   c                 óÔ   — | j                   \  }}}}||z  }||z  }| j                  ||||||f¬«      } | j                  dddddd«      } | j                  |||z  |dz  dz  f¬«      } | S )NrG  r   rB   r¶   r   rF  r   )rC   rl   rE   )r{  r2   rG   r3   rH   rI   r~   r   s           r%   Úpatchifyr}  J  s‹   € Ø.4¯l©lÑ+€J�˜f eØ˜ZÑ'€LØ˜:Ñ%€Kà�^‰^ :¨|¸\È:ÐWbÐdnÐ"oˆ^Óp€FØ�^‰^˜A˜q ! Q¨¨1Ó-€FØ�^‰^ :¨|¸kÑ/IÈ:ÐWXÉ=Ð[\ÑK\Ð"]ˆ^Ó^€Fà€Mr$   r~   r   c           	      ób  — | j                   d   }t        | j                   d   dz  dz  «      }||z  | j                   d   k7  r"t        d| j                   d   › d|› d|› d	�«      ‚| j                  |||||df¬
«      } | j	                  dddddd«      } | j                  |d||z  ||z  f¬
«      } | S )Nr   rc   r   rb   r   zNumber of patches z does not match patch height (z) and width (rA   rG  rF  rB   r¶   )rC   r„   rD   rl   rE   )r{  r~   r   rG   r2   s        r%   Ú
unpatchifyr  V  s×   € Ø—‘˜a‘€JÜ�f—l‘l 2Ñ&¨Ñ*¨sÑ2Ó3€JØ�kÑ! V§\¡\°!¡_Ò4ÜØ  §¡¨a¡Ð 1Ð1OÐP\È~Ð]jÐkvÐjwÐwyÐzó
ð 	
ð �^‰^ :¨|¸[È*ÐV`ÐbcÐ"dˆ^Óe€FØ�^‰^˜A˜q ! Q¨¨1Ó-€FØ�^‰^ :¨q°,ÀÑ2KÈ[Ð[eÑMeÐ"fˆ^Óg€Fà€Mr$   c                   ó†   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  dej                  fd„Zˆ xZS )Ú
SegGptLossc                 óf   •— t         ‰| �  «        |j                  | _        |j                  | _        y rÈ   )r/   r0   Úbetar2   rÎ   s     €r%   r0   zSegGptLoss.__init__f  s&   ø€ Ü‰ÑÔØ—K‘KˆŒ	Ø ×+Ñ+ˆ�r$   rm  r)   rn  rq   c                 ó¢  — t        j                  ||fd¬«      }|dd…dd…df   j                  dd| j                  dz  dz  «      }t	        ||j
                  d   | j                  z  |j
                  d   | j                  z  «      }t        j                  ||d| j                  ¬«      }||z  j                  «       |j                  «       z  }|S )aN  Computes the L1 loss between the predicted masks and the ground truth masks.

        Args:
            prompt_masks (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
                Pixel values from mask prompt.

            pred_masks (`torch.FloatTensor` of shape `(batch_size, num_channels, 2*height, width)`):
                Predicted masks.

            labels (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
                Ground truth mask for input images.

            bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, num_patches)`):
                Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).

        Returns:
            `torch.FloatTensor`: The mean L1 loss between the predicted masks and the ground truth masks.
        rB   rv   Nr   r   Únone)Ú	reductionrƒ  )
r    r{   Úrepeatr2   r  rC   rj   Úsmooth_l1_lossrƒ  Úsum)r<   rm  r)   rn  rq   Úground_truthÚmaskr(   s           r%   rK   zSegGptLoss.forwardk  s¿   € ô2 —y‘y ,°Ð!7¸QÔ?ˆàšq¢! T˜zÑ*×1Ñ1°!°Q¸¿¹ÈÑ8JÈQÑ8NÓOˆÜ˜$ × 2Ñ 2°1Ñ 5¸¿¹Ñ HÈ,×J\ÑJ\Ð]^ÑJ_Ðcg×crÑcrÑJrÓsˆä×Ñ 
¨LÀFÐQU×QZÑQZÔ[ˆØ�t‘× Ñ Ó" T§X¡X£ZÑ/ˆàˆr$   )	r   r   r   r0   r    r!   r†   rK   rL   rM   s   @r%   r�  r�  e  sK   ø„ ô,ð
!à×'Ñ'ð!ð ×%Ñ%ð!ð ×!Ñ!ð	!ð
 ×)Ñ)÷!r$   r�  zCSegGpt model with a decoder on top for one-shot image segmentation.c                   ó0  ‡ — e Zd Zdefˆ fd„Z ee«       eee	¬«      	 	 	 	 	 	 	 dde
j                  de
j                  de
j                  dee
j                     dee   d	ee   d
ee
j                      dee   dee   dee   deeef   fd„«       «       Zˆ xZS )ÚSegGptForImageSegmentationr=   c                 ó’   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        | j                  «        y rÈ   )r/   r0   r=   r^  rL  r@  Údecoderra  rÎ   s     €r%   r0   z#SegGptForImageSegmentation.__init__”  s;   ø€ Ü‰Ñ˜Ô ØˆŒä  Ó(ˆŒ
Ü$ VÓ,ˆŒð 	�‰Õr$   rk  rF   rp   rm  rq   r÷   rr   rn  r¿   r  r  rP   c                 ó¨  — |�|n| j                   j                  }|	�|	n| j                   j                  }	|
�|
n| j                   j                  }
|€»| j                  j
                  j                  j                  }t        j                  |dz  t        j                  |j                  ¬«      }t        j                  ||dz  z
  t        j                  |j                  ¬«      }t        j                  ||g«      }|j                  d«      }| j	                  |||||||||	|
¬«
      }|
r|j                  n|d   }t        j                  |d¬«      }| j!                  |«      }d}|� t#        | j                   «      } |||||«      }|
s)|f}|	r	||d   fz   }|r|	rdnd}|||   fz   }|�|f|z   }|S t%        |||j&                  |j(                  ¬	«      S )
a^  
        labels (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`, `optional`):
            Ground truth mask for input images.

        Returns:

        Examples:

        ```python
        >>> from transformers import SegGptImageProcessor, SegGptForImageSegmentation
        >>> from PIL import Image
        >>> import requests

        >>> image_input_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_2.jpg"
        >>> image_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1.jpg"
        >>> mask_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1_target.png"

        >>> image_input = Image.open(requests.get(image_input_url, stream=True).raw)
        >>> image_prompt = Image.open(requests.get(image_prompt_url, stream=True).raw)
        >>> mask_prompt = Image.open(requests.get(mask_prompt_url, stream=True).raw).convert("L")

        >>> checkpoint = "BAAI/seggpt-vit-large"
        >>> model = SegGptForImageSegmentation.from_pretrained(checkpoint)
        >>> image_processor = SegGptImageProcessor.from_pretrained(checkpoint)

        >>> inputs = image_processor(images=image_input, prompt_images=image_prompt, prompt_masks=mask_prompt, return_tensors="pt")
        >>> outputs = model(**inputs)
        >>> result = image_processor.post_process_semantic_segmentation(outputs, target_sizes=[(image_input.height, image_input.width)])[0]
        >>> print(list(result.shape))
        [170, 297]
        ```
        NrB   rÖ   r   )
rF   rp   rm  rq   r÷   rr   rn  r¿   r  r  rc   rv   r   )r(   r)   r   r   )r=   r¿   r  rp  rL  rJ   rY   r9   r    rS   r  r×   r*  r{   ry   r   r�  r�  r'   r   r   )r<   rF   rp   rm  rq   r÷   rr   rn  r¿   r  r  r9   rt  ru  rÿ   r   r)   r(   Úloss_fnrÞ   Úidxs                        r%   rK   z"SegGptForImageSegmentation.forwardž  só  € ð^ 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐ"ØŸ*™*×/Ñ/×@Ñ@×LÑLˆKÜ$)§K¡K°¸qÑ0@ÌÏ
É
Ð[g×[nÑ[nÔ$oÐ!Ü#(§:¡:Ø˜k¨QÑ.Ñ.´e·j±jÈ×I\ÑI\ô$Ð ô $Ÿi™iÐ)>Ð@TÐ(UÓVˆOØ-×7Ñ7¸Ó:ˆOà—*‘*Ø%Ø 3Ø%Ø+Ø-Ø)ØØ/Ø!5Ø#ð ó 
ˆñ LW W×%GÒ%GÐ\cÐdfÑ\gÐ"Ü%*§Y¡YÐ/IÈrÔ%RÐ"Ø—\‘\Ð"<Ó=ˆ
àˆØÐÜ  §¡Ó-ˆGÙ˜<¨°V¸_ÓMˆDáØ �]ˆFÙ#Ø 7¨1¡: -Ñ/�á Ù/‘a°Q�Ø 7¨3¡< /Ñ1�àÐØ˜ 6Ñ)�ØˆMä,ØØ!Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
r$   rx  )r   r   r   r   r0   r   ry  r   r'   rz  r    r…   r   r†   r  r‡   r!   r   r   rK   rL   rM   s   @r%   r�  r�  �  s  ø„ ð
˜|õ ñ +Ð+BÓCÙÐ+HÐWfÔgð 7;Ø+/Ø(,Ø.2Ø,0Ø/3Ø&*ñd
à—l‘lðd
ð #Ÿ\™\ðd
ð —l‘lð	d
ð
 " %×"2Ñ"2Ñ3ðd
ð # 4™.ðd
ð ! ™ðd
ð ˜×*Ñ*Ñ+ðd
ð $ D™>ðd
ð ' t™nðd
ð ˜d‘^ðd
ð 
ˆuÐ3Ð3Ñ	4òd
ó hó Dôd
r$   r�  )r^  rK  r�  )rÕ   F)?r   Úcollections.abcr6   Údataclassesr   Útypingr   r   r   r   r   r    Útorch.utils.checkpointr	   Útorch.nnr
   rj   Úactivationsr   Úmodeling_utilsr   Úutilsr   r   r   r   r   r   Úconfiguration_seggptr   Ú
get_loggerr   rq  rz  Ú_CHECKPOINT_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr   r'   ÚModuler+   rO   r‰   rÆ   r…   rè   r  rß   rá   rê   r  r&  r7  r@  rK  ÚSEGGPT_START_DOCSTRINGry  r^  r„   r}  r  r�  r�  Ú__all__r#   r$   r%   ú<module>r¢     sK  ðñ ã Ý !ß 5Õ 5ã Û Ý Ý $å !Ý -÷÷ õ /ð 
ˆ×	Ñ	˜HÓ	%€ð !€ð .Ð Ú&Ð ð ôJ˜+ó Jó ðJð0 ô: Kó :ó ð:ô0 ˜BŸI™Iô  ôFR�r—y‘yô RôjK4�b—i‘iô K4ô^�—	‘	ô ñ�U—\‘\ð ¨eð ÀTð ÐV[×VbÑVbó ô*-�R—Y‘Yô -ô,�"—)‘)ô ,ô^B
�B—I‘Iô B
ôL�b—i‘iô ô<˜Ÿ	™	ô ô0�B—I‘Iô ôB2G˜Oô 2Gðj	Ð ð"Ð ñJ ØfØóôvÐ'ó vó	ðvðr	�U—\‘\ð 	¨sð 	°u·|±|ó 	ð�u—|‘|ð °3ð ÀSð ÈUÏ\É\ó ô'�—‘ô 'ñT ØIØóôq
Ð!6ó q
ó	ðq
òh Q�r$   