§
    ‚ŠtjZ¨  ã                   óÞ  — 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j        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j'        ¦  «        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j-        d.e.d/ej-        fd0„Z/d-ej-        d1e.d2e.d/ej-        fd3„Z0 G d4„ d5ej        ¦  «        Z1 ed6¬¦  «         G d7„ d8e+¦  «        ¦   «         Z2g d9¢Z3dS ):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<   dS )Ú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   © ó    úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/seggpt/modeling_seggpt.pyr   r   "   s…   € € € € € € ðð ð Ô(Ð(Ð(Ñ(Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6ØBFÐ  eÔ&7Ô 8¸4Ñ ?ÐFÐFÑFÐFÐ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<   dS )Ú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$   >   sˆ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð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        ||||¬¦  «        | _        d S )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°FÔ4E�Jˆ
Ø$*Ô$7¸Ô9K�kˆÝ#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ø! !”}¨
°1¬Ñ5¸*ÀQ¼-È:ÐVWÌ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔåœ) L°+È:Ð^hÐiÑiÔiˆŒˆˆr!   c                 óP  — |j         \  }}}}|| j        k    rt          d¦  «        ‚|| j        d         k    s|| j        d         k    r2t          d|› d|› d| j        d         › d| j        d         › d�	¦  «        ‚|                      |¦  «                             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Ñ/ˆ
�L &¨%Ø˜4Ô,Ò,Ð,ÝØwñô ð ð �T”_ QÔ'Ò'Ð'¨5°D´OÀAÔ4FÒ+FÐ+FÝØw VÐwÐw¨eÐwÐwÈDÌOÐ\]ÔL^ÐwÐwÐaeÔapÐqrÔasÐwÐwÐwñô ð ð —_’_ \Ñ2Ô2×:Ò:¸1¸aÀÀAÑFÔFˆ
ØÐr!   )r   r   r   r   r-   rH   Ú__classcell__©r;   s   @r"   r(   r(   Y   sV   ø€ € € € € ðð ðjð jð jð jð 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                 ó8  •— 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        ¦  «        | _        d S )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__�   s7  ø€ Ý‰Œ×ÒÑÔÐåœ,¥u¤{°1°a¸¸FÔ<NÑ'OÔ'OÑPÔPˆŒÝ#%¤<µ´¸A¸qÀ!ÀVÔEWÑ0XÔ0XÑ#YÔ#YˆÔ Ý$&¤Lµ´¸QÀÀ1ÀfÔFXÑ1YÔ1YÑ$ZÔ$ZˆÔ!å#%¤<µ´¸A¸qÀ!ÀVÔEWÑ0XÔ0XÑ#YÔ#YˆÔ Ý#%¤<µ´¸A¸qÀ!ÀVÔEWÑ0XÔ0XÑ#YÔ#YˆÔ å 5°fÑ =Ô =ˆÔàÔ3°vÔ7HÑHÈQÑNÐQRÑRˆÝ#%¤<µ´¸A¸}ÈfÔN`Ñ0aÔ0aÑ#bÔ#bˆÔ Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr!   rE   rF   c                 ó¦  — | j         d d …dd …f         }|j        d         }t          |dz  ¦  «        }t          j                             ¦   «         s||k    s||k    r^t          j        |                     d||d¦  «         	                    dddd¦  «        ||fdd¬	¦  «        }| 	                    dddd¦  «        S |                     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°1°1°1°a°b°b°5Ô9ˆØ%Ô+¨AÔ.ˆÝ'¨°SÑ(8Ñ9Ô9Ðõ Œ9×ÒÑ!Ô!ð 
	AÐ%8¸FÒ%BÐ%BÐFYÐ]bÒFbÐFbÝœmØ×'Ò'¨Ð+>Ð@SÐUWÑXÔX×`Ò`ÐabÐdeÐghÐjkÑlÔlØ˜e�_ØØ#ð	ñ ô ˆOð #×*Ò*¨1¨a°°AÑ6Ô6Ð6à"×*Ò*¨1¨f°e¸RÑ@Ô@Ð@r!   rC   Úprompt_pixel_valuesÚbool_masked_posÚembedding_typec                 óX  — |                       |¦  «        }|                       |¦  «        }|j        \  }}}	}
| j                             |||	d¦  «        }|                     d¦  «                             |¦  «                             d||	d¦  «        }|d|z
  z  ||z  z   }|�|nd}|                      ||	¦  «        }|| 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£   s  € ð  ×0Ò0°Ñ>Ô>ÐØ ×1Ò1Ð2EÑFÔFÐà3CÔ3IÑ0ˆ
