Ë
    ÜÓ^jZ¨  ã                   óÐ  — d Z ddlZddlmZ ddlZddlmZ ddlmZ	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZmZ ddlmZ  ej4                  e«      Z ed¬«      e G d„ de«      «       «       Z ed¬«      e G d„ de«      «       «       Z G d„ dej>                  «      Z  G d„ dej>                  «      Z! G d„ dej>                  «      Z" G d„ dej>                  «      Z# G d„ dej>                  «      Z$ G d„ d e«      Z% G d!„ d"ej>                  «      Z& G d#„ d$ejN                  «      Z( G d%„ d&ej>                  «      Z) G d'„ d(ej>                  «      Z*e G d)„ d*e«      «       Z+e G d+„ d,e+«      «       Z,d-ejZ                  d.e.d/ejZ                  fd0„Z/d-ejZ                  d1e.d2e.d/ejZ                  fd3„Z0 G d4„ d5ej>                  «      Z1 ed6¬«       G d7„ d8e+«      «       Z2g d9¢Z3y):zPyTorch SegGpt model.é    N)Ú	dataclass)Únn)Ú
functionalé   )Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚloggingÚ	torch_inté   )ÚSegGptConfigz1
    Output type of [`SegGptEncoderOutput`].
    )Úcustom_introc                   óº   — e Zd ZU dZej
                  ed<   dZeej
                     dz  ed<   dZ	eej
                     dz  ed<   dZ
eej
                     dz  ed<   y)ÚSegGptEncoderOutputay  
    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`.
        Additionally, each feature passes through a LayerNorm.
    Úlast_hidden_stateNÚhidden_statesÚ
attentionsÚintermediate_hidden_states)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚtorchÚFloatTensorÚ__annotations__r   Útupler   r   © ó    úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/seggpt/modeling_seggpt.pyr   r   "   sd   … ñð ×(Ñ(Ó(Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6ØBFÐ  e×&7Ñ&7Ñ 8¸4Ñ ?ÔFr!   r   z;
    Output type of [`SegGptImageSegmentationOutput`].
    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<   y)ÚSegGptImageSegmentationOutputaë  
    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$   >   sg   … ñð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø+/€J�×!Ñ! DÑ(Ó/Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ô6r!   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Úconfigr.   r/   r0   r1   r6   Ú	__class__s          €r"   r-   zSegGptPatchEmbeddings.__init__`   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   )Úshaper0   Ú
ValueErrorr.   r8   Úpermute)r9   Úpixel_valuesÚ
batch_sizer0   ÚheightÚwidthÚ
embeddingss          r"   ÚforwardzSegGptPatchEmbeddings.forwardn   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   r-   rH   Ú__classcell__©r;   s   @r"   r(   r(   Y   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j                  dz  dedz  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   r?   )r,   r-   r   Ú	Parameterr   Úzerosr1   Ú
mask_tokenÚsegment_token_inputÚsegment_token_promptÚtype_token_semanticÚtype_token_instancer(   Úpatch_embeddingsÚpretrain_image_sizer/   ÚrandnÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropout)r9   r:   Únum_positionsr;   s      €r"   r-   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!   rE   rF   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   r?   ÚbicubicF)ÚsizeÚmodeÚalign_corners)
rY   r@   r   r   ÚjitÚ
is_tracingÚFÚinterpolateÚreshaperB   )r9   rE   rF   Úpatch_pos_embedr6   Ú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!   rC   Ú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 )Nr`   r   ÚinstanceÚsemanticzBEmbedding type should be either 'semantic' or 'instance', but got r   ©Údim)rV   r@   rQ   ÚexpandÚ	unsqueezeÚtype_asri   rl   rR   rS   rT   rU   rA   r   Úcat)r9   rC   rm   rn   ro   Úinput_embeddingsÚprompt_embeddingsrD   Úpatch_heightÚpatch_widthÚ_rQ   ÚwÚ	pos_embedÚtype_embeddingrG   s                   r"   rH   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   r-   Úintr   ÚTensorrl   Ú
BoolTensorÚstrrH   rI   rJ   s   @r"   rL   rL   |   s•   ø„ ñð>˜|ð >°õ >ð A¨sð A¸3ð AÀ5Ç<Á<ó Að, 48Ø%)ñ+à—l‘lð+ð #Ÿ\™\ð+ð ×)Ñ)¨DÑ0ð	+ð
 ˜d™
ð+ð 
�‰÷+r!   rL   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.r?   )r,   r-   r.   r/   r2   r3   r4   r5   r1   Únum_attention_headsÚscaler   ÚLinearÚqkv_biasÚqkvÚprojÚ use_relative_position_embeddingsrA   rO   r   rP   Ú	rel_pos_hÚ	rel_pos_w)r9   r:   r.   r/   Ú
input_sizeÚhead_dimr;   s         €r"   r-   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_posrM   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.
        r?   r   r   r`   Úlinear)rb   rc   Ng      ð?)