�L +¨qà”_×+Ò+¨J¸ÀkÐSUÑVÔVˆ
à×%Ò% bÑ)Ô)×1Ò1°*Ñ=Ô=×EÒEÀbÈ,ÐXcÐefÑgÔgˆØ-°°Q±Ñ7¸*Àq¹.ÑHÐà+9Ð+E˜˜È:ˆð ×1Ò1°,ÀÑLÔLˆ	ð ,¨dÔ.FÑFÐØ-°Ô0IÑIÐð ,¨iÑ7ÐØ-°	Ñ9Ðð ˜ZÒ'Ð'Ø!Ô5ˆNˆNØ˜zÒ)Ð)Ø!Ô5ˆNˆNåÐrÐbpÐrÐrÑsÔsÐsà+¨nÑ<ÐØ-°Ñ>Ðå”YÐ 0Ð2CÐDÈ!ÐLÑLÔ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ð Að Að Að, 48Ø%)ð+ð +à”lð+ð #œ\ð+ð Ô)¨DÑ0ð	+ð
 ˜d™
ð+ð 
Œð+ð +ð +ð +ð +ð +ð +ð +r!   rL   c                   óê   ‡ — 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                 óR  •— 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
  |¦  «        ¦  «        | _        d S d S )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°FÔ4E�Jˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
à  ”m vÔ'8Ñ8¸*ÀQ¼-È6ÔK\Ñ:\Ð]ˆ
ØÔ%¨Ô)CÑCˆà#)Ô#=ˆÔ Ø˜t‘^ˆŒ
å”9˜VÔ/°Ô1CÀaÑ1GÈfÌoÐ^Ñ^Ô^ˆŒÝ”I˜fÔ0°&Ô2DÑEÔEˆŒ	à06Ô0WˆÔ-ØÔ0ð 	XØÐ!Ý Ð!eÑfÔfÐfõ  œ\­%¬+°a¸*ÀQ¼-Ñ6GÈ!Ñ6KÈXÑ*VÔ*VÑWÔWˆDŒNÝœ\­%¬+°a¸*ÀQ¼-Ñ6GÈ!Ñ6KÈXÑ*VÔ*VÑWÔWˆDŒNˆNˆNð	Xð 	Xr!   Úq_sizeÚk_sizeÚrel_posrM   c                 ón  — t          dt          ||¦  «        z  dz
  ¦  «        }t          j        |                     d|j        d         d¦  «                             ddd¦  «        |d¬¦  «        }|                     d|¦  «                             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   }|| 	                    ¦   «                  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ì   s2  € õ  ˜1�s 6¨6Ñ2Ô2Ñ2°QÑ6Ñ7Ô7ˆåœ-Ø�OŠO˜A˜wœ}¨QÔ/°Ñ4Ô4×<Ò<¸QÀÀ1ÑEÔEØØð
ñ 
ô 
ˆð
 *×1Ò1°"°lÑCÔC×KÒKÈAÈqÑQÔQˆõ ”< Ñ'Ô'¨¨¨¨4¨Ô0µ3°vÀ±ÈÑ3LÔ3LÑLˆÝ”< Ñ'Ô'¨¨a¨a¨a¨Ô0µ3°vÀ±ÈÑ3LÔ3LÑLˆØ# hÑ.°6¸A±:ÅÀVÈfÁ_ÐVYÑAZÔAZÑ2ZÑZˆà˜×3Ò3Ñ5Ô5Ô6Ð6r!   ÚattnÚqueryr‘   r’   c                 óÜ  — |\  }}|\  }	}
|                       ||	|¦  «        }|                       ||
|¦  «        }|j        \  }}}|                     ||||¦  «        }t          j        d||¦  «        }t          j        d||¦  «        }|                     ||||	|
¦  «        }||dd…dd…dd…dd…df         z   |dd…dd…dd…ddd…f         z   }|                     |||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Ô#XÐ Ø"&×"2Ò"2°;À	È9Ñ"UÔ"UÐà"œ[Ñˆ
�A�sØŸš z°<ÀÈcÑRÔRˆÝ”Ð-¨~Ð?WÑXÔXˆÝ”Ð-¨~Ð?VÑWÔWˆØ�|Š|˜J¨°kÀ:ÈyÑYÔYˆØ�e˜A˜A˜A˜q˜q˜q ! ! ! Q Q Q¨Ð,Ô-Ñ-°°a°a°a¸¸¸¸A¸A¸A¸tÀQÀQÀQÐ6FÔ0GÑGˆØ�|Š|˜J¨°{Ñ(BÀJÐQZÑDZÑ[Ô[ˆØˆr!   Fr   c           	      ó¶  — |j         \  }}}}|                      |¦  «                             |||z  d| j        d¦  «                             ddddd¦  «        }|                     d|| j        z  ||z  d¦  «                             d¦  «        \  }}	}
|| j        z  |	                     dd¦  «        z  }| j        r(|  	                    ||| j
        | j        ||f||f¦  «        }t          j        j                             |t          j        d¬¦  «                             |j        ¦  «        }|rC|                     || j        ||z  d¦  «        }|                     || j        z  ||z  d¦  «        }nd }||