r�   Úmaxrg   rh   ri   r@   rB   r   ÚarangeÚlong)	r9   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¢   r@   ri   r   Úeinsum)r9   r£   r¤   r‘   r’   r•   r–   Úquery_heightÚquery_widthÚ
key_heightÚ	key_widthÚrelative_position_heightÚrelative_position_widthrD   r}   rt   Ú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   r`   r?   r   r   é   éþÿÿÿ)Údtypert   )r@   rŽ   ri   rŠ   rB   Úunbindr‹   Ú	transposer�   r°   r‘   r’   r   r   r   ÚsoftmaxÚfloat32Útor´   Úviewr�   )r9   r   Úoutput_attentionsrD   rE   rF   r}   rŽ   r¤   ÚkeyÚvalueÚattn_weightsÚattn_weights_reshapedÚattn_outputs                 r"   rH   zSegGptAttention.forward9  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   r-   r�   r   r‚   r¢   r   r°   rH   rI   rJ   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,   r-   r   rŒ   r1   Úmlp_dimÚlin1Úlin2r   Ú
hidden_actÚact©r9   r:   r;   s     €r"   r-   zSegGptMlp.__init__a  sX   ø€ Ü‰ÑÔÜ—I‘I˜f×0Ñ0°&·.±.ÓAˆŒ	Ü—I‘I˜fŸn™n¨f×.@Ñ.@ÓAˆŒ	Ü˜&×+Ñ+Ñ,ˆ�r!   r   rM   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rÄ   )rÆ   rÉ   rÇ   ©r9   r   s     r"   rH   zSegGptMlp.forwardg  s2   € ØŸ	™	 -Ó0ˆØŸ™ Ó/ˆØŸ	™	 -Ó0ˆØÐr!   )r   r   r   r-   r   r‚   rH   rI   rJ   s   @r"   rÂ   rÂ   `  s#   ø„ ô-ð U§\¡\ð °e·l±l÷ r!   rÂ   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 )
ÚSegGptDropPathzÏ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_probrM   Nc                 ó0   •— t         ‰| �  «        || _        y rÄ   )r,   r-   rÏ   )r9   rÏ   r;   s     €r"   r-   zSegGptDropPath.__init__v  s   ø€ Ü‰ÑÔØ"ˆ�r!   r   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 )Nç        r   r   )r   ©r´   Údevice)
rÏ   Útrainingr@   Úndimr   Úrandr´   rÔ   ÚfloorÚdiv)r9   r   Ú	keep_probr@   Úrandom_tensors        r"   rH   zSegGptDropPath.forwardz  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Ï   ©r9   s    r"   Ú
extra_reprzSegGptDropPath.extra_reprƒ  s   € Ø�D—N‘NÐ#Ð$Ð$r!   )rÒ   )r   r   r   r   Úfloatr-   r   r‚   rH   r„   rÞ   rI   rJ   s   @r"   rÎ   rÎ   o  sB   ø„ ññ# %ð #°$õ #ð< U§\¡\ð <°e·l±ló <ð%˜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j                  ej                  f   e
ej                     z  f
d
„Zˆ xZS )ÚSegGptLayerr:   Údrop_path_raterM   Nc                 ót  •— t         ‰| �  «        t        |«      | _        t	        |«      | _        |dkD  rt        |«      nt        j                  «       | _	        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        y )NrÒ   ©Úeps)r,   r-   r†   Ú	attentionrÂ   ÚmlprÎ   r   ÚIdentityÚ	drop_pathÚ	LayerNormr1   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_after)r9   r:   râ   r;   s      €r"   r-   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   r?   rs   r`   T)rt   Úkeepdim)ræ   rì   r@   Úsplitri   ÚmeanÚ	expand_asr   rx   ré   rí   rç   )r9   r   rî   rï   r»   Úself_attention_outputsÚattention_outputÚoutputsÚpromptÚinputsÚnum_promptsÚresiduals               r"   rH   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ß   r-   r   r‚   r�   Úboolr   rH   rI   rJ   s   @r"   rá   rá   ‡  s‚   ø„ ð[˜|ð [¸Uð [Àtõ [ð "'Ø"'ñ#à—|‘|ð#ð ð#ð ð	#ð
  ð#ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*¨U°5·<±<Ñ-@Ñ	@÷#r!   rá   c                   ól   ‡ — 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	z  fd
„Z
ˆ xZS )ÚSegGptEncoderr:   rM   Nc           
      óÒ  •— t         ‰| �  «        || _        t        j                  d|j
                  |j                  d¬«      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   Úcpu)rÔ   rä   F)r,   r-   r:   r   Úlinspacerâ   Únum_hidden_layersÚitemr   Ú
ModuleListÚrangerá   Úlayersrê   r1   rë   Ú	layernormÚgradient_checkpointing)r9   r:   ÚxÚdprÚir;   s        €r"   r-   zSegGptEncoder.__init__·  s«   ø€ Ü‰ÑÔØˆŒÜ!&§¡°°6×3HÑ3HÈ&×JbÑJbÐkpÔ!qÖr˜Aˆq�v‰v�xÐrˆÐrÜ—m‘mÌ%ÐPV×PhÑPhÓJiÖ$jÀQ¤[°¸¸Q¹Õ%@Ò$jÓkˆŒÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒØ&+ˆÕ#ùò sùÚ$js   ÁCÂC$r   rï   r»   Úoutput_hidden_statesÚreturn_dictc                 ó6  — |rdnd }|rdnd }g }t        | j                  «      D ]Å  \  }	}
|r||fz   }| j                  j                  |	kD  rdnd} |
||||«      }|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    r?   r   r   r_   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@   Ú!intermediate_hidden_state_indicesÚappendr  r   r   )r9   r   rï   r»   r  r  Úall_hidden_statesÚall_self_attentionsr   r  Úlayer_modulerî   Úlayer_outputss                r"   rH   zSegGptEncoder.forward¿  sr  € ñ #7™B¸DÐÙ$5™b¸4ÐØ%'Ð"ä(¨¯©Ó5ò 	P‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!ð "&§¡×!8Ñ!8¸1Ò!<™AÀ!ˆMá(¨¸ÐGWÐYjÓkˆMà)¨!Ñ,ˆ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   r-   r   r‚   rü   r   r   rH   rI   rJ   s   @r"   rþ   rþ   ¶  sm   ø„ ð,˜|ð ,°õ ,ð "'Ø"'Ø%*Ø ñ0
à—|‘|ð0
ð ð0
ð  ð	0
ð
 #ð0
ð ð0
ð 
Ð$Ñ	$÷0
r!   rþ   c                   óf   ‡ — e Zd ZdZdddœˆ fd„
Zdej                  dej                  fˆ 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).
    g�íµ ÷Æ°>Úchannels_last)rå   Údata_formatc                ó\   •— t        ‰| �  |fd|i|¤Ž |dvrt        d|› �«      ‚|| _        y )Nrå   )r  Úchannels_firstzUnsupported data format: )r,   r-   ÚNotImplementedErrorr  )r9   Únormalized_shaperå   r  Úkwargsr;   s        €r"   r-   zSegGptLayerNorm.__init__ù  s?   ø€ Ü‰ÑÐ)Ñ=¨sÐ=°fÒ=ØÐAÑAÜ%Ð(AÀ+ÀÐ&OÓPÐPØ&ˆÕr!   ÚfeaturesrM   c                 ó¶   •— | j                   dk(  r9|j                  dddd«      }t        ‰| �  |«      }|j                  dddd«      }|S t        ‰| �  |«      }|S )zŒ
        Args:
            features: Tensor of shape (batch_size, channels, height, width) OR (batch_size, height, width, channels)
        r   r   r?   r   r   )r  rB   r,   rH   )r9   r$  r;   s     €r"   rH   zSegGptLayerNorm.forwardÿ  sj   ø€ ð
 ×ÑÐ/Ò/Ø×'Ñ'¨¨1¨a°Ó3ˆHÜ‘w‘ xÓ0ˆHØ×'Ñ'¨¨1¨a°Ó3ˆHð ˆô ‘w‘ xÓ0ˆHØˆr!   )	r   r   r   r   r-   r   r‚   rH   rI   rJ   s   @r"   r  r  ó  s4   ø„ ñð
 15À/ö 'ð §¡ð °·±÷ ñ 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,   r-   r   r7   Údecoder_hidden_sizeÚconvr  rë   r  r   rÈ   Úact_fctÚheadrÊ   s     €r"   r-   zSegGptDecoderHead.__init__  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"   rH   zSegGptDecoderHead.forward  s@   € ØŸ	™	 -Ó0ˆØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØŸ	™	 -Ó0ˆàÐr!   )r   r   r   r-   r   r   rH   rI   rJ   s   @r"   r'  r'    s   ø„ ôWð U×%6Ñ%6÷ r!   r'  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 )Nr?   Trˆ   )r,   r-   r   rŒ   r1   Úlenr  r/   r*  Údecoder_embedr'  Údecoder_predr:   rÊ   s     €r"   r-   zSegGptDecoder.__init__&  s…   ø€ Ü‰ÑÔÜŸY™YØ×Ñ¤ V×%MÑ%MÓ!NÑNØ×Ñ˜qÑ  6×#=Ñ#=Ñ=Øô