z                       || j        ||d¦  «        }|                     ddddd¦  «                             |||d¦  «        }|                      |¦  «        }||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ÈbÑQÔQßŠW�Q˜˜1˜a Ñ#Ô#ð 	ð  ŸKšK¨¨:¸Ô8PÑ+PÐRXÐ[`ÑR`ÐbdÑeÔe×lÒlÐmnÑoÔoÑˆˆs�Eà ¤
Ñ*¨c¯mªm¸BÀÑ.CÔ.CÑCˆàÔ0ð 	Ø×6Ò6Ø˜e T¤^°T´^ÀfÈeÀ_ÐW]Ð_dÐVeñô ˆLõ ”xÔ*×2Ò2°<ÅuÄ}ÐZ\Ð2Ñ]Ô]×`Ò`ÐafÔalÑmÔmˆàð 	)ð
 %1×$5Ò$5°jÀ$ÔBZÐ\bÐejÑ\jÐlnÑ$oÔ$oÐ!Ø0×5Ò5°jÀ4ÔC[Ñ6[Ð]cÐfkÑ]kÐmoÑpÔpˆLˆLà$(Ð!à# eÑ+×4Ò4°ZÀÔAYÐ[aÐchÐjlÑmÔmˆØ!×)Ò)¨!¨Q°°1°aÑ8Ô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ÐGðXð Xð Xð Xð Xð07 #ð 7¨sð 7¸U¼\ð 7ÈeÌlð 7ð 7ð 7ð 7ð@+àŒlð+ð Œ|ð+ð ”<ð	+ð
 ”<ð+ð �c˜3�h”ð+ð �c˜3�h”ð+ð 
Œð+ð +ð +ð +ðZ#4ð #4 U¤\ð #4ÈuÌ|ð #4ð #4ð #4ð #4ð #4ð #4ð #4ð #4r!   r†   c                   óB   ‡ — 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	                 | _
        d S ©N)r,   r-   r   rŒ   r1   Úmlp_dimÚlin1Úlin2r   Ú
hidden_actÚact©r9   r:   r;   s     €r"   r-   zSegGptMlp.__init__a  s\   ø€ Ý‰Œ×ÒÑÔÐÝ”I˜fÔ0°&´.ÑAÔAˆŒ	Ý”I˜fœn¨fÔ.@ÑAÔAˆŒ	Ý˜&Ô+Ô,ˆŒˆˆr!   r   rM   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rÄ   )rÆ   rÉ   rÇ   ©r9   r   s     r"   rH   zSegGptMlp.forwardg  s;   € ØŸ	š	 -Ñ0Ô0ˆØŸš Ñ/Ô/ˆØŸ	š	 -Ñ0Ô0ˆØÐr!   )r   r   r   r-   r   r‚   rH   rI   rJ   s   @r"   rÂ   rÂ   `  s^   ø€ € € € € ð-ð -ð -ð -ð -ð U¤\ð °e´lð ð ð ð ð ð ð ð r!   rÂ   c                   ó^   ‡ — 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                 óV   •— t          ¦   «                              ¦   «          || _        d S rÄ   )r,   r-   rÐ   )r9   rÐ   r;   s     €r"   r-   zSegGptDropPath.__init__v  s$   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒˆˆr!   r   c                 ó  — | 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   ¦  «        }| 	                    |¦  «        |z  S )NrÏ   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ÈÑ4JÑ,KÑKˆÝœ
 5°Ô0CÈMÔL`ÐaÑaÔaˆÝœ M°IÑ$=Ñ>Ô>ˆØ× Ò  Ñ+Ô+¨mÑ;Ð;r!   c                 ó   — d| j         › �S )Nzp=)rÐ   ©r9   s    r"   Ú
extra_reprzSegGptDropPath.extra_reprƒ  s   € Ø$�D”NÐ$Ð$Ð$r!   )rÏ   )r   r   r   r   Úfloatr-   r   r‚   rH   r„   rÞ   rI   rJ   s   @r"   rÎ   rÎ   o  s›   ø€ € € € € ðð ð#ð # %ð #°$ð #ð #ð #ð #ð #ð #ð< U¤\ð <°e´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	          |¦  «        | _        |dk    rt          |¦  «        nt          j        ¦   «         | _	        t          j
        |j        |j        ¬¦  «        | _        t          j
        |j        |j        ¬¦  «        | _        d S )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Ô0ˆŒÝ˜VÑ$Ô$ˆŒØ;IÈCÒ;OÐ;O�¨Ñ7Ô7Ð7ÕUWÔU`ÑUbÔUbˆŒÝ "¤¨VÔ-?ÀVÔEZÐ [Ñ [Ô [ˆÔÝ!œ|¨FÔ,>ÀFÔDYÐZÑZÔZˆÔÐÐr!   Fr   Úensemble_condÚfeature_ensembler»   c                 ó  — |                       |                      |¦  «        |¬¦  «        }|d         }|dd …         }|rå|j        d         dz  |k    rÑ|                     |j        d         dz  d¬¦  «        \  }}	|dk    ra|j        d         dz  }