ˆÔô
 .¨fÓ5ˆÔØ ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Øˆ�r!   r   rM   c                 ó  — |j                   \  }}}}|j                  |||| j                  | j                  | j                  «      }|j	                  dddddd«      }|j                  |d|| j                  z  || j                  z  f¬«      }|S )	Nr   é   r   r   r?   r²   r`   ©r@   )r@   ri   r/   r*  rB   )r9   r   rD   r{   r|   r}   s         r"   Ú_reshape_hidden_statesz$SegGptDecoder._reshape_hidden_states2  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Ä   )r3  r8  r4  rÌ   s     r"   rH   zSegGptDecoder.forward>  s8   € Ø×*Ñ*¨=Ó9ˆØ×3Ñ3°MÓBˆØ×)Ñ)¨-Ó8ˆàÐr!   )	r   r   r   r-   r   r   r8  rH   rI   rJ   s   @r"   r0  r0  %  s9   ø„ ô
ð
°E×4EÑ4Eð 
È%×J[ÑJ[ó 
ð U×%6Ñ%6÷ r!   r0  c                   óˆ   ‡ — e Zd ZU eed<   dZdZdZdZddgZ	 e
j                  «       dej                  d	d
fˆ fd„«       Zˆ xZS )ÚSegGptPreTrainedModelr:   ÚmodelrC   )ÚimageTrL   rá   ÚmodulerM   Nc                 óœ  •— t         ‰| �  |«       | j                  j                  }t	        |t
        j                  t
        j                  f«      rOt        j                  |j                  d|¬«       |j                  � t        j                  |j                  «       yyt	        |t        «      rEt        j                  |j                  d|¬«       t        j                  |j                  d|¬«       yt	        |t         «      rÈt        j                  |j"                  d|¬«       t        j$                  |j&                  |¬«       t        j$                  |j(                  |¬«       t        j$                  |j*                  |¬«       t        j$                  |j,                  |¬«       t        j$                  |j.                  |¬«       yy)zInitialize the weightsrÒ   )ró   ÚstdN)r@  )r,   Ú_init_weightsr:   Úinitializer_ranger2   r   rŒ   r7   ÚinitÚtrunc_normal_Úweightr‰   Úzeros_r†   r‘   r’   rL   rY   Únormal_rQ   rR   rS   rT   rU   )r9   r>  r@  r;   s      €r"   rA  z#SegGptPreTrainedModel._init_weightsO  s3  ø€ ô 	‰Ñ˜fÔ%Ø�k‰k×+Ñ+ˆÜ�fœrŸy™y¬"¯)©)Ð4Ô5Ü×Ñ˜vŸ}™}°3¸CÕ@Ø�{‰{Ð&Ü—‘˜FŸK™KÕ(ð 'ä˜¤Ô0Ü×Ñ˜v×/Ñ/°c¸sÕCÜ×Ñ˜v×/Ñ/°c¸sÖCÜ˜Ô 0Ô1Ü×Ñ˜v×9Ñ9ÀÈÕMÜ�L‰L˜×*Ñ*°Õ4Ü�L‰L˜×3Ñ3¸Õ=Ü�L‰L˜×4Ñ4¸#Õ>Ü�L‰L˜×3Ñ3¸Õ=Ü�L‰L˜×3Ñ3¸Ö=ð 2r!   )r   r   r   r   r   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesr   Úno_gradr   ÚModulerA  rI   rJ   s   @r"   r;  r;  F  sW   ø… àÓØÐØ$€OØ!ÐØ&*Ð#Ø+¨]Ð;Ðà€U‡]�]ƒ_ð> B§I¡Ið >°$ô >ó ô>r!   r;  c                   ó  ‡ — e Zd Zdefˆ fd„Zdefd„Ze	 	 	 	 	 	 	 ddej                  dej                  dej                  d	ej                  dz  d
edz  dedz  dej                  dz  dedz  dedz  dedz  deez  fd„«       Zˆ xZS )ÚSegGptModelr:   c                 ó’   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        | j                  «        y rÄ   )r,   r-   r:   rL   rG   rþ   ÚencoderÚ	post_initrÊ   s     €r"   r-   zSegGptModel.__init__f  s;   ø€ Ü‰Ñ˜Ô ØˆŒä*¨6Ó2ˆŒÜ$ VÓ,ˆŒð 	�‰Õr!   rM   c                 ó.   — | j                   j                  S rÄ   )rG   rV   rÝ   s    r"   Úget_input_embeddingsz SegGptModel.get_input_embeddingsp  s   € Ø�‰×/Ñ/Ð/r!   NrC   rm   Úprompt_masksrn   rï   ro   Ú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 )	ax  
        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.
        labels (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`, `optional`):
            Ground truth mask for input images.

        Examples:

        ```python
        >>> from transformers import SegGptImageProcessor, SegGptModel
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO

        >>> 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"

        >>> with httpx.stream("GET", image_input_url) as response:
        ...     image_input = Image.open(BytesIO(response.read()))

        >>> with httpx.stream("GET", image_prompt_url) as response:
        ...     image_prompt = Image.open(BytesIO(response.read()))

        >>> with httpx.stream("GET", mask_prompt_url) as response:
        ...     mask_prompt = Image.open(BytesIO(response.read())).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]
        ```
        Fr?   rs   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   )ro   rn   )rï   r»   r  r  )r:   r»   r  r  rG   rV   r8   rE  r´   r¹   r   rx   ÚloggerÚwarning_oncer6   rP   rü   rÔ   Úonesrv   rR  )r9   rC   rm   rV  rn   rï   ro   rW  r»   r  r  r#  Úexpected_dtyper6   Úbool_masked_pos_zerosÚbool_masked_pos_onesÚembedding_outputÚencoder_outputss                     r"   rH   zSegGptModel.forwards  së  € ðD 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆØ/?Ð/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   r-   r(   rU  r   r   r‚   rƒ   rü   r„   r   r   r   rH   rI   rJ   s   @r"   rP  rP  d  sü   ø„ ð˜|õ ð0Ð&;ó 0ð ð 48Ø(,Ø%)Ø+/Ø)-Ø,0Ø#'ñrà—l‘lðrð #Ÿ\™\ðrð —l‘lð	rð
 ×)Ñ)¨DÑ0ðrð  ™+ðrð ˜d™
ðrð ×!Ñ! DÑ(ðrð   $™;ðrð # T™kðrð ˜D‘[ðrð 
Ð$Ñ	$òró ôrr!   rP  Útensorr/   rM   c                 óÔ   — | j                   \  }}}}||z  }||z  }| j                  ||||||f¬«      } | j                  dddddd«      } | j                  |||z  |dz  dz  f¬«      } | S )Nr7  r   r?   r²   r   r6  r   )r@   ri   rB   )rb  r/   rD   r0   rE   rF   r{   r|   s           r"   Úpatchifyrd  é  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   r`   r   r_   r   zNumber of patches z does not match patch height (z) and width (r>   r7  r6  r?   r²   )r@   r�   rA   ri   rB   )rb  r{   r|   rD   r/   s        r"   Ú
unpatchifyrf  õ  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,   r-   Úbetar/   rÊ   s     €r"   r-   zSegGptLoss.__init__  s&   ø€ Ü‰ÑÔØ—K‘KˆŒ	Ø ×+Ñ+ˆ�r!   rV  r&   rW  rn   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.
        r?   rs   Nr   r   Únone)Ú	reductionrj  )
r   rx   Úrepeatr/   rf  r@   rg   Úsmooth_l1_lossrj  Úsum)r9   rV  r&   rW  rn   Úground_truthÚmaskr%   s           r"   rH   zSegGptLoss.forward
  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   r-   r   r   rƒ   rH   rI   rJ   s   @r"   rh  rh    sK   ø„ ô,ð