|	                     d|
d¦  «        }	|	                     dd¬¦  «                             |	¦  «        }	 |	j        |j        Ž }	n*|	                     dd¬¦  «                             |	¦  «        }	t          j        ||	gd¬¦  «        }|  	                    |¦  «        |z   }|}|  
                    |¦  «        }|                      |¦  «        }||  	                    |¦  «        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�  s§  € ð "&§¢Ø×!Ò! -Ñ0Ô0Ø/ð "0ñ "
ô "
Ðð 2°!Ô4ÐØ(¨¨¨Ô,ˆàð 		BÐ 0Ô 6°qÔ 9¸QÑ >À-Ò OÐ OØ-×3Ò3Ð4DÔ4JÈ1Ô4MÐQRÑ4RÐXYÐ3ÑZÔZ‰NˆF�FØ Ò!Ð!Ø.Ô4°QÔ7¸1Ñ<�ØŸš¨¨;¸Ñ;Ô;�ØŸš¨°D˜Ñ9Ô9×CÒCÀFÑKÔK�Ø'˜œ¨¬Ð6��àŸš¨°D˜Ñ9Ô9×CÒCÀFÑKÔK�Ý$œy¨&°&Ð)9¸qÐAÑAÔAÐð ŸšÐ'7Ñ8Ô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                   ób   ‡ — 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                 óz  •‡‡— t          ¦   «                              ¦   «          ‰| _        d„ t          j        d‰j        ‰j        d¬¦  «        D ¦   «         Št          j        ˆˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _
        t          j        ‰j        ‰j        ¬¦  «        | _        d| _        d S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r    )Úitem)Ú.0Úxs     r"   ú
<listcomp>z*SegGptEncoder.__init__.<locals>.<listcomp>º  s    € ÐrÐrÐr˜Aˆq�vŠv‰xŒxÐrÐrÐrr!   r   Úcpu)rÔ   c                 ó<   •— g | ]}t          ‰‰|         ¦  «        ‘ŒS r    )rá   )r  Úir:   Údprs     €€r"   r  z*SegGptEncoder.__init__.<locals>.<listcomp>»  s'   ø€ Ð$jÐ$jÐ$jÀQ¥[°¸¸Q¼Ñ%@Ô%@Ð$jÐ$jÐ$jr!   rä   F)r,   r-   r:   r   Úlinspacerâ   Únum_hidden_layersr   Ú
ModuleListÚrangeÚlayersrê   r1   rë   Ú	layernormÚgradient_checkpointing)r9   r:   r  r;   s    `@€r"   r-   zSegGptEncoder.__init__·  s®   øøø€ Ý‰Œ×ÒÑÔÐØˆŒØrÐr¥¤°°6Ô3HÈ&ÔJbÐkpÐ!qÑ!qÔ!qÐrÑrÔrˆÝ”mÐ$jÐ$jÐ$jÐ$jÐ$jÍ%ÐPVÔPhÑJiÔJiÐ$jÑ$jÔ$jÑkÔkˆŒÝœ fÔ&8¸fÔ>SÐTÑTÔTˆŒØ&+ˆÔ#Ð#Ð#r!   FTr   rï   r»   Úoutput_hidden_statesÚreturn_dictc                 ó:  — |rdnd }|rdnd }g }t          | j        ¦  «        D ]¿\  }	}
|r||fz   }| j        j        |	k    rdnd} |
||||¦  «        }|d         }|	| j        j        k    r4|d |j        d         dz  …         ||j        d         dz  d …         z   dz  }|	| j        j        v r(|                     |                      |¦  «        ¦  «         |r||d         fz   }ŒÀ|r||fz   }|st          d„ ||||fD ¦   «         ¦  «        S t          ||||¬¦  «        S )Nr    r?   r   r   r_   c              3   ó   K  — | ]}|®|V — Œ	d S rÄ   r    )r  Úvs     r"   ú	<genexpr>z(SegGptEncoder.forward.<locals>.<genexpr>å  s0   è è € ð ð àØ�=ð à �=�=�=ðð r!   )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¿  s»  € ð #7Ð@˜B˜B¸DÐØ$5Ð?˜b˜b¸4ÐØ%'Ð"å(¨¬Ñ5Ô5ð 	Pð 	P‰OˆAˆ|Ø#ð IØ$5¸Ð8HÑ$HÐ!ð "&¤Ô!8¸1Ò!<Ð!<˜A˜AÀ!ˆMà(˜L¨¸ÐGWÐYjÑkÔkˆMà)¨!Ô,ˆMà�D”KÔ+Ò+Ð+à!Ð"? MÔ$7¸Ô$:¸aÑ$?Ð"?Ô@À=ÐQ^ÔQdÐefÔQgÐklÑQlÐQnÐQnÔCoÑoØñ!�ð �D”KÔAÐAÐAØ*×1Ò1°$·.².ÀÑ2OÔ2OÑPÔPÐPà ð PØ&9¸]È1Ô=MÐ<OÑ&OÐ#øàð 	EØ 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þ   ¶  s´   ø€ € € € € ð,˜|ð ,°ð ,ð ,ð ,ð ,ð ,ð ,ð "'Ø"'Ø%*Ø ð0
ð 0
à”|ð0
ð ð0
ð  ð	0
ð
 #ð0
ð ð0
ð 
Ð$Ñ	$ð0
ð 0
ð 0
ð 0
ð 0
ð 0
ð 0
ð 0
r!   rþ   c                   óR   ‡ — 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                óz   •—  t          ¦   «         j        |fd|i|¤Ž |dvrt          d|› �¦  «        ‚|| _        d S )Nrå   )r   Úchannels_firstzUnsupported data format: )r,   r-   ÚNotImplementedErrorr!  )r9   Únormalized_shaperå   r!  Úkwargsr;   s        €r"   r-   zSegGptLayerNorm.__init__ù  sY   ø€ Ø�‰ŒÔÐ)Ð=Ð=¨sÐ=°fÐ=Ð=Ð=ØÐAÐAÐAÝ%Ð&OÀ+Ð&OÐ&OÑPÔPÐPØ&ˆÔÐÐr!   ÚfeaturesrM   c                 ó  •— | j         dk    rR|                     dddd¦  «        }t          ¦   «                              |¦  «        }|                     dddd¦  «        }n!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ÿ  sw   ø€ ð
 ÔÐ/Ò/Ð/Ø×'Ò'¨¨1¨a°Ñ3Ô3ˆHÝ‘w”w—’ xÑ0Ô0ˆHØ×'Ò'¨¨1¨a°Ñ3Ô3ˆHˆHå‘w”w—’ xÑ0Ô0ˆHØˆr!   )	r   r   r   r   r-   r   r‚   rH   rI   rJ   s   @r"   r  r  ó  sƒ   ø€ € € € € ðð ð
 15À/ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð ¤ð °´ð ð ð ð ð ð ð ð ð ð r!   r  c                   ó4   ‡ — e Zd Zˆ fd„Zdej        fd„Zˆ xZS )ÚSegGptDecoderHeadc                 óJ  •— t          ¦   «                              ¦   «          t          j        |j        |j        dd¬¦  «        | _        t          |j        |j        d¬¦  «        | _        t          |j
                 | _        t          j        |j        ddd¬¦  «        | _        d S )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ØÔ&ØÔ&ØØð	
ñ 
ô 
ˆŒ	õ )Ø#Ô7¸VÔ=RÐ`pð
ñ 
ô 
ˆŒõ ˜fÔ/Ô0ˆŒÝ”I˜fÔ8¸!ÈÐQUÐVÑVÔVˆŒ	ˆ	ˆ	r!   r   c                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rÄ   )r.  r  r/  r0  rÌ   s     r"   rH   zSegGptDecoderHead.forward  sL   € ØŸ	š	 -Ñ0Ô0ˆØŸš }Ñ5Ô5ˆØŸš ]Ñ3Ô3ˆØŸ	š	 -Ñ0Ô0ˆàÐr!   )r   r   r   r-   r   r   rH   rI   rJ   s   @r"   r*  r*    s[   ø€ € € € € ðWð Wð Wð Wð Wð UÔ%6ð ð ð ð ð ð ð ð r!   r*  c                   óX   ‡ — 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                 ó:  •— t          ¦   «                              ¦   «          t          j        |j        t          |j        ¦  «        z  |j        dz  |j        z  d¬¦  «        | _	        t          |¦  «        | _        |j        | _        |j        | _        || _        d S )Nr?   Trˆ   )r,   r-   r   rŒ   r1   Úlenr  r/   r-  Údecoder_embedr*  Údecoder_predr:   rÊ   s     €r"   r-   zSegGptDecoder.__init__&  s�   ø€ Ý‰Œ×ÒÑÔÐÝœYØÔ¥ VÔ%MÑ!NÔ!NÑNØÔ˜qÑ  6Ô#=Ñ=Øð
ñ 
ô 
ˆÔõ
 .¨fÑ5Ô5ˆÔØ Ô+ˆŒØ#)Ô#=ˆÔ ØˆŒˆˆr!   r   rM   c                 óø   — |j         \  }}}}|                     |||| j        | j        | j        ¦  «        }|                     dddddd¦  «        }|                     |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Ñ0ˆ