!à×'Ñ'ð!ð ×%Ñ%ð!ð ×!Ñ!ð	!ð
 ×)Ñ)÷!r!   rh  zM
    SegGpt model with a decoder on top for one-shot image segmentation.
    c                   ó  ‡ — e Zd Zdefˆ fd„Ze	 	 	 	 	 	 	 ddej                  dej                  dej                  dej                  dz  de	dz  d	e
dz  d
ej                  dz  de	dz  de	dz  de	dz  deez  fd„«       Zˆ xZS )ÚSegGptForImageSegmentationr:   c                 ó’   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        | j                  «        y rÄ   )r,   r-   r:   rP  r<  r0  ÚdecoderrS  rÊ   s     €r"   r-   z#SegGptForImageSegmentation.__init__4  s;   ø€ Ü‰Ñ˜Ô ØˆŒä  Ó(ˆŒ
Ü$ VÓ,ˆŒð 	�‰Õr!   NrC   rm   rV  rn   rï   ro   rW  r»   r  r  rM   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  
        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.
        labels (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`, `optional`):
            Ground truth mask for input images.

        Examples:

        ```python
        >>> from transformers import SegGptImageProcessor, SegGptForImageSegmentation
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO

        >>> 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"

        >>> with httpx.stream("GET", image_input_url) as response:
        ...     image_input = Image.open(BytesIO(response.read()))

        >>> with httpx.stream("GET", image_prompt_url) as response:
        ...     image_prompt = Image.open(BytesIO(response.read()))

        >>> with httpx.stream("GET", mask_prompt_url) as response:
        ...     mask_prompt = Image.open(BytesIO(response.read())).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]
        ```
        Nr?   rÓ   r   )
rC   rm   rV  rn   rï   ro   rW  r»   r  r  r`   rs   r   )r%   r&   r   r   )r:   r»   r  r  r<  rG   rV   r6   r   rP   rü   rÔ   r[  rx   rv   r   rv  rh  r$   r   r   )r9   rC   rm   rV  rn   rï   ro   rW  r»   r  r  r#  r6   r]  r^  r÷   r   r&   r%   Úloss_fnÚoutputÚidxs                         r"   rH   z"SegGptForImageSegmentation.forward>  só  € ðD 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ"ØŸ*™*×/Ñ/×@Ñ@×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!   ra  )r   r   r   r   r-   r   r   r‚   rƒ   rü   r„   r   r   r$   rH   rI   rJ   s   @r"   rt  rt  .  sï   ø„ ð˜|õ ð ð 48Ø(,Ø%)Ø+/Ø)-Ø,0Ø#'ñx
à—l‘lðx
ð #Ÿ\™\ðx
ð —l‘lð	x
ð
 ×)Ñ)¨DÑ0ðx
ð  ™+ðx
ð ˜d™
ðx
ð ×!Ñ! DÑ(ðx
ð   $™;ðx
ð # T™kðx
ð ˜D‘[ðx
ð 
Ð.Ñ	.òx
ó ôx
r!   rt  )rP  r;  rt  )4r   Úcollections.abcr3   Údataclassesr   r   r   Útorch.nnr   rg   Ú r   rC  Úactivationsr   Úmodeling_layersr	   Úmodeling_utilsr
   Úutilsr   r   r   r   Úconfiguration_seggptr   Ú
get_loggerr   rY  r   r$   rN  r(   rL   r†   rÂ   rÎ   rá   rþ   rê   r  r'  r0  r;  rP  r‚   r�   rd  rf  rh  rt  Ú__all__r    r!   r"   ú<module>r†     s  ðñ ã Ý !ã Ý Ý $å &Ý !Ý 9Ý -ß DÓ DÝ .ð 
ˆ×	Ñ	˜HÓ	%€ñ ðôð
 ôG˜+ó Gó óðGñ, ðôð
 ô7 Kó 7ó óð7ô* ˜BŸI™Iô  ôFR�r—y‘yô RôjK4�b—i‘iô K4ô^�—	‘	ô ô%�R—Y‘Yô %ô0,Ð,ô ,ô^9
�B—I‘Iô 9
ôz�b—l‘lô ô4˜Ÿ	™	ô ô0�B—I‘Iô ðB ô>˜Oó >ó ð>ð: ôAÐ'ó Aó ðAðH	�U—\‘\ð 	¨sð 	°u·|±|ó 	ð�u—|‘|ð °3ð ÀSð ÈUÏ\É\ó ô'�—‘ô 'ñT ðôô
D
Ð!6ó D
óð
D
òN Q�r!   