�L +¨qØ%×-Ò-Ø˜ k°4´?ÀDÄOÐUYÔUmñ
ô 
ˆð &×-Ò-¨a°°A°q¸!¸QÑ?Ô?ˆØ%×-Ò-Ø˜r <°$´/Ñ#AÀ;ÐQUÔQ`ÑC`Ðað .ñ 
ô 
ˆð Ðr!   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rÄ   )r6  r;  r7  rÌ   s     r"   rH   zSegGptDecoder.forward>  sA   € Ø×*Ò*¨=Ñ9Ô9ˆØ×3Ò3°MÑBÔBˆØ×)Ò)¨-Ñ8Ô8ˆàÐr!   )	r   r   r   r-   r   r   r;  rH   rI   rJ   s   @r"   r3  r3  %  s~   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð
°EÔ4Eð 
È%ÔJ[ð 
ð 
ð 
ð 
ð UÔ%6ð ð ð ð ð ð ð ð r!   r3  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¦  «        r@t          j	        |j
        d|¬¦  «         |j        �t          j        |j        ¦  «         dS dS t	          |t          ¦  «        r:t          j	        |j        d|¬¦  «         t          j	        |j        d|¬¦  «         dS t	          |t           ¦  «        r¥t          j	        |j        d|¬¦  «         t          j        |j        |¬¦  «         t          j        |j        |¬¦  «         t          j        |j        |¬¦  «         t          j        |j        |¬¦  «         t          j        |j        |¬¦  «         dS dS )zInitialize the weightsrÏ   )ró   ÚstdN)rC  )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   rA  rC  r;   s      €r"   rD  z#SegGptPreTrainedModel._init_weightsO  sˆ  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%ØŒkÔ+ˆÝ�f�rœy­"¬)Ð4Ñ5Ô5ð 	>ÝÔ˜vœ}°3¸CÐ@Ñ@Ô@Ð@ØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ð(Ð(ð 'Ð&å˜¥Ñ0Ô0ð 		>ÝÔ˜vÔ/°c¸sÐCÑCÔCÐCÝÔ˜vÔ/°c¸sÐCÑCÔCÐCÐCÐCÝ˜Õ 0Ñ1Ô1ð 	>ÝÔ˜vÔ9ÀÈÐMÑMÔMÐMÝŒL˜Ô*°Ð4Ñ4Ô4Ð4ÝŒL˜Ô3¸Ð=Ñ=Ô=Ð=ÝŒL˜Ô4¸#Ð>Ñ>Ô>Ð>ÝŒL˜Ô3¸Ð=Ñ=Ô=Ð=ÝŒL˜Ô3¸Ð=Ñ=Ô=Ð=Ð=Ð=ð	>ð 	>r!   )r   r   r   r   r   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesr   Úno_gradr   ÚModulerD  rI   rJ   s   @r"   r>  r>  F  s�   ø€ € € € € € àÐÐÑØÐØ$€OØ!ÐØ&*Ð#Ø+¨]Ð;Ðà€U„]�_„_ð> B¤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          |¦  «        | _        |                      ¦   «          d S rÄ   )r,   r-   r:   rL   rG   rþ   ÚencoderÚ	post_initrÊ   s     €r"   r-   zSegGptModel.__init__f  sX   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå*¨6Ñ2Ô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                 óX  — |�|n| j         j        }|	�|	n| j         j        }	|
�|
n| j         j        }
|�|nd}| j        j        j        j        j        }| 	                    |¦  «        }| 	                    |¦  «        }t          j        ||fd¬¦  «        }|€t          j        ||fd¬¦  «        nt          j        ||fd¬¦  «        }|€|�t                               d¦  «         |€‘| j        j        j        }t          j        |dz  t          j        |j        ¬¦  «        }t          j        ||dz  z
  t          j        |j        ¬¦  «        }t          j        ||g¦  «        }|                     d¦  «        }|                      ||||¬¦  «        }|                      ||||	|
¬	¦  «        }|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]
        ```
        NFr?   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   rH  r´   r¹   r   rx   ÚloggerÚwarning_oncer6   rP   rü   rÔ   Úonesrv   rU  )r9   rC   rm   rY  rn   rï   ro   rZ  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_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆØ/?Ð/KÐ+Ð+ÐQVÐàœÔ9ÔDÔKÔQˆØ#—’ ~Ñ6Ô6ˆØ1×4Ò4°^ÑDÔDÐõ ”yÐ"5°|Ð!DÈ!ÐLÑLÔLˆð ˆ~õ ŒI�| \Ð2¸Ð:Ñ:Ô:Ð:å”˜L¨&Ð1°qÐ9Ñ9Ô9ð 	ð Ð" vÐ'9Ý×Òð mñô ð ð Ð"Øœ/Ô:ÔFˆKÝ$)¤K°¸qÑ0@ÍÌ
Ð[gÔ[nÐ$oÑ$oÔ$oÐ!Ý#(¤:Ø˜k¨QÑ.Ñ.µe´jÈÔI\ð$ñ $ô $Ð õ $œiÐ)>Ð@TÐ(UÑVÔVˆOØ-×7Ò7¸Ñ:Ô:ˆOàŸ?š?ØÐ-¸nÐ^mð +ñ 
ô 
Ðð Ÿ,š,ØØ-Ø/Ø!5Ø#ð 'ñ 
ô 
ˆð Ðr!   ©NNNNNNN)r   r   r   r   r-   r(   rX  r   r   r‚   rƒ   rü   r„   r   r   r   rH   rI   rJ   s   @r"   rS  rS  d  sL  ø€ € € € € ð˜|ð ð ð ð ð ð ð0Ð&;ð 0ð 0ð 0ð 0ð ð 48Ø(,Ø%)Ø+/Ø)-Ø,0Ø#'ðrð rà”lðrð #œ\ðrð ”lð	rð
 Ô)¨DÑ0ðrð  ™+ðrð ˜d™
ðrð Ô! DÑ(ðrð   $™;ðrð # T™kðrð ˜D‘[ðrð 
Ð$Ñ	$ðrð rð rñ „^ðrð rð rð rð rr!   rS  Útensorr/   rM   c                 óâ   — | j         \  }}}}||z  }||z  }|                      ||||||f¬¦  «        } |                      dddddd¦  «        } |                      |||z  |dz  dz  f¬¦  «        } | S )Nr:  r   r?   r²   r   r9  r   )r@   ri   rB   )re  r/   rD   r0   rE   rF   r{   r|   s           r"   Úpatchifyrg  é  s’   € Ø.4¬lÑ+€J�˜f eØ˜ZÑ'€LØ˜:Ñ%€Kà�^Š^ :¨|¸\È:ÐWbÐdnÐ"oˆ^ÑpÔp€FØ�^Š^˜A˜q ! Q¨¨1Ñ-Ô-€FØ�^Š^ :¨|¸kÑ/IÈ:ÐWXÉ=Ð[\ÑK\Ð"]ˆ^Ñ^Ô^€Fà€Mr!   r{   r|   c           	      ó|  — | j         d         }t          | j         d         dz  dz  ¦  «        }||z  | j         d         k    r$t          d| j         d         › d|› d|› d	�¦  «        ‚|                      |||||df¬
¦  «        } |                      dddddd¦  «        } |                      |d||z  ||z  f¬
¦  «        } | S )Nr   r`   r   r_   r   zNumber of patches z does not match patch height (z) and width (r>   r:  r9  r?   r²   )r@   r�   rA   ri   rB   )re  r{   r|   rD   r/   s        r"   Ú
unpatchifyri  õ  sä   € Ø”˜a”€JÝ�f”l 2Ô&¨Ñ*¨sÑ2Ñ3Ô3€JØ�kÑ! V¤\°!¤_Ò4Ð4ÝØz ¤¨a¤ÐzÐzÐP\ÐzÐzÐkvÐzÐzÐzñ
ô 
ð 	
ð �^Š^ :¨|¸[È*ÐV`ÐbcÐ"dˆ^ÑeÔe€FØ�^Š^˜A˜q ! Q¨¨1Ñ-Ô-€FØ�^Š^ :¨q°,ÀÑ2KÈ[Ð[eÑMeÐ"fˆ^ÑgÔ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                 óx   •— t          ¦   «                              ¦   «          |j        | _        |j        | _        d S rÄ   )r,   r-   Úbetar/   rÊ   s     €r"   r-   zSegGptLoss.__init__  s0   ø€ Ý‰Œ×ÒÑÔÐØ”KˆŒ	Ø Ô+ˆŒˆˆr!   rY  r&   rZ  rn   c                 ó”  — t          j        ||fd¬¦  «        }|dd…dd…df                              dd| j        dz  dz  ¦  «        }t	          ||j        d         | j        z  |j        d         | j        z  ¦  «        }t          j        ||d| j        ¬¦  «        }||z   	                    ¦   «         | 	                    ¦   «         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)Ú	reductionrm  )
r   rx   Úrepeatr/   ri  r@   rg   Úsmooth_l1_lossrm  Úsum)r9   rY  r&   rZ  rn   Úground_truthÚmaskr%   s           r"   rH   zSegGptLoss.forward
  sÉ   € õ2 ”y ,°Ð!7¸QÐ?Ñ?Ô?ˆà˜q˜q˜q ! ! ! T˜zÔ*×1Ò1°!°Q¸¼ÈÑ8JÈQÑ8NÑOÔOˆÝ˜$ Ô 2°1Ô 5¸¼Ñ HÈ,ÔJ\Ð]^ÔJ_ÐcgÔcrÑJrÑsÔsˆåÔ 
¨LÀFÐQUÔQZÐ[Ñ[Ô[ˆØ�t‘× Ò Ñ"Ô" T§X¢X¡Z¤ZÑ/ˆàˆr!   )	r   r   r   r-   r   r   rƒ   rH   rI   rJ   s   @r"   rk  rk    s~   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð
!àÔ'ð!ð Ô%ð!ð Ô!ð	!ð
 Ô)ð!ð !ð !ð !ð !ð !ð !ð !r!   rk  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          |¦  «        | _        |                      ¦   «          d S rÄ   )r,   r-   r:   rS  r?  r3  ÚdecoderrV  rÊ   s     €r"   r-   z#SegGptForImageSegmentation.__init__4  sX   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå  Ñ(Ô(ˆŒ
Ý$ VÑ,Ô,ˆŒð 	�ŠÑÔÐÐÐr!   NrC   rm   rY  rn   rï   ro   rZ  r»   r  r  rM   c                 ó0  — |�|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¦  «        }|                     d¦  «        }|                      |||||||||	|
¬¦
  «
        }|
r|j        n|d         }t          j        |d¬¦  «        }|                      |¦  «        }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   rY  rn   rï   ro   rZ  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   ry  rk  r$   r   r   )r9   rC   rm   rY  rn   rï   ro   rZ  r»   r  r  r&  r6   r`  ra  r÷   r   r&   r%   Úloss_fnÚoutputÚidxs                         r"   rH   z"SegGptForImageSegmentation.forward>  s  € ðD 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐ"Øœ*Ô/Ô@ÔLˆKÝ$)¤K°¸qÑ0@ÍÌ
Ð[gÔ[nÐ$oÑ$oÔ$oÐ!Ý#(¤:Ø˜k¨QÑ.Ñ.µe´jÈÔI\ð$ñ $ô $Ð õ $œiÐ)>Ð@TÐ(UÑVÔVˆOØ-×7Ò7¸Ñ:Ô:ˆOà—*’*Ø%Ø 3Ø%Ø+Ø-Ø)ØØ/Ø!5Ø#ð ñ 
ô 
ˆð LWÐ%g WÔ%GÐ%GÐ\cÐdfÔ\gÐ"Ý%*¤YÐ/IÈrÐ%RÑ%RÔ%RÐ"Ø—\’\Ð"<Ñ=Ô=ˆ
àˆØÐÝ  ¤Ñ-Ô-ˆGØ�7˜<¨°V¸_ÑMÔMˆDàð 	Ø �]ˆFØ#ð 0Ø 7¨1¤: -Ñ/�à ð 2Ø/Ð6�a�a°Q�Ø 7¨3¤< /Ñ1�àÐØ˜ 6Ñ)�ØˆMå,ØØ!Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r!   rd  )r   r   r   r   r-   r   r   r‚   rƒ   rü   r„   r   r   r$   rH   rI   rJ   s   @r"   rw  rw  .  s0  ø€ € € € € ð˜|ð ð ð ð ð ð ð ð 48Ø(,Ø%)Ø+/Ø)-Ø,0Ø#'ðx
ð x
à”lðx
ð #œ\ðx
ð ”lð	x
ð
 Ô)¨DÑ0ðx
ð  ™+ðx
ð ˜d™
ðx
ð Ô! DÑ(ðx
ð   $™;ðx
ð # T™kðx
ð ˜D‘[ðx
ð 
Ð.Ñ	.ðx
ð x
ð x
ñ „^ðx
ð x
ð x
ð x
ð x
r!   rw  )rS  r>  rw  )4r   Úcollections.abcr3   Údataclassesr   r   r   Útorch.nnr   rg   Ú r   rF  Úactivationsr   Úmodeling_layersr	   Úmodeling_utilsr
   Úutilsr   r   r   r   Úconfiguration_seggptr   Ú
get_loggerr   r\  r   r$   rQ  r(   rL   r†   rÂ   rÎ   rá   rþ   rê   r  r*  r3  r>  rS  r‚   r�   rg  ri  rk  rw  Ú__all__r    r!   r"   ú<module>r‰     sä  ðð Ð à Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø -Ð -Ð -Ð -Ð -Ð -Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ .Ð .Ð .Ð .Ð .Ð .ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð
 ðGð Gð Gð Gð G˜+ñ Gô Gñ „ñô ðGð, €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 Kñ 7ô 7ñ „ñô ð7ð* ð  ð  ð  ð  ˜BœIñ  ô  ð  ðFRð Rð Rð Rð R�r”yñ Rô Rð RðjK4ð K4ð K4ð K4ð K4�b”iñ K4ô K4ð K4ð^ð ð ð ð �”	ñ ô ð ð%ð %ð %ð %ð %�R”Yñ %ô %ð %ð0,ð ,ð ,ð ,ð ,Ð,ñ ,ô ,ð ,ð^9
ð 9
ð 9
ð 9
ð 9
�B”Iñ 9
ô 9
ð 9
ðzð ð ð ð �b”lñ ô ð ð4ð ð ð ð ˜œ	ñ ô ð ð0ð ð ð ð �B”Iñ ô ð ðB ð>ð >ð >ð >ð >˜Oñ >ô >ñ „ð>ð: ðAð Að Að Að AÐ'ñ Aô Añ „ðAðH	�U”\ð 	¨sð 	°u´|ð 	ð 	ð 	ð 	ð�u”|ð °3ð ÀSð ÈUÌ\ð ð ð ð ð'ð 'ð 'ð 'ð '�”ñ 'ô 'ð 'ðT €ððñ ô ð
D
ð D
ð D
ð D
ð D
Ð!6ñ D
ô D
ñô ð
D
ðN QÐ
PÐ
P€€€r!